| ------------------------------------------------------------------------------ |
| -- -- |
| -- GNAT COMPILER COMPONENTS -- |
| -- -- |
| -- S Y S T E M . S O F T _ L I N K S -- |
| -- -- |
| -- B o d y -- |
| -- -- |
| -- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- |
| -- -- |
| -- GNAT is free software; you can redistribute it and/or modify it under -- |
| -- terms of the GNU General Public License as published by the Free Soft- -- |
| -- ware Foundation; either version 3, or (at your option) any later ver- -- |
| -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- |
| -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- |
| -- or FITNESS FOR A PARTICULAR PURPOSE. -- |
| -- -- |
| -- As a special exception under Section 7 of GPL version 3, you are granted -- |
| -- additional permissions described in the GCC Runtime Library Exception, -- |
| -- version 3.1, as published by the Free Software Foundation. -- |
| -- -- |
| -- You should have received a copy of the GNU General Public License and -- |
| -- a copy of the GCC Runtime Library Exception along with this program; -- |
| -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- |
| -- <http://www.gnu.org/licenses/>. -- |
| -- -- |
| -- GNAT was originally developed by the GNAT team at New York University. -- |
| -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
| -- -- |
| ------------------------------------------------------------------------------ |
| |
| pragma Compiler_Unit_Warning; |
| |
| pragma Polling (Off); |
| -- We must turn polling off for this unit, because otherwise we get an |
| -- infinite loop from the code within the Poll routine itself. |
| |
| with System.Parameters; |
| |
| pragma Warnings (Off); |
| -- Disable warnings since System.Secondary_Stack is currently not Preelaborate |
| with System.Secondary_Stack; |
| pragma Warnings (On); |
| |
| package body System.Soft_Links is |
| |
| package SST renames System.Secondary_Stack; |
| |
| NT_TSD : TSD; |
| -- Note: we rely on the default initialization of NT_TSD |
| |
| -------------------- |
| -- Abort_Defer_NT -- |
| -------------------- |
| |
| procedure Abort_Defer_NT is |
| begin |
| null; |
| end Abort_Defer_NT; |
| |
| ---------------------- |
| -- Abort_Handler_NT -- |
| ---------------------- |
| |
| procedure Abort_Handler_NT is |
| begin |
| null; |
| end Abort_Handler_NT; |
| |
| ---------------------- |
| -- Abort_Undefer_NT -- |
| ---------------------- |
| |
| procedure Abort_Undefer_NT is |
| begin |
| null; |
| end Abort_Undefer_NT; |
| |
| ----------------- |
| -- Adafinal_NT -- |
| ----------------- |
| |
| procedure Adafinal_NT is |
| begin |
| -- Handle normal task termination by the environment task, but only |
| -- for the normal task termination. In the case of Abnormal and |
| -- Unhandled_Exception they must have been handled before, and the |
| -- task termination soft link must have been changed so the task |
| -- termination routine is not executed twice. |
| |
| Task_Termination_Handler.all (Ada.Exceptions.Null_Occurrence); |
| |
| -- Finalize all library-level controlled objects if needed |
| |
| if Finalize_Library_Objects /= null then |
| Finalize_Library_Objects.all; |
| end if; |
| end Adafinal_NT; |
| |
| --------------------------- |
| -- Check_Abort_Status_NT -- |
| --------------------------- |
| |
| function Check_Abort_Status_NT return Integer is |
| begin |
| return Boolean'Pos (False); |
| end Check_Abort_Status_NT; |
| |
| ------------------------ |
| -- Complete_Master_NT -- |
| ------------------------ |
| |
| procedure Complete_Master_NT is |
| begin |
| null; |
| end Complete_Master_NT; |
| |
| ---------------- |
| -- Create_TSD -- |
| ---------------- |
| |
| procedure Create_TSD (New_TSD : in out TSD) is |
| use Parameters; |
| SS_Ratio_Dynamic : constant Boolean := Sec_Stack_Percentage = Dynamic; |
| begin |
| if SS_Ratio_Dynamic then |
| SST.SS_Init |
| (New_TSD.Sec_Stack_Addr, SST.Default_Secondary_Stack_Size); |
| end if; |
| end Create_TSD; |
| |
| ----------------------- |
| -- Current_Master_NT -- |
| ----------------------- |
| |
| function Current_Master_NT return Integer is |
| begin |
| return 0; |
| end Current_Master_NT; |
| |
| ----------------- |
| -- Destroy_TSD -- |
| ----------------- |
| |
| procedure Destroy_TSD (Old_TSD : in out TSD) is |
| begin |
| SST.SS_Free (Old_TSD.Sec_Stack_Addr); |
| end Destroy_TSD; |
| |
| --------------------- |
| -- Enter_Master_NT -- |
| --------------------- |
| |
| procedure Enter_Master_NT is |
| begin |
| null; |
| end Enter_Master_NT; |
| |
| -------------------------- |
| -- Get_Current_Excep_NT -- |
| -------------------------- |
| |
| function Get_Current_Excep_NT return EOA is |
| begin |
| return NT_TSD.Current_Excep'Access; |
| end Get_Current_Excep_NT; |
| |
| ------------------------ |
| -- Get_GNAT_Exception -- |
| ------------------------ |
| |
| function Get_GNAT_Exception return Ada.Exceptions.Exception_Id is |
| begin |
| return Ada.Exceptions.Exception_Identity (Get_Current_Excep.all.all); |
| end Get_GNAT_Exception; |
| |
| --------------------------- |
| -- Get_Jmpbuf_Address_NT -- |
| --------------------------- |
| |
| function Get_Jmpbuf_Address_NT return Address is |
| begin |
| return NT_TSD.Jmpbuf_Address; |
| end Get_Jmpbuf_Address_NT; |
| |
| ----------------------------- |
| -- Get_Jmpbuf_Address_Soft -- |
| ----------------------------- |
| |
| function Get_Jmpbuf_Address_Soft return Address is |
| begin |
| return Get_Jmpbuf_Address.all; |
| end Get_Jmpbuf_Address_Soft; |
| |
| --------------------------- |
| -- Get_Sec_Stack_Addr_NT -- |
| --------------------------- |
| |
| function Get_Sec_Stack_Addr_NT return Address is |
| begin |
| return NT_TSD.Sec_Stack_Addr; |
| end Get_Sec_Stack_Addr_NT; |
| |
| ----------------------------- |
| -- Get_Sec_Stack_Addr_Soft -- |
| ----------------------------- |
| |
| function Get_Sec_Stack_Addr_Soft return Address is |
| begin |
| return Get_Sec_Stack_Addr.all; |
| end Get_Sec_Stack_Addr_Soft; |
| |
| ----------------------- |
| -- Get_Stack_Info_NT -- |
| ----------------------- |
| |
| function Get_Stack_Info_NT return Stack_Checking.Stack_Access is |
| begin |
| return NT_TSD.Pri_Stack_Info'Access; |
| end Get_Stack_Info_NT; |
| |
| ----------------------------- |
| -- Save_Library_Occurrence -- |
| ----------------------------- |
| |
| procedure Save_Library_Occurrence (E : EOA) is |
| use Ada.Exceptions; |
| begin |
| if not Library_Exception_Set then |
| Library_Exception_Set := True; |
| if E /= null then |
| Ada.Exceptions.Save_Occurrence (Library_Exception, E.all); |
| end if; |
| end if; |
| end Save_Library_Occurrence; |
| |
| --------------------------- |
| -- Set_Jmpbuf_Address_NT -- |
| --------------------------- |
| |
| procedure Set_Jmpbuf_Address_NT (Addr : Address) is |
| begin |
| NT_TSD.Jmpbuf_Address := Addr; |
| end Set_Jmpbuf_Address_NT; |
| |
| procedure Set_Jmpbuf_Address_Soft (Addr : Address) is |
| begin |
| Set_Jmpbuf_Address (Addr); |
| end Set_Jmpbuf_Address_Soft; |
| |
| --------------------------- |
| -- Set_Sec_Stack_Addr_NT -- |
| --------------------------- |
| |
| procedure Set_Sec_Stack_Addr_NT (Addr : Address) is |
| begin |
| NT_TSD.Sec_Stack_Addr := Addr; |
| end Set_Sec_Stack_Addr_NT; |
| |
| ----------------------------- |
| -- Set_Sec_Stack_Addr_Soft -- |
| ----------------------------- |
| |
| procedure Set_Sec_Stack_Addr_Soft (Addr : Address) is |
| begin |
| Set_Sec_Stack_Addr (Addr); |
| end Set_Sec_Stack_Addr_Soft; |
| |
| ------------------ |
| -- Task_Lock_NT -- |
| ------------------ |
| |
| procedure Task_Lock_NT is |
| begin |
| null; |
| end Task_Lock_NT; |
| |
| ------------------ |
| -- Task_Name_NT -- |
| ------------------- |
| |
| function Task_Name_NT return String is |
| begin |
| return "main_task"; |
| end Task_Name_NT; |
| |
| ------------------------- |
| -- Task_Termination_NT -- |
| ------------------------- |
| |
| procedure Task_Termination_NT (Excep : EO) is |
| pragma Unreferenced (Excep); |
| begin |
| null; |
| end Task_Termination_NT; |
| |
| -------------------- |
| -- Task_Unlock_NT -- |
| -------------------- |
| |
| procedure Task_Unlock_NT is |
| begin |
| null; |
| end Task_Unlock_NT; |
| |
| ------------------------- |
| -- Update_Exception_NT -- |
| ------------------------- |
| |
| procedure Update_Exception_NT (X : EO := Current_Target_Exception) is |
| begin |
| Ada.Exceptions.Save_Occurrence (NT_TSD.Current_Excep, X); |
| end Update_Exception_NT; |
| |
| end System.Soft_Links; |