aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/target/cortex_m.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 28824b8a..4d9daf5c 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -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, "