This is an automated email from Gerrit.

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

-- gerrit

commit d4ef6bd64f971dd97d332afae9e3996202a50562
Author: Matthias Welwarsky <[email protected]>
Date:   Thu Oct 5 14:50:16 2017 +0200

    cortex_a: fix handling of Thumb-2 32bit breakpoints
    
    When debugging Thumb-2 code, Gdb will at times send a
    breakpoint packet 'Z0,<addr>,3', the number 3 denoting that
    the instruction to break on is 32 bits long. Handle this by
    replacing it with two consecutive 16bit Thumb BKPTs and make
    sure to save and restore the full, original 32bit
    instruction.
    
    Change-Id: Ib93025faf35b11f0dba747a8c1fc36fd09a4c0f8
    Signed-off-by: Matthias Welwarsky <[email protected]>

diff --git a/src/target/cortex_a.c b/src/target/cortex_a.c
index 5d90e34..49bf1d5 100644
--- a/src/target/cortex_a.c
+++ b/src/target/cortex_a.c
@@ -1496,10 +1496,22 @@ static int cortex_a_set_breakpoint(struct target 
*target,
                        brp_list[brp_i].value);
        } else if (breakpoint->type == BKPT_SOFT) {
                uint8_t code[4];
+               /* length == 2: Thumb breakpoint */
                if (breakpoint->length == 2)
                        buf_set_u32(code, 0, 32, ARMV5_T_BKPT(0x11));
                else
+               /* length == 3: Thumb-2 breakpoint, actual encoding is
+                * a regular Thumb BKPT instruction but we replace a
+                * 32bit Thumb-2 instruction, so fix-up the breakpoint
+                * length
+                */
+               if (breakpoint->length == 3) {
+                       buf_set_u32(code, 0, 32, ARMV5_T_BKPT(0x11));
+                       breakpoint->length = 4;
+               } else
+                       /* length == 4, normal ARM breakpoint */
                        buf_set_u32(code, 0, 32, ARMV5_BKPT(0x11));
+
                retval = target_read_memory(target,
                                breakpoint->address & 0xFFFFFFFE,
                                breakpoint->length, 1,

-- 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to