From: Patrick Bernardi Date: Fri, 9 Jul 2021 10:29:04 +0000 (+1000) Subject: [Ada] bindgen: support additional features on targets suppressing the standard lib X-Git-Tag: basepoints/gcc-13~4563 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0df911d9056437a79cf40fc643c49fced56574bd;p=thirdparty%2Fgcc.git [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. --- diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index 0014f6a46da3..049038b96e4d 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