HP 3000 Manuals

TRAP [ System Debug Reference Manual ] MPE/iX 5.0 Documentation


System Debug Reference Manual

TRAP 

Debug only 

Arms/disarms/lists various traps that are monitored by Debug.

Syntax 

     TRAP [LIST]
     TRAP [trap-name] [option]

Parameters 

 trap-name       Traps can be classified into several classes.  The trap
                 names for each class are presented together.  In
                 general, this parameter specifies which trap to arm,
                 disarm, or list.  Only enough characters to make the
                 name recognizable are required.

                 Hardware Traps 

                 These are traps that are documented in the Precision
                 Architecture Control Document (ACD). They are trapped
                 directly by the hardware.

                 BRANCH           The BRANCH trap is the taken branch
                                  trap.  Any time a branch instruction is
                                  executed the debugger stops.

                 MPE XL X-Traps 

                 These traps correspond to the MPE XL user intrinsics of
                 similar name.  (Refer to the MPE XL Intrinsics Reference 
                 Manual (32650-90028) for descriptions of the each of
                 these traps.)  By arming these traps, the debugger
                 obtains control of the process before the system trap
                 mechanism.  You may have the system ignore the trap
                 (pretend it never happened) or process it as if the
                 debugger had not been notified.

                 To have the trap ignored use the C[ontinue] IGNORE
                 command.

                 Typing C[ontinue] or C[ontinue] NOIGNORE causes the trap
                 subsystem to process the trap as if Debug has not been
                 notified.

                 XARITHMETIC      The trap mask indicating the cause of
                                  the trap is displayed.
                 XCODE            The code trap number is displayed.
                 XLIBRARY         Not implemented.
                 XSYSTEM          Not implemented.

                 Refer to the MPE XL Intrinsics Reference Manual 
                 (32650-90028) for a description of the format of the
                 various trap masks and codes displayed by Debug when one
                 of the above traps is encountered.

                 Trace Traps 

                 The currently defined trace events are based on compiler
                 generated breakpoints.  These breakpoints are inserted
                 into the code by the compilers only if the symbolic
                 debug compiler option is used.  If the debugger arms any
                 of these events, it stops at the indicated event.

                 BEGIN_PROCEDURE       Stop at the entry to procedure.
                 END_PROCEDURE         Stop at the exit from procedure.
                 LABELS                Stop at all labels.
                 STATEMENTS            Stop at each source statement
                                       (requires compiler support).
                 EXIT_PROGRAM          Stop at the program exit point.
                 ENTER_PROGRAM         Stop at the program entry point.
                 TRACE_ALL             All of the trace events.

 option          Three options are supported.  If none is given, LIST is
                 assumed.

                 LIST                  List the current setting of the
                                       trap(s).
                 ARM                   Arm the indicated trap(s).
                 DISARM                Disarm the indicated trap(s).

Examples 

     $nmdebug > trap list 
     XLIBRARY         DISABLED
     XARITHMETIC      DISABLED
     XSYSTEM          DISABLED
     XCODE            DISABLED
     BRANCH           DISABLED
     BEGIN_PROCEDURE  DISABLED
     END_PROCEDURE    DISABLED
     LABELS           DISABLED
     STATEMENTS       DISABLED
     ENTER_PROGRAM    DISABLED
     EXIT_PROGRAM     DISABLED

List the status of all the defined traps (initial status is disabled).

     $nmdebug > trap branch arm 

Arm the branch taken trap and the arithmetic traps.

     $nmdebug > trap 
     XLIBRARY         DISABLED
     XARITHMETIC      DISABLED
     XSYSTEM          DISABLED
     XCODE            DISABLED
     BRANCH           DISABLED
     BEGIN_PROCEDURE  DISABLED
     END_PROCEDURE    ARMED
     LABELS           DISABLED
     STATEMENTS       DISABLED
     ENTER_PROGRAM    DISABLED
     EXIT_PROGRAM     DISABLED

Show the status of the traps.

     $nmdebug > c 
     Branch Taken at: 6a8.00005d84 processstudent+$60
      to: 6a8.000056b8 lr_wa_10

     $nmdebug > c 
     Branch Taken at: 6a8.00005708 lr_wa_1+$8
      to: 6a8.00005d88 processstudent+$64

     $nmdebug > c 
     Branch Taken at: 6a8.00005d94 processstudent+$70
      to: 6a8.00005990 ?_start+$3c

     $nmdebug > c 
     Branch Taken at: 6a8.000059ac ?_start+$58
      to: a.fff7b004

     $nmdebug > c 
     Branch Taken at: a.fff7b024
      to: 730.00015c6c ?average

The above example shows the use of the branch taken trap.  Every time any
form of branch instruction is executed, Debug stops just before the
branch occurs.

     $nmdebug > trap xari arm 
     $nmdebug > trap xari list 
     XLIBRARY         ARMED

     $nmdebug > c 
     XARI Trap at: 730.00015d38 average+$b0
     trap mask = 00000002

     $nmdebug > wl pc,#13 
     GRP $730.15d38
     $nmdebug > dc pc-20,#13 
     GRP $730.15d18
     00015d18  average+$90  b6b60802  ADDIO    1,21,22
     00015d1c  average+$94  6bd63f81  STW      22,-64(0,30)
     00015d20  average+$98  e81f1f77  B,N      average+$58
     00015d24  average+$9c  20000009  ** Stmt  9
     00015d28  average+$a0  4bc13ee9  LDW      -140(0,30),1
     00015d2c  average+$a4  b4390fff  ADDIO    -1,1,25        /* Trap occurred in
     00015d30  average+$a8  ebff0595  BL       divoI,31       /* <-- this routine.
     00015d34  average+$ac  4bda3f89  LDW      -60(0,30),26
     00015d38  average+$b0  4bdf3ed9  LDW      -148(0,30),31  /* <-- PC is here
     00015d3c  average+$b4  6bfd0000  STW      29,0(0,31)
     00015d40  average+$b8  e840c000  BV       0(2)
     00015d44  average+$bc  37de3f31  LDO      -104(30),30

     $nmdebug > dr r29 
     R29=$0

     $nmdebug > mr r29 4 
     R29=$0 := $4

     $nmdebug > c ignore 

The above example starts by arming the XARI trap.  The process is allowed
to run.  During execution, an arithmetic trap was detected.  Debug stops
to allow the user to inspect the state of the process.  After viewing the
code, it can be seen that the trap occurred in the divoI millicode
routine.  By analyzing the trap mask it is determined that the trap was
caused by attempting to divide by zero.  The millicode divide routine
returns the result of its operation in general register 29.

After looking at the source code, the bug in the program was discovered.
It was determined that at this point in process execution, the result of
the divide should have been "4".  The millicode return register is
updated with the correct value.  The continue command with the IGNORE
option is issued to resume the process as if the trap never happened.
(If the IGNORE option had been specified, the process would have been
terminated by the trap subsystem.)

Limitations, Restrictions 

The XLIBRARY and XSYSTEM trace traps are not implemented.


CAUTION The output format of all System Debug commands is subject to change without notice. Programs that are developed to postprocess System Debug output should not depend on the exact format (spacing, alignment, number of lines, uppercase or lowercase, or spelling) of any System Debug command output.


MPE/iX 5.0 Documentation