Commit | Line | Data |
---|---|---|
b7bcb651 | 1 | .\" |
c6dd5f9e | 2 | .\" Readme 4.1 82/05/12 |
b7bcb651 RH |
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. |