This is an automated email from Gerrit.

Spencer Oliver ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/965

-- gerrit

commit b0b5ef6f9cd00db82a8f56d005421baef8ad7f1c
Author: Spencer Oliver <[email protected]>
Date:   Wed Oct 31 14:02:38 2012 +0000

    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: Ia275977ea11f43614075ede47b589c6d23d87c96
    Signed-off-by: Spencer Oliver <[email protected]>

diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index fc13a3f..ef4874d 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, "

-- 

------------------------------------------------------------------------------
LogMeIn Central: Instant, anywhere, Remote PC access and management.
Stay in control, update software, and manage PCs from one command center
Diagnose problems and improve visibility into emerging IT issues
Automate, monitor and manage. Do more in less time with Central
http://p.sf.net/sfu/logmein12331_d2d
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to