B.1. Multi-ICE internal breakpoints

Multi-ICE maintains a list of the currently requested breakpoints, marking each of them as being internal or external. External breakpoints and watchpoints (those that are explicitly set by you, or the main breakpoint that is set on your behalf) are displayed in the debugger lists of breakpoints and watchpoints. Internally set breakpoints are not displayed by the debugger. Internal breakpoints do, however, potentially compete for the breakpoint resources available on the processor, and so can affect you. The use of these internal breakpoints is described below:

Vector catch breakpoints

On an ARM7T-based core vector catch is implemented using breakpoints. This means that breakpoints you set and vector catch breakpoints compete for the hardware breakpoint resources. With the default vector_catch setting and hardware, most or all of the vector catch breakpoints are set as soft breakpoints because there are only two breakpoint units available.

One effect of this is that a system with ROM at address 0 runs out of hardware breakpoint units for vector catch, resulting in the following error message:

Unable to set breakpoints on exception vectors as specified by vector_catch

To avoid this, run with RAM at address 0 or reduce the number of breakpoints required by changing vector_catch.

On XScale microarchitecture processors, ARM9 processor cores, and ARM10 processors, vector catch is implemented in special hardware in the core. Therefore there is no competition between vector catch and your breakpoints, so the above restriction does not apply.

Vector catch breakpoints are set when the debugger starts up and when vector_catch is changed.

Semihosting SWI breakpoint

The breakpoint on the SWI vector is treated as a special case. Its allocation is controlled by two debugger internal variables:

  • vector_catch

  • semihosting_enabled.

By default the S bit in vector_catch is not set and semihosting_enabled is 1 which means there is a breakpoint on the SWI vector but it is treated as a semihosting request when hit, rather than just stopping.

If the S bit in vector_catch is set then Multi-ICE takes a breakpoint on SWI instructions and ignores the setting of semihosting_enabled. If the S bit in vector_catch is unset, the setting of semihosting_enabled determines how Multi-ICE responds to subsequent SWI instructions.

Stepping breakpoints

When stepping through code the debugger sets a breakpoint where the processor must stop. This is also done when the execution type Run to cursor is requested.

Single-stepping breakpoints are not set until you request the processor to starts execution. This means that the exact allocation of your breakpoints to hard or soft breakpoints shown in the breakpoint views of the debugger changes when stepping code.

Copyright © 1998-2002 ARM Limited. All rights reserved.ARM DUI 0048F
Non-Confidential