mirror of
https://github.com/openocd-org/openocd.git
synced 2025-10-14 02:58:23 +08:00
target/breakpoints: drop duplicate breakpoint/watchpoint "clear_target" functions
We need to cleanup watchpoints on all targets in SMP group when GDB connects. Otherwise, the targets will not be consistent. Once thats fixed, both *_clear_target functions clearly duplicate the corresponding *_remove_all functions. Change-Id: I8e85dbc66fd3e596990d631ed2aed22959a8ca60 Signed-off-by: Samuel Obuch <samuel.obuch@espressif.com> Reviewed-on: https://review.openocd.org/c/openocd/+/9086 Reviewed-by: Evgeniy Naydanov <evgeniy.naydanov@syntacore.com> Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:

committed by
Tomas Vanek

parent
896738264e
commit
e5888bda38
@@ -1041,8 +1041,8 @@ static int gdb_new_connection(struct connection *connection)
|
||||
* GDB session could leave dangling breakpoints if e.g. communication
|
||||
* timed out.
|
||||
*/
|
||||
breakpoint_clear_target(target);
|
||||
watchpoint_clear_target(target);
|
||||
breakpoint_remove_all(target);
|
||||
watchpoint_remove_all(target);
|
||||
|
||||
/* Since version 3.95 (gdb-19990504), with the exclusion of 6.5~6.8, GDB
|
||||
* sends an ACK at connection with the following comment in its source code:
|
||||
@@ -3219,8 +3219,8 @@ static void gdb_restart_inferior(struct connection *connection, const char *pack
|
||||
struct gdb_connection *gdb_con = connection->priv;
|
||||
struct target *target = get_target_from_connection(connection);
|
||||
|
||||
breakpoint_clear_target(target);
|
||||
watchpoint_clear_target(target);
|
||||
breakpoint_remove_all(target);
|
||||
watchpoint_remove_all(target);
|
||||
command_run_linef(connection->cmd_ctx, "ocd_gdb_restart %s",
|
||||
target_name(target));
|
||||
/* set connection as attached after reset */
|
||||
|
@@ -412,6 +412,8 @@ static int watchpoint_free(struct target *target, struct watchpoint *watchpoint_
|
||||
|
||||
static int watchpoint_remove_all_internal(struct target *target)
|
||||
{
|
||||
LOG_TARGET_DEBUG(target, "Delete all watchpoints");
|
||||
|
||||
struct watchpoint *watchpoint = target->watchpoints;
|
||||
int retval = ERROR_OK;
|
||||
|
||||
@@ -465,27 +467,6 @@ int watchpoint_remove_all(struct target *target)
|
||||
return breakpoint_watchpoint_remove_all(target, WATCHPOINT);
|
||||
}
|
||||
|
||||
int breakpoint_clear_target(struct target *target)
|
||||
{
|
||||
int retval = ERROR_OK;
|
||||
|
||||
if (target->smp) {
|
||||
struct target_list *head;
|
||||
|
||||
foreach_smp_target(head, target->smp_targets) {
|
||||
struct target *curr = head->target;
|
||||
int status = breakpoint_remove_all_internal(curr);
|
||||
|
||||
if (status != ERROR_OK)
|
||||
retval = status;
|
||||
}
|
||||
} else {
|
||||
retval = breakpoint_remove_all_internal(target);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
struct breakpoint *breakpoint_find(struct target *target, target_addr_t address)
|
||||
{
|
||||
struct breakpoint *breakpoint = target->breakpoints;
|
||||
@@ -641,23 +622,6 @@ int watchpoint_remove(struct target *target, target_addr_t address)
|
||||
return retval;
|
||||
}
|
||||
|
||||
int watchpoint_clear_target(struct target *target)
|
||||
{
|
||||
LOG_TARGET_DEBUG(target, "Delete all watchpoints");
|
||||
|
||||
struct watchpoint *watchpoint = target->watchpoints;
|
||||
int retval = ERROR_OK;
|
||||
|
||||
while (watchpoint) {
|
||||
struct watchpoint *tmp = watchpoint;
|
||||
watchpoint = watchpoint->next;
|
||||
int status = watchpoint_free(target, tmp);
|
||||
if (status != ERROR_OK)
|
||||
retval = status;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
int watchpoint_hit(struct target *target, enum watchpoint_rw *rw,
|
||||
target_addr_t *address)
|
||||
{
|
||||
|
@@ -50,7 +50,6 @@ struct watchpoint {
|
||||
int unique_id;
|
||||
};
|
||||
|
||||
int breakpoint_clear_target(struct target *target);
|
||||
int breakpoint_add(struct target *target,
|
||||
target_addr_t address, unsigned int length, enum breakpoint_type type);
|
||||
int context_breakpoint_add(struct target *target,
|
||||
@@ -69,7 +68,6 @@ static inline void breakpoint_hw_set(struct breakpoint *breakpoint, unsigned int
|
||||
breakpoint->number = hw_number;
|
||||
}
|
||||
|
||||
int watchpoint_clear_target(struct target *target);
|
||||
int watchpoint_add(struct target *target,
|
||||
target_addr_t address, unsigned int length,
|
||||
enum watchpoint_rw rw, uint64_t value, uint64_t mask);
|
||||
|
Reference in New Issue
Block a user