💾 Archived View for gemini.spam.works › mirrors › textfiles › hacking › morprime.hac captured on 2021-12-04 at 18:04:22.

View Raw

More Information

-=-=-=-=-=-=-



______________________________________________________________________________

                      RVEC Parameters and DMSTK Format

                  A Telecom Computer Security Bulletin File
______________________________________________________________________________


                                RVEC Parameters

The commands RESTOR, RESUME, SAVE, PM, and START process a group of optional
parameters associated with the PRIMOS RVEC vector.  These parameters are
stored on disk for every runfile (executable program).

Initial values for the RVEC parameters are usually specified in the PRIMOS
SAVE command, or by LOADer's or SEG's SAVE command when the program was
stored on disk.

Each parameter is a 16-bit processor word, represented by up to six octal
digits.


                   Memory
   Parameter      Location     Definition

      SA             --        Starting Address (first memory word used
                               by program)
      EA             --        Ending Address (last memory word used
                               by program)
      PC              7        P Register (Program Counter)
       A              1        A Register (Arithmetic)
       B              2        B Register (Arithmetic)
       X              0        Index Register
     Keys            --        Status keys associated with INK, OTK
                               instructions


The RVEC parameters are optional in the command string.  Any item that is
specified replaces the previous value in RVEC, which is saved with the prog-
ram.  Thus, for any parameters that are not specified, the value previously
stored in RVEC is saved with the program

Slash convention: An ordinal value followed by a slash and a value can be used
to set a selected octal parameter without setting other octal parameters.  For
example, given the command format:

   RESUME pathname [pc] [a] [b] [x] [keys]

the command:

   R FILNAM 2/1000

sets the value of the RVEC parameter, B (ie, skip two octal parameters and
then set the third to '1000').

Supplying RVEC parameters: RVEC parameters specified in RESUME or START comm-
ands replace the previous values in RVEC.  Also, when a program returns to
PRIMOS through the EXIT subroutine, RVEC is loaded from the processor values
in effect at the time of the exit.  Only the SAVE command alters the values of
RVEC stored on disk with the program.

RESTOR returns a program from disk to memory and loads the SAVE parameters
into RVEC in preparation for a START command.

RESUME combines the functions of RESTOR and START.

PM lists the current values of the RVEC parameters.

External commands have RVEC parameters that can be modified at the time the
command is started (eg, PMA filename 1/740).  Providing RVEC parameters to a
command that does not need them will cause unpredictable results.

   Keys

The item, keys, when specified among RVEC parameters, refers to the processor
status keys handled by the INK and OTK instructions (refer to the System Arch-
itecture Reference Guide).  These are represented by a single 16-bit word in
one of the following formats (S-mode and R-mode programs use the first format;
V-mode and I-mode programs use the second).

Keys (SR)

Process status information is available in a word called the keys, which can be
read or set by the program.  It's format is as follows:

    _______________________________________________________________
   |     |       |      |        |     |                           |
   |  C  |  DBL  |  --  |  Mode  |  0  |  Bits 9-16 of location 6  |
   |_____|_______|______|________|_____|___________________________|

      1      2      3      4-6     7-8    9         ---         16

   C (Bit 1)            Set by arithmetic error conditions
   DBL (Bit 2)          0 - Single Precision, 1 - Double Precision


                          001     32S



Process status information is available in a 16-bit register known as the keys.
It may be referenced by the LPSW, TKA, and TAK instructions.

 _____________________________________________________________________________
|     |     |     |     |     |     |      |      |       |       |     |     |
|  C  |  0  |  L  |  M  |  F  |  X  |  LT  |  EQ  |  DEX  |  0-0  |  I  |  S  |
|_____|_____|_____|_____|_____|_____|______|______|_______|_______|_____|_____|

   1     2     3    4-6    7     8      9     10      11    12-14   15    16

   C (Bit 1)            C-bit
   L (Bit 3)            L-bit

   MODE (Bits 4-6)      Addressing Mode:

                          000    16S
                          001    32S
                          011    32R
                          010    64R
                          110    64V
                          100    32I

   F (Bit 7)            Floating point exception disable:

                          0      take fault
                          1      set C-bit

   X (Bit 8)            Integer exception enable:

                          0      set C-bit
                          1      take fault

   LT (Bit 9)           Condition code bits:

   EQ (Bit 10)            LT     set if result is negative
                          EQ     set if result is zero

   DEX (Bit 11)         Decimal exception enable:

                          0      set C-bit
                          1      take fault

   I (Bit 15)           In dispatcher -- set/cleared only by process exchange

   S (Bit 16)           Save done -- set/cleared only by process exchange


