X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Fbreakpoints.c;h=3a735497eebe408c7fa4a9a43cdb52efdd2b5c0c;hp=8b140b3e98ea4176d8dd1dfba83be985512234f9;hb=dfbb9f3e89ae;hpb=03e8f264f4c66baec9b86778d3488b23e0a8c0b6 diff --git a/src/target/breakpoints.c b/src/target/breakpoints.c index 8b140b3e98..3a735497ee 100644 --- a/src/target/breakpoints.c +++ b/src/target/breakpoints.c @@ -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;