Annotation of Gnu-Mach/linux/src/include/asm-i386/unistd.h, revision 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.