OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [ada/] [s-osinte-linux.ads] - Blame information for rev 706

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 706 jeremybenn
------------------------------------------------------------------------------
2
--                                                                          --
3
--                 GNAT 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) 1991-1994, Florida State University            --
10
--          Copyright (C) 1995-2011, Free Software Foundation, Inc.         --
11
--                                                                          --
12
-- GNAT is free software;  you can  redistribute it  and/or modify it under --
13
-- terms of the  GNU General Public License as published  by the Free Soft- --
14
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
15
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
16
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
17
-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
18
--                                                                          --
19
-- As a special exception under Section 7 of GPL version 3, you are granted --
20
-- additional permissions described in the GCC Runtime Library Exception,   --
21
-- version 3.1, as published by the Free Software Foundation.               --
22
--                                                                          --
23
-- You should have received a copy of the GNU General Public License and    --
24
-- a copy of the GCC Runtime Library Exception along with this program;     --
25
-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
26
-- <http://www.gnu.org/licenses/>.                                          --
27
--                                                                          --
28
-- GNARL was developed by the GNARL team at Florida State University.       --
29
-- Extensive contributions were provided by Ada Core Technologies, Inc.     --
30
--                                                                          --
31
------------------------------------------------------------------------------
32
 
33
--  This is a GNU/Linux (GNU/LinuxThreads) version of this package
34
 
35
--  This package encapsulates all direct interfaces to OS services
36
--  that are needed by the tasking run-time (libgnarl).
37
 
38
--  PLEASE DO NOT add any with-clauses to this package or remove the pragma
39
--  Preelaborate. This package is designed to be a bottom-level (leaf) package.
40
 
41
with Ada.Unchecked_Conversion;
42
with Interfaces.C;
43
with System.Linux;
44
with System.OS_Constants;
45
 
46
package System.OS_Interface is
47
   pragma Preelaborate;
48
 
49
   pragma Linker_Options ("-lpthread");
50
 
51
   subtype int            is Interfaces.C.int;
52
   subtype char           is Interfaces.C.char;
53
   subtype short          is Interfaces.C.short;
54
   subtype long           is Interfaces.C.long;
55
   subtype unsigned       is Interfaces.C.unsigned;
56
   subtype unsigned_short is Interfaces.C.unsigned_short;
57
   subtype unsigned_long  is Interfaces.C.unsigned_long;
58
   subtype unsigned_char  is Interfaces.C.unsigned_char;
59
   subtype plain_char     is Interfaces.C.plain_char;
60
   subtype size_t         is Interfaces.C.size_t;
61
 
62
   -----------
63
   -- Errno --
64
   -----------
65
 
66
   function errno return int;
67
   pragma Import (C, errno, "__get_errno");
68
 
69
   EAGAIN    : constant := System.Linux.EAGAIN;
70
   EINTR     : constant := System.Linux.EINTR;
71
   EINVAL    : constant := System.Linux.EINVAL;
72
   ENOMEM    : constant := System.Linux.ENOMEM;
73
   EPERM     : constant := System.Linux.EPERM;
74
   ETIMEDOUT : constant := System.Linux.ETIMEDOUT;
75
 
76
   -------------
77
   -- Signals --
78
   -------------
79
 
80
   Max_Interrupt : constant := 63;
81
   type Signal is new int range 0 .. Max_Interrupt;
82
   for Signal'Size use int'Size;
83
 
84
   SIGHUP     : constant := System.Linux.SIGHUP;
85
   SIGINT     : constant := System.Linux.SIGINT;
86
   SIGQUIT    : constant := System.Linux.SIGQUIT;
87
   SIGILL     : constant := System.Linux.SIGILL;
88
   SIGTRAP    : constant := System.Linux.SIGTRAP;
89
   SIGIOT     : constant := System.Linux.SIGIOT;
90
   SIGABRT    : constant := System.Linux.SIGABRT;
91
   SIGFPE     : constant := System.Linux.SIGFPE;
