cortex: autostep correctly handle user breakpoint
If we halt due to a breakpoint make sure that we do not remove it during a step, only remove breakpoints we have created. Change-Id: I060168e54e53637d4fbf3cbcf62072efdb353807 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/947 Tested-by: jenkins
This commit is contained in:
parent
79fa75e199
commit
68956e028a
|
@ -879,7 +879,10 @@ static int cortex_m3_step(struct target *target, int current,
|
|||
else {
|
||||
|
||||
/* Set a temporary break point */
|
||||
retval = breakpoint_add(target, pc_value, 2, BKPT_TYPE_BY_ADDR(pc_value));
|
||||
if (breakpoint)
|
||||
retval = cortex_m3_set_breakpoint(target, breakpoint);
|
||||
else
|
||||
retval = breakpoint_add(target, pc_value, 2, BKPT_TYPE_BY_ADDR(pc_value));
|
||||
bool tmp_bp_set = (retval == ERROR_OK);
|
||||
|
||||
/* No more breakpoints left, just do a step */
|
||||
|
@ -903,8 +906,13 @@ static int cortex_m3_step(struct target *target, int current,
|
|||
isr_timed_out = ((timeval_ms() - t_start) > 500);
|
||||
} while (!((cortex_m3->dcb_dhcsr & S_HALT) || isr_timed_out));
|
||||
|
||||
/* Remove the temporary breakpoint */
|
||||
breakpoint_remove(target, pc_value);
|
||||
/* only remove breakpoint if we created it */
|
||||
if (breakpoint)
|
||||
cortex_m3_unset_breakpoint(target, breakpoint);
|
||||
else {
|
||||
/* Remove the temporary breakpoint */
|
||||
breakpoint_remove(target, pc_value);
|
||||
}
|
||||
|
||||
if (isr_timed_out) {
|
||||
LOG_DEBUG("Interrupt handlers didn't complete within time, "
|
||||
|
|
Loading…
Reference in New Issue