Description When the user sets a breakpoint, the Debugger will normally use the image's debug information to decide whether to set an ARM or a Thumb breakpoint. The main difference between an ARM software breakpoint and a Thumb software breakpoint is the bit pattern that is written out to memory. For ARM breakpoints, the bit pattern 0xDEEEDEEE is written using a word write. For Thumb breakpoints, the bit pattern 0xDEEE is written using two byte writes. The target hardware MUST provide word, half-word and byte write access for this to work, i.e. the memory controller must decode the MAS signal. However if no debug information is available (e.g when debugging a ROM image) then the Debugger does not know which to set and defaults to an ARM breakpoint. When program execution reaches the ARM breakpoint in Thumb state, the break is taken correctly. However, if you then 'go', the second half of the ARM breakpoint in memory is then reached, which the debugger will not recognise as a valid breakpoint, and so reports 'Unknown watchpoint' or 'Unknown breakpoint' error. Solution In the above cases, the workaround is to use the command 'break/16 @address' (or 'br/32') to explicitly set a Thumb (or ARM) breakpoint as required. New for ADW 2.50 - Breakpoints can be configured with 'Execute->Set or Edit Breakpoint' to be 16-bit, 32-bit, or 'automatic' (decided from debug info).
|