#ifndef
_ASM_I386_UNISTD_H_
2
#define
_ASM_I386_UNISTD_H_
3
4
/*
5
* This file contains the system call numbers.
6
*/
7
8
#define __NR_exit
1
9
#define __NR_fork
2
10
#define __NR_read
3
11
#define __NR_write
4
12
#define __NR_open
5
13
#define __NR_close
6
14
#define __NR_waitpid
7
15
#define __NR_creat
8
16
#define __NR_link
9
17
#define __NR_unlink
10
18
#define __NR_execve
11
19
#define __NR_chdir
12
20
#define __NR_time
13
21
#define __NR_mknod
14
22
#define __NR_chmod
15
23
#define __NR_lchown
16
24
#define __NR_break
17
25
#define __NR_oldstat
18
26
#define __NR_lseek
19
27
#define __NR_getpid
20
28
#define __NR_mount
21
29
#define __NR_umount
22
30
#define __NR_setuid
23
31
#define __NR_getuid
24
32
#define __NR_stime
25
33
#define __NR_ptrace
26
34
#define __NR_alarm
27
35
#define __NR_oldfstat
28
36
#define __NR_pause
29
37
#define __NR_utime
30
38
#define __NR_stty
31
39
#define __NR_gtty
32
40
#define __NR_access
33
41
#define __NR_nice
34
42
#define __NR_ftime
35
43
#define __NR_sync
36
44
#define __NR_kill
37
45
#define __NR_rename
38
46
#define __NR_mkdir
39
47
#define __NR_rmdir
40
48
#define __NR_dup
41
49
#define __NR_pipe
42
50
#define __NR_times
43
51
#define __NR_prof
44
52
#define __NR_brk
45
53
#define __NR_setgid
46
54
#define __NR_getgid
47
55
#define __NR_signal
48
56
#define __NR_geteuid
49
57
#define __NR_getegid
50
58
#define __NR_acct
51
59
#define __NR_umount2
52
60
#define __NR_lock
53
61
#define __NR_ioctl
54
62
#define __NR_fcntl
55
63
#define __NR_mpx
56
64
#define __NR_setpgid
57
65
#define __NR_ulimit
58
66
#define __NR_oldolduname
59
67
#define __NR_umask
60
68
#define __NR_chroot
61
69
#define __NR_ustat
62
70
#define __NR_dup2
63
71
#define __NR_getppid
64
72
#define __NR_getpgrp
65
73
#define __NR_setsid
66
74
#define __NR_sigaction
67
75
#define __NR_sgetmask
68
76
#define __NR_ssetmask
69
77
#define __NR_setreuid
70
78
#define __NR_setregid
71
79
#define __NR_sigsuspend
72
80
#define __NR_sigpending
73
81
#define __NR_sethostname
74
82
#define __NR_setrlimit
75
83
#define __NR_getrlimit
76 /* Back compatible 2Gig limited rlimit */
84
#define __NR_getrusage
77
85
#define __NR_gettimeofday
78
86
#define __NR_settimeofday
79
87
#define __NR_getgroups
80
88
#define __NR_setgroups
81
89
#define __NR_select
82
90
#define __NR_symlink
83
91
#define __NR_oldlstat
84
92
#define __NR_readlink
85
93
#define __NR_uselib
86
94
#define __NR_swapon
87
95
#define __NR_reboot
88
96
#define __NR_readdir
89
97
#define __NR_mmap
90
98
#define __NR_munmap
91
99
#define __NR_truncate
92
100 #define __NR_ftruncate
93
101 #define __NR_fchmod
94
102 #define __NR_fchown
95
103 #define __NR_getpriority
96
104 #define __NR_setpriority
97
105 #define __NR_profil
98
106 #define __NR_statfs
99
107 #define __NR_fstatfs
100
108 #define __NR_ioperm
101
109 #define __NR_socketcall
102
110 #define __NR_syslog
103
111 #define __NR_setitimer
104
112 #define __NR_getitimer
105
113 #define __NR_stat
106
114 #define __NR_lstat
107
115 #define __NR_fstat
108
116 #define __NR_olduname
109
117 #define __NR_iopl
110
118 #define __NR_vhangup
111
119 #define __NR_idle
112
120 #define __NR_vm86old
113
121 #define __NR_wait4
114
122 #define __NR_swapoff
115
123 #define __NR_sysinfo
116
124 #define __NR_ipc
117
125 #define __NR_fsync
118
126 #define __NR_sigreturn
119
127 #define __NR_clone
120
128 #define __NR_setdomainname
121
129 #define __NR_uname
122
130 #define __NR_modify_ldt
123
131 #define __NR_adjtimex
124
132 #define __NR_mprotect
125
133 #define __NR_sigprocmask
126
134 #define __NR_create_module
127
135 #define __NR_init_module
128
136 #define __NR_delete_module
129
137 #define __NR_get_kernel_syms
130
138 #define __NR_quotactl
131
139 #define __NR_getpgid
132
140 #define __NR_fchdir
133
141 #define __NR_bdflush
134
142 #define __NR_sysfs
135
143 #define __NR_personality
136
144 #define __NR_afs_syscall
137 /* Syscall for Andrew File System */
145 #define __NR_setfsuid
138
146 #define __NR_setfsgid
139
147 #define __NR__llseek
140
148 #define __NR_getdents
141
149 #define __NR__newselect
142
150 #define __NR_flock
143
151 #define __NR_msync
144
152 #define __NR_readv
145
153 #define __NR_writev
146
154 #define __NR_getsid
147
155 #define __NR_fdatasync
148
156 #define __NR__sysctl
149
157 #define __NR_mlock
150
158 #define __NR_munlock
151
159 #define __NR_mlockall
152
160 #define __NR_munlockall
153
161 #define __NR_sched_setparam
154
162 #define __NR_sched_getparam
155
163 #define __NR_sched_setscheduler
156
164 #define __NR_sched_getscheduler
157
165 #define __NR_sched_yield
158
166 #define
__NR_sched_get_priority_max
159
167 #define
__NR_sched_get_priority_min
160
168 #define
__NR_sched_rr_get_interval 161
169 #define __NR_nanosleep
162
170 #define __NR_mremap
163
171 #define __NR_setresuid
164
172 #define __NR_getresuid
165
173 #define __NR_vm86
166
174 #define __NR_query_module
167
175 #define __NR_poll
168
176 #define __NR_nfsservctl
169
177 #define __NR_setresgid
170
178 #define __NR_getresgid
171
179 #define __NR_prctl
172
180 #define __NR_rt_sigreturn
173
181 #define __NR_rt_sigaction
174
182 #define __NR_rt_sigprocmask
175
183 #define __NR_rt_sigpending
176
184 #define __NR_rt_sigtimedwait
177
185 #define __NR_rt_sigqueueinfo
178
186 #define __NR_rt_sigsuspend
179
187 #define __NR_pread
180
188 #define __NR_pwrite
181
189 #define __NR_chown
182
190 #define __NR_getcwd
183
191 #define __NR_capget
184
192 #define __NR_capset
185
193 #define __NR_sigaltstack
186
194 #define __NR_sendfile
187
195 #define __NR_getpmsg
188 /* some people actually want streams */
196 #define __NR_putpmsg
189 /* some people actually want streams */
197 #define __NR_vfork
190
198 #define __NR_ugetrlimit
191 /* SuS compliant getrlimit */
199 #define __NR_mmap2
192
200 #define
__NR_truncate64 193
201 #define
__NR_ftruncate64 194
202 #define __NR_stat64
195
203 #define __NR_lstat64
196
204 #define __NR_fstat64
197
205 #define
__NR_lchown32
198
206 #define
__NR_getuid32
199
207 #define
__NR_getgid32
200
208 #define
__NR_geteuid32 201
209 #define
__NR_getegid32 202
210 #define
__NR_setreuid32 203
211 #define
__NR_setregid32 204
212 #define
__NR_getgroups32 205
213 #define
__NR_setgroups32 206
214 #define
__NR_fchown32
207
215 #define
__NR_setresuid32 208
216 #define
__NR_getresuid32 209
217 #define
__NR_setresgid32 210
218 #define
__NR_getresgid32 211
219 #define __NR_chown32
212
220 #define
__NR_setuid32
213
221 #define
__NR_setgid32
214
222 #define
__NR_setfsuid32 215
223 #define
__NR_setfsgid32 216
224 #define
__NR_pivot_root 217
225 #define __NR_mincore
218
226 #define __NR_madvise
219
227 #define
__NR_madvise1
219 /* delete when C lib stub is removed */
228 #define
__NR_getdents64 220
229 #define __NR_fcntl64
221
230 #define
__NR_security
223 /* syscall for security modules */
231 #define __NR_gettid
224
232 #define
__NR_readahead 225
233 #define
__NR_setxattr
226
234 #define
__NR_lsetxattr 227
235 #define
__NR_fsetxattr 228
236 #define
__NR_getxattr
229
237 #define
__NR_lgetxattr 230
238 #define
__NR_fgetxattr 231
239 #define
__NR_listxattr 232
240 #define
__NR_llistxattr 233
241 #define
__NR_flistxattr 234
242 #define
__NR_removexattr 235
243 #define
__NR_lremovexattr 236
244 #define
__NR_fremovexattr 237
245 #define __NR_tkill
238
246 #define
__NR_sendfile64 239
247 #define __NR_futex
240
248 #define
__NR_sched_setaffinity 241
249 #define
__NR_sched_getaffinity 242
250 #define
__NR_set_thread_area 243
251 #define
__NR_get_thread_area 244
252 #define
__NR_io_setup
245
253 #define
__NR_io_destroy 246
254 #define
__NR_io_getevents 247
255 #define
__NR_io_submit 248
256 #define
__NR_io_cancel 249
257 #define
__NR_alloc_hugepages 250
258 #define
__NR_free_hugepages 251
259 #define
__NR_exit_group 252
260
261 /* user-visible error numbers are in the range -1 - -124: see
<asm-i386/errno.h> */
262
263 #define
__syscall_return(type,
res) \
264 do { \
265 if ((unsigned long)(res)
>= (unsigned long)(-125)) { \
266
errno = -(res);
\
267
res = -1; \
268 } \
269 return (type)
(res); \
270 } while (0)
271
272 /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar.
*/
273 #define _syscall0(type,name)
\
274 type
name(void) \
275 { \
276 long __res; \
277 __asm__ volatile ("int $0x80" \
278 : "=a" (__res)
\
279 : ""
(__NR_##name)); \
280 __syscall_return(type,__res);
\
281 }
282
283 #define _syscall1(type,name,type1,arg1)
\
284 type
name(type1
arg1) \
285 { \
286 long __res; \
287 __asm__ volatile ("int $0x80" \
288 : "=a" (__res)
\
289 : ""
(__NR_##name),"b" ((long)(arg1)));
\
290 __syscall_return(type,__res);
\
291 }
292
293 #define _syscall2(type,name,type1,arg1,type2,arg2)
\
294 type
name(type1
arg1,type2
arg2) \
295 { \
296 long __res; \
297 __asm__ volatile ("int $0x80" \
298 : "=a" (__res)
\
299 : ""
(__NR_##name),"b" ((long)(arg1)),"c"
((long)(arg2))); \
300 __syscall_return(type,__res);
\
301 }
302
303 #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)
\
304 type
name(type1
arg1,type2
arg2,type3
arg3) \
305 { \
306 long __res; \
307 __asm__ volatile ("int $0x80" \
308 : "=a" (__res)
\
309 : ""
(__NR_##name),"b" ((long)(arg1)),"c"
((long)(arg2)), \
310
"d" ((long)(arg3))); \
311 __syscall_return(type,__res);
\
312 }
313
314 #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)
\
315 type
name (type1
arg1, type2
arg2, type3
arg3, type4
arg4) \
316 { \
317 long __res; \
318 __asm__ volatile ("int $0x80" \
319 : "=a" (__res)
\
320 : ""
(__NR_##name),"b" ((long)(arg1)),"c"
((long)(arg2)), \
321 "d"
((long)(arg3)),"S"
((long)(arg4))); \
322 __syscall_return(type,__res);
\
323 }
324
325 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,
\
326 type5,arg5)
\
327 type
name (type1
arg1,type2
arg2,type3
arg3,type4
arg4,type5 arg5) \
328 { \
329 long __res; \
330 __asm__ volatile ("int $0x80" \
331 : "=a" (__res)
\
332 : ""
(__NR_##name),"b" ((long)(arg1)),"c"
((long)(arg2)), \
333 "d"
((long)(arg3)),"S"
((long)(arg4)),"D"
((long)(arg5))); \
334 __syscall_return(type,__res);
\
335 }
336
337 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,
\
338
type5,arg5,type6,arg6) \
339 type
name (type1
arg1,type2
arg2,type3
arg3,type4
arg4,type5 arg5,type6 arg6) \
340 { \
341 long __res; \
342 __asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ;
int $0x80 ; pop %%ebp" \
343 : "=a" (__res)
\
344 : "i"
(__NR_##name),"b" ((long)(arg1)),"c"
((long)(arg2)), \
345 "d"
((long)(arg3)),"S"
((long)(arg4)),"D"
((long)(arg5)), \
346 ""
((long)(arg6))); \
347 __syscall_return(type,__res);
\
348 }
349
350 #ifdef
__KERNEL_SYSCALLS__
351
352 /*
353 * we need this inline - forking from kernel space will
result
354 * in NO COPY ON WRITE (!!!), until an execve is executed.
This
355 * is no problem, but for the stack. This is handled by not
letting
356 * main() use the stack at all after fork(). Thus, no
function
357 * calls - which means inline code for fork too, as otherwise
we
358 * would use the stack upon exit from 'fork()'.
359 *
360 * Actually only pause and fork are needed inline, so that
there
361 * won't be any messing with the stack from main(), but we
define
362 * some others too.
363 */
364 #define __NR__exit
__NR_exit
365 static inline _syscall0(int,pause)
366 static inline _syscall0(int,sync)
367 static inline _syscall0(pid_t,setsid)
368 static inline _syscall3(int,write,int,fd,const
char *,buf,off_t,count)
369 static inline _syscall3(int,read,int,fd,char
*,buf,off_t,count)
370 static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
371 static inline _syscall1(int,dup,int,fd)
372 static inline _syscall3(int,execve,const
char *,file,char **,argv,char
**,envp)
373 static inline _syscall3(int,open,const
char *,file,int,flag,int,mode)
374 static inline _syscall1(int,close,int,fd)
375 static inline _syscall1(int,_exit,int,exitcode)
376 static inline _syscall3(pid_t,waitpid,pid_t,pid,int
*,wait_stat,int,options)
377 static inline _syscall1(int,delete_module,const
char *,name)
378
379 static inline pid_t
wait(int * wait_stat)
380 {
381 return
waitpid(-1,wait_stat,0);
382 }
383
384 #endif
385
386 #endif /* _ASM_I386_UNISTD_H_ */
387