This is an automated email from Gerrit.

Matthias Welwarsky (matth...@welwarsky.de) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/3755

-- gerrit

commit f920e24f24fdd3a048f669c8f9da7b0133d6bfa6
Author: Matthias Welwarsky <matthias.welwar...@sysgo.com>
Date:   Fri Sep 16 15:17:41 2016 +0200

    aarch64: clear breakpoint value register on removal
    
    Not only null control but also value of the breakpoint when it is
    removed.
    
    Change-Id: Id99c7e3644729c64e563f1fa8b0577f350be6a98
    Signed-off-by: Matthias Welwarsky <matthias.welwar...@sysgo.com>

diff --git a/src/target/aarch64.c b/src/target/aarch64.c
index 419a462..fc93bb0 100644
--- a/src/target/aarch64.c
+++ b/src/target/aarch64.c
@@ -1571,6 +1571,16 @@ static int aarch64_unset_breakpoint(struct target 
*target, struct breakpoint *br
                                        brp_list[brp_i].control);
                        if (retval != ERROR_OK)
                                return retval;
+                       retval = aarch64_dap_write_memap_register_u32(target, 
armv8->debug_base
+                                       + CPUV8_DBG_BVR_BASE + 16 * 
brp_list[brp_i].BRPn,
+                                       (uint32_t)brp_list[brp_i].value);
+                       if (retval != ERROR_OK)
+                               return retval;
+                       retval = aarch64_dap_write_memap_register_u32(target, 
armv8->debug_base
+                                       + CPUV8_DBG_BVR_BASE + 4 + 16 * 
brp_list[brp_i].BRPn,
+                                       (uint32_t)brp_list[brp_i].value);
+                       if (retval != ERROR_OK)
+                               return retval;
                        if ((brp_j < 0) || (brp_j >= aarch64->brp_num)) {
                                LOG_DEBUG("Invalid BRP number in breakpoint");
                                return ERROR_OK;
@@ -1585,6 +1595,17 @@ static int aarch64_unset_breakpoint(struct target 
*target, struct breakpoint *br
                                        brp_list[brp_j].control);
                        if (retval != ERROR_OK)
                                return retval;
+                       retval = aarch64_dap_write_memap_register_u32(target, 
armv8->debug_base
+                                       + CPUV8_DBG_BVR_BASE + 16 * 
brp_list[brp_j].BRPn,
+                                       (uint32_t)brp_list[brp_j].value);
+                       if (retval != ERROR_OK)
+                               return retval;
+                       retval = aarch64_dap_write_memap_register_u32(target, 
armv8->debug_base
+                                       + CPUV8_DBG_BVR_BASE + 4 + 16 * 
brp_list[brp_j].BRPn,
+                                       (uint32_t)brp_list[brp_j].value);
+                       if (retval != ERROR_OK)
+                               return retval;
+
                        breakpoint->linked_BRP = 0;
                        breakpoint->set = 0;
                        return ERROR_OK;
@@ -1610,6 +1631,12 @@ static int aarch64_unset_breakpoint(struct target 
*target, struct breakpoint *br
                                        brp_list[brp_i].value);
                        if (retval != ERROR_OK)
                                return retval;
+
+                       retval = aarch64_dap_write_memap_register_u32(target, 
armv8->debug_base
+                                       + CPUV8_DBG_BVR_BASE + 4 + 16 * 
brp_list[brp_i].BRPn,
+                                       (uint32_t)brp_list[brp_i].value);
+                       if (retval != ERROR_OK)
+                               return retval;
                        breakpoint->set = 0;
                        return ERROR_OK;
                }

-- 

------------------------------------------------------------------------------
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to