aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/lib.ads
diff options
context:
space:
mode:
authorPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2017-10-14 16:25:21 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2017-10-14 16:25:21 +0000
commitbad0a3df0bd3f7e1fca8dfeb718e98a34257dfda (patch)
tree8ca509794ef973e3ed4925e310c611f15ffee4d8 /gcc/ada/lib.ads
parent41f59cdada7360f4a652fb67aa73ae0bb97d10c5 (diff)
downloadgcc-bad0a3df0bd3f7e1fca8dfeb718e98a34257dfda.zip
gcc-bad0a3df0bd3f7e1fca8dfeb718e98a34257dfda.tar.gz
gcc-bad0a3df0bd3f7e1fca8dfeb718e98a34257dfda.tar.bz2
[multiple changes]
2017-10-14 Bob Duff <duff@adacore.com> * exp_ch6.adb (Is_Build_In_Place_Result_Type): Include code for enabling b-i-p for nonlimited controlled types (but disabled). 2017-10-14 Justin Squirek <squirek@adacore.com> * sem_elab.adb (Is_Suitable_Variable_Assignment): Replace call to Has_Warnings_Off with Warnings_Off. 2017-10-14 Piotr Trojanek <trojanek@adacore.com> * sinfo.ads (Generic_Parent): Remove wrong (possibly obsolete) comment. 2017-10-14 Hristian Kirtchev <kirtchev@adacore.com> * sem_ch3.adb (Analyze_Declarations): Analyze the contract of an enclosing package at the end of the visible declarations. * sem_prag.adb (Analyze_Initialization_Item): Suppress the analysis of an initialization item which is undefined due to some illegality. 2017-10-14 Patrick Bernardi <bernardi@adacore.com> * ali.adb: Add new ALI line 'T' to read the number of tasks contain within each unit that require a default-sized primary and secondary stack to be generated by the binder. (Scan_ALI): Scan new 'T' lines. * ali.ads: Add Primary_Stack_Count and Sec_Stack_Count to Unit_Record. * bindgen.adb (Gen_Output_File): Count the number of default-sized stacks within the closure that are to be created by the binder. (Gen_Adainit, Gen_Output_File_Ada): Generate default-sized secondary stacks and record these in System.Secodnary_Stack. (Resolve_Binder_Options): Check if System.Secondary_Stack is in the closure of the program being bound. * bindusg.adb (Display): Add "-Q" switch. Remove rouge "--RTS" comment. * exp_ch3.adb (Count_Default_Sized_Task_Stacks): New routine. (Expand_N_Object_Declaration): Count the number of default-sized stacks used by task objects contained within the object whose declaration is being expanded. Only performed when either the restrictions No_Implicit_Heap_Allocations or No_Implicit_Task_Allocations are in effect. * exp_ch9.adb (Create_Secondary_Stack_For_Task): New routine. (Expand_N_Task_Type_Declaration): Create a secondary stack as part of the expansion of a task type if the size of the stack is known at run-time and the restrictions No_Implicit_Heap_Allocations or No_Implicit_Task_Allocations are in effect. (Make_Task_Create_Call): If using a restricted profile provide secondary stack parameter: either the statically created stack or null. * lib-load.adb (Create_Dummy_Package_Unit, Load_Unit, Load_Main_Source): Include Primary_Stack_Count and Sec_Stack_Count in Unit_Record initialization expressions. * lib-writ.adb (Add_Preprocessing_Dependency, Ensure_System_Dependency): Include Primary_Stack_Count and Sec_Stack_Count in Unit_Record initialization expression. (Write_ALI): Write T lines. (Write_Unit_Information): Do not output 'T' lines if there are no stacks for the binder to generate. * lib-writ.ads: Updated library information documentation to include new T line entry. * lib.adb (Increment_Primary_Stack_Count): New routine. (Increment_Sec_Stack_Count): New routine. (Primary_Stack_Count): New routine. (Sec_Stack_Count): New routine. * lib.ads: Add Primary_Stack_Count and Sec_Stack_Count components to Unit_Record and updated documentation. (Increment_Primary_Stack_Count): New routine along with pragma Inline. (Increment_Sec_Stack_Count): New routine along with pragma Inline. (Primary_Stack_Count): New routine along with pragma Inline. (Sec_Stack_Count): New routine along with pragma Inline. * opt.ads: New constant No_Stack_Size. Flag Default_Stack_Size redefined. New flag Default_Sec_Stack_Size and Quantity_Of_Default_Size_Sec_Stacks. * rtfinal.c Fixed erroneous comment. * rtsfind.ads: Moved RE_Default_Secondary_Stack_Size from System.Secondary_Stack to System.Parameters. Add RE_SS_Stack. * sem_util.adb (Number_Of_Elements_In_Array): New routine. * sem_util.ads (Number_Of_Elements_In_Array): New routine. * switch-b.adb (Scan_Binder_Switches): Scan "-Q" switch. * libgnarl/s-solita.adb (Get_Sec_Stack_Addr): Removed routine. (Set_Sec_Stack_Addr): Removed routine. (Get_Sec_Stack): New routine. (Set_Sec_Stack): New routine. (Init_Tasking_Soft_Links): Update System.Soft_Links reference to reflect new procedure and global names. * libgnarl/s-taprop__linux.adb, libgnarl/s-taprop__mingw.adb, libgnarl/s-taprop__posix.adb, libgnarl/s-taprop__solaris.adb, libgnarl/s-taprop__vxworks.adb (Register_Foreign_Thread): Update parameter profile to allow the secondary stack size to be specified. * libgnarl/s-tarest.adb (Create_Restricted_Task): Update the parameter profile to include Sec_Stack_Address. Update Tasking.Initialize_ATCB call to remove Secondary_Stack_Size reference. Add secondary stack address and size to SSL.Create_TSD call. (Task_Wrapper): Remove secondary stack creation. * libgnarl/s-tarest.ads (Create_Restricted_Task, Create_Restricted_Task_Sequential): Update parameter profile to include Sec_Stack_Address and clarify the Size parameter. * libgnarl/s-taskin.adb (Initialize_ATCB): Remove Secondary_Stack_Size from profile and body. (Initialize): Remove Secondary_Stack_Size from Initialize_ATCB call. * libgnarl/s-taskin.ads: Removed component Secondary_Stack_Size from Common_ATCB. (Initialize_ATCB): Update the parameter profile to remove Secondary_Stack_Size. * libgnarl/s-tassta.adb (Create_Task): Updated parameter profile and call to Initialize_ATCB. Add secondary stack address and size to SSL.Create_TSD call, and catch any storage exception from the call. (Finalize_Global_Tasks): Update System.Soft_Links references to reflect new subprogram and component names. (Task_Wrapper): Remove secondary stack creation. (Vulnerable_Complete_Master): Update to reflect TSD changes. * libgnarl/s-tassta.ads: Reformat comments. (Create_Task): Update parameter profile. * libgnarl/s-tporft.adb (Register_Foreign_Thread): Update parameter profile to include secondary stack size. Remove secondary size parameter from Initialize_ATCB call and add it to Create_TSD call. * libgnat/s-parame.adb, libgnat/s-parame__rtems.adb, libgnat/s-parame__vxworks.adb (Default_Sec_Stack_Size): New routine. * libgnat/s-parame.ads, libgnat/s-parame__ae653.ads, libgnat/s-parame__hpux.ads, libgnat/s-parame__vxworks.ads: Remove type Percentage. Remove constants Dynamic, Sec_Stack_Percentage and Sec_Stack_Dynamic. Add constant Runtime_Default_Sec_Stack_Size and Sec_Stack_Dynamic. (Default_Sec_Stack_Size): New routine. * libgnat/s-secsta.adb, libgnat/s-secsta.ads: New implementation. Is now Preelaborate. * libgnat/s-soflin.adb: Removed unused with-clauses. With System.Soft_Links.Initialize to initialize non-tasking TSD. (Create_TSD): Update parameter profile. Initialize the TSD and unconditionally call SS_Init. (Destroy_TSD): Update SST.SS_Free call. (Get_Sec_Stack_Addr_NT, Get_Sec_Stack_Addr_Soft, Set_Sec_Stack_Addr_NT, Set_Sec_Stack_Addr_Soft): Remove routines. (Get_Sec_Stack_NT, Get_Sec_Stack_Soft, Set_Sec_Stack_NT, Set_Sec_Stack_Soft): Add routines. (NT_TSD): Move to private part of package specification. * libgnat/s-soflin.ads: New types Get_Stack_Call and Set_Stack_Call with suppressed access checks. Renamed *_Sec_Stack_Addr_* routines and objects to *_Sec_Stack_*. TSD: removed warning suppression and component intialization. Changed Sec_Stack_Addr to Sec_Stack_Ptr. (Create_TSD): Update parameter profile. (NT_TSD): Move to private section from body. * libgnat/s-soliin.adb, libgnat/s-soliin.ads: New files. * libgnat/s-thread.ads (Thread_Body_Enter): Update parameter profile. * libgnat/s-thread__ae653.adb (Get_Sec_Stack_Addr, Set_Sec_Stack_Addr): Remove routine. (Get_Sec_Stack, Set_Sec_Stack): Add routine. (Thread_Body_Enter): Update parameter profile and body to adapt to new System.Secondary_Stack. (Init_RTS): Update body for new System.Soft_Links names. * gcc-interface/Make-lang.in (GNAT_ADA_OBJS, GNATBIND_OBJS): Add s-soliin.o. From-SVN: r253754
Diffstat (limited to 'gcc/ada/lib.ads')
-rw-r--r--gcc/ada/lib.ads131
1 files changed, 81 insertions, 50 deletions
diff --git a/gcc/ada/lib.ads b/gcc/ada/lib.ads
index be6864a..f2b195c 100644
--- a/gcc/ada/lib.ads
+++ b/gcc/ada/lib.ads
@@ -370,6 +370,20 @@ package Lib is
-- This is a character field containing L if Optimize_Alignment mode
-- was set locally, and O/T/S for Off/Time/Space default if not.
+ -- Primary_Stack_Count
+ -- The number of primary stacks belonging to tasks defined within the
+ -- unit that have no Storage_Size specified when the either restriction
+ -- No_Implicit_Heap_Allocations or No_Implicit_Task_Allocations is
+ -- active. Only used by the binder to generate stacks for these tasks
+ -- at bind time.
+
+ -- Sec_Stack_Count
+ -- The number of secondary stacks belonging to tasks defined within the
+ -- unit that have no Secondary_Stack_Size specified when the either
+ -- the No_Implicit_Heap_Allocations or No_Implicit_Task_Allocations
+ -- restrictions are active. Only used by the binder to generate stacks
+ -- for these tasks at bind time.
+
-- Serial_Number
-- This field holds a serial number used by New_Internal_Name to
-- generate unique temporary numbers on a unit by unit basis. The
@@ -450,6 +464,8 @@ package Lib is
function Munit_Index (U : Unit_Number_Type) return Nat;
function No_Elab_Code_All (U : Unit_Number_Type) return Boolean;
function OA_Setting (U : Unit_Number_Type) return Character;
+ function Primary_Stack_Count (U : Unit_Number_Type) return Int;
+ function Sec_Stack_Count (U : Unit_Number_Type) return Int;
function Source_Index (U : Unit_Number_Type) return Source_File_Index;
function Unit_File_Name (U : Unit_Number_Type) return File_Name_Type;
function Unit_Name (U : Unit_Number_Type) return Unit_Name_Type;
@@ -662,6 +678,13 @@ package Lib is
-- source unit, the criterion being that Get_Source_Unit yields the
-- same value for each argument.
+ procedure Increment_Primary_Stack_Count (Increment : Int);
+ -- Increment the Primary_Stack_Count field for the current unit by
+ -- Increment.
+
+ procedure Increment_Sec_Stack_Count (Increment : Int);
+ -- Increment the Sec_Stack_Count field for the current unit by Increment
+
function Increment_Serial_Number return Nat;
-- Increment Serial_Number field for current unit, and return the
-- incremented value.
@@ -794,6 +817,8 @@ private
pragma Inline (Fatal_Error);
pragma Inline (Generate_Code);
pragma Inline (Has_RACW);
+ pragma Inline (Increment_Primary_Stack_Count);
+ pragma Inline (Increment_Sec_Stack_Count);
pragma Inline (Increment_Serial_Number);
pragma Inline (Loading);
pragma Inline (Main_CPU);
@@ -809,6 +834,8 @@ private
pragma Inline (Is_Predefined_Renaming);
pragma Inline (Is_Internal_Unit);
pragma Inline (Is_Predefined_Unit);
+ pragma Inline (Primary_Stack_Count);
+ pragma Inline (Sec_Stack_Count);
pragma Inline (Set_Loading);
pragma Inline (Set_Main_CPU);
pragma Inline (Set_Main_Priority);
@@ -822,28 +849,30 @@ private
-- The Units Table
type Unit_Record is record
- Unit_File_Name : File_Name_Type;
- Unit_Name : Unit_Name_Type;
- Munit_Index : Nat;
- Expected_Unit : Unit_Name_Type;
- Source_Index : Source_File_Index;
- Cunit : Node_Id;
- Cunit_Entity : Entity_Id;
- Dependency_Num : Int;
- Ident_String : Node_Id;
- Main_Priority : Int;
- Main_CPU : Int;
- Serial_Number : Nat;
- Version : Word;
- Error_Location : Source_Ptr;
- Fatal_Error : Fatal_Type;
- Generate_Code : Boolean;
- Has_RACW : Boolean;
- Dynamic_Elab : Boolean;
- No_Elab_Code_All : Boolean;
- Filler : Boolean;
- Loading : Boolean;
- OA_Setting : Character;
+ Unit_File_Name : File_Name_Type;
+ Unit_Name : Unit_Name_Type;
+ Munit_Index : Nat;
+ Expected_Unit : Unit_Name_Type;
+ Source_Index : Source_File_Index;
+ Cunit : Node_Id;
+ Cunit_Entity : Entity_Id;
+ Dependency_Num : Int;
+ Ident_String : Node_Id;
+ Main_Priority : Int;
+ Main_CPU : Int;
+ Primary_Stack_Count : Int;
+ Sec_Stack_Count : Int;
+ Serial_Number : Nat;
+ Version : Word;
+ Error_Location : Source_Ptr;
+ Fatal_Error : Fatal_Type;
+ Generate_Code : Boolean;
+ Has_RACW : Boolean;
+ Dynamic_Elab : Boolean;
+ No_Elab_Code_All : Boolean;
+ Filler : Boolean;
+ Loading : Boolean;
+ OA_Setting : Character;
Is_Predefined_Renaming : Boolean;
Is_Internal_Unit : Boolean;
@@ -856,36 +885,38 @@ private
-- written by Tree_Gen, we do not write uninitialized values to the file.
for Unit_Record use record
- Unit_File_Name at 0 range 0 .. 31;
- Unit_Name at 4 range 0 .. 31;
- Munit_Index at 8 range 0 .. 31;
- Expected_Unit at 12 range 0 .. 31;
- Source_Index at 16 range 0 .. 31;
- Cunit at 20 range 0 .. 31;
- Cunit_Entity at 24 range 0 .. 31;
- Dependency_Num at 28 range 0 .. 31;
- Ident_String at 32 range 0 .. 31;
- Main_Priority at 36 range 0 .. 31;
- Main_CPU at 40 range 0 .. 31;
- Serial_Number at 44 range 0 .. 31;
- Version at 48 range 0 .. 31;
- Error_Location at 52 range 0 .. 31;
- Fatal_Error at 56 range 0 .. 7;
- Generate_Code at 57 range 0 .. 7;
- Has_RACW at 58 range 0 .. 7;
- Dynamic_Elab at 59 range 0 .. 7;
- No_Elab_Code_All at 60 range 0 .. 7;
- Filler at 61 range 0 .. 7;
- OA_Setting at 62 range 0 .. 7;
- Loading at 63 range 0 .. 7;
-
- Is_Predefined_Renaming at 64 range 0 .. 7;
- Is_Internal_Unit at 65 range 0 .. 7;
- Is_Predefined_Unit at 66 range 0 .. 7;
- Filler2 at 67 range 0 .. 7;
+ Unit_File_Name at 0 range 0 .. 31;
+ Unit_Name at 4 range 0 .. 31;
+ Munit_Index at 8 range 0 .. 31;
+ Expected_Unit at 12 range 0 .. 31;
+ Source_Index at 16 range 0 .. 31;
+ Cunit at 20 range 0 .. 31;
+ Cunit_Entity at 24 range 0 .. 31;
+ Dependency_Num at 28 range 0 .. 31;
+ Ident_String at 32 range 0 .. 31;
+ Main_Priority at 36 range 0 .. 31;
+ Main_CPU at 40 range 0 .. 31;
+ Primary_Stack_Count at 44 range 0 .. 31;
+ Sec_Stack_Count at 48 range 0 .. 31;
+ Serial_Number at 52 range 0 .. 31;
+ Version at 56 range 0 .. 31;
+ Error_Location at 60 range 0 .. 31;
+ Fatal_Error at 64 range 0 .. 7;
+ Generate_Code at 65 range 0 .. 7;
+ Has_RACW at 66 range 0 .. 7;
+ Dynamic_Elab at 67 range 0 .. 7;
+ No_Elab_Code_All at 68 range 0 .. 7;
+ Filler at 69 range 0 .. 7;
+ OA_Setting at 70 range 0 .. 7;
+ Loading at 71 range 0 .. 7;
+
+ Is_Predefined_Renaming at 72 range 0 .. 7;
+ Is_Internal_Unit at 73 range 0 .. 7;
+ Is_Predefined_Unit at 74 range 0 .. 7;
+ Filler2 at 75 range 0 .. 7;
end record;
- for Unit_Record'Size use 68 * 8;
+ for Unit_Record'Size use 76 * 8;
-- This ensures that we did not leave out any fields
package Units is new Table.Table (