Debug
ARM DDI 0301H
Copyright © 2004-2009 ARM Limited. All rights reserved.
13-34
ID012310
Non-Confidential, Unrestricted Access
13.8.5
Effect of a debug event on CP15 registers
The four CP15 registers that can be set on a debug event are:
•
Instruction Fault Status Register
(IFSR)
•
Data Fault Status Register
(DFSR)
•
Fault Address Register
(FAR)
•
Watchpoint Fault Address Register
(WFAR).
The
Instruction Fault Address Register
(IFAR) is never updated on debug events.
The registers are set under the following circumstances:
•
The IFSR is set whenever a breakpoint, software breakpoint, or vector catch debug event
generates a Debug exception entry. It is set to indicate the cause for the Prefetch Abort
vector fetch.
•
The DFSR is set whenever a watchpoint debug event generates a Debug exception entry.
It is set to indicate the cause for the Data Abort vector fetch.
•
The processor updates the FAR on debug exception entry because of watchpoints,
although this is architecturally Unpredictable. It is set to the
Modified Virtual Address
(MVA) that triggered the watchpoint.
•
The WFAR is set whenever a watchpoint debug event generates either a Debug exception
or Debug state entry. It is set to the VA of the instruction that caused the Watchpoint debug
event, plus an offset dependent on the processor state. These offsets are the same as the
ones that Table 13-25 on page 13-39 lists.
Table 13-23 lists the setting of CP15 registers on debug events.
You must take care when setting a breakpoint or software breakpoint debug event inside the
Prefetch Abort or Data Abort exception handlers, or when setting a watchpoint debug event on
a data address that might be accessed by any of these handlers. These debug events overwrite
the R14_abt, SPRS_abt and the CP15 registers listed in this section, leading to an unpredictable
software behavior if the handlers did not have the chance of saving the registers.
Table 13-23 Setting of CP15 registers on debug events
Register
Debug exception taken because of:
Debug state entry because of:
A breakpoint,
software breakpoint,
or vector catch
debug event
A watchpoint
debug event
A debug event
other than a
watchpoint
A watchpoint
debug event
IFSR
Cause of Prefetch Abort
exception handler entry
Unchanged
Unchanged
Unchanged
DFSR
Unchanged
Cause of Data Abort
exception handler entry
Unchanged
Unchanged
FAR
Unchanged
Watchpointed address
Unchanged
Unchanged
WFAR
Unchanged
Address of the
instruction causing the
watchpoint debug event
Unchanged
Address of the
instruction causing the
watchpoint debug
event