diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 4d9daf5ca..ca2211fb4 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -677,7 +677,7 @@ static int cortex_m3_soft_reset_halt(struct target *target)
 	return ERROR_OK;
 }
 
-static void cortex_m3_enable_breakpoints(struct target *target)
+void cortex_m3_enable_breakpoints(struct target *target)
 {
 	struct breakpoint *breakpoint = target->breakpoints;
 
diff --git a/src/target/cortex_m.h b/src/target/cortex_m.h
index a9bd7a497..11d70524b 100644
--- a/src/target/cortex_m.h
+++ b/src/target/cortex_m.h
@@ -194,6 +194,7 @@ int cortex_m3_set_watchpoint(struct target *target, struct watchpoint *watchpoin
 int cortex_m3_unset_watchpoint(struct target *target, struct watchpoint *watchpoint);
 int cortex_m3_add_watchpoint(struct target *target, struct watchpoint *watchpoint);
 int cortex_m3_remove_watchpoint(struct target *target, struct watchpoint *watchpoint);
+void cortex_m3_enable_breakpoints(struct target *target);
 void cortex_m3_enable_watchpoints(struct target *target);
 void cortex_m3_dwt_setup(struct cortex_m3_common *cm3, struct target *target);
 
diff --git a/src/target/hla_target.c b/src/target/hla_target.c
index 272c25e05..3c3b84175 100644
--- a/src/target/hla_target.c
+++ b/src/target/hla_target.c
@@ -551,6 +551,12 @@ static int adapter_resume(struct target *target, int current,
 		return ERROR_TARGET_NOT_HALTED;
 	}
 
+	if (!debug_execution) {
+		target_free_all_working_areas(target);
+		cortex_m3_enable_breakpoints(target);
+		cortex_m3_enable_watchpoints(target);
+	}
+
 	pc = armv7m->arm.pc;
 	if (!current) {
 		buf_set_u32(pc->value, 0, 32, address);