blob: f656714d3d3375984684669f40dc0566267b29d8 [file] [log] [blame]
------------------------------------------------------------------------------
-- --
-- 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;