diff options
author | Patrick Bernardi <bernardi@adacore.com> | 2021-07-09 20:29:04 +1000 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-09-21 15:25:02 +0000 |
commit | 0df911d9056437a79cf40fc643c49fced56574bd (patch) | |
tree | 0f09aac926803c891cef0009c07d345f041ed154 /gcc | |
parent | 618fff6043926c95657ae81f6ec93e1e9d3dc1bd (diff) | |
download | gcc-0df911d9056437a79cf40fc643c49fced56574bd.zip gcc-0df911d9056437a79cf40fc643c49fced56574bd.tar.gz gcc-0df911d9056437a79cf40fc643c49fced56574bd.tar.bz2 |
[Ada] bindgen: support additional features on targets suppressing the standard lib
gcc/ada/
* bindgen.adb (Gen_Adainit): For targets that suppress the
standard library: set the default stack size global variable if
a value is provided via the -d switch, and generate a call to
__gnat_initialize_stack_limit if stack checking using stack
limits is enabled.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/bindgen.adb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index 0014f6a..049038b 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -588,6 +588,27 @@ package body Bindgen is WBI (""); end if; + -- Import the default stack object if a size has been provided to the + -- binder. + + if Opt.Default_Stack_Size /= Opt.No_Stack_Size then + WBI (" Default_Stack_Size : Integer;"); + WBI (" pragma Import (C, Default_Stack_Size, " & + """__gl_default_stack_size"");"); + end if; + + -- Initialize stack limit variable of the environment task if the + -- stack check method is stack limit and stack check is enabled. + + if Stack_Check_Limits_On_Target + and then (Stack_Check_Default_On_Target or Stack_Check_Switch_Set) + then + WBI (""); + WBI (" procedure Initialize_Stack_Limit;"); + WBI (" pragma Import (C, Initialize_Stack_Limit, " & + """__gnat_initialize_stack_limit"");"); + end if; + if System_Secondary_Stack_Package_In_Closure then -- System.Secondary_Stack is in the closure of the program -- because the program uses the secondary stack or the restricted @@ -619,6 +640,15 @@ package body Bindgen is WBI (" begin"); + -- Set the default stack size if provided to the binder + + if Opt.Default_Stack_Size /= Opt.No_Stack_Size then + Set_String (" Default_Stack_Size := "); + Set_Int (Default_Stack_Size); + Set_String (";"); + Write_Statement_Buffer; + end if; + if Main_Priority /= No_Main_Priority then Set_String (" Main_Priority := "); Set_Int (Main_Priority); @@ -643,6 +673,7 @@ package body Bindgen is end if; if Main_Priority = No_Main_Priority + and then Opt.Default_Stack_Size = Opt.No_Stack_Size and then Main_CPU = No_Main_CPU and then not System_Tasking_Restricted_Stages_Used then |