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:
Spencer Oliver 2012-11-06 15:43:51 +00:00
parent 79fa75e199
commit 68956e028a
1 changed files with 11 additions and 3 deletions

View File

@ -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, "