92
   SIGKILL    : constant := System.Linux.SIGKILL;
93
   SIGBUS     : constant := System.Linux.SIGBUS;
94
   SIGSEGV    : constant := System.Linux.SIGSEGV;
95
   SIGPIPE    : constant := System.Linux.SIGPIPE;
96
   SIGALRM    : constant := System.Linux.SIGALRM;
97
   SIGTERM    : constant := System.Linux.SIGTERM;
98
   SIGUSR1    : constant := System.Linux.SIGUSR1;
99
   SIGUSR2    : constant := System.Linux.SIGUSR2;
100
   SIGCLD     : constant := System.Linux.SIGCLD;
101
   SIGCHLD    : constant := System.Linux.SIGCHLD;
102
   SIGPWR     : constant := System.Linux.SIGPWR;
103
   SIGWINCH   : constant := System.Linux.SIGWINCH;
104
   SIGURG     : constant := System.Linux.SIGURG;
105
   SIGPOLL    : constant := System.Linux.SIGPOLL;
106
   SIGIO      : constant := System.Linux.SIGIO;
107
   SIGLOST    : constant := System.Linux.SIGLOST;
108
   SIGSTOP    : constant := System.Linux.SIGSTOP;
109
   SIGTSTP    : constant := System.Linux.SIGTSTP;
110
   SIGCONT    : constant := System.Linux.SIGCONT;
111
   SIGTTIN    : constant := System.Linux.SIGTTIN;
112
   SIGTTOU    : constant := System.Linux.SIGTTOU;
113
   SIGVTALRM  : constant := System.Linux.SIGVTALRM;
114
   SIGPROF    : constant := System.Linux.SIGPROF;
115
   SIGXCPU    : constant := System.Linux.SIGXCPU;
116
   SIGXFSZ    : constant := System.Linux.SIGXFSZ;
117
   SIGUNUSED  : constant := System.Linux.SIGUNUSED;
118
   SIGSTKFLT  : constant := System.Linux.SIGSTKFLT;
119
   SIGLTHRRES : constant := System.Linux.SIGLTHRRES;
120
   SIGLTHRCAN : constant := System.Linux.SIGLTHRCAN;
121
   SIGLTHRDBG : constant := System.Linux.SIGLTHRDBG;
122
 
123
   SIGADAABORT : constant := SIGABRT;
124
   --  Change this to use another signal for task abort. SIGTERM might be a
125
   --  good one.
126
 
127
   type Signal_Set is array (Natural range <>) of Signal;
128
 
129
   Unmasked : constant Signal_Set := (
130
      SIGTRAP,
131
      --  To enable debugging on multithreaded applications, mark SIGTRAP to
132
      --  be kept unmasked.
133
 
134
      SIGBUS,
135
 
136
      SIGTTIN, SIGTTOU, SIGTSTP,
137
      --  Keep these three signals unmasked so that background processes and IO
138
      --  behaves as normal "C" applications
139
 
140
      SIGPROF,
141
      --  To avoid confusing the profiler
142
 
143
      SIGKILL, SIGSTOP,
144
      --  These two signals actually can't be masked (POSIX won't allow it)
145
 
146
      SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG);
147
      --  These three signals are used by GNU/LinuxThreads starting from glibc
148
      --  2.1 (future 2.2).
149
 
150
   Reserved : constant Signal_Set := (SIGVTALRM, SIGUNUSED);
151
   --  Not clear why these two signals are reserved. Perhaps they are not
152
   --  supported by this version of GNU/Linux ???
153
 
154
   type sigset_t is private;
155
 
156
   function sigaddset (set : access sigset_t; sig : Signal) return int;
157
   pragma Import (C, sigaddset, "sigaddset");
158
 
159
   function sigdelset (set : access sigset_t; sig : Signal) return int;
160
   pragma Import (C, sigdelset, "sigdelset");
161
 
162
   function sigfillset (set : access sigset_t) return int;
163
   pragma Import (C, sigfillset, "sigfillset");
