aboutsummaryrefslogtreecommitdiff
path: root/src/target/breakpoints.h
diff options
context:
space:
mode:
authorMarc Schink <dev@zapb.de>2021-06-13 11:21:18 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2022-03-19 09:14:39 +0000
commitfb43f1ff4e2f0638110ffcc4e63bee8b5361db64 (patch)
treed0becbf2571ba22a36de3b5c5d5b42063a1a8861 /src/target/breakpoints.h
parentab43721be6ff7470ff8b9771c95c1d5661a5a689 (diff)
downloadriscv-openocd-fb43f1ff4e2f0638110ffcc4e63bee8b5361db64.zip
riscv-openocd-fb43f1ff4e2f0638110ffcc4e63bee8b5361db64.tar.gz
riscv-openocd-fb43f1ff4e2f0638110ffcc4e63bee8b5361db64.tar.bz2
target: Rework 'set' variable of break-/watchpoints
The 'set' variable name suggests a boolean data type which determines whether a breakpoint (or watchpoint) is active. However, it is also used to store the number of the breakpoint. This encoding leads to inconsistent value assignments: boolean and integer values are mixed. Also, associated hardware comparator numbers, which are usually numbered from 0, cannot be used directly. An additional offset is required to store the comparator numbers. In order to make the code more readable and the value assignment more consistent, change the variable name to 'is_set', its data type to 'bool' and introduce a dedicated variable for the break-/watchpoint number. In order to make the review easier, the data types of various related variables (e.g. number of breakpoints) are not changed. While at it, fix a few coding style issues. Change-Id: I2193f5639247cce6b80580d4c1c6afee916aeb82 Signed-off-by: Marc Schink <dev@zapb.de> Reviewed-on: https://review.openocd.org/c/openocd/+/6319 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src/target/breakpoints.h')
-rw-r--r--src/target/breakpoints.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/target/breakpoints.h b/src/target/breakpoints.h
index b4a3511..b97be71 100644
--- a/src/target/breakpoints.h
+++ b/src/target/breakpoints.h
@@ -39,7 +39,8 @@ struct breakpoint {
uint32_t asid;
int length;
enum breakpoint_type type;
- int set;
+ bool is_set;
+ unsigned int number;
uint8_t *orig_instr;
struct breakpoint *next;
uint32_t unique_id;
@@ -52,7 +53,8 @@ struct watchpoint {
uint32_t mask;
uint32_t value;
enum watchpoint_rw rw;
- int set;
+ bool is_set;
+ unsigned int number;
struct watchpoint *next;
int unique_id;
};
@@ -69,6 +71,12 @@ void breakpoint_remove_all(struct target *target);
struct breakpoint *breakpoint_find(struct target *target, target_addr_t address);
+inline void breakpoint_hw_set(struct breakpoint *breakpoint, unsigned int hw_number)
+{
+ breakpoint->is_set = true;
+ breakpoint->number = hw_number;
+}
+
void watchpoint_clear_target(struct target *target);
int watchpoint_add(struct target *target,
target_addr_t address, uint32_t length,
@@ -79,4 +87,10 @@ void watchpoint_remove(struct target *target, target_addr_t address);
int watchpoint_hit(struct target *target, enum watchpoint_rw *rw,
target_addr_t *address);
+inline void watchpoint_set(struct watchpoint *watchpoint, unsigned int number)
+{
+ watchpoint->is_set = true;
+ watchpoint->number = number;
+}
+
#endif /* OPENOCD_TARGET_BREAKPOINTS_H */