From 8b43a967e59de4eacb65627ea0ff6665dcdb0ac4 Mon Sep 17 00:00:00 2001 From: Antonio Borneo Date: Mon, 22 Sep 2025 09:53:43 +0200 Subject: [PATCH] target: cortex_m: add comment for breakpoint of length 3 Add a comment in the breakpoint code to clarify the check for the odd breakpoint length of 3 bytes, introduced by [1]. [1]: commit 0a5e03c12aff ("cortex_m.c: Use two byte breakpoint for 32bit Thumb-2 request"). Change-Id: I024863d10078b5d9062c876aa59ccf70a81bf641 Signed-off-by: Antonio Borneo Reviewed-on: https://review.openocd.org/c/openocd/+/9139 Reviewed-by: Tomas Vanek Tested-by: jenkins --- src/target/cortex_m.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index bfcbbc289..42e957260 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -2041,6 +2041,15 @@ int cortex_m_unset_breakpoint(struct target *target, struct breakpoint *breakpoi int cortex_m_add_breakpoint(struct target *target, struct breakpoint *breakpoint) { + /* + * GDB packets Z0 and z0 provide the 'kind' parameter that is target-specific + * and typically indicates the size in bytes of the breakpoint. + * But for 32-bit Thumb mode (Thumb-2) breakpoint, GDB provides 'kind = 3' to + * be used to derive the length information. See: + * https://sourceware.org/gdb/current/onlinedocs/gdb.html/ARM-Breakpoint-Kinds.html + * Since there isn't a four byte Thumb-2 breakpoint instruction, always use + * the two bytes breakpoint instruction. + */ if (breakpoint->length == 3) { LOG_TARGET_DEBUG(target, "Using a two byte breakpoint for 32bit Thumb-2 request"); breakpoint->length = 2;