public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3794] [Ada] Make Ada.Task_Initialization compatible with No_Elaboration_Code_All
@ 2021-09-22 15:09 Pierre-Marie de Rodat
  0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2021-09-22 15:09 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:d232417a8832c480abeb1c28abd66978b85e5081

commit r12-3794-gd232417a8832c480abeb1c28abd66978b85e5081
Author: Arnaud Charlet <charlet@adacore.com>
Date:   Mon Jul 12 06:14:15 2021 -0400

    [Ada] Make Ada.Task_Initialization compatible with No_Elaboration_Code_All
    
    gcc/ada/
    
            * libgnarl/a-tasini.ads, libgnarl/a-tasini.adb: Make compatible
            with No_Elaboration_Code_All.
            * libgnarl/s-taskin.ads, libgnarl/s-tassta.adb: Adjust
            accordingly.

Diff:
---
 gcc/ada/libgnarl/a-tasini.adb | 12 ++++++------
 gcc/ada/libgnarl/a-tasini.ads |  3 ++-
 gcc/ada/libgnarl/s-taskin.ads |  8 --------
 gcc/ada/libgnarl/s-tassta.adb |  9 +++++++++
 4 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/gcc/ada/libgnarl/a-tasini.adb b/gcc/ada/libgnarl/a-tasini.adb
index c0dfe705879..a8981d6dd69 100644
--- a/gcc/ada/libgnarl/a-tasini.adb
+++ b/gcc/ada/libgnarl/a-tasini.adb
@@ -26,13 +26,13 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Ada.Unchecked_Conversion;
-with System.Tasking;
-
 package body Ada.Task_Initialization is
 
-   function To_STIH is new Ada.Unchecked_Conversion
-     (Initialization_Handler, System.Tasking.Initialization_Handler);
+   Global_Initialization_Handler : Initialization_Handler := null;
+   pragma Atomic (Global_Initialization_Handler);
+   pragma Export (Ada, Global_Initialization_Handler,
+                  "__gnat_global_initialization_handler");
+   --  Global handler called when each task initializes.
 
    --------------------------------
    -- Set_Initialization_Handler --
@@ -40,7 +40,7 @@ package body Ada.Task_Initialization is
 
    procedure Set_Initialization_Handler (Handler : Initialization_Handler) is
    begin
-      System.Tasking.Global_Initialization_Handler := To_STIH (Handler);
+      Global_Initialization_Handler := Handler;
    end Set_Initialization_Handler;
 
 end Ada.Task_Initialization;
diff --git a/gcc/ada/libgnarl/a-tasini.ads b/gcc/ada/libgnarl/a-tasini.ads
index dd2a17c6b14..2366145da04 100644
--- a/gcc/ada/libgnarl/a-tasini.ads
+++ b/gcc/ada/libgnarl/a-tasini.ads
@@ -30,7 +30,8 @@
 --  when tasks start.
 
 package Ada.Task_Initialization is
-   pragma Preelaborate (Task_Initialization);
+   pragma Preelaborate;
+   pragma No_Elaboration_Code_All;
 
    type Initialization_Handler is access procedure;
 
diff --git a/gcc/ada/libgnarl/s-taskin.ads b/gcc/ada/libgnarl/s-taskin.ads
index 5c03829f1e9..cf560b569fb 100644
--- a/gcc/ada/libgnarl/s-taskin.ads
+++ b/gcc/ada/libgnarl/s-taskin.ads
@@ -368,14 +368,6 @@ package System.Tasking is
    --  Used to represent protected procedures to be executed when task
    --  terminates.
 
-   type Initialization_Handler is access procedure;
-   pragma Favor_Top_Level (Initialization_Handler);
-   --  Use to represent procedures to be executed at task initialization.
-
-   Global_Initialization_Handler : Initialization_Handler := null;
-   pragma Atomic (Global_Initialization_Handler);
-   --  Global handler called when each task initializes.
-
    ------------------------------------
    -- Dispatching domain definitions --
    ------------------------------------
diff --git a/gcc/ada/libgnarl/s-tassta.adb b/gcc/ada/libgnarl/s-tassta.adb
index 88850c24693..bbc7d14d5d8 100644
--- a/gcc/ada/libgnarl/s-tassta.adb
+++ b/gcc/ada/libgnarl/s-tassta.adb
@@ -35,6 +35,7 @@ pragma Partition_Elaboration_Policy (Concurrent);
 
 with Ada.Exceptions;
 with Ada.Unchecked_Deallocation;
+with Ada.Task_Initialization;
 
 with System.Interrupt_Management;
 with System.Tasking.Debug;
@@ -1177,6 +1178,14 @@ package body System.Tasking.Stages is
          Debug.Signal_Debug_Event (Debug.Debug_Event_Run, Self_ID);
       end if;
 
+      declare
+         use Ada.Task_Initialization;
+
+         Global_Initialization_Handler : Initialization_Handler;
+         pragma Atomic (Global_Initialization_Handler);
+         pragma Import (Ada, Global_Initialization_Handler,
+                        "__gnat_global_initialization_handler");
+
       begin
          --  We are separating the following portion of the code in order to
          --  place the exception handlers in a different block. In this way,


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-09-22 15:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-22 15:09 [gcc r12-3794] [Ada] Make Ada.Task_Initialization compatible with No_Elaboration_Code_All Pierre-Marie de Rodat

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).