home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / tools / CrossEnv / V6_Vax / README next >
Text File  |  1998-02-25  |  8KB  |  199 lines

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