target: Change policy of removing watchpoints/breakpoints.

Now internal watch/breakpoint will not be removed in case
of error during removing triggers from hardware.

Also change signature of some functions (for deletion
bp/wp) to print message in case of some error.

Change-Id: I71cd1f556a33975005d0ee372fc384fddfddc3bf
Signed-off-by: Kirill Radkin <kirill.radkin@syntacore.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/7738
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Tested-by: jenkins
This commit is contained in:
Kirill Radkin
2023-08-08 13:17:29 +03:00
committed by Antonio Borneo
parent 18281b0c49
commit 022e438292
3 changed files with 160 additions and 61 deletions

View File

@@ -50,15 +50,15 @@ struct watchpoint {
int unique_id;
};
void breakpoint_clear_target(struct target *target);
int breakpoint_clear_target(struct target *target);
int breakpoint_add(struct target *target,
target_addr_t address, uint32_t length, enum breakpoint_type type);
int context_breakpoint_add(struct target *target,
uint32_t asid, uint32_t length, enum breakpoint_type type);
int hybrid_breakpoint_add(struct target *target,
target_addr_t address, uint32_t asid, uint32_t length, enum breakpoint_type type);
void breakpoint_remove(struct target *target, target_addr_t address);
void breakpoint_remove_all(struct target *target);
int breakpoint_remove(struct target *target, target_addr_t address);
int breakpoint_remove_all(struct target *target);
struct breakpoint *breakpoint_find(struct target *target, target_addr_t address);
@@ -68,11 +68,11 @@ static inline void breakpoint_hw_set(struct breakpoint *breakpoint, unsigned int
breakpoint->number = hw_number;
}
void watchpoint_clear_target(struct target *target);
int watchpoint_clear_target(struct target *target);
int watchpoint_add(struct target *target,
target_addr_t address, uint32_t length,
enum watchpoint_rw rw, uint64_t value, uint64_t mask);
void watchpoint_remove(struct target *target, target_addr_t address);
int watchpoint_remove(struct target *target, target_addr_t address);
/* report type and address of just hit watchpoint */
int watchpoint_hit(struct target *target, enum watchpoint_rw *rw,
@@ -84,4 +84,7 @@ static inline void watchpoint_set(struct watchpoint *watchpoint, unsigned int nu
watchpoint->number = number;
}
#define ERROR_BREAKPOINT_NOT_FOUND (-1600)
#define ERROR_WATCHPOINT_NOT_FOUND (-1601)
#endif /* OPENOCD_TARGET_BREAKPOINTS_H */