home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
gnat-2.06-src.tgz
/
tar.out
/
fsf
/
gnat
/
ada
/
s-taskin.adb
< prev
next >
Wrap
Text File
|
1996-09-28
|
4KB
|
99 lines
------------------------------------------------------------------------------
-- --
-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . T A S K I N G --
-- --
-- B o d y --
-- --
-- $Revision: 1.11 $ --
-- --
-- Copyright (c) 1991,1992,1993,1994, FSU, All Rights Reserved --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU Library General Public License as published by the --
-- Free Software Foundation; either version 2, or (at your option) any --
-- later version. GNARL is distributed in the hope that it will be use- --
-- ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Gen- --
-- eral Library Public License for more details. You should have received --
-- a copy of the GNU Library General Public License along with GNARL; see --
-- file COPYING.LIB. If not, write to the Free Software Foundation, 675 --
-- Mass Ave, Cambridge, MA 02139, USA. --
-- --
------------------------------------------------------------------------------
-- This package body has to be eliminated once the offset calculation for
-- ATCB is done statically. Also, the temporary placement of queuing
-- primitives has to move back to Tasking.Queuing. (compiler error) ???
with System.Task_Primitives;
-- Used for, Task_Primitives.TCB_Ptr,
-- Task_Primitives.Self
with System.Storage_Elements;
-- Used for, Storage_Elements.Storage_Offset,
-- Storage_Elements."-"
-- Storage_Elements.Storage_Count
with Unchecked_Conversion;
package body System.Tasking is
function "-"
(A : System.Address;
B : System.Address)
return Storage_Elements.Storage_Offset
renames Storage_Elements."-";
function "-"
(A : System.Address;
I : Storage_Elements.Storage_Offset)
return System.Address
renames Storage_Elements."-";
function Get_LL_TCB_Offset return Storage_Elements.Storage_Count;
LL_TCB_Offset : Storage_Elements.Storage_Count := Get_LL_TCB_Offset;
function Address_To_Task_ID is new
Unchecked_Conversion (System.Address, Task_ID);
function TCB_Ptr_To_Address is new
Unchecked_Conversion (Task_Primitives.TCB_Ptr, System.Address);
-----------------------
-- Get_LL_TCB_Offset --
-----------------------
function Get_LL_TCB_Offset return Storage_Elements.Storage_Count is
ATCB_Record : Ada_Task_Control_Block (0);
begin
return ATCB_Record.LL_TCB'Address - ATCB_Record'Address;
end Get_LL_TCB_Offset;
----------
-- Self --
----------
-- This is an INLINE_ONLY version of Self for use in the RTS.
function Self return Task_ID is
S : Task_Primitives.TCB_Ptr := Task_Primitives.Self;
begin
return Address_To_Task_ID (TCB_Ptr_To_Address (S) - LL_TCB_Offset);
end Self;
--------------
-- Finalize --
--------------
procedure Finalize (Object : in out Protection) is
begin
System.Task_Primitives.Finalize_Lock (Object.L);
end Finalize;
end System.Tasking;