aboutsummaryrefslogtreecommitdiff
path: root/src/target/cortex_m.c
diff options
context:
space:
mode:
authorJon Burgess <jburgess777@gmail.com>2014-09-21 20:40:01 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2014-09-29 20:06:41 +0000
commit0a5e03c12aff31767483218232795bf8fa8df63b (patch)
tree7cccfec7969a237ccb9fab18e6530d6011a72636 /src/target/cortex_m.c
parentb4f6338738ddd13a36922109347fc3d6fe0733c0 (diff)
downloadriscv-openocd-0a5e03c12aff31767483218232795bf8fa8df63b.zip
riscv-openocd-0a5e03c12aff31767483218232795bf8fa8df63b.tar.gz
riscv-openocd-0a5e03c12aff31767483218232795bf8fa8df63b.tar.bz2
cortex_m.c: Use two byte breakpoint for 32bit Thumb-2 request
When GDB requests a breakpoint on a 32bit Thumb-2 instruction it sends a length of 3 which the current code rejects. Using the existing two byte breakpoint for this case appears to work fine. The use of length==3 for this case is mentioned in a few places: https://sourceware.org/gdb/onlinedocs/gdb/ARM-Breakpoint-Kinds.html http://sourceforge.net/p/openocd/mailman/message/30012280/ Change-Id: I59cd69ba4d1bc9a37b86569738c6bb2a67c3eb7a Signed-off-by: Jon Burgess <jburgess777@gmail.com> Reviewed-on: http://openocd.zylin.com/2312 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/target/cortex_m.c')
-rw-r--r--src/target/cortex_m.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 72dbe9e..a5230b7 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -1262,6 +1262,11 @@ int cortex_m_add_breakpoint(struct target *target, struct breakpoint *breakpoint
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
}
+ if (breakpoint->length == 3) {
+ LOG_DEBUG("Using a two byte breakpoint for 32bit Thumb-2 request");
+ breakpoint->length = 2;
+ }
+
if ((breakpoint->length != 2)) {
LOG_INFO("only breakpoints of two bytes length supported");
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;