|
|
1.1 ! root 1: .\" ! 2: .\" Readme 4.1 82/05/12 ! 3: .\" ! 4: .sp ! 5: .ce 100 ! 6: A Package to Support VAX Compatability Mode on UNIX-32V ! 7: .sp ! 8: Arthur W. Wetzel ! 9: .br ! 10: 735 LIS Bldg ! 11: .br ! 12: Interdisciplinary Department of Information Science ! 13: .br ! 14: University of Pittsburgh ! 15: .br ! 16: Pittsburgh, Pa. 15260 ! 17: (412)-624-5203 ! 18: .ce 0 ! 19: .sp 2 ! 20: This is a brief description of a ! 21: package to support the execution of PDP-11 programs on ! 22: VAX UNIX-32V ! 23: or Berkeley VMUNIX ! 24: in compatability mode. ! 25: The major functions are to ! 26: .in +5 ! 27: .sp ! 28: .ti -5 ! 29: 1) allocate a block ! 30: of memory as the PDP-11 memory space (this must start at location 0), ! 31: .ti -5 ! 32: 2) read compatability ! 33: mode program images into memory and lay them out properly (with arguments etc), ! 34: .ti -5 ! 35: 3) actually handle the change to and from compatability mode, ! 36: .ti -5 ! 37: 4) simulate system calls for what ever operating system is being simulated ! 38: and ! 39: .ti -5 ! 40: 5) simulate floating point (FPU and FIS) instructions. ! 41: .sp ! 42: .in -5 ! 43: Unfortunately programs requiring separated I/D space can not be run. ! 44: Loading of the package is rather slow since the entire process is about ! 45: 80K bytes ! 46: (64K is the PDP-11 space). ! 47: Once execution begins however, the speed is similar to a PDP-11/70. ! 48: There is considerable overhead for each exception condition ! 49: so that programs with a lot of system calls or especially with ! 50: floating point will be greatly slowed down. ! 51: Note that the text segment must be writable since the PDP-11 ! 52: memory space is there. ! 53: .sp ! 54: Three quick changes to UNIX-32V and Berkeley VMUNIX ! 55: were made in the course of constructing this package. ! 56: .in 5 ! 57: .sp ! 58: .ti -5 ! 59: First, it is necessary to patch a bug in the original mchdep.c. ! 60: The bug in the sendsig routine is that the condition codes are masked out ! 61: of the psl before it is stacked when catching signals. ! 62: This affects all ! 63: programs not just compatability mode ones although is is not usually a frequent ! 64: problem execept in this application. ! 65: The mask which was 0xfff1 ! 66: should be changed to 0xffff. ! 67: If this is not done, the condition codes ! 68: after a signal trap routine returns will always be cleared which can result ! 69: in many strange problems when condition codes are being checked in loops ! 70: or in this case after an "illegal instruction" trap. ! 71: This same bug remains in the ! 72: Third Berkeley Software Tape version of Virtual Memory UNIX. ! 73: .sp ! 74: .ti -5 ! 75: Second, although it is easy to get into compatability mode one also ! 76: needs a way to get back when an exception condition arises. ! 77: This can be done ! 78: by changing another mask in the last line of the same routine. ! 79: The 0x1f ! 80: mask should be changed to 0x8000001f. ! 81: This clears the compatability mode bit ! 82: so that all signals are necessarily caught in native mode where native code ! 83: can do something about the situation. ! 84: .sp ! 85: .ti -5 ! 86: Finally, if one wants compatibility ! 87: mode programs to have SETUID and SETGID status, there must be a way to change ! 88: the effective uid or gid without clobbering the real uid or gid. ! 89: This is ! 90: easily done by adding seteuid and setegid system calls to UNIX-32V. ! 91: My method ! 92: of doing this was to modify setuid and getuid so that the high order 16 bits ! 93: of the argument in the actual system calls is a flag (uids and gids are only ! 94: 16 bits in the low order part of the word) to indicate either a regular ! 95: setuid or getuid function or alternately a seteuid and setegid function. ! 96: Appropriate functions seteuid() and setegid() have been added to our libc.a ! 97: which automatically set up the flags while setuid() and setgid() insure ! 98: that the flags are zeroed. ! 99: .in -5 ! 100: .sp ! 101: Most of the programming was done in late August 1979 with additions being made ! 102: occasionally thru August 1980. ! 103: Compilation procedures are specified in Makefile. ! 104: An effort was made to minimize the amount of assembly language coding ! 105: so that only two small assembler routines are found here. ! 106: One of these (memsiz.s) simply specifies ! 107: how much memory is being allocated for PDP-11 images ! 108: and makes it available through certain global variables. ! 109: The other assembler file (compat.s) handles the protocol for getting ! 110: into compatability mode at a certain pc and with a certain ps. ! 111: It also includes a getreg function which copies machine registers into ! 112: known places. ! 113: The heart of the entire package is runcompat.c which is used for all RTSs ! 114: (Run Time Systems). ! 115: The function main here simply checks for the existence of the ! 116: file to be executed and sets the required uid and gid. ! 117: The execute function actually copies the file to memory ! 118: and sets trap conditions. ! 119: Finally illtrap() catches illegal instructions and goes to the ! 120: code appropriate for what is found as the illegal instruction. ! 121: The bulk of the lines of C code are in unixtraps.c and dofloat.c ! 122: which do UNIX system calls in either version 6 or 7 format ! 123: and simulate floating point operations. ! 124: (Since PWB-UNIX is upward compatable with version 6, the version 6 ! 125: system support also includes PWB sys calls.) ! 126: There are probably a number of bugs in the floating point simulation ! 127: code just waiting to be found. ! 128: If you are running programs which already include the PDP-11 ! 129: floating point interpretation code, you may want to disable ! 130: dofloat as the illegal instructions can be caught and simulated ! 131: in the PDP-11 code. ! 132: To do this just make dofloat.o with "cc -c -O -DNOFPSIM dofloat.c". ! 133: .sp ! 134: A shell which will automatically invoke compatability mode programs ! 135: is in the modshell directory as difference listings from the original ! 136: UNIX-32V shell. ! 137: Most of the new code is in a new function compat.c. ! 138: The automatic recognition of PDP-11 UNIX version 6/7 programs ! 139: relies on the fact that the second word (16 bit) of a PDP-11 ! 140: a.out file (text size) is nonzero whereas it is 0 for 32V a.outs. ! 141: No easy distinction can be made between version 6 and version 7 a.outs ! 142: so that a shell variable RTS sets up the name of a default Run ! 143: Time System. ! 144: On our system version 6 a.outs have been patched so that word 6 of the header ! 145: which is unused is a 1. ! 146: This hoaky? method seems to work just fine. ! 147: A program v6flag.c is in the modshell directory to do this. ! 148: .sp ! 149: One possible use of this package is to get programs like INGRES running ! 150: on the VAX without going through what appears to be a nontrivial ! 151: conversion effort. ! 152: There are two ways of running such programs. ! 153: Firstly if the shell is patched to automatically recognize and ! 154: run compatability mode a.outs (as in modshell), the PDP-11 a.out files ! 155: for the program can be just put on the system with their ! 156: normal names and run as usual. ! 157: Note however that you will be using the UNIX-32V shell so that ! 158: any shell files from PDP-11 version 6 will have to be modified ! 159: for this to work correctly with something like INGRES. ! 160: The second approach ! 161: is to make a directory hierarchy somewhere which corresponds ! 162: to what would be on a PDP-11 including the appropriate PDP-11 shell. ! 163: In that case just execute that shell in compatability mode with ! 164: the root directory set to the top of the PDP-11 hierarchy. ! 165: This is the quickest way to get something going in a hurry since no ! 166: changes are required to existing PDP-11 code or shell files. ! 167: .sp ! 168: Emulation of RT-11 system calls provided by Dan Strick are not being ! 169: distributed at this time. ! 170: .sp ! 171: Please foreward any comments, bug fixes or quick questions to the author ! 172: at the above address.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.