| ------------------------------------------------------------------------------ |
| -- -- |
| -- 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-2001 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 2, 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. See the GNU General Public License -- |
| -- for more details. You should have received a copy of the GNU General -- |
| -- Public License distributed with GNAT; see file COPYING. If not, write -- |
| -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- |
| -- MA 02111-1307, USA. -- |
| -- -- |
| -- As a special exception, if other files instantiate generics from this -- |
| -- unit, or you link this unit with other files to produce an executable, -- |
| -- this unit does not by itself cause the resulting executable to be -- |
| -- covered by the GNU General Public License. This exception does not -- |
| -- however invalidate any other reasons why the executable file might be -- |
| -- covered by the GNU Public License. -- |
| -- -- |
| -- GNAT was originally developed by the GNAT team at New York University. -- |
| -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
| -- -- |
| ------------------------------------------------------------------------------ |
| |
| 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.Machine_State_Operations; use System.Machine_State_Operations; |
| -- Used for Create_TSD, Destroy_TSD |
| |
| with System.Parameters; |
| -- Used for Sec_Stack_Ratio |
| |
| with System.Secondary_Stack; |
| |
| package body System.Soft_Links is |
| |
| package SST renames System.Secondary_Stack; |
| |
| -- Allocate an exception stack for the main program to use. |
| -- We make sure that the stack has maximum alignment. Some systems require |
| -- this (e.g. Sun), and in any case it is a good idea for efficiency. |
| |
| NT_Exc_Stack : array (0 .. 8192) of aliased Character; |
| for NT_Exc_Stack'Alignment use Standard'Maximum_Alignment; |
| |
| NT_TSD : 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; |
| |
| --------------------------- |
| -- 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 type Parameters.Size_Type; |
| |
| SS_Ratio_Dynamic : constant Boolean := |
| Parameters.Sec_Stack_Ratio = Parameters.Dynamic; |
| |
| begin |
| if SS_Ratio_Dynamic then |
| SST.SS_Init |
| (New_TSD.Sec_Stack_Addr, SST.Default_Secondary_Stack_Size); |
| end if; |
| |
| New_TSD.Machine_State_Addr := |
| System.Address |
| (System.Machine_State_Operations.Allocate_Machine_State); |
| 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); |
| System.Machine_State_Operations.Free_Machine_State |
| (Machine_State (Old_TSD.Machine_State_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_Exc_Stack_Addr_NT -- |
| --------------------------- |
| |
| function Get_Exc_Stack_Addr_NT return Address is |
| begin |
| return NT_TSD.Exc_Stack_Addr; |
| end Get_Exc_Stack_Addr_NT; |
| |
| ----------------------------- |
| -- Get_Exc_Stack_Addr_Soft -- |
| ----------------------------- |
| |
| function Get_Exc_Stack_Addr_Soft return Address is |
| begin |
| return Get_Exc_Stack_Addr.all; |
| end Get_Exc_Stack_Addr_Soft; |
| |
| ------------------------ |
| -- 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_Machine_State_Addr_NT -- |
| ------------------------------- |
| |
| function Get_Machine_State_Addr_NT return Address is |
| begin |
| return NT_TSD.Machine_State_Addr; |
| end Get_Machine_State_Addr_NT; |
| |
| --------------------------------- |
| -- Get_Machine_State_Addr_Soft -- |
| --------------------------------- |
| |
| function Get_Machine_State_Addr_Soft return Address is |
| begin |
| return Get_Machine_State_Addr.all; |
| end Get_Machine_State_Addr_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; |
| |
| ------------------- |
| -- Null_Adafinal -- |
| ------------------- |
| |
| procedure Null_Adafinal is |
| begin |
| null; |
| end Null_Adafinal; |
| |
| --------------------------- |
| -- Set_Exc_Stack_Addr_NT -- |
| --------------------------- |
| |
| procedure Set_Exc_Stack_Addr_NT (Self_ID : Address; Addr : Address) is |
| pragma Warnings (Off, Self_ID); |
| |
| begin |
| NT_TSD.Exc_Stack_Addr := Addr; |
| end Set_Exc_Stack_Addr_NT; |
| |
| ----------------------------- |
| -- Set_Exc_Stack_Addr_Soft -- |
| ----------------------------- |
| |
| procedure Set_Exc_Stack_Addr_Soft (Self_ID : Address; Addr : Address) is |
| begin |
| Set_Exc_Stack_Addr (Self_ID, Addr); |
| end Set_Exc_Stack_Addr_Soft; |
| |
| --------------------------- |
| -- 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_Machine_State_Addr_NT -- |
| ------------------------------- |
| |
| procedure Set_Machine_State_Addr_NT (Addr : Address) is |
| begin |
| NT_TSD.Machine_State_Addr := Addr; |
| end Set_Machine_State_Addr_NT; |
| |
| --------------------------------- |
| -- Set_Machine_State_Addr_Soft -- |
| --------------------------------- |
| |
| procedure Set_Machine_State_Addr_Soft (Addr : Address) is |
| begin |
| Set_Machine_State_Addr (Addr); |
| end Set_Machine_State_Addr_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_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; |
| |
| ------------------ |
| -- Task_Name_NT -- |
| ------------------- |
| |
| function Task_Name_NT return String is |
| begin |
| return "main_task"; |
| end Task_Name_NT; |
| |
| ------------------------- |
| -- Package Elaboration -- |
| ------------------------- |
| |
| begin |
| NT_TSD.Exc_Stack_Addr := NT_Exc_Stack (8192)'Address; |
| Ada.Exceptions.Save_Occurrence |
| (NT_TSD.Current_Excep, Ada.Exceptions.Null_Occurrence); |
| |
| end System.Soft_Links; |