cortex_m: fix stepping on FPB rev 1
Stepping in the maskisr auto mode sets breakpoint to step over interrupt service tasks. If the device has FPB rev 1, setting hard breakpoint is impossible on address over 0x1fffffff. Use soft type breakpoint for adresses over 0x1fffffff if FPB is rev 1. This may eventually fail if the code memory is not writeable, but there is nothing to do in such case. Change-Id: Ibdeeb506903a35d550b64f82c24c37a668de62b3 Signed-off-by: Tomas Vanek <vanekt@fbl.cz> Reviewed-on: http://openocd.zylin.com/4857 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>log_output
parent
5105e6037f
commit
4b998cb5f5
|
@ -877,10 +877,17 @@ static int cortex_m_step(struct target *target, int current,
|
||||||
else {
|
else {
|
||||||
|
|
||||||
/* Set a temporary break point */
|
/* Set a temporary break point */
|
||||||
if (breakpoint)
|
if (breakpoint) {
|
||||||
retval = cortex_m_set_breakpoint(target, breakpoint);
|
retval = cortex_m_set_breakpoint(target, breakpoint);
|
||||||
else
|
} else {
|
||||||
retval = breakpoint_add(target, pc_value, 2, BKPT_HARD);
|
enum breakpoint_type type = BKPT_HARD;
|
||||||
|
if (cortex_m->fp_rev == 0 && pc_value > 0x1FFFFFFF) {
|
||||||
|
/* FPB rev.1 cannot handle such addr, try BKPT instr */
|
||||||
|
type = BKPT_SOFT;
|
||||||
|
}
|
||||||
|
retval = breakpoint_add(target, pc_value, 2, type);
|
||||||
|
}
|
||||||
|
|
||||||
bool tmp_bp_set = (retval == ERROR_OK);
|
bool tmp_bp_set = (retval == ERROR_OK);
|
||||||
|
|
||||||
/* No more breakpoints left, just do a step */
|
/* No more breakpoints left, just do a step */
|
||||||
|
|
Loading…
Reference in New Issue