Annotation of Gnu-Mach/linux/src/include/asm-i386/unistd.h, revision 1.1.1.1

1.1       root        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_setup               0     /* used only by init, to get system going */
                      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_chown              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_phys               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
                     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_vm86              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_poll              168
                    173: #define __NR_getpmsg           188
                    174: #define __NR_putpmsg           189
                    175: 
                    176: /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
                    177: #define _syscall0(type,name) \
                    178: type name(void) \
                    179: { \
                    180: long __res; \
                    181: __asm__ volatile ("int $0x80" \
                    182:        : "=a" (__res) \
                    183:        : "0" (__NR_##name)); \
                    184: if (__res >= 0) \
                    185:        return (type) __res; \
                    186: errno = -__res; \
                    187: return -1; \
                    188: }
                    189: 
                    190: #define _syscall1(type,name,type1,arg1) \
                    191: type name(type1 arg1) \
                    192: { \
                    193: long __res; \
                    194: __asm__ volatile ("int $0x80" \
                    195:        : "=a" (__res) \
                    196:        : "0" (__NR_##name),"b" ((long)(arg1))); \
                    197: if (__res >= 0) \
                    198:        return (type) __res; \
                    199: errno = -__res; \
                    200: return -1; \
                    201: }
                    202: 
                    203: #define _syscall2(type,name,type1,arg1,type2,arg2) \
                    204: type name(type1 arg1,type2 arg2) \
                    205: { \
                    206: long __res; \
                    207: __asm__ volatile ("int $0x80" \
                    208:        : "=a" (__res) \
                    209:        : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
                    210: if (__res >= 0) \
                    211:        return (type) __res; \
                    212: errno = -__res; \
                    213: return -1; \
                    214: }
                    215: 
                    216: #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
                    217: type name(type1 arg1,type2 arg2,type3 arg3) \
                    218: { \
                    219: long __res; \
                    220: __asm__ volatile ("int $0x80" \
                    221:        : "=a" (__res) \
                    222:        : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
                    223:                  "d" ((long)(arg3))); \
                    224: if (__res>=0) \
                    225:        return (type) __res; \
                    226: errno=-__res; \
                    227: return -1; \
                    228: }
                    229: 
                    230: #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
                    231: type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
                    232: { \
                    233: long __res; \
                    234: __asm__ volatile ("int $0x80" \
                    235:        : "=a" (__res) \
                    236:        : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
                    237:          "d" ((long)(arg3)),"S" ((long)(arg4))); \
                    238: if (__res>=0) \
                    239:        return (type) __res; \
                    240: errno=-__res; \
                    241: return -1; \
                    242: } 
                    243: 
                    244: #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
                    245:          type5,arg5) \
                    246: type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
                    247: { \
                    248: long __res; \
                    249: __asm__ volatile ("int $0x80" \
                    250:        : "=a" (__res) \
                    251:        : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
                    252:          "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
                    253: if (__res>=0) \
                    254:        return (type) __res; \
                    255: errno=-__res; \
                    256: return -1; \
                    257: }
                    258: 
                    259: #ifdef __KERNEL_SYSCALLS__
                    260: 
                    261: /*
                    262:  * we need this inline - forking from kernel space will result
                    263:  * in NO COPY ON WRITE (!!!), until an execve is executed. This
                    264:  * is no problem, but for the stack. This is handled by not letting
                    265:  * main() use the stack at all after fork(). Thus, no function
                    266:  * calls - which means inline code for fork too, as otherwise we
                    267:  * would use the stack upon exit from 'fork()'.
                    268:  *
                    269:  * Actually only pause and fork are needed inline, so that there
                    270:  * won't be any messing with the stack from main(), but we define
                    271:  * some others too.
                    272:  */
                    273: #define __NR__exit __NR_exit
                    274: static inline _syscall0(int,idle)
                    275: static inline _syscall0(int,fork)
                    276: static inline _syscall2(int,clone,unsigned long,flags,char *,esp)
                    277: static inline _syscall0(int,pause)
                    278: static inline _syscall0(int,setup)
                    279: static inline _syscall0(int,sync)
                    280: static inline _syscall0(pid_t,setsid)
                    281: static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
                    282: static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
                    283: static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
                    284: static inline _syscall1(int,dup,int,fd)
                    285: static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
                    286: static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
                    287: static inline _syscall1(int,close,int,fd)
                    288: static inline _syscall1(int,_exit,int,exitcode)
                    289: static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
                    290: 
                    291: static inline pid_t wait(int * wait_stat)
                    292: {
                    293:        return waitpid(-1,wait_stat,0);
                    294: }
                    295: 
                    296: /*
                    297:  * This is the mechanism for creating a new kernel thread.
                    298:  *
                    299:  * NOTE! Only a kernel-only process(ie the swapper or direct descendants
                    300:  * who haven't done an "execve()") should use this: it will work within
                    301:  * a system call from a "real" process, but the process memory space will
                    302:  * not be free'd until both the parent and the child have exited.
                    303:  */
                    304: static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
                    305: {
                    306:        long retval;
                    307: 
                    308:        __asm__ __volatile__(
                    309:                "movl %%esp,%%esi\n\t"
                    310:                "int $0x80\n\t"         /* Linux/i386 system call */
                    311:                "cmpl %%esp,%%esi\n\t"  /* child or parent? */
                    312:                "je 1f\n\t"             /* parent - jump */
                    313:                "pushl %3\n\t"          /* push argument */
                    314:                "call *%4\n\t"          /* call fn */
                    315:                "movl %2,%0\n\t"        /* exit */
                    316:                "int $0x80\n"
                    317:                "1:\t"
                    318:                :"=a" (retval)
                    319:                :"0" (__NR_clone), "i" (__NR_exit),
                    320:                 "r" (arg), "r" (fn),
                    321:                 "b" (flags | CLONE_VM)
                    322:                :"si");
                    323:        return retval;
                    324: }
                    325: 
                    326: #endif
                    327: 
                    328: #endif /* _ASM_I386_UNISTD_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.