164
 
165
   function sigismember (set : access sigset_t; sig : Signal) return int;
166
   pragma Import (C, sigismember, "sigismember");
167
 
168
   function sigemptyset (set : access sigset_t) return int;
169
   pragma Import (C, sigemptyset, "sigemptyset");
170
 
171
   type union_type_3 is new String (1 .. 116);
172
   type siginfo_t is record
173
      si_signo : int;
174
      si_code  : int;
175
      si_errno : int;
176
      X_data   : union_type_3;
177
   end record;
178
   pragma Convention (C, siginfo_t);
179
 
180
   type struct_sigaction is record
181
      sa_handler  : System.Address;
182
      sa_mask     : sigset_t;
183
      sa_flags    : Interfaces.C.unsigned_long;
184
      sa_restorer : System.Address;
185
   end record;
186
   pragma Convention (C, struct_sigaction);
187
 
188
   type struct_sigaction_ptr is access all struct_sigaction;
189
 
190
   type Machine_State is record
191
      eip : unsigned_long;
192
      ebx : unsigned_long;
193
      esp : unsigned_long;
194
      ebp : unsigned_long;
195
      esi : unsigned_long;
196
      edi : unsigned_long;
197
   end record;
198
   type Machine_State_Ptr is access all Machine_State;
199
 
200
   SA_SIGINFO : constant := System.Linux.SA_SIGINFO;
201
   SA_ONSTACK : constant := System.Linux.SA_ONSTACK;
202
 
203
   SIG_BLOCK   : constant := 0;
204
   SIG_UNBLOCK : constant := 1;
205
   SIG_SETMASK : constant := 2;
206
 
207
   SIG_DFL : constant := 0;
208
   SIG_IGN : constant := 1;
209
 
210
   function sigaction
211
     (sig  : Signal;
212
      act  : struct_sigaction_ptr;
213
      oact : struct_sigaction_ptr) return int;
214
   pragma Import (C, sigaction, "sigaction");
215
 
216
   ----------
217
   -- Time --
218
   ----------
219
 
220
   type timespec is private;
221
 
222
   function To_Duration (TS : timespec) return Duration;
223
   pragma Inline (To_Duration);
224
 
225
   function To_Timespec (D : Duration) return timespec;
226
   pragma Inline (To_Timespec);
227
 
228
   function sysconf (name : int) return long;
229
   pragma Import (C, sysconf);
230
 
231
   SC_CLK_TCK          : constant := 2;
232
   SC_NPROCESSORS_ONLN : constant := 84;
233
 
234
   -------------------------
235
   -- Priority Scheduling --
236
   -------------------------
237
 
238
   SCHED_OTHER : constant := 0;
239
   SCHED_FIFO  : constant := 1;
240
   SCHED_RR    : constant := 2;
241
 
242
   function To_Target_Priority
243
     (Prio : System.Any_Priority) return Interfaces.C.int;
244
   --  Maps System.Any_Priority to a POSIX priority
245
 
246
   -------------
247
   -- Process --
248
   -------------
249
 
250
   type pid_t is private;
251
 
252
   function kill (pid : pid_t; sig : Signal) return int;
253
   pragma Import (C, kill, "kill");
254
 
255
   function getpid return pid_t;
256
   pragma Import (C, getpid, "getpid");
257
 
258
   -------------
259
   -- Threads --
260
   -------------
261
 
262
   type Thread_Body is access
263
     function (arg : System.Address) return System.Address;
264
   pragma Convention (C, Thread_Body);
265
 
266
   function Thread_Body_Access is new
267
     Ada.Unchecked_Conversion (System.Address, Thread_Body);
268
 
269
   type pthread_t is new unsigned_long;
270
   subtype Thread_Id is pthread_t;
271
 
272
   function To_pthread_t is
273
     new Ada.Unchecked_Conversion (unsigned_long, pthread_t);
274
 
275
   type pthread_mutex_t      is limited private;
276
   type pthread_rwlock_t     is limited private;
