blob: f1606f1b808396f9552d17baafdf9766351e2013 [file] [log] [blame]
------------------------------------------------------------------------------
-- --
-- GNAT COMPILER COMPONENTS --
-- --
-- S Y S T E M . T H R E A D S --
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2003 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. --
-- --
------------------------------------------------------------------------------
-- This package provides facilities to register a thread to the runtime,
-- and allocate its task specific datas.
-- pragma Thread_Body is currently supported for:
-- VxWorks AE653 with the restricted / cert runtime
with Ada.Exceptions;
-- used for Exception_Occurrence
with System.Soft_Links;
-- used for TSD
package System.Threads is
subtype EO is Ada.Exceptions.Exception_Occurrence;
subtype EOA is Ada.Exceptions.Exception_Occurrence_Access;
type ATSD is limited private;
-- Type of the Ada thread specific data. It contains datas needed
-- by the GNAT runtime.
type ATSD_Access is access ATSD;
-- Get/Set for the attributes of the current thread
function Get_Jmpbuf_Address return Address;
pragma Inline (Get_Jmpbuf_Address);
procedure Set_Jmpbuf_Address (Addr : Address);
pragma Inline (Get_Jmpbuf_Address);
function Get_Sec_Stack_Addr return Address;
pragma Inline (Get_Sec_Stack_Addr);
procedure Set_Sec_Stack_Addr (Addr : Address);
pragma Inline (Set_Sec_Stack_Addr);
function Get_Current_Excep return EOA;
pragma Inline (Get_Current_Excep);
--------------------------
-- Thread Body Handling --
--------------------------
-- The subprograms in this section are called by the expansion of a
-- subprogram body to which a Thread_Body pragma has been applied:
-- Given a subprogram body
-- procedure xyz (params ....) is -- can also be a function
-- <user declarations>
-- begin
-- <user statements>
-- <user exception handlers>
-- end xyz;
-- The expansion resulting from use of the Thread_Body pragma is:
-- procedure xyz (params ...) is
-- _Secondary_Stack : aliased
-- Storage_Elements.Storage_Array
-- (1 .. Storage_Offset (Sec_Stack_Size));
-- for _Secondary_Stack'Alignment use Standard'Maximum_Alignment;
-- _Process_ATSD : aliased System.Threads.ATSD;
-- begin
-- System.Threads.Thread_Body_Enter;
-- (_Secondary_Stack'Address,
-- _Secondary_Stack'Length,
-- _Process_ATSD'Address);
-- declare
-- <user declarations>
-- begin
-- <user statements>
-- <user exception handlers>
-- end;
-- System.Threads.Thread_Body_Leave;
-- exception
-- when E : others =>
-- System.Threads.Thread_Body_Exceptional_Exit (E);
-- end;
-- Note the exception handler is omitted if pragma Restriction
-- No_Exception_Handlers is currently active.
-- Note: the secondary stack size (Sec_Stack_Size) comes either from
-- the pragma, if specified, or is the default value taken from
-- the declaration in System.Secondary_Stack.
procedure Thread_Body_Enter
(Sec_Stack_Address : System.Address;
Sec_Stack_Size : Natural;
Process_ATSD_Address : System.Address);
-- Enter thread body, see above for details
procedure Thread_Body_Leave;
-- Leave thread body (normally), see above for details
procedure Thread_Body_Exceptional_Exit
(EO : Ada.Exceptions.Exception_Occurrence);
-- Leave thread body (abnormally on exception), see above for details
private
type ATSD is new System.Soft_Links.TSD;
end System.Threads;