Commit 38806cd3 by Patrick Bernardi Committed by Pierre-Marie de Rodat

[Ada] Remove 2GB secondary stack limit for 64-bit processors

This patch removes the restriction introduced recently that limited the size
of the secondary stack to 2GB. The size of the secondary stack is now limited
to half of the size of the memory address space for the target.

2018-05-25  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

	* libgnat/s-parame.ads, libgnat/s-parame__vxworks.ads,
	libgnat/s-parame__ae653.ads, libgnat/s-parame__hpux.ads (Size_Type):
	Expand range of type to match the address space of the target.
	(Task_Storage_Size): Remove unused type.

gcc/testsuite/

	* gnat.dg/sec_stack1.adb: New testcase.

From-SVN: r260742
parent 17dd35f4
2018-05-25 Patrick Bernardi <bernardi@adacore.com>
* libgnat/s-parame.ads, libgnat/s-parame__vxworks.ads,
libgnat/s-parame__ae653.ads, libgnat/s-parame__hpux.ads (Size_Type):
Expand range of type to match the address space of the target.
(Task_Storage_Size): Remove unused type.
2018-05-25 Ed Schonberg <schonberg@adacore.com>
* sem_res.adb (Set_Mixed_Mode_Operand): If the operand is an expression
......
......@@ -55,11 +55,14 @@ package System.Parameters is
-- Task And Stack Allocation Control --
---------------------------------------
type Task_Storage_Size is new Integer;
-- Type used in tasking units for task storage size
type Size_Type is new Task_Storage_Size;
-- Type used to provide task storage size to runtime
type Size_Type is range
-(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
-- Type used to provide task stack sizes to the runtime. Sized to permit
-- stack sizes of up to half the total addressable memory space. This may
-- seem excessively large (even for 32-bit systems), however there are many
-- instances of users requiring large stack sizes (for example string
-- processing).
Unspecified_Size : constant Size_Type := Size_Type'First;
-- Value used to indicate that no size type is set
......
......@@ -53,11 +53,14 @@ package System.Parameters is
-- Task And Stack Allocation Control --
---------------------------------------
type Task_Storage_Size is new Integer;
-- Type used in tasking units for task storage size
type Size_Type is new Task_Storage_Size;
-- Type used to provide task storage size to runtime
type Size_Type is range
-(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
-- Type used to provide task stack sizes to the runtime. Sized to permit
-- stack sizes of up to half the total addressable memory space. This may
-- seem excessively large (even for 32-bit systems), however there are many
-- instances of users requiring large stack sizes (for example string
-- processing).
Unspecified_Size : constant Size_Type := Size_Type'First;
-- Value used to indicate that no size type is set
......
......@@ -53,11 +53,14 @@ package System.Parameters is
-- Task And Stack Allocation Control --
---------------------------------------
type Task_Storage_Size is new Integer;
-- Type used in tasking units for task storage size
type Size_Type is new Task_Storage_Size;
-- Type used to provide task storage size to runtime
type Size_Type is range
-(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
-- Type used to provide task stack sizes to the runtime. Sized to permit
-- stack sizes of up to half the total addressable memory space. This may
-- seem excessively large (even for 32-bit systems), however there are many
-- instances of users requiring large stack sizes (for example string
-- processing).
Unspecified_Size : constant Size_Type := Size_Type'First;
-- Value used to indicate that no size type is set
......
......@@ -53,11 +53,14 @@ package System.Parameters is
-- Task And Stack Allocation Control --
---------------------------------------
type Task_Storage_Size is new Integer;
-- Type used in tasking units for task storage size
type Size_Type is new Task_Storage_Size;
-- Type used to provide task storage size to runtime
type Size_Type is range
-(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
-- Type used to provide task stack sizes to the runtime. Sized to permit
-- stack sizes of up to half the total addressable memory space. This may
-- seem excessively large (even for 32-bit systems), however there are many
-- instances of users requiring large stack sizes (for example string
-- processing).
Unspecified_Size : constant Size_Type := Size_Type'First;
-- Value used to indicate that no size type is set
......
2018-05-25 Patrick Bernardi <bernardi@adacore.com>
* gnat.dg/sec_stack1.adb: New testcase.
2018-05-25 Ed Schonberg <schonberg@adacore.com>
* gnat.dg/fixedpnt4.adb: New testcase.
......
-- { dg-do run }
--
-- This test checks that we can allocate more than 2GB on systems with word
-- sizes larger than 32-bits
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
procedure Sec_Stack1 is
function Get_A_Big_String return String;
-- Return a very close to 2GB string on the secondary stack that would
-- overflow the secondary stack if we still had a 2GB limit.
function Get_A_Big_String return String is
String_Size : constant Natural := Natural'Last;
begin
return String_Size * 'a';
end Get_A_Big_String;
begin
-- This test only works on systems with more than 32-bits
if Standard'Address_Size > 32 then
declare
R : String := Get_A_Big_String;
begin null; end;
end if;
end Sec_Stack1;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment