Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / vaxc / chmks.mud
diff --git a/mim/development/mim/vaxc/chmks.mud b/mim/development/mim/vaxc/chmks.mud
new file mode 100644 (file)
index 0000000..d7008e8
--- /dev/null
@@ -0,0 +1,194 @@
+<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>>