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