X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Fcortex_a.c;h=9f7e38efc69e1d01cd93ccb33bac3c2e9c08082b;hp=672a300ec43dfe74e9f7ec191580d5ef3a675a55;hb=b551c62a7ff4e97a947486904f09a2356f27ced5;hpb=dd60dd84f28deb9dd485384466c4417b527ac3b2 diff --git a/src/target/cortex_a.c b/src/target/cortex_a.c index 672a300ec4..9f7e38efc6 100644 --- a/src/target/cortex_a.c +++ b/src/target/cortex_a.c @@ -1500,10 +1500,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,