]> git.sur5r.net Git - openocd/blobdiff - src/target/breakpoints.c
retire daemon_startup
[openocd] / src / target / breakpoints.c
index 8b140b3e98ea4176d8dd1dfba83be985512234f9..3a735497eebe408c7fa4a9a43cdb52efdd2b5c0c 100644 (file)
@@ -62,7 +62,7 @@ int breakpoint_add(target_t *target, u32 address, u32 length, enum breakpoint_ty
        (*breakpoint_p)->length = length;
        (*breakpoint_p)->type = type;
        (*breakpoint_p)->set = 0;
-       (*breakpoint_p)->orig_instr = malloc(CEIL(length, 8));
+       (*breakpoint_p)->orig_instr = malloc(length);
        (*breakpoint_p)->next = NULL;
        
        if ((retval = target->type->add_breakpoint(target, *breakpoint_p)) != ERROR_OK)
@@ -70,25 +70,27 @@ int breakpoint_add(target_t *target, u32 address, u32 length, enum breakpoint_ty
                switch (retval)
                {
                        case ERROR_TARGET_RESOURCE_NOT_AVAILABLE:
-                               INFO("can't add %s breakpoint, resource not available", breakpoint_type_strings[(*breakpoint_p)->type]);
-                               free (*breakpoint_p);
+                               LOG_INFO("can't add %s breakpoint, resource not available", breakpoint_type_strings[(*breakpoint_p)->type]);
+                               free((*breakpoint_p)->orig_instr);
+                               free(*breakpoint_p);
                                *breakpoint_p = NULL;
                                return retval;
                                break;
                        case ERROR_TARGET_NOT_HALTED:
-                               INFO("can't add breakpoint while target is running");
-                               free (*breakpoint_p);
+                               LOG_INFO("can't add breakpoint while target is running");
+                               free((*breakpoint_p)->orig_instr);
+                               free(*breakpoint_p);
                                *breakpoint_p = NULL;
                                return retval;
                                break;
                        default:
-                               ERROR("unknown error");
+                               LOG_ERROR("unknown error");
                                exit(-1);
                                break;
                }
        }
        
-       DEBUG("added %s breakpoint at 0x%8.8x of length 0x%8.8x", 
+       LOG_DEBUG("added %s breakpoint at 0x%8.8x of length 0x%8.8x", 
                breakpoint_type_strings[(*breakpoint_p)->type],
                (*breakpoint_p)->address, (*breakpoint_p)->length);
        
@@ -116,11 +118,11 @@ int breakpoint_remove(target_t *target, u32 address)
                        switch (retval)
                        {
                                case ERROR_TARGET_NOT_HALTED:
-                                       INFO("can't remove breakpoint while target is running");
+                                       LOG_INFO("can't remove breakpoint while target is running");
                                        return retval;
                                        break;
                                default:
-                                       ERROR("unknown error");
+                                       LOG_ERROR("unknown error");
                                        exit(-1);
                                        break;
                        }
@@ -131,7 +133,7 @@ int breakpoint_remove(target_t *target, u32 address)
        }
        else
        {
-               ERROR("no breakpoint at address 0x%8.8x found", address);
+               LOG_ERROR("no breakpoint at address 0x%8.8x found", address);
        }
        
        return ERROR_OK;
@@ -179,25 +181,25 @@ int watchpoint_add(target_t *target, u32 address, u32 length, enum watchpoint_rw
                switch (retval)
                {
                        case ERROR_TARGET_RESOURCE_NOT_AVAILABLE:
-                               INFO("can't add %s watchpoint, resource not available", watchpoint_rw_strings[(*watchpoint_p)->rw]);
+                               LOG_INFO("can't add %s watchpoint, resource not available", watchpoint_rw_strings[(*watchpoint_p)->rw]);
                                free (*watchpoint_p);
                                *watchpoint_p = NULL;
                                return retval;
                                break;
                        case ERROR_TARGET_NOT_HALTED:
-                               INFO("can't add watchpoint while target is running");
+                               LOG_INFO("can't add watchpoint while target is running");
                                free (*watchpoint_p);
                                *watchpoint_p = NULL;
                                return retval;
                                break;
                        default:
-                               ERROR("unknown error");
+                               LOG_ERROR("unknown error");
                                exit(-1);
                                break;
                }
        }
        
-       DEBUG("added %s watchpoint at 0x%8.8x of length 0x%8.8x",
+       LOG_DEBUG("added %s watchpoint at 0x%8.8x of length 0x%8.8x",
                watchpoint_rw_strings[(*watchpoint_p)->rw],
                (*watchpoint_p)->address, (*watchpoint_p)->length);
        
@@ -222,15 +224,24 @@ int watchpoint_remove(target_t *target, u32 address)
        {
                if ((retval = target->type->remove_watchpoint(target, watchpoint)) != ERROR_OK)
                {
-                       ERROR("BUG: can't remove watchpoint");
-                       exit(-1);
+                       switch (retval)
+                       {
+                               case ERROR_TARGET_NOT_HALTED:
+                                       LOG_INFO("can't remove watchpoint while target is running");
+                                       return retval;
+                                       break;
+                               default:
+                                       LOG_ERROR("unknown error");
+                                       exit(-1);
+                                       break;
+                       }
                }
                (*watchpoint_p) = watchpoint->next;
                free(watchpoint);
        }
        else
        {
-               ERROR("no watchpoint at address 0x%8.8x found", address);
+               LOG_ERROR("no watchpoint at address 0x%8.8x found", address);
        }
        
        return ERROR_OK;