home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
- A Package to Support VAX Compatability Mode on UNIX-32V
-
- Arthur W. Wetzel
- 735 LIS Bldg
- Interdisciplinary Department of Information Science
- University of Pittsburgh
- Pittsburgh, Pa. 15260
- (412)-624-5203
-
-
- This is a brief description of a package to support the exe-
- cution of PDP-11 programs on VAX UNIX-32V or Berkeley VMUNIX
- in compatability mode. The major functions are to
-
- 1) allocate a block of memory as the PDP-11 memory space
- (this must start at location 0),
- 2) read compatability mode program images into memory and
- lay them out properly (with arguments etc),
- 3) actually handle the change to and from compatability
- mode,
- 4) simulate system calls for what ever operating system is
- being simulated and
- 5) simulate floating point (FPU and FIS) instructions.
-
- Unfortunately programs requiring separated I/D space can not
- be run. Loading of the package is rather slow since the
- entire process is about 80K bytes (64K is the PDP-11 space).
- Once execution begins however, the speed is similar to a
- PDP-11/70. There is considerable overhead for each excep-
- tion condition so that programs with a lot of system calls
- or especially with floating point will be greatly slowed
- down. Note that the text segment must be writable since the
- PDP-11 memory space is there.
-
- Three quick changes to UNIX-32V and Berkeley VMUNIX were
- made in the course of constructing this package.
-
- First, it is necessary to patch a bug in the original
- mchdep.c. The bug in the sendsig routine is that the
- condition codes are masked out of the psl before it is
- stacked when catching signals. This affects all pro-
- grams not just compatability mode ones although is is
- not usually a frequent problem execept in this applica-
- tion. The mask which was 0xfff1 should be changed to
- 0xffff. If this is not done, the condition codes after
- a signal trap routine returns will always be cleared
- which can result in many strange problems when condi-
- tion codes are being checked in loops or in this case
- after an "illegal instruction" trap. This same bug
- remains in the Third Berkeley Software Tape version of
- Virtual Memory UNIX.
-
- Second, although it is easy to get into compatability mode
- one also needs a way to get back when an exception
-
-
-
-
-
-
-
-
-
- -2-
-
-
- condition arises. This can be done by changing another
- mask in the last line of the same routine. The 0x1f
- mask should be changed to 0x8000001f. This clears the
- compatability mode bit so that all signals are neces-
- sarily caught in native mode where native code can do
- something about the situation.
-
- Finally, if one wants compatibility mode programs to have
- SETUID and SETGID status, there must be a way to change
- the effective uid or gid without clobbering the real
- uid or gid. This is easily done by adding seteuid and
- setegid system calls to UNIX-32V. My method of doing
- this was to modify setuid and getuid so that the high
- order 16 bits of the argument in the actual system
- calls is a flag (uids and gids are only 16 bits in the
- low order part of the word) to indicate either a regu-
- lar setuid or getuid function or alternately a seteuid
- and setegid function. Appropriate functions seteuid()
- and setegid() have been added to our libc.a which auto-
- matically set up the flags while setuid() and setgid()
- insure that the flags are zeroed.
-
- Most of the programming was done in late August 1979 with
- additions being made occasionally thru August 1980. Compi-
- lation procedures are specified in Makefile. An effort was
- made to minimize the amount of assembly language coding so
- that only two small assembler routines are found here. One
- of these (memsiz.s) simply specifies how much memory is
- being allocated for PDP-11 images and makes it available
- through certain global variables. The other assembler file
- (compat.s) handles the protocol for getting into compatabil-
- ity mode at a certain pc and with a certain ps. It also
- includes a getreg function which copies machine registers
- into known places. The heart of the entire package is run-
- compat.c which is used for all RTSs (Run Time Systems). The
- function main here simply checks for the existence of the
- file to be executed and sets the required uid and gid. The
- execute function actually copies the file to memory and sets
- trap conditions. Finally illtrap() catches illegal instruc-
- tions and goes to the code appropriate for what is found as
- the illegal instruction. The bulk of the lines of C code
- are in unixtraps.c and dofloat.c which do UNIX system calls
- in either version 6 or 7 format and simulate floating point
- operations. (Since PWB-UNIX is upward compatable with ver-
- sion 6, the version 6 system support also includes PWB sys
- calls.) There are probably a number of bugs in the floating
- point simulation code just waiting to be found. If you are
- running programs which already include the PDP-11 floating
- point interpretation code, you may want to disable dofloat
- as the illegal instructions can be caught and simulated in
- the PDP-11 code. To do this just make dofloat.o with "cc -c
- -O -DNOFPSIM dofloat.c".
-
- A shell which will automatically invoke compatability mode
-
-
-
-
-
-
-
-
-
- -3-
-
-
- programs is in the modshell directory as difference listings
- from the original UNIX-32V shell. Most of the new code is
- in a new function compat.c. The automatic recognition of
- PDP-11 UNIX version 6/7 programs relies on the fact that the
- second word (16 bit) of a PDP-11 a.out file (text size) is
- nonzero whereas it is 0 for 32V a.outs. No easy distinction
- can be made between version 6 and version 7 a.outs so that a
- shell variable RTS sets up the name of a default Run Time
- System. On our system version 6 a.outs have been patched so
- that word 6 of the header which is unused is a 1. This
- hoaky? method seems to work just fine. A program v6flag.c
- is in the modshell directory to do this.
-
- One possible use of this package is to get programs like
- INGRES running on the VAX without going through what appears
- to be a nontrivial conversion effort. There are two ways of
- running such programs. Firstly if the shell is patched to
- automatically recognize and run compatability mode a.outs
- (as in modshell), the PDP-11 a.out files for the program can
- be just put on the system with their normal names and run as
- usual. Note however that you will be using the UNIX-32V
- shell so that any shell files from PDP-11 version 6 will
- have to be modified for this to work correctly with some-
- thing like INGRES. The second approach is to make a direc-
- tory hierarchy somewhere which corresponds to what would be
- on a PDP-11 including the appropriate PDP-11 shell. In that
- case just execute that shell in compatability mode with the
- root directory set to the top of the PDP-11 hierarchy. This
- is the quickest way to get something going in a hurry since
- no changes are required to existing PDP-11 code or shell
- files.
-
- Emulation of RT-11 system calls provided by Dan Strick are
- not being distributed at this time.
-
- Please foreward any comments, bug fixes or quick questions
- to the author at the above address.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-