]> git.gag.com Git - fw/openocd/commitdiff
target: Add function to remove all breakpoints
authorMarc Schink <openocd-dev@marcschink.de>
Thu, 14 Feb 2019 15:11:44 +0000 (16:11 +0100)
committerTomas Vanek <vanekt@fbl.cz>
Thu, 26 Mar 2020 19:30:34 +0000 (19:30 +0000)
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>
src/target/breakpoints.c
src/target/breakpoints.h

index 7ad19425630f818b2accf2a01312a06080872b17..c060c7cde7d577ef94f74c8f0a30d9c72db9a3af 100644 (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));
index 51bd05abd83c2be21145396a418b5a54e1fcaf56..20faf4e6c2690064b4bc1a5691981cf83a92bd00 100644 (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);