1 #ifndef _BITS_SYSCALLS_H
2 #define _BITS_SYSCALLS_H
4 # error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
11 #define SYS_ify(syscall_name) (__NR_##syscall_name)
13 #define _syscall_return(type) \
14 return (_sc_err ? __set_errno(_sc_ret), _sc_ret = -1L : 0), (type) _sc_ret
16 #define _syscall_clobbers \
17 "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \
18 "$22", "$23", "$24", "$25", "$27", "$28" \
20 #define _syscall0(type, name) \
23 long _sc_ret, _sc_err; \
25 register long _sc_0 __asm__("$0"); \
26 register long _sc_19 __asm__("$19"); \
28 _sc_0 = __NR_##name; \
29 __asm__("callsys # %0 %1 %2" \
30 : "=r"(_sc_0), "=r"(_sc_19) \
32 : _syscall_clobbers); \
33 _sc_ret = _sc_0, _sc_err = _sc_19; \
35 _syscall_return(type); \
38 #define _syscall1(type,name,type1,arg1) \
39 type name(type1 arg1) \
41 long _sc_ret, _sc_err; \
43 register long _sc_0 __asm__("$0"); \
44 register long _sc_16 __asm__("$16"); \
45 register long _sc_19 __asm__("$19"); \
47 _sc_0 = __NR_##name; \
48 _sc_16 = (long) (arg1); \
49 __asm__("callsys # %0 %1 %2 %3" \
50 : "=r"(_sc_0), "=r"(_sc_19) \
51 : "0"(_sc_0), "r"(_sc_16) \
52 : _syscall_clobbers); \
53 _sc_ret = _sc_0, _sc_err = _sc_19; \
55 _syscall_return(type); \
58 #define _syscall2(type,name,type1,arg1,type2,arg2) \
59 type name(type1 arg1,type2 arg2) \
61 long _sc_ret, _sc_err; \
63 register long _sc_0 __asm__("$0"); \
64 register long _sc_16 __asm__("$16"); \
65 register long _sc_17 __asm__("$17"); \
66 register long _sc_19 __asm__("$19"); \
68 _sc_0 = __NR_##name; \
69 _sc_16 = (long) (arg1); \
70 _sc_17 = (long) (arg2); \
71 __asm__("callsys # %0 %1 %2 %3 %4" \
72 : "=r"(_sc_0), "=r"(_sc_19) \
73 : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17) \
74 : _syscall_clobbers); \
75 _sc_ret = _sc_0, _sc_err = _sc_19; \
77 _syscall_return(type); \
80 #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
81 type name(type1 arg1,type2 arg2,type3 arg3) \
83 long _sc_ret, _sc_err; \
85 register long _sc_0 __asm__("$0"); \
86 register long _sc_16 __asm__("$16"); \
87 register long _sc_17 __asm__("$17"); \
88 register long _sc_18 __asm__("$18"); \
89 register long _sc_19 __asm__("$19"); \
91 _sc_0 = __NR_##name; \
92 _sc_16 = (long) (arg1); \
93 _sc_17 = (long) (arg2); \
94 _sc_18 = (long) (arg3); \
95 __asm__("callsys # %0 %1 %2 %3 %4 %5" \
96 : "=r"(_sc_0), "=r"(_sc_19) \
97 : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \
99 : _syscall_clobbers); \
100 _sc_ret = _sc_0, _sc_err = _sc_19; \
102 _syscall_return(type); \
105 #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
106 type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
108 long _sc_ret, _sc_err; \
110 register long _sc_0 __asm__("$0"); \
111 register long _sc_16 __asm__("$16"); \
112 register long _sc_17 __asm__("$17"); \
113 register long _sc_18 __asm__("$18"); \
114 register long _sc_19 __asm__("$19"); \
116 _sc_0 = __NR_##name; \
117 _sc_16 = (long) (arg1); \
118 _sc_17 = (long) (arg2); \
119 _sc_18 = (long) (arg3); \
120 _sc_19 = (long) (arg4); \
121 __asm__("callsys # %0 %1 %2 %3 %4 %5 %6" \
122 : "=r"(_sc_0), "=r"(_sc_19) \
123 : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \
124 "r"(_sc_18), "1"(_sc_19) \
125 : _syscall_clobbers); \
126 _sc_ret = _sc_0, _sc_err = _sc_19; \
128 _syscall_return(type); \
131 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
133 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
135 long _sc_ret, _sc_err; \
137 register long _sc_0 __asm__("$0"); \
138 register long _sc_16 __asm__("$16"); \
139 register long _sc_17 __asm__("$17"); \
140 register long _sc_18 __asm__("$18"); \
141 register long _sc_19 __asm__("$19"); \
142 register long _sc_20 __asm__("$20"); \
144 _sc_0 = __NR_##name; \
145 _sc_16 = (long) (arg1); \
146 _sc_17 = (long) (arg2); \
147 _sc_18 = (long) (arg3); \
148 _sc_19 = (long) (arg4); \
149 _sc_20 = (long) (arg5); \
150 __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7" \
151 : "=r"(_sc_0), "=r"(_sc_19) \
152 : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \
153 "r"(_sc_18), "1"(_sc_19), "r"(_sc_20) \
154 : _syscall_clobbers); \
155 _sc_ret = _sc_0, _sc_err = _sc_19; \
157 _syscall_return(type); \
160 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
161 type5,arg5,type6,arg6) \
162 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6)\
164 long _sc_ret, _sc_err; \
166 register long _sc_0 __asm__("$0"); \
167 register long _sc_16 __asm__("$16"); \
168 register long _sc_17 __asm__("$17"); \
169 register long _sc_18 __asm__("$18"); \
170 register long _sc_19 __asm__("$19"); \
171 register long _sc_20 __asm__("$20"); \
172 register long _sc_21 __asm__("$21"); \
174 _sc_0 = __NR_##name; \
175 _sc_16 = (long) (arg1); \
176 _sc_17 = (long) (arg2); \
177 _sc_18 = (long) (arg3); \
178 _sc_19 = (long) (arg4); \
179 _sc_20 = (long) (arg5); \
180 _sc_21 = (long) (arg6); \
181 __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7 %8" \
182 : "=r"(_sc_0), "=r"(_sc_19) \
183 : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \
184 "r"(_sc_18), "1"(_sc_19), "r"(_sc_20), "r"(_sc_21) \
185 : _syscall_clobbers); \
186 _sc_ret = _sc_0, _sc_err = _sc_19; \
188 _syscall_return(type); \
191 #endif /* __ASSEMBLER__ */
192 #endif /* _BITS_SYSCALLS_H */