From fd62626dff25cf503a25040d3040b0a2bb9b2a76 Mon Sep 17 00:00:00 2001 From: Evgeniy Naydanov Date: Mon, 16 Sep 2024 18:01:17 +0300 Subject: [PATCH] target/breakpoints: fix types in `watchpoint_add_internal()` There was a conflict: 1. commit 2cd8ebf44d1a ("breakpoints: use 64-bit type for watchpoint mask and value") 2. commit 0bf3373e808a ("target/breakpoints: Use 'unsigned int' for length") The second commit was created erlier, but merged later so the types of `mask` and `value` became `uint32_t` in `watchpoint_add_internal()`. This created a bug: `WATCHPOINT_IGNORE_DATA_VALUE_MASK` is defined as `(~(uint64_t)0)`. Truncation to uint32_t makes it so the comparisons with the constant don't work. Change-Id: I19c414c351f52aff72a60330d83c29db7bbca375 Signed-off-by: Evgeniy Naydanov Reviewed-on: https://review.openocd.org/c/openocd/+/8500 Reviewed-by: Antonio Borneo Reviewed-by: Jan Matyas Tested-by: jenkins Reviewed-by: zapb Reviewed-by: Karl Palsson --- src/target/breakpoints.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/target/breakpoints.c b/src/target/breakpoints.c index 2fbb69e07..9378abcb1 100644 --- a/src/target/breakpoints.c +++ b/src/target/breakpoints.c @@ -500,7 +500,7 @@ struct breakpoint *breakpoint_find(struct target *target, target_addr_t address) } static int watchpoint_add_internal(struct target *target, target_addr_t address, - unsigned int length, enum watchpoint_rw rw, uint32_t value, uint32_t mask) + unsigned int length, enum watchpoint_rw rw, uint64_t value, uint64_t mask) { struct watchpoint *watchpoint = target->watchpoints; struct watchpoint **watchpoint_p = &target->watchpoints;