Allow the headers to be used when compiling c++ programs
[akaros.git] / tools / compilers / gcc-glibc / glibc-2.14.1-ros / sysdeps / ros / sys / syscall.h
1 /* Copyright (c) 2012 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * glibc syscall functions / tools for working with Akaros */
6
7 #ifndef _GLIBC_ROS_SYSCALL_H
8 #define _GLIBC_ROS_SYSCALL_H
9
10 #include <ros/syscall.h>
11 #include <ros/event.h>
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17 /**************** Functions to invoke syscalls ****************/
18 /* Convenience wrapper for __ros_syscall_errno.  Most code uses this (for now)*/
19 #define ros_syscall(which, a0, a1, a2, a3, a4, a5) \
20    __ros_syscall_errno(which, (long)(a0), (long)(a1), (long)(a2), (long)(a3), \
21                        (long)(a4), (long)(a5))
22
23 /* Raw syscall, user-provided errno (send in 0 if you don't want it).  This is
24  * usually used by code that can't handle errno (TLS). */
25 long __ros_syscall(unsigned int _num, long _a0, long _a1, long _a2, long _a3,
26                    long _a4, long _a5, int *errno_loc);
27
28 /* This version knows about errno and will handle it. */
29 long __ros_syscall_errno(unsigned int _num, long _a0, long _a1, long _a2,
30                          long _a3, long _a4, long _a5);
31
32 /**************** Additional syscall support ****************/
33 /* Simple ev_q that routes notifs to vcore0's public mbox.  This is used by the
34  * default scp_syscall, but can also be used for signals or other basic
35  * event/signal needs. */
36 struct event_queue __ros_scp_simple_evq;
37
38 /* Attempts to block on sysc, returning when it is done or progress has been
39  * made.  (function is in uthread.c) */
40 extern void (*ros_syscall_blockon)(struct syscall *sysc);
41
42 /* Glibc initial blockon, usable before parlib code can init things (or if it
43  * never can, like for RTLD).  MCPs will need the 'uthread-aware' blockon. */
44 void __ros_scp_syscall_blockon(struct syscall *sysc);
45
46 #ifdef __cplusplus
47 }
48 #endif
49
50 #endif /* _GLIBC_ROS_SYSCALL_H */