]>
Commit | Line | Data |
---|---|---|
84481f76 RK |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3084fecd | 3 | -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- |
84481f76 | 4 | -- -- |
15f6d6e7 | 5 | -- SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC -- |
84481f76 | 6 | -- -- |
3084fecd | 7 | -- B o d y -- |
84481f76 | 8 | -- -- |
748086b7 | 9 | -- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- |
84481f76 RK |
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- -- | |
748086b7 JJ |
13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
14 | -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- | |
84481f76 | 15 | -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- |
748086b7 JJ |
16 | -- or FITNESS FOR A PARTICULAR PURPOSE. -- |
17 | -- -- | |
18 | -- As a special exception under Section 7 of GPL version 3, you are granted -- | |
19 | -- additional permissions described in the GCC Runtime Library Exception, -- | |
20 | -- version 3.1, as published by the Free Software Foundation. -- | |
21 | -- -- | |
22 | -- You should have received a copy of the GNU General Public License and -- | |
23 | -- a copy of the GCC Runtime Library Exception along with this program; -- | |
24 | -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- | |
25 | -- <http://www.gnu.org/licenses/>. -- | |
84481f76 | 26 | -- -- |
fbf5a39b AC |
27 | -- GNARL was developed by the GNARL team at Florida State University. -- |
28 | -- Extensive contributions were provided by Ada Core Technologies, Inc. -- | |
84481f76 RK |
29 | -- -- |
30 | ------------------------------------------------------------------------------ | |
31 | ||
fbf5a39b AC |
32 | -- This is a VxWorks version of this package where foreign threads are |
33 | -- recognized. | |
84481f76 RK |
34 | |
35 | separate (System.Task_Primitives.Operations) | |
fbf5a39b | 36 | package body Specific is |
84481f76 | 37 | |
b9260c3d AC |
38 | ATCB_Key : aliased System.Address := System.Null_Address; |
39 | -- Key used to find the Ada Task_Id associated with a thread | |
40 | ||
41 | ATCB_Key_Addr : System.Address := ATCB_Key'Address; | |
42 | pragma Export (Ada, ATCB_Key_Addr, "__gnat_ATCB_key_addr"); | |
43 | -- Exported to support the temporary AE653 task registration | |
44 | -- implementation. This mechanism is used to minimize impact on other | |
45 | -- targets. | |
46 | ||
47 | ------------ | |
48 | -- Delete -- | |
49 | ------------ | |
50 | ||
51 | procedure Delete is | |
52 | Result : STATUS; | |
53 | begin | |
54 | Result := taskVarDelete (taskIdSelf, ATCB_Key'Access); | |
55 | pragma Assert (Result /= ERROR); | |
56 | end Delete; | |
57 | ||
58 | ---------------- | |
59 | -- Initialize -- | |
60 | ---------------- | |
61 | ||
62 | procedure Initialize is | |
63 | begin | |
64 | null; | |
65 | end Initialize; | |
66 | ||
fbf5a39b AC |
67 | ------------------- |
68 | -- Is_Valid_Task -- | |
69 | ------------------- | |
84481f76 | 70 | |
fbf5a39b AC |
71 | function Is_Valid_Task return Boolean is |
72 | begin | |
73 | return taskVarGet (taskIdSelf, ATCB_Key'Access) /= ERROR; | |
74 | end Is_Valid_Task; | |
84481f76 | 75 | |
fbf5a39b AC |
76 | --------- |
77 | -- Set -- | |
78 | --------- | |
79 | ||
b5e792e2 | 80 | procedure Set (Self_Id : Task_Id) is |
fbf5a39b AC |
81 | Result : STATUS; |
82 | ||
83 | begin | |
84 | if taskVarGet (0, ATCB_Key'Access) = ERROR then | |
85 | Result := taskVarAdd (0, ATCB_Key'Access); | |
86 | pragma Assert (Result = OK); | |
87 | end if; | |
88 | ||
89 | ATCB_Key := To_Address (Self_Id); | |
90 | end Set; | |
91 | ||
92 | ---------- | |
93 | -- Self -- | |
94 | ---------- | |
95 | ||
b5e792e2 | 96 | function Self return Task_Id is |
fbf5a39b | 97 | begin |
b5e792e2 | 98 | return To_Task_Id (ATCB_Key); |
fbf5a39b AC |
99 | end Self; |
100 | ||
101 | end Specific; |