277
   type pthread_cond_t       is limited private;
278
   type pthread_attr_t       is limited private;
279
   type pthread_mutexattr_t  is limited private;
280
   type pthread_rwlockattr_t is limited private;
281
   type pthread_condattr_t   is limited private;
282
   type pthread_key_t        is private;
283
 
284
   PTHREAD_CREATE_DETACHED : constant := 1;
285
 
286
   -----------
287
   -- Stack --
288
   -----------
289
 
290
   type stack_t is record
291
      ss_sp    : System.Address;
292
      ss_flags : int;
293
      ss_size  : size_t;
294
   end record;
295
   pragma Convention (C, stack_t);
296
 
297
   function sigaltstack
298
     (ss  : not null access stack_t;
299
      oss : access stack_t) return int;
300
   pragma Import (C, sigaltstack, "sigaltstack");
301
 
302
   Alternate_Stack : aliased System.Address;
303
   pragma Import (C, Alternate_Stack, "__gnat_alternate_stack");
304
   --  The alternate signal stack for stack overflows
305
 
306
   Alternate_Stack_Size : constant := 16 * 1024;
307
   --  This must be in keeping with init.c:__gnat_alternate_stack
308
 
309
   function Get_Stack_Base (thread : pthread_t) return Address;
310
   pragma Inline (Get_Stack_Base);
311
   --  This is a dummy procedure to share some GNULLI files
312
 
313
   ---------------------------------------
314
   -- Nonstandard Thread Initialization --
315
   ---------------------------------------
316
 
317
   procedure pthread_init;
318
   pragma Inline (pthread_init);
319
   --  This is a dummy procedure to share some GNULLI files
320
 
321
   -------------------------
322
   -- POSIX.1c  Section 3 --
323
   -------------------------
324
 
325
   function sigwait (set : access sigset_t; sig : access Signal) return int;
326
   pragma Import (C, sigwait, "sigwait");
327
 
328
   function pthread_kill (thread : pthread_t; sig : Signal) return int;
329
   pragma Import (C, pthread_kill, "pthread_kill");
330
 
331
   function pthread_sigmask
332
     (how  : int;
333
      set  : access sigset_t;
334
      oset : access sigset_t) return int;
335
   pragma Import (C, pthread_sigmask, "pthread_sigmask");
336
 
337
   --------------------------
338
   -- POSIX.1c  Section 11 --
339
   --------------------------
340
 
341
   function pthread_mutexattr_init
342
     (attr : access pthread_mutexattr_t) return int;
343
   pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
344
 
345
   function pthread_mutexattr_destroy
346
     (attr : access pthread_mutexattr_t) return int;
347
   pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
348
 
349
   function pthread_mutex_init
350
     (mutex : access pthread_mutex_t;
351
      attr  : access pthread_mutexattr_t) return int;
352
   pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
353
 
354
   function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
355
   pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
356
 
357
   function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
358
   pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
359
 
360
   function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
361
   pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
362
 
363
   function pthread_rwlockattr_init
364
     (attr : access pthread_rwlockattr_t) return int;
365
   pragma Import (C, pthread_rwlockattr_init, "pthread_rwlockattr_init");
366
 
367
   function pthread_rwlockattr_destroy
368
     (attr : access pthread_rwlockattr_t) return int;
369
   pragma Import (C, pthread_rwlockattr_destroy, "pthread_rwlockattr_destroy");
370
 
371
   PTHREAD_RWLOCK_PREFER_READER_NP              : constant := 0;
372
   PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
373
   PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
374
 
375
   function pthread_rwlockattr_setkind_np
376
     (attr : access pthread_rwlockattr_t;
377
      pref : int) return int;
378
   pragma Import
379
     (C, pthread_rwlockattr_setkind_np, "pthread_rwlockattr_setkind_np");
380
 
381
   function pthread_rwlock_init
382
     (mutex : access pthread_rwlock_t;
383
      attr  : access pthread_rwlockattr_t) return int;
