/* * Copyright (c) 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * @(#)init_sysent.c 1.16 (2.11BSD) 2000/2/20 */ /* * System call switch table. */ #include "param.h" #include "systm.h" int nosys(); /* 1.1 processes and protection */ int getpid(); int getppid(), fork(),rexit(),execv(),execve(); int wait4(), getuid(),getgid(),getgroups(),setgroups(); int geteuid(), getegid(), getlogin(); int getpgrp(),setpgrp(), setlogin(); int setgid(), setegid(), setuid(), seteuid(); int ucall(); /* 2BSD calls */ /* 1.2 memory management */ int sbrk(); int lock(),phys(),fetchi(),nostk(),fperr(); /* 2BSD calls */ /* 1.3 signals */ int sigstack(),sigreturn(); int sigaction(), sigprocmask(), sigpending(), sigaltstack(), sigsuspend(); int sigwait(), kill(), killpg(); /* 1.4 timing and statistics */ int gettimeofday(),settimeofday(); int getitimer(),setitimer(); int adjtime(); /* 1.5 descriptors */ int getdtablesize(),dup(),dup2(),close(); int pselect(),select(),fcntl(),flock(); /* 1.6 resource controls */ int getpriority(),setpriority(),getrusage(),getrlimit(),setrlimit(); int setquota(),qquota(); /* 1.7 system operation support */ int umount(),smount(); int sync(),reboot(),__sysctl(); /* 2.1 generic operations */ int read(),write(),readv(),writev(),ioctl(); /* 2.2 file system */ int chdir(), fchdir(), chroot(); int mkdir(),rmdir(), chflags(), fchflags(); int open(),mknod(),unlink(),stat(),fstat(),lstat(); int chown(),fchown(),chmod(),fchmod(),utimes(); int link(),symlink(),readlink(),rename(); int lseek(),truncate(),ftruncate(),saccess(),fsync(); int statfs(), fstatfs(), getfsstat(); /* 2.3 communications */ int socket(),bind(),listen(),accept(),connect(); int socketpair(),sendto(),send(),recvfrom(),recv(); int sendmsg(),recvmsg(),shutdown(),setsockopt(),getsockopt(); int getsockname(),getpeername(),pipe(); int umask(); /* XXX */ /* 2.4 processes */ int ptrace(); /* 2.5 terminals */ #ifdef INET #define ifnet(narg, name) narg, name #define errnet(narg, name) narg, name #else int nonet(); #define ifnet(narg, name) 0, nosys #define errnet(narg, name) 0, nonet #endif /* BEGIN JUNK */ int profil(); /* 'cuz sys calls are interruptible */ int vhangup(); /* should just do in exit() */ int vfork(); /* awaiting fork w/ copy on write */ /* END JUNK */ /* * Reserved/unimplemented system calls in the range 0-150 inclusive * are reserved for use in future Berkeley releases. * Additional system calls implemented in vendor and other * redistributions should be placed in the reserved range at the end * of the current calls. */ /* * This table is the switch used to transfer to the appropriate routine for * processing a system call. Each row contains the number of words of * arguments expected in registers, how many on the stack, and a pointer to * the routine. * * The maximum number of direct system calls is 255 since system call numbers * are encoded in the lower byte of the trap instruction -- see trap.c. */ struct sysent sysent[] = { 1, nosys, /* 0 = indir or out-of-range */ 1, rexit, /* 1 = exit */ 0, fork, /* 2 = fork */ 3, read, /* 3 = read */ 3, write, /* 4 = write */ 3, open, /* 5 = open */ 1, close, /* 6 = close */ 4, wait4, /* 7 = wait4 */ 0, nosys, /* 8 = (old creat) */ 2, link, /* 9 = link */ 1, unlink, /* 10 = unlink */ 2, execv, /* 11 = execv */ 1, chdir, /* 12 = chdir */ 1, fchdir, /* 13 = fchdir */ 3, mknod, /* 14 = mknod */ 2, chmod, /* 15 = chmod */ 3, chown, /* 16 = chown; now 3 args */ 2, chflags, /* 17 = chflags */ 2, fchflags, /* 18 = fchflags */ 4, lseek, /* 19 = lseek */ 0, getpid, /* 20 = getpid */ 3, smount, /* 21 = mount */ 1, umount, /* 22 = umount */ 6, __sysctl, /* 23 = __sysctl */ 0, getuid, /* 24 = getuid */ 0, geteuid, /* 25 = geteuid */ 4, ptrace, /* 26 = ptrace */ 0, getppid, /* 27 = getppid */ 2, statfs, /* 28 = statfs */ 2, fstatfs, /* 29 = fstatfs */ 3, getfsstat, /* 30 = getfsstat */ 4, sigaction, /* 31 = sigaction */ 3, sigprocmask, /* 32 = sigprocmask */ 2, saccess, /* 33 = access */ 1, sigpending, /* 34 = sigpending */ 2, sigaltstack, /* 35 = sigaltstack */ 0, sync, /* 36 = sync */ 2, kill, /* 37 = kill */ 2, stat, /* 38 = stat */ 2, getlogin, /* 39 = getlogin */ 2, lstat, /* 40 = lstat */ 1, dup, /* 41 = dup */ 0, pipe, /* 42 = pipe */ 1, setlogin, /* 43 = setlogin */ 4, profil, /* 44 = profil */ 1, setuid, /* 45 = setuid */ 1, seteuid, /* 46 = seteuid */ 0, getgid, /* 47 = getgid */ 0, getegid, /* 48 = getegid */ 1, setgid, /* 49 = setgid */ 1, setegid, /* 50 = setegid */ 0, nosys, /* 51 = unused */ 3, phys, /* 52 = (2.9) set phys addr */ 1, lock, /* 53 = (2.9) lock in core */ 4, ioctl, /* 54 = ioctl */ 1, reboot, /* 55 = reboot */ 2, sigwait, /* 56 = sigwait */ 2, symlink, /* 57 = symlink */ 3, readlink, /* 58 = readlink */ 3, execve, /* 59 = execve */ 1, umask, /* 60 = umask */ 1, chroot, /* 61 = chroot */ 2, fstat, /* 62 = fstat */ 0, nosys, /* 63 = reserved */ 0, nosys, /* 64 = (old getpagesize) */ 6, pselect, /* 65 = pselect */ 0, vfork, /* 66 = vfork */ 0, nosys, /* 67 = unused */ 0, nosys, /* 68 = unused */ 1, sbrk, /* 69 = sbrk */ 0, nosys, /* 70 = unused */ 0, nosys, /* 71 = unused */ 0, nosys, /* 72 = unused */ 0, nosys, /* 73 = unused */ 0, nosys, /* 74 = unused */ 0, nosys, /* 75 = unused */ 0, vhangup, /* 76 = vhangup */ 0, nosys, /* 77 = unused */ 0, nosys, /* 78 = unused */ 2, getgroups, /* 79 = getgroups */ 2, setgroups, /* 80 = setgroups */ 1, getpgrp, /* 81 = getpgrp */ 2, setpgrp, /* 82 = setpgrp */ 3, setitimer, /* 83 = setitimer */ 0, nosys, /* 84 = (old wait,wait3) */ 0, nosys, /* 85 = unused */ 2, getitimer, /* 86 = getitimer */ 0, nosys, /* 87 = (old gethostname) */ 0, nosys, /* 88 = (old sethostname) */ 0, getdtablesize, /* 89 = getdtablesize */ 2, dup2, /* 90 = dup2 */ 0, nosys, /* 91 = unused */ 3, fcntl, /* 92 = fcntl */ 5, select, /* 93 = select */ 0, nosys, /* 94 = unused */ 1, fsync, /* 95 = fsync */ 3, setpriority, /* 96 = setpriority */ errnet(3, socket), /* 97 = socket */ ifnet(3, connect), /* 98 = connect */ ifnet(3, accept), /* 99 = accept */ 2, getpriority, /* 100 = getpriority */ ifnet(4, send), /* 101 = send */ ifnet(4, recv), /* 102 = recv */ 1, sigreturn, /* 103 = sigreturn */ ifnet(3, bind), /* 104 = bind */ ifnet(5, setsockopt), /* 105 = setsockopt */ ifnet(2, listen), /* 106 = listen */ 1, sigsuspend, /* 107 = sigsuspend */ 0, nosys, /* 108 = (old sigvec) */ 0, nosys, /* 109 = (old sigblock) */ 0, nosys, /* 110 = (old sigsetmask) */ 0, nosys, /* 111 = (old sigpause) */ 2, sigstack, /* 112 = sigstack COMPAT-43 */ ifnet(3, recvmsg), /* 113 = recvmsg */ ifnet(3, sendmsg), /* 114 = sendmsg */ 0, nosys, /* 115 = unused */ 2, gettimeofday, /* 116 = gettimeofday */ 2, getrusage, /* 117 = getrusage */ ifnet(5, getsockopt), /* 118 = getsockopt */ 0, nosys, /* 119 = unused */ 3, readv, /* 120 = readv */ 3, writev, /* 121 = writev */ 2, settimeofday, /* 122 = settimeofday */ 3, fchown, /* 123 = fchown */ 2, fchmod, /* 124 = fchmod */ ifnet(6, recvfrom), /* 125 = recvfrom */ 0, nosys, /* 126 = (old setreuid) */ 0, nosys, /* 127 = (old setregid) */ 2, rename, /* 128 = rename */ 3, truncate, /* 129 = truncate */ 3, ftruncate, /* 130 = ftruncate */ 2, flock, /* 131 = flock */ 0, nosys, /* 132 = nosys */ ifnet(6, sendto), /* 133 = sendto */ ifnet(2, shutdown), /* 134 = shutdown */ errnet(4, socketpair), /* 135 = socketpair */ 2, mkdir, /* 136 = mkdir */ 1, rmdir, /* 137 = rmdir */ 2, utimes, /* 138 = utimes */ 0, nosys, /* 139 = unused */ 2, adjtime, /* 140 = adjtime */ ifnet(3, getpeername), /* 141 = getpeername */ 0, nosys, /* 142 = (old gethostid) */ 0, nosys, /* 143 = (old sethostid) */ 2, getrlimit, /* 144 = getrlimit */ 2, setrlimit, /* 145 = setrlimit */ 2, killpg, /* 146 = killpg */ 0, nosys, /* 147 = nosys */ 2, setquota, /* 148 = quota */ 4, qquota, /* 149 = qquota */ ifnet(3, getsockname), /* 150 = getsockname */ /* * Syscalls 151-180 inclusive are reserved for vendor-specific * system calls. (This includes various calls added for compatibity * with other Unix variants.) */ /* * 2BSD special calls */ 0, nosys, /* 151 = unused */ 0, nostk, /* 152 = nostk */ 1, fetchi, /* 153 = fetchi */ 4, ucall, /* 154 = ucall */ 0, fperr, /* 155 = fperr */ }; int nsysent = sizeof (sysent) / sizeof (sysent[0]);