------------------------------------------------------------------------------
-- --
--- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS --
+-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . O S _ I N T E R F A C E --
-- --
-- S p e c --
-- --
-- Copyright (C) 1991-1994, Florida State University --
--- Copyright (C) 1995-2005, Free Software Foundation, Inc. --
+-- Copyright (C) 1995-2009, Free Software Foundation, Inc. --
-- --
-- GNARL 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- --
-- 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 GNARL; see file COPYING. If not, write --
--- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, USA. --
+-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
+-- Boston, MA 02110-1301, 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 is the DEC Unix 4.0/5.1 version of this package
+-- This is the Tru64 version of this package
-- This package encapsulates all direct interfaces to OS services
--- that are needed by children of System.
+-- that are needed by the tasking run-time (libgnarl).
-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
with Interfaces.C;
-with Unchecked_Conversion;
+
+with Ada.Unchecked_Conversion;
package System.OS_Interface is
pragma Preelaborate;
SA_NODEFER : constant := 8;
SA_SIGINFO : constant := 16#40#;
+ SA_ONSTACK : constant := 16#01#;
function sigaction
(sig : Signal;
tz_dsttime : int;
end record;
pragma Convention (C, struct_timezone);
- type struct_timeval is private;
- -- This is needed on systems that do not have clock_gettime()
- -- but do have gettimeofday().
-
- function To_Duration (TV : struct_timeval) return Duration;
- pragma Inline (To_Duration);
-
- function To_Timeval (D : Duration) return struct_timeval;
- pragma Inline (To_Timeval);
-------------------------
-- Priority Scheduling --
type Thread_Body is access
function (arg : System.Address) return System.Address;
+ pragma Convention (C, Thread_Body);
function Thread_Body_Access is new
- Unchecked_Conversion (System.Address, Thread_Body);
+ Ada.Unchecked_Conversion (System.Address, Thread_Body);
type pthread_t is private;
subtype Thread_Id is pthread_t;
-----------
Stack_Base_Available : constant Boolean := False;
- -- Indicates wether the stack base is available on this target.
+ -- Indicates if the stack base is available on this target
function Get_Stack_Base (thread : pthread_t) return Address;
pragma Inline (Get_Stack_Base);
- -- returns the stack base of the specified thread.
- -- Only call this function when Stack_Base_Available is True.
+ -- Returns the stack base of the specified thread. Only call this function
+ -- when Stack_Base_Available is True.
function Get_Page_Size return size_t;
function Get_Page_Size return Address;
pragma Import (C, Get_Page_Size, "getpagesize");
- -- returns the size of a page, or 0 if this is not relevant on this
- -- target
+ -- Returns the size of a page
PROT_NONE : constant := 0;
PROT_READ : constant := 1;
function mprotect (addr : Address; len : size_t; prot : int) return int;
pragma Import (C, mprotect);
- procedure Hide_Yellow_Zone;
+ procedure Hide_Unhide_Yellow_Zone (Hide : Boolean);
-- Every thread except the initial one features an overflow warning area
- -- just above the overflow guard area on the stack. They are called
- -- the Yellow Zone and the Red Zone respectively. This procedure hides
- -- the former so that the latter could be exposed to stack probing.
+ -- (called the Yellow Zone) which is just above the overflow guard area
+ -- on the stack (called the Red Zone). During task execution, we want
+ -- signals from the Red Zone, so we need to hide the Yellow Zone. This
+ -- procedure is called at the start of task execution (with Hide set True)
+ -- to hide the Yellow Zone, and at the end of task execution (with Hide
+ -- set False) to unhide the Yellow Zone.
---------------------------------------
-- Nonstandard Thread Initialization --
sig : Signal) return int;
pragma Import (C, pthread_kill);
- type sigset_t_ptr is access all sigset_t;
-
function pthread_sigmask
(how : int;
- set : sigset_t_ptr;
- oset : sigset_t_ptr) return int;
+ set : access sigset_t;
+ oset : access sigset_t) return int;
pragma Import (C, pthread_sigmask);
--------------------------
pragma Import (C, pthread_getspecific, "__pthread_getspecific");
type destructor_pointer is access procedure (arg : System.Address);
+ pragma Convention (C, destructor_pointer);
function pthread_key_create
(key : access pthread_key_t;
type clockid_t is new int;
CLOCK_REALTIME : constant clockid_t := 1;
- type struct_timeval is record
- tv_sec : time_t;
- tv_usec : time_t;
- end record;
- pragma Convention (C, struct_timeval);
-
type unsigned_long_array is array (Natural range <>) of unsigned_long;
type pthread_t is new System.Address;