384
   pragma Import (C, pthread_rwlock_init, "pthread_rwlock_init");
385
 
386
   function pthread_rwlock_destroy
387
     (mutex : access pthread_rwlock_t) return int;
388
   pragma Import (C, pthread_rwlock_destroy, "pthread_rwlock_destroy");
389
 
390
   function pthread_rwlock_rdlock (mutex : access pthread_rwlock_t) return int;
391
   pragma Import (C, pthread_rwlock_rdlock, "pthread_rwlock_rdlock");
392
 
393
   function pthread_rwlock_wrlock (mutex : access pthread_rwlock_t) return int;
394
   pragma Import (C, pthread_rwlock_wrlock, "pthread_rwlock_wrlock");
395
 
396
   function pthread_rwlock_unlock (mutex : access pthread_rwlock_t) return int;
397
   pragma Import (C, pthread_rwlock_unlock, "pthread_rwlock_unlock");
398
 
399
   function pthread_condattr_init
400
     (attr : access pthread_condattr_t) return int;
401
   pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
402
 
403
   function pthread_condattr_destroy
404
     (attr : access pthread_condattr_t) return int;
405
   pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
406
 
407
   function pthread_cond_init
408
     (cond : access pthread_cond_t;
409
      attr : access pthread_condattr_t) return int;
410
   pragma Import (C, pthread_cond_init, "pthread_cond_init");
411
 
412
   function pthread_cond_destroy (cond : access pthread_cond_t) return int;
413
   pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
414
 
415
   function pthread_cond_signal (cond : access pthread_cond_t) return int;
416
   pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
417
 
418
   function pthread_cond_wait
419
     (cond  : access pthread_cond_t;
420
      mutex : access pthread_mutex_t) return int;
421
   pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
422
 
423
   function pthread_cond_timedwait
424
     (cond    : access pthread_cond_t;
425
      mutex   : access pthread_mutex_t;
426
      abstime : access timespec) return int;
427
   pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
428
 
429
   --------------------------
430
   -- POSIX.1c  Section 13 --
431
   --------------------------
432
 
433
   type struct_sched_param is record
434
      sched_priority : int;  --  scheduling priority
435
   end record;
436
   pragma Convention (C, struct_sched_param);
437
 
438
   function pthread_setschedparam
439
     (thread : pthread_t;
440
      policy : int;
441
      param  : access struct_sched_param) return int;
442
   pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
443
 
444
   function pthread_attr_setschedpolicy
445
     (attr   : access pthread_attr_t;
446
      policy : int) return int;
447
   pragma Import
448
     (C, pthread_attr_setschedpolicy, "pthread_attr_setschedpolicy");
449
 
450
   function sched_yield return int;
451
   pragma Import (C, sched_yield, "sched_yield");
452
 
453
   ---------------------------
454
   -- P1003.1c - Section 16 --
455
   ---------------------------
456
 
457
   function pthread_attr_init
458
     (attributes : access pthread_attr_t) return int;
459
   pragma Import (C, pthread_attr_init, "pthread_attr_init");
460
 
461
   function pthread_attr_destroy
462
     (attributes : access pthread_attr_t) return int;
463
   pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
464
 
465
   function pthread_attr_setdetachstate
466
     (attr        : access pthread_attr_t;
467
      detachstate : int) return int;
468
   pragma Import
