1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#ifndef ___SYSCALL_H__
#define ___SYSCALL_H__
#include <errno.h>
#ifndef ENOSYS
#include "errno/ENOSYS.h"
#endif
#define SYSCALL(_name, _type, _err, _a1, _a2, _a3, _a4, _a5, _a6) \
static int _scno = -2; \
if (_scno == -2) { \
_scno = __syscall_lookup(_name); \
} \
long _ret = __syscall(_scno, _a1, _a2, _a3, _a4, _a5, _a6); \
if (_ret < 0) { \
errno = -_ret; \
return _err; \
} \
return (_type)_ret
#define SYSCALL_NUMBER(_var, _name, _notfound) \
static long _var = -2; \
do { \
if (_var == -2) { \
(_var) = __syscall_lookup(_name); \
} \
if (_var == -1) { \
errno = ENOSYS; \
return (_notfound); } \
} while (0)
long __syscall(long __number, ...);
#define __scall0(_n) \
__syscall(__syscall_lookup(_n))
#define __scall1(_n, _1) \
__syscall(__syscall_lookup(_n), _1)
#define __scall2(_n, _1, _2) \
__syscall(__syscall_lookup(_n), _1, _2)
#define __scall3(_n, _1, _2, _3) \
__syscall(__syscall_lookup(_n), _1, _2, _3)
#define __scall4(_n, _1, _2, _3, _4) \
__syscall(__syscall_lookup(_n), _1, _2, _3, _4)
#define __scall5(_n, _1, _2, _3, _4, _5) \
__syscall(__syscall_lookup(_n), _1, _2, _3, _4, _5)
#define __scall6(_n, _1, _2, _3, _4, _5, _6) \
__syscall(__syscall_lookup(_n), _1, _2, _3, _4, _5, _6)
#if defined __linux__ && defined __x86_64__
#define __sys_alarm 37
#define __sys_chdir 80
#define __sys_chmod 90
#define __sys_chown 92
#define __sys_close 3
#define __sys_dup2 33
#define __sys_execve 59
#define __sys_exit 60
#define __sys_fcntl 72
#define __sys_fork 57
#define __sys_fstat 5
#define __sys_getcwd 79
#define __sys_getdents 78
#define __sys_getegid 108
#define __sys_geteuid 107
#define __sys_getgid 104
#define __sys_getgroups 115
#define __sys_getpgrp 111
#define __sys_getpgid 121
#define __sys_getpid 39
#define __sys_getppid 110
#define __sys_getuid 102
#define __sys_kill 62
#define __sys_link 86
#define __sys_lseek 8
#define __sys_mkdir 83
#define __sys_mknod 133
#define __sys_mmap 9
#define __sys_munmap 11
#define __sys_nanosleep 35
/* needed for POSIX < 199309 when nanosleep becomes __nanosleep */
#define __sys___nanosleep 35
#define __sys_open 2
#define __sys_pause 34
#define __sys_pipe 22
#define __sys_read 0
#define __sys_readlink 89
#define __sys_rename 82
#define __sys_rmdir 84
#define __sys_setgid 106
#define __sys_setpgid 109
#define __sys_setsid 112
#define __sys_setuid 105
#define __sys_sigaction 13
#define __sys_sigpending 127
#define __sys_sigprocmask 14
#define __sys_sigsuspend 130
#define __sys_stat 4
#define __sys_time 201
#define __sys_times 100
#define __sys_umask 95
#define __sys_unlink 87
#define __sys_utime 132
#define __sys_waitid 247
#define __sys_write 1
#endif
#define __syscall_lookup(_name) (__sys_##_name)
#endif
|