* config/i386/uwin.h: Remove SUBTARGET_PROLOGUE.
[official-gcc.git] / gcc / ada / 5zosinte.ads
blob398db312c0d0d98af812edb72b449eea91f3bd56
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS --
4 -- --
5 -- S Y S T E M . O S _ I N T E R F A C E --
6 -- --
7 -- S p e c --
8 -- --
9 -- Copyright (C) 1997-2001 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, 59 Temple Place - Suite 330, Boston, --
20 -- MA 02111-1307, 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 ------------------------------------------------------------------------------
34 -- This is the VxWorks version of this package.
36 -- VxWorks does not directly support the needed POSIX routines, but it
37 -- does have other routines that make it possible to code equivalent
38 -- POSIX compliant routines. The approach taken is to provide an
39 -- FSU threads compliant interface.
41 -- This package encapsulates all direct interfaces to OS services
42 -- that are needed by children of System.
44 -- PLEASE DO NOT add any with-clauses to this package
45 -- or remove the pragma Elaborate_Body.
46 -- It is designed to be a bottom-level (leaf) package.
48 with Interfaces.C;
49 with System.VxWorks;
51 package System.OS_Interface is
52 pragma Preelaborate;
54 subtype int is Interfaces.C.int;
55 subtype short is Short_Integer;
56 type long is new Long_Integer;
57 type unsigned_long is mod 2 ** long'Size;
58 type size_t is mod 2 ** Standard'Address_Size;
60 -----------
61 -- Errno --
62 -----------
64 function errno return int;
65 pragma Import (C, errno, "errnoGet");
67 EINTR : constant := 4;
68 EAGAIN : constant := 35;
69 ENOMEM : constant := 12;
70 EINVAL : constant := 22;
71 ETIMEDOUT : constant := 60;
73 FUNC_ERR : constant := -1;
75 ----------------------------
76 -- Signals and Interrupts --
77 ----------------------------
79 NSIG : constant := 32;
80 -- Number of signals on the target OS
81 type Signal is new int range 0 .. Interfaces.C."-" (NSIG, 1);
83 Max_HW_Interrupt : constant := System.VxWorks.Num_HW_Interrupts - 1;
84 type HW_Interrupt is new int range 0 .. Max_HW_Interrupt;
86 Max_Interrupt : constant := Max_HW_Interrupt;
88 SIGILL : constant := 4; -- illegal instruction (not reset)
89 SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
90 SIGFPE : constant := 8; -- floating point exception
91 SIGBUS : constant := 10; -- bus error
92 SIGSEGV : constant := 11; -- segmentation violation
94 -----------------------------------
95 -- Signal processing definitions --
96 -----------------------------------
98 -- The how in sigprocmask().
99 SIG_BLOCK : constant := 1;
100 SIG_UNBLOCK : constant := 2;
101 SIG_SETMASK : constant := 3;
103 -- The sa_flags in struct sigaction.
104 SA_SIGINFO : constant := 16#0002#;
105 SA_ONSTACK : constant := 16#0004#;
107 SIG_DFL : constant := 0;
108 SIG_IGN : constant := 1;
110 type sigset_t is private;
112 type struct_sigaction is record
113 sa_handler : System.Address;
114 sa_mask : sigset_t;
115 sa_flags : int;
116 end record;
117 pragma Convention (C, struct_sigaction);
118 type struct_sigaction_ptr is access all struct_sigaction;
120 function sigaddset (set : access sigset_t; sig : Signal) return int;
121 pragma Import (C, sigaddset, "sigaddset");
123 function sigdelset (set : access sigset_t; sig : Signal) return int;
124 pragma Import (C, sigdelset, "sigdelset");
126 function sigfillset (set : access sigset_t) return int;
127 pragma Import (C, sigfillset, "sigfillset");
129 function sigismember (set : access sigset_t; sig : Signal) return int;
130 pragma Import (C, sigismember, "sigismember");
132 function sigemptyset (set : access sigset_t) return int;
133 pragma Import (C, sigemptyset, "sigemptyset");
135 function sigaction
136 (sig : Signal;
137 act : struct_sigaction_ptr;
138 oact : struct_sigaction_ptr) return int;
139 pragma Import (C, sigaction, "sigaction");
141 type isr_address is access procedure (sig : int);
143 function c_signal (sig : Signal; handler : isr_address) return isr_address;
144 pragma Import (C, c_signal, "signal");
146 function sigwait (set : access sigset_t; sig : access Signal) return int;
147 pragma Inline (sigwait);
149 type sigset_t_ptr is access all sigset_t;
151 function pthread_sigmask
152 (how : int;
153 set : sigset_t_ptr;
154 oset : sigset_t_ptr) return int;
155 pragma Import (C, pthread_sigmask, "sigprocmask");
157 type t_id is new long;
158 subtype Thread_Id is t_id;
160 function kill (pid : t_id; sig : Signal) return int;
161 pragma Import (C, kill, "kill");
163 -- VxWorks doesn't have getpid; taskIdSelf is the equivalent
164 -- routine.
165 function getpid return t_id;
166 pragma Import (C, getpid, "taskIdSelf");
168 ----------
169 -- Time --
170 ----------
172 type time_t is new unsigned_long;
174 type timespec is record
175 ts_sec : time_t;
176 ts_nsec : long;
177 end record;
178 pragma Convention (C, timespec);
180 type clockid_t is private;
182 CLOCK_REALTIME : constant clockid_t; -- System wide realtime clock
184 function To_Duration (TS : timespec) return Duration;
185 pragma Inline (To_Duration);
187 function To_Timespec (D : Duration) return timespec;
188 pragma Inline (To_Timespec);
190 function To_Clock_Ticks (D : Duration) return int;
191 -- Convert a duration value (in seconds) into clock ticks.
193 function clock_gettime
194 (clock_id : clockid_t; tp : access timespec) return int;
195 pragma Import (C, clock_gettime, "clock_gettime");
197 type ULONG is new unsigned_long;
199 procedure tickSet (ticks : ULONG);
200 pragma Import (C, tickSet, "tickSet");
202 function tickGet return ULONG;
203 pragma Import (C, tickGet, "tickGet");
205 -----------------------------------------------------
206 -- Convenience routine to convert between VxWorks --
207 -- priority and Ada priority. --
208 -----------------------------------------------------
210 function To_VxWorks_Priority (Priority : in int) return int;
211 pragma Inline (To_VxWorks_Priority);
213 --------------------------
214 -- VxWorks specific API --
215 --------------------------
217 function taskIdSelf return t_id;
218 pragma Import (C, taskIdSelf, "taskIdSelf");
220 function taskSuspend (tid : t_id) return int;
221 pragma Import (C, taskSuspend, "taskSuspend");
223 function taskResume (tid : t_id) return int;
224 pragma Import (C, taskResume, "taskResume");
226 function taskIsSuspended (tid : t_id) return int;
227 pragma Import (C, taskIsSuspended, "taskIsSuspended");
229 function taskVarAdd
230 (tid : t_id; pVar : System.Address) return int;
231 pragma Import (C, taskVarAdd, "taskVarAdd");
233 function taskVarDelete
234 (tid : t_id; pVar : access System.Address) return int;
235 pragma Import (C, taskVarDelete, "taskVarDelete");
237 function taskVarSet
238 (tid : t_id;
239 pVar : access System.Address;
240 value : System.Address) return int;
241 pragma Import (C, taskVarSet, "taskVarSet");
243 function taskVarGet
244 (tid : t_id;
245 pVar : access System.Address) return int;
246 pragma Import (C, taskVarGet, "taskVarGet");
248 function taskDelay (ticks : int) return int;
249 procedure taskDelay (ticks : int);
250 pragma Import (C, taskDelay, "taskDelay");
252 function sysClkRateGet return int;
253 pragma Import (C, sysClkRateGet, "sysClkRateGet");
255 -- Option flags for taskSpawn
257 VX_UNBREAKABLE : constant := 16#0002#;
258 VX_FP_TASK : constant := 16#0008#;
259 VX_FP_PRIVATE_ENV : constant := 16#0080#;
260 VX_NO_STACK_FILL : constant := 16#0100#;
262 function taskSpawn
263 (name : System.Address; -- Pointer to task name
264 priority : int;
265 options : int;
266 stacksize : size_t;
267 start_routine : System.Address;
268 arg1 : System.Address;
269 arg2 : int := 0;
270 arg3 : int := 0;
271 arg4 : int := 0;
272 arg5 : int := 0;
273 arg6 : int := 0;
274 arg7 : int := 0;
275 arg8 : int := 0;
276 arg9 : int := 0;
277 arg10 : int := 0) return t_id;
278 pragma Import (C, taskSpawn, "taskSpawn");
280 procedure taskDelete (tid : t_id);
281 pragma Import (C, taskDelete, "taskDelete");
283 function kernelTimeSlice (ticks : int) return int;
284 pragma Import (C, kernelTimeSlice, "kernelTimeSlice");
286 function taskPrioritySet
287 (tid : t_id; newPriority : int) return int;
288 pragma Import (C, taskPrioritySet, "taskPrioritySet");
290 subtype STATUS is int;
291 -- Equivalent of the C type STATUS
293 OK : constant STATUS := 0;
294 ERROR : constant STATUS := Interfaces.C.int (-1);
296 -- Semaphore creation flags.
298 SEM_Q_FIFO : constant := 0;
299 SEM_Q_PRIORITY : constant := 1;
300 SEM_DELETE_SAFE : constant := 4; -- only valid for binary semaphore
301 SEM_INVERSION_SAFE : constant := 8; -- only valid for binary semaphore
303 -- Semaphore initial state flags
305 SEM_EMPTY : constant := 0;
306 SEM_FULL : constant := 1;
308 -- Semaphore take (semTake) time constants.
310 WAIT_FOREVER : constant := -1;
311 NO_WAIT : constant := 0;
313 -- Error codes (errno). The lower level 16 bits are the
314 -- error code, with the upper 16 bits representing the
315 -- module number in which the error occurred. By convention,
316 -- the module number is 0 for UNIX errors. VxWorks reserves
317 -- module numbers 1-500, with the remaining module numbers
318 -- being available for user applications.
320 M_objLib : constant := 61 * 2**16;
321 -- semTake() failure with ticks = NO_WAIT
322 S_objLib_OBJ_UNAVAILABLE : constant := M_objLib + 2;
323 -- semTake() timeout with ticks > NO_WAIT
324 S_objLib_OBJ_TIMEOUT : constant := M_objLib + 4;
326 type SEM_ID is new System.Address;
327 -- typedef struct semaphore *SEM_ID;
329 -- We use two different kinds of VxWorks semaphores: mutex
330 -- and binary semaphores. A null ID is returned when
331 -- a semaphore cannot be created.
333 function semBCreate (options : int; initial_state : int) return SEM_ID;
334 -- Create a binary semaphore. Return ID, or 0 if memory could not
335 -- be allocated.
336 pragma Import (C, semBCreate, "semBCreate");
338 function semMCreate (options : int) return SEM_ID;
339 pragma Import (C, semMCreate, "semMCreate");
341 function semDelete (Sem : SEM_ID) return int;
342 -- Delete a semaphore
343 pragma Import (C, semDelete, "semDelete");
345 function semGive (Sem : SEM_ID) return int;
346 pragma Import (C, semGive, "semGive");
348 function semTake (Sem : SEM_ID; timeout : int) return int;
349 -- Attempt to take binary semaphore. Error is returned if operation
350 -- times out
351 pragma Import (C, semTake, "semTake");
353 function semFlush (SemID : SEM_ID) return STATUS;
354 -- Release all threads blocked on the semaphore
355 pragma Import (C, semFlush, "semFlush");
357 function taskLock return int;
358 pragma Import (C, taskLock, "taskLock");
360 function taskUnlock return int;
361 pragma Import (C, taskUnlock, "taskUnlock");
363 private
364 type sigset_t is new long;
366 type pid_t is new int;
368 ERROR_PID : constant pid_t := -1;
370 type clockid_t is new int;
371 CLOCK_REALTIME : constant clockid_t := 0;
373 end System.OS_Interface;