diff options
author | Jon Burgess <jburgess777@gmail.com> | 2014-09-21 20:40:01 +0100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2014-09-29 20:06:41 +0000 |
commit | 0a5e03c12aff31767483218232795bf8fa8df63b (patch) | |
tree | 7cccfec7969a237ccb9fab18e6530d6011a72636 | |
parent | b4f6338738ddd13a36922109347fc3d6fe0733c0 (diff) |
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>
-rw-r--r-- | src/target/cortex_m.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index 72dbe9ee..a5230b75 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; |