--- /dev/null
+<NEWTYPE CHMK FIX>
+
+<SETG CHMKS-OBLIST <MOBLIST CHMK>>
+
+<DEFINE XMSETG (A B)
+ <SET B <CHTYPE .B CHMK>>
+ <MSETG <SET A <OR <LOOKUP .A ,CHMKS-OBLIST>
+ <INSERT .A ,CHMKS-OBLIST>>> .B>
+ (.A .B)>
+
+<COND (<GASSIGNED? XMSETG>
+<SETG ALL-CHMKS [ <XMSETG "EXIT" 1>
+ <XMSETG "FORK" 2>
+ <XMSETG "READ" 3>
+ <XMSETG "WRITE" 4>
+ <XMSETG "OPEN" 5>
+ <XMSETG "CLOSE" 6>
+ ;<XMSETG "WAIT" 7>
+ <XMSETG "CREAT" 8>
+ <XMSETG "LINK" 9>
+ <XMSETG "UNLINK" 10>
+ <XMSETG "EXEC" 11>
+ <XMSETG "CHDIR" 12>
+ ;<XMSETG "TIME" 13>
+ <XMSETG "MKNOD" 14>
+ <XMSETG "CHMOD" 15>
+ <XMSETG "CHOWN" 16>
+ ;<XMSETG "BREAK" 17>
+ ;<XMSETG "STAT" 18>
+ <XMSETG "LSEEK" 19>
+ <XMSETG "GETPID" 20>
+ <XMSETG "MOUNT" 21>
+ <XMSETG "UMOUNT" 22>
+ ;<XMSETG "SETUID" 23>
+ <XMSETG "GETUID" 24>
+ ;<XMSETG "STIME" 25>
+ <XMSETG "PTRACE" 26>
+ ;<XMSETG "ALARM" 27>
+ ;<XMSETG "FSTAT" 28>
+ ;<XMSETG "PAUSE" 29>
+ ;<XMSETG "UTIME" 30>
+ ;<XMSETG "STTY" 31>
+ ;<XMSETG "GTTY" 32>
+ <XMSETG "ACCESS" 33>
+ ;<XMSETG "NICE" 34>
+ ;<XMSETG "FTIME" 35>
+ <XMSETG "SYNC" 36>
+ <XMSETG "KILL" 37>
+ <XMSETG "STAT" 38>
+ ;<XMSETG "SETPGRP" 39>
+ <XMSETG "LSTAT" 40>
+ <XMSETG "DUP" 41>
+ <XMSETG "PIPE" 42>
+ ;<XMSETG "TIMES" 43>
+ <XMSETG "PROFIL" 44>
+ ;<XMSETG "SETGID" 46>
+ <XMSETG "GETGID" 47>
+ ;<XMSETG "SIGNAL" 48>
+ <XMSETG "ACCT" 51>
+ ;<XMSETG "PHYS" 52>
+ ;<XMSETG "LOCK" 53>
+ <XMSETG "IOCTL" 54>
+ <XMSETG "REBOOT" 55>
+ ;<XMSETG "MPX" 56>
+ <XMSETG "SYMLINK" 57>
+ <XMSETG "READLINK" 58>
+ <XMSETG "EXECVE" 59>
+ <XMSETG "UMASK" 60>
+ <XMSETG "CHROOT" 61>
+ <XMSETG "FSTAT" 62>
+ <XMSETG "GETPAGESIZE" 64>
+ <XMSETG "MREMAP" 65>
+ <XMSETG "VFORK" 66>
+ ;<XMSETG "VREAD" 67>
+ ;<XMSETG "VWRITE" 68>
+ <XMSETG "SBRK" 69>
+ <XMSETG "SSTK" 70>
+ <XMSETG "MMAP" 71>
+ <XMSETG "VADVISE" 72>
+ <XMSETG "VHANGUP" 76>
+ ;<XMSETG "VLIMIT" 77>
+ <XMSETG "MINCORE" 78>
+ <XMSETG "GETGROUPS" 79>
+ <XMSETG "SETGROUPS" 80>
+ <XMSETG "GETPGRP" 81>
+ <XMSETG "SETPGRP" 82>
+ <XMSETG "SETITIMER" 83>
+ <XMSETG "WAIT" 84>
+ <XMSETG "VSWAPON" 85>
+ <XMSETG "GETITIMER" 86>
+ <XMSETG "GETHOSTNAME" 87>
+ <XMSETG "SETHOSTNAME" 88>
+ <XMSETG "GETDTABLESIZE" 89>
+ <XMSETG "DUP2" 90>
+ <XMSETG "GETDOPT" 91>
+ <XMSETG "FCNTL" 92>
+ <XMSETG "SELECT" 93>
+ <XMSETG "SETDOPT" 94>
+ <XMSETG "FSYNC" 95>
+ <XMSETG "SETPRIORITY" 96>
+ <XMSETG "SOCKET" 97>
+ <XMSETG "CONNECT" 98>
+ <XMSETG "ACCEPT" 99>
+ <XMSETG "GETPRIORITY" 100>
+ <XMSETG "SEND" 101>
+ <XMSETG "RECV" 102>
+ <XMSETG "BIND" 104>
+ <XMSETG "SETSOCKOPT" 105>
+ <XMSETG "LISTEN" 106>
+ <XMSETG "VTIMES" 107>
+ <XMSETG "SIGVEC" 108>
+ <XMSETG "SIGBLOCK" 109>
+ <XMSETG "SIGSETMASK" 110>
+ <XMSETG "SIGPAUSE" 111>
+ <XMSETG "SIGSTACK" 112>
+ <XMSETG "RECVMSG" 113>
+ <XMSETG "SENDMSG" 114>
+ <XMSETG "GETTIMEOFDAY" 116>
+ <XMSETG "GETRUSAGE" 117>
+ <XMSETG "GETSOCKOPT" 118>
+ <XMSETG "READV" 120>
+ <XMSETG "WRITEV" 121>
+ <XMSETG "SETTIMEOFDAY" 122>
+ <XMSETG "FCHOWN" 123>
+ <XMSETG "FCHMOD" 124>
+ <XMSETG "RECVFROM" 125>
+ <XMSETG "SETREUID" 126>
+ <XMSETG "SETREGID" 127>
+ <XMSETG "RENAME" 128>
+ <XMSETG "TRUNCATE" 129>
+ <XMSETG "FTRUNCATE" 130>
+ <XMSETG "FLOCK" 131>
+ <XMSETG "SENDTO" 133>
+ <XMSETG "SHUTDOWN" 134>
+ <XMSETG "SOCKETPAIR" 135>
+ <XMSETG "MKDIR" 136>
+ <XMSETG "RMDIR" 137>
+ <XMSETG "UTIMES" 138>
+ <XMSETG "REVOKE" 140>
+ <XMSETG "GETPEERNAME" 141>
+ <XMSETG "GETHOSTID" 142>
+ <XMSETG "SETHOSTID" 143>
+ <XMSETG "GETRLIMIT" 144>
+ <XMSETG "SETRLIMIT" 145>
+ <XMSETG "KILLPG" 146>
+ <XMSETG "SETQUOTA" 148>
+ <XMSETG "QUOTA" 149>
+ <XMSETG "GETSOCKNAME" 150>]>)>
+
+
+<DEFINE SYSCALL-GEN (DISPCODE NUMARG "OPT" (RES <>) HINT TYP "AUX" ATM NUM)
+ <COND (<OR <AND <TYPE? .DISPCODE ATOM>
+ <TYPE? <SET ATM <LOOKUP <SPNAME .DISPCODE>
+ ,CHMKS-OBLIST>>
+ ATOM>
+ <GASSIGNED? .ATM>
+ <TYPE? <SET NUM ,.ATM> CHMK>>
+ <AND <TYPE? <SET NUM .DISPCODE> FIX CHMK>
+ <SET ATM <MAPF <>
+ <FUNCTION (A)
+ #DECL ((A) <LIST ATOM FIX>)
+ <COND (<==? <2 .A> .NUM>
+ <MAPLEAVE <1 .A>>)>>
+ ,ALL-CHMKS>>>
+ <TYPE? .NUM VARTBL>>
+ <COND (<==? .NUM ,VFORK!-CHMK>
+ <DO-VFORK .RES>)
+ (<CALL-RTE ,ISYSCALL!-MIMOP CALL .RES <> .NUMARG .NUM>)>)
+ (ELSE
+ <ERROR BAD-SYSCALL!-ERRORS>)>
+ NORMAL>
+
+<DEFINE DO-VFORK (RES "AUX" (LABEL <MAKE-LABEL>) LV)
+ #DECL ((RES) <OR VARTBL FALSE>)
+ <FLUSH-ACS>
+ <EMIT ,INST-CHMK <MA-IMM ,VFORK!-CHMK>>
+ <COND (.RES
+ <EMIT-MOVE <MA-REG ,AC-0> <MA-REG ,AC-1> LONG>
+ <EMIT-MOVE <TYPE-CODE FIX> <MA-REG ,AC-0> LONG>
+ <SET LV <LINK-VAR-TO-AC .RES ,AC-0 TYPE-VALUE-PAIR>>
+ <GEN-BRANCH ,INST-BCC .LABEL CONDITIONAL-BRANCH>
+ <CONS-GEN .RES () .RES FALSE>
+ <EMIT-MOVE <TYPE-CODE FALSE> <MA-REG ,AC-0> LONG>
+ <LINKVAR-DECL <LINK-VAR-TO-AC .RES ,AC-0 TYPE-VALUE-PAIR> <>>
+ <VARTBL-RDECL .RES <>>
+ <VARTBL-TDECL .RES <>>
+ <EMIT-LABEL .LABEL <>>)
+ (T
+ <GEN-BRANCH ,INST-BCC .LABEL <>>
+ <CALL-RTE ,ICOMPERR!-MIMOP CALL <> <>>
+ <EMIT-LABEL .LABEL <>>)>>
+
+<DEFINE PIPE-GEN (UVEC "OPTIONAL" (RES <>))
+ <CALL-RTE ,IPIPE!-MIMOP CALL .RES <> .UVEC>>