target: Add function to remove all breakpoints

Change-Id: I4718926844a2c8bcfd78d7a8792f6ded293548ef
Signed-off-by: Marc Schink <openocd-dev@marcschink.de>
Reviewed-on: http://openocd.zylin.com/4915
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
Marc Schink 2019-02-14 16:11:44 +01:00 committed by Tomas Vanek
parent d9ffe75e25
commit 9960e805b3
2 changed files with 30 additions and 1 deletions

View File

@ -332,6 +332,18 @@ static int breakpoint_remove_internal(struct target *target, target_addr_t addre
return 0;
}
}
static void breakpoint_remove_all_internal(struct target *target)
{
struct breakpoint *breakpoint = target->breakpoints;
while (breakpoint) {
struct breakpoint *tmp = breakpoint;
breakpoint = breakpoint->next;
breakpoint_free(target, tmp);
}
}
void breakpoint_remove(struct target *target, target_addr_t address)
{
int found = 0;
@ -350,7 +362,23 @@ void breakpoint_remove(struct target *target, target_addr_t address)
breakpoint_remove_internal(target, address);
}
void breakpoint_clear_target_internal(struct target *target)
void breakpoint_remove_all(struct target *target)
{
if (target->smp) {
struct target_list *head;
struct target *curr;
head = target->head;
while (head != (struct target_list *)NULL) {
curr = head->target;
breakpoint_remove_all_internal(curr);
head = head->next;
}
} else {
breakpoint_remove_all_internal(target);
}
}
static void breakpoint_clear_target_internal(struct target *target)
{
LOG_DEBUG("Delete all breakpoints for target: %s",
target_name(target));

View File

@ -63,6 +63,7 @@ int context_breakpoint_add(struct target *target,
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);
struct breakpoint *breakpoint_find(struct target *target, target_addr_t address);