Annotation of 42BSD/games/compat/Readme, revision 1.1

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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.