C-bit (VI): Set by error conditions in arithmetic operations and by shifts.

L-bit (VI): Set by an arithmetic or shift operation except IRS, IRX, DRX.
Equal to carry out of the most significant bit (Bit 1) of an arithmetic
operation.  It is valuable for simulating multiple-precision operations and
for performing unsigned comparisons following a CAS or a SUB.

Condition code bits (VI): The two condition code bits are designated "EQ" and


                                 DMSTK Format

The DMSTK command traces the sequence of calls and returns by which the user's
process arrived at its current state.  Machine states for internal commands,
condition frames, and fault frames are preserved on the user's command stack.
In addition, the most recent activation of a static mode program or dump on the
terminal or into a COMOUTPUT file.  As it is an internal command, it does not
overwrite the static mode stack, and so does not preclude re-entry into the
faulting program.

The DMSTK command has several options.  These options may be used in any order
aout in octal.  The command syntax is as follows:



   Option                       Definition
                done in full format (since "full format" is the default, there
                with the most recent condition frame (if there is one) or with
                vation (ie, frame) that is dumped is to be produced.


DMSTK lists each stack frame in the following general format (for an explan-
ation of the registers and the rings involved, see the System Architecture
Reference Guide):

   (nn) offset: Owner= procname (LB= ownerlb).
          Called from pcl_addr; returns to return_addr.

The information is as follows:


   Argument                     Definition

   nn                   Frame index number of the stack frame
   offset               The word number in the current stack segment where
                        this activation's stack frame begins
   procname             The name (if available) of the procedure that owns
                        this stack frame
   ownerlb              The stack value of the LB (linkage base) register
                        belonging to the procedure that owns the stack frame
   pcl_addr             Address of the PCL instruction that caused the
                        procedure to be invoked
   return_addr          The address to which the procedure will return


If the frame is a fault frame, the following format is used:

   (nn) offset: FAULT FRAME; fault type = fault type.
          Fault returns to ret_pb; LB= faulter_lb, keys= faulter_keys.
          Fault code= fcode; fault addr= faddr.
          Registers at time of fault:
               000001 000002 000003 000004 000005 000006
               000007 000010 000011 000012 000013 000014
               000015 000016 000017 000020 000021 000022
               000023 000024 000025 000026 000027 000030


   Argument                     Definition

   fault-type           Location in the fault table of the type of fault
                        that occurred
   ret_pb               Address to which the fault returns
   faulter_lb           LB register belonging to the procedure in which
                        the fault occurred
   faulter_keys         CPU keys at the time of the fault
   register data        If present, a direct dump of the register save area
                        (in the same format as that produced by the CPU RSAV
                        instruction)
   fcode                Fault code generated by this particular fault
   faddr                Fault address generated by this particular fault


If the activation is a condition frame, the following format is used:

   (nn) offset: CONDITION FRAME for "condition_name"; returns to ret_pb.
          Condition raised at sigloc; LB= siglb; keys= sigkeys.
          [(Crawlout to outerpb; LB= outerlb; keys= outerkeys.)]
          [Registers at time of fault in inner ring:
                Save Mask= ssssss; XB= xb_value
                 000001 000002 000003 000004 000005 000006
                 000007 000010 000011 000012 000013 000014
                 000015 000016 000017 000020 000021 000022
                 000023 000024 000025 000026 000027 000030]

The latter two frames are displayed only if the condition was signalled in an
inner ring and subsequently a crawlout to the current ring occurred.

If, during the trace, the stack switches to a different segment, DMSTK will
print, "STACK SEGMENT IS xxxx", giving the octal segment number of the new
stack segment.

   Note

A called-from or return-to value such as 0(0)/0 or 0(0)/177776 usually means
that the stack frame has an invalid return point and can never return.  An
example of such a frame is the first frame set up by SEG in a V-mode Static
Mode program.

Downloaded From P-80 Systems 304-744-2253