From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id C68363858400 for ; Wed, 22 Sep 2021 15:15:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C68363858400 Received: by mail-wr1-x430.google.com with SMTP id t8so8014696wri.1 for ; Wed, 22 Sep 2021 08:15:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition; bh=idecmZFy7jDpOvVIzak+/Bg+GnGTVeFlYSSst5PiIiQ=; b=qCRg1KlueoxIpgCI8vypyPm3ELMAOBRTDejcpiLuTEjt4lvESN4eMFXEKW9k6/Mwdq u3ltIb3PF5RmZkxn13y7zasMFatpxUDoa0FWkR30rE2q4XC/xIn70FL76pe+SDM412xk EaTDxDMDBcuQ2IxSfZAFI9h8Be9mv6ciuKnoGwvcL4clMu2Fe9SyqWWipV4b86itLaIN fnH5/0LGxoixSiOzHpQPBN5KcRBBUIcQwF1oIxKidtIkoO/bLuqcC4r3ug5BCLdfhENg mBSeIaGFRdjjLUp+O0AOv5H3k0fXJKchYR4yod5fjKvSPiH0GCKldrqBLsUKDVeIhBg3 saoQ== X-Gm-Message-State: AOAM532SL1r0ewonCKOzdwwqwwBX/ALE856Vs+rfOfh7PbhCu4cSHPsW 7O+vZMZOgyg3LWWc6vh6CGsMty9c7HbzWQ== X-Google-Smtp-Source: ABdhPJx7Hzq6TlB1DEVtjRCElEPSVmTmElnzgGfa8p6I+B0h+setnxfeKE0Pokc+WwPGX7HO/OCCCA== X-Received: by 2002:adf:a10f:: with SMTP id o15mr113306wro.286.1632323729902; Wed, 22 Sep 2021 08:15:29 -0700 (PDT) Received: from adacore.com ([2a02:2ab8:224:2ce:72b5:e8ff:feef:ee60]) by smtp.gmail.com with ESMTPSA id i18sm2471158wrn.64.2021.09.22.08.15.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Sep 2021 08:15:29 -0700 (PDT) Date: Wed, 22 Sep 2021 15:15:28 +0000 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Cc: Arnaud Charlet Subject: [Ada] Make Ada.Task_Initialization compatible with No_Elaboration_Code_All Message-ID: <20210922151528.GA1907511@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="WIyZ46R2i8wDzkSu" Content-Disposition: inline X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Sep 2021 15:15:32 -0000 --WIyZ46R2i8wDzkSu Content-Type: text/plain; charset=us-ascii Content-Disposition: inline So that this unit can be used and called even before elaboration has started, to ensure very early registration via e.g. C code. Tested on x86_64-pc-linux-gnu, committed on trunk 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. --WIyZ46R2i8wDzkSu Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="patch.diff" diff --git a/gcc/ada/libgnarl/a-tasini.adb b/gcc/ada/libgnarl/a-tasini.adb --- 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 --- 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 --- 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 --- 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, --WIyZ46R2i8wDzkSu--