OSDN Git Service

* function.h (incomming_args): Break out of struct function.
[pf3gnuchains/gcc-fork.git] / gcc / ada / s-tpopsp-vxworks.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
4 --                                                                          --
5 --                SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC                --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --         Copyright (C) 1992-2007, Free Software Foundation, Inc.          --
10 --                                                                          --
11 -- GNARL is free software; you can  redistribute it  and/or modify it under --
12 -- terms of the  GNU General Public License as published  by the Free Soft- --
13 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
14 -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17 -- for  more details.  You should have  received  a copy of the GNU General --
18 -- Public License  distributed with GNARL; see file COPYING.  If not, write --
19 -- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
20 -- Boston, MA 02110-1301, USA.                                              --
21 --                                                                          --
22 -- As a special exception,  if other files  instantiate  generics from this --
23 -- unit, or you link  this unit with other files  to produce an executable, --
24 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
25 -- covered  by the  GNU  General  Public  License.  This exception does not --
26 -- however invalidate  any other reasons why  the executable file  might be --
27 -- covered by the  GNU Public License.                                      --
28 --                                                                          --
29 -- GNARL was developed by the GNARL team at Florida State University.       --
30 -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
31 --                                                                          --
32 ------------------------------------------------------------------------------
33
34 --  This is a VxWorks version of this package where foreign threads are
35 --  recognized.
36
37 separate (System.Task_Primitives.Operations)
38 package body Specific is
39
40    ATCB_Key : aliased System.Address := System.Null_Address;
41    --  Key used to find the Ada Task_Id associated with a thread
42
43    ATCB_Key_Addr : System.Address := ATCB_Key'Address;
44    pragma Export (Ada, ATCB_Key_Addr, "__gnat_ATCB_key_addr");
45    --  Exported to support the temporary AE653 task registration
46    --  implementation. This mechanism is used to minimize impact on other
47    --  targets.
48
49    ------------
50    -- Delete --
51    ------------
52
53    procedure Delete is
54       Result : STATUS;
55    begin
56       Result := taskVarDelete (taskIdSelf, ATCB_Key'Access);
57       pragma Assert (Result /= ERROR);
58    end Delete;
59
60    ----------------
61    -- Initialize --
62    ----------------
63
64    procedure Initialize is
65    begin
66       null;
67    end Initialize;
68
69    -------------------
70    -- Is_Valid_Task --
71    -------------------
72
73    function Is_Valid_Task return Boolean is
74    begin
75       return taskVarGet (taskIdSelf, ATCB_Key'Access) /= ERROR;
76    end Is_Valid_Task;
77
78    ---------
79    -- Set --
80    ---------
81
82    procedure Set (Self_Id : Task_Id) is
83       Result : STATUS;
84
85    begin
86       if taskVarGet (0, ATCB_Key'Access) = ERROR then
87          Result := taskVarAdd (0, ATCB_Key'Access);
88          pragma Assert (Result = OK);
89       end if;
90
91       ATCB_Key := To_Address (Self_Id);
92    end Set;
93
94    ----------
95    -- Self --
96    ----------
97
98    function Self return Task_Id is
99    begin
100       return To_Task_Id (ATCB_Key);
101    end Self;
102
103 end Specific;