Glibc syscalls now block properly (XCC)
[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 /**************** Functions to invoke syscalls ****************/
14 /* Convenience wrapper for __ros_syscall_errno.  Most code uses this (for now)*/
15 #define ros_syscall(which, a0, a1, a2, a3, a4, a5) \
16    __ros_syscall_errno(which, (long)(a0), (long)(a1), (long)(a2), (long)(a3), \
17                        (long)(a4), (long)(a5))
18
19 /* Raw syscall, user-provided errno (send in 0 if you don't want it).  This is
20  * usually used by code that can't handle errno (TLS). */
21 long __ros_syscall(unsigned int _num, long _a0, long _a1, long _a2, long _a3,
22                    long _a4, long _a5, int *errno_loc);
23
24 /* This version knows about errno and will handle it. */
25 long __ros_syscall_errno(unsigned int _num, long _a0, long _a1, long _a2,
26                          long _a3, long _a4, long _a5);
27
28 /**************** Additional syscall support ****************/
29 /* Simple ev_q that routes notifs to vcore0's public mbox.  This is used by the
30  * default scp_syscall, but can also be used for signals or other basic
31  * event/signal needs. */
32 struct event_queue __ros_scp_simple_evq;
33
34 /* Attempts to block on sysc, returning when it is done or progress has been
35  * made.  (function is in uthread.c) */
36 extern void (*ros_syscall_blockon)(struct syscall *sysc);
37
38 /* Glibc initial blockon, usable before parlib code can init things (or if it
39  * never can, like for RTLD).  MCPs will need the 'uthread-aware' blockon. */
40 void __ros_scp_syscall_blockon(struct syscall *sysc);
41
42 #endif /* _GLIBC_ROS_SYSCALL_H */