469
     (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
470
 
471
   function pthread_attr_setstacksize
472
     (attr      : access pthread_attr_t;
473
      stacksize : size_t) return int;
474
   pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
475
 
476
   function pthread_create
477
     (thread        : access pthread_t;
478
      attributes    : access pthread_attr_t;
479
      start_routine : Thread_Body;
480
      arg           : System.Address) return int;
481
   pragma Import (C, pthread_create, "pthread_create");
482
 
483
   procedure pthread_exit (status : System.Address);
484
   pragma Import (C, pthread_exit, "pthread_exit");
485
 
486
   function pthread_self return pthread_t;
487
   pragma Import (C, pthread_self, "pthread_self");
488
 
489
   function lwp_self return System.Address;
490
   pragma Import (C, lwp_self, "__gnat_lwp_self");
491
 
492
   --------------------------
493
   -- POSIX.1c  Section 17 --
494
   --------------------------
495
 
496
   function pthread_setspecific
497
     (key   : pthread_key_t;
498
      value : System.Address) return int;
499
   pragma Import (C, pthread_setspecific, "pthread_setspecific");
500
 
501
   function pthread_getspecific (key : pthread_key_t) return System.Address;
502
   pragma Import (C, pthread_getspecific, "pthread_getspecific");
503
 
504
   type destructor_pointer is access procedure (arg : System.Address);
505
   pragma Convention (C, destructor_pointer);
506
 
507
   function pthread_key_create
508
     (key        : access pthread_key_t;
509
      destructor : destructor_pointer) return int;
510
   pragma Import (C, pthread_key_create, "pthread_key_create");
511
 
512
   CPU_SETSIZE : constant := 1_024;
513
   --  Size of the cpu_set_t mask on most linux systems (SUSE 11 uses 4_096).
514
   --  This is kept for backward compatibility (System.Task_Info uses it), but
515
   --  the run-time library does no longer rely on static masks, using
516
   --  dynamically allocated masks instead.
517
 
518
   type bit_field is array (1 .. CPU_SETSIZE) of Boolean;
519
   for bit_field'Size use CPU_SETSIZE;
520
   pragma Pack (bit_field);
521
   pragma Convention (C, bit_field);
522
 
523
   type cpu_set_t is record
524
      bits : bit_field;
525
   end record;
526
   pragma Convention (C, cpu_set_t);
527
 
528
   type cpu_set_t_ptr is access all cpu_set_t;
529
   --  In the run-time library we use this pointer because the size of type
530
   --  cpu_set_t varies depending on the glibc version. Hence, objects of type
531
   --  cpu_set_t are allocated dynamically using the number of processors
532
   --  available in the target machine (value obtained at execution time).
533
 
534
   function CPU_ALLOC (count : size_t) return cpu_set_t_ptr;
535
   pragma Import (C, CPU_ALLOC, "__gnat_cpu_alloc");
536
   --  Wrapper around the CPU_ALLOC C macro
537
 
538
   function CPU_ALLOC_SIZE (count : size_t) return size_t;
539
   pragma Import (C, CPU_ALLOC_SIZE, "__gnat_cpu_alloc_size");
540
   --  Wrapper around the CPU_ALLOC_SIZE C macro
541
 
542
   procedure CPU_FREE (cpuset : cpu_set_t_ptr);
543
   pragma Import (C, CPU_FREE, "__gnat_cpu_free");
544
   --  Wrapper around the CPU_FREE C macro
545
 
546
   procedure CPU_ZERO (count : size_t; cpuset : cpu_set_t_ptr);
547
   pragma Import (C, CPU_ZERO, "__gnat_cpu_zero");
548
   --  Wrapper around the CPU_ZERO_S C macro
549
 
550
   procedure CPU_SET (cpu : int; count : size_t; cpuset : cpu_set_t_ptr);
551
   pragma Import (C, CPU_SET, "__gnat_cpu_set");
552
   --  Wrapper around the CPU_SET_S C macro
553
 
554
   function pthread_setaffinity_np
555
     (thread     : pthread_t;
556
      cpusetsize : size_t;
557
      cpuset     : cpu_set_t_ptr) return int;
558
   pragma Import (C, pthread_setaffinity_np, "pthread_setaffinity_np");
559
   pragma Weak_External (pthread_setaffinity_np);
560
   --  Use a weak symbol because this function may be available or not,
561
   --  depending on the version of the system.
562
 
563
   function pthread_attr_setaffinity_np
564
     (attr       : access pthread_attr_t;
565
      cpusetsize : size_t;
566
      cpuset     : cpu_set_t_ptr) return int;
567
   pragma Import (C, pthread_attr_setaffinity_np,
568
                    "pthread_attr_setaffinity_np");
569
   pragma Weak_External (pthread_attr_setaffinity_np);
570
   --  Use a weak symbol because this function may be available or not,
571
   --  depending on the version of the system.
572
 
573
private
574
 
575
   type sigset_t is
576
     array (0 .. OS_Constants.SIZEOF_sigset - 1) of unsigned_char;
577
   pragma Convention (C, sigset_t);
578
   for sigset_t'Alignment use Interfaces.C.unsigned_long'Alignment;
579
 
580
   pragma Warnings (Off);
581
   for struct_sigaction use record
582
      sa_handler at Linux.sa_handler_pos range 0 .. Standard'Address_Size - 1;
583
      sa_mask    at Linux.sa_mask_pos    range 0 .. 1023;
584
      sa_flags   at Linux.sa_flags_pos   range 0 .. Standard'Address_Size - 1;
585
   end record;
586
   --  We intentionally leave sa_restorer unspecified and let the compiler
587
   --  append it after the last field, so disable corresponding warning.
588
   pragma Warnings (On);
589
 
590
   type pid_t is new int;
591
 
592
   type time_t is new long;
593
 
594
   type timespec is record
595
      tv_sec  : time_t;
596
      tv_nsec : long;
597
   end record;
598
   pragma Convention (C, timespec);
599
 
600
   type unsigned_long_long_t is mod 2 ** 64;
601
   --  Local type only used to get the alignment of this type below
602
 
603
   subtype char_array is Interfaces.C.char_array;
604
 
605
   type pthread_attr_t is record
606
      Data : char_array (1 .. OS_Constants.PTHREAD_ATTR_SIZE);
607
   end record;
608
   pragma Convention (C, pthread_attr_t);
609
   for pthread_attr_t'Alignment use Interfaces.C.unsigned_long'Alignment;
610
 
611
   type pthread_condattr_t is record
612
      Data : char_array (1 .. OS_Constants.PTHREAD_CONDATTR_SIZE);
613
   end record;
614
   pragma Convention (C, pthread_condattr_t);
615
   for pthread_condattr_t'Alignment use Interfaces.C.int'Alignment;
616
 
617
   type pthread_mutexattr_t is record
618
      Data : char_array (1 .. OS_Constants.PTHREAD_MUTEXATTR_SIZE);
619
   end  record;
620
   pragma Convention (C, pthread_mutexattr_t);
621
   for pthread_mutexattr_t'Alignment use Interfaces.C.int'Alignment;
622
 
623
   type pthread_mutex_t is record
624
      Data : char_array (1 .. OS_Constants.PTHREAD_MUTEX_SIZE);
625
   end record;
626
   pragma Convention (C, pthread_mutex_t);
627
   for pthread_mutex_t'Alignment use Interfaces.C.unsigned_long'Alignment;
628
 
629
   type pthread_rwlockattr_t is record
630
      Data : char_array (1 .. OS_Constants.PTHREAD_RWLOCKATTR_SIZE);
631
   end record;
632
   pragma Convention (C, pthread_rwlockattr_t);
633
   for pthread_rwlockattr_t'Alignment use Interfaces.C.unsigned_long'Alignment;
634
 
635
   type pthread_rwlock_t is record
636
      Data : char_array (1 .. OS_Constants.PTHREAD_RWLOCK_SIZE);
637
   end record;
638
   pragma Convention (C, pthread_rwlock_t);
639
   for pthread_rwlock_t'Alignment use Interfaces.C.unsigned_long'Alignment;
640
 
641
   type pthread_cond_t is record
642
      Data : char_array (1 .. OS_Constants.PTHREAD_COND_SIZE);
643
   end record;
644
   pragma Convention (C, pthread_cond_t);
645
   for pthread_cond_t'Alignment use unsigned_long_long_t'Alignment;
646
 
647
   type pthread_key_t is new unsigned;
648
 
649
end System.OS_Interface;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.