HP (Hewlett-Packard) IA-64 Benutzerhandbuch

Seite von 110
8-6
Debugging
Copyright © 2000 Hewlett-Packard Co.
Ski IA-64 Simulator Reference Manual 1.0L
8.3.4
Notes on Program Breakpoints
8.3.4.1
How Ski Implements Breakpoints
Program breakpoints are implemented by replacing the instruction at the address of each breakpoint with an IA-64
BREAK
instruction or an IA-32
INT3
instruction. The replacement is done at the time the program is started or restarted
(e.g., with
cont
) and the original instructions are replaced when the program halts. Thus, if your program reads the loca-
tion where a breakpoint is set, it will retrieve the
BREAK
or
INT3
instruction instead. Ski detects if your program attempts
to write new data into the breakpoint location and automatically reinstalls the breakpoint after such an update.
You need to tell Ski where to set your IA-64 breakpoints but the IA-64 architecture doesn’t provide for addressability of
individual instructions. Instead, instructions are bundled. To work around this, Ski “pretends” that the slot 0 instruction of
a bundle is in the first four bytes of the bundle’s location, the slot 1 instruction is in the second four bytes of the bundle,
and the slot 2 instruction is in the third four bytes of the bundle. You can only set breakpoints at these “pretend” locations.
For example, setting a breakpoint at “
main
”, “
main+1
”, “
main+2
”, and “
main+3
” all result in the breakpoint being set on
the first instruction in the bundle at “
main
”. Similarly, “
main+5
”, “
main+6
”, and “
main+7
” all correspond to “
main+4
”,
and “
main+9
”, “
main+a
”, and “
main+b
” all correspond to “
main+8
”, If you try to set a breakpoint at the remaining bytes
in the bundle (“
main+c
”, “
main+d
”, “
main+e
”, and “
main+f
” in this example), Ski will generate the error message
Illegal slot field in breakpoint address
”. Ski can place IA-32 breakpoints at any byte address. If the break-
point address doesn’t correspond to the beginning of an IA-32 instruction, Ski’s behavior is undefined.
8.3.4.2
Unexpected Breakpoints
The IA-64 breakpoint mechanism uses
BREAK.M 0
,
BREAK.I 0
,
BREAK.B 0
, and
BREAK.F 0
, and
BREAK.X 0
instructions.
These are special cases and executing these instructions will not cause “
BREAK
instruction trap” interrupts for system-
mode programs. The same is true for
INT3
instructions in IA-32 code. However, if Ski finds
BREAK
or
INT3
instruction at
a location which doesn’t correspond to a breakpoint, Ski’s behavior depends on whether the program is simulating in
application-mode or system-mode. Application-mode programs should never generate, or expect to receive, interrupts. If
Ski reaches a
BREAK
or
INT3
instruction in an application-mode program at a location which doesn’t correspond to a
breakpoint, simulation halts and Ski displays an error message. System-mode IA-64 programs will receive the
BREAK
interrupt.
8.3.5
Summary of Program Breakpoint Commands
bs
 [address]
Sets an IA-64 breakpoint at the specified address or, if no address is given, at the location pointed to by
ip
.
Figure 8-4.
xski’s Breakpoint List Window Showing IA-64 and IA-32 Breakpoints