Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

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