breakpoints: Add target logging to breakpoints and watchpoints
This patch adds target logging to breakpoint handling code. This makes it easier to debug multicore/multithread systems. Change-Id: I6bea8079a457070a8f63d0ce381a4ece6f5a190a Signed-off-by: Marek Vrbka <marek.vrbka@codasip.com> Reviewed-on: https://review.openocd.org/c/openocd/+/7922 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
parent
7c60f6593e
commit
851d1ad87a
|
@ -52,7 +52,7 @@ static int breakpoint_add_internal(struct target *target,
|
|||
* breakpoint" ... check all the parameters before
|
||||
* succeeding.
|
||||
*/
|
||||
LOG_ERROR("Duplicate Breakpoint address: " TARGET_ADDR_FMT " (BP %" PRIu32 ")",
|
||||
LOG_TARGET_ERROR(target, "Duplicate Breakpoint address: " TARGET_ADDR_FMT " (BP %" PRIu32 ")",
|
||||
address, breakpoint->unique_id);
|
||||
return ERROR_TARGET_DUPLICATE_BREAKPOINT;
|
||||
}
|
||||
|
@ -83,16 +83,15 @@ static int breakpoint_add_internal(struct target *target,
|
|||
default:
|
||||
reason = "unknown reason";
|
||||
fail:
|
||||
LOG_ERROR("can't add breakpoint: %s", reason);
|
||||
LOG_TARGET_ERROR(target, "can't add breakpoint: %s", reason);
|
||||
free((*breakpoint_p)->orig_instr);
|
||||
free(*breakpoint_p);
|
||||
*breakpoint_p = NULL;
|
||||
return retval;
|
||||
}
|
||||
|
||||
LOG_DEBUG("[%d] added %s breakpoint at " TARGET_ADDR_FMT
|
||||
LOG_TARGET_DEBUG(target, "added %s breakpoint at " TARGET_ADDR_FMT
|
||||
" of length 0x%8.8x, (BPID: %" PRIu32 ")",
|
||||
target->coreid,
|
||||
breakpoint_type_strings[(*breakpoint_p)->type],
|
||||
(*breakpoint_p)->address, (*breakpoint_p)->length,
|
||||
(*breakpoint_p)->unique_id);
|
||||
|
@ -134,14 +133,14 @@ static int context_breakpoint_add_internal(struct target *target,
|
|||
(*breakpoint_p)->unique_id = bpwp_unique_id++;
|
||||
retval = target_add_context_breakpoint(target, *breakpoint_p);
|
||||
if (retval != ERROR_OK) {
|
||||
LOG_ERROR("could not add breakpoint");
|
||||
LOG_TARGET_ERROR(target, "could not add breakpoint");
|
||||
free((*breakpoint_p)->orig_instr);
|
||||
free(*breakpoint_p);
|
||||
*breakpoint_p = NULL;
|
||||
return retval;
|
||||
}
|
||||
|
||||
LOG_DEBUG("added %s Context breakpoint at 0x%8.8" PRIx32 " of length 0x%8.8x, (BPID: %" PRIu32 ")",
|
||||
LOG_TARGET_DEBUG(target, "added %s Context breakpoint at 0x%8.8" PRIx32 " of length 0x%8.8x, (BPID: %" PRIu32 ")",
|
||||
breakpoint_type_strings[(*breakpoint_p)->type],
|
||||
(*breakpoint_p)->asid, (*breakpoint_p)->length,
|
||||
(*breakpoint_p)->unique_id);
|
||||
|
@ -165,11 +164,11 @@ static int hybrid_breakpoint_add_internal(struct target *target,
|
|||
* breakpoint" ... check all the parameters before
|
||||
* succeeding.
|
||||
*/
|
||||
LOG_ERROR("Duplicate Hybrid Breakpoint asid: 0x%08" PRIx32 " (BP %" PRIu32 ")",
|
||||
LOG_TARGET_ERROR(target, "Duplicate Hybrid Breakpoint asid: 0x%08" PRIx32 " (BP %" PRIu32 ")",
|
||||
asid, breakpoint->unique_id);
|
||||
return ERROR_TARGET_DUPLICATE_BREAKPOINT;
|
||||
} else if ((breakpoint->address == address) && (breakpoint->asid == 0)) {
|
||||
LOG_ERROR("Duplicate Breakpoint IVA: " TARGET_ADDR_FMT " (BP %" PRIu32 ")",
|
||||
LOG_TARGET_ERROR(target, "Duplicate Breakpoint IVA: " TARGET_ADDR_FMT " (BP %" PRIu32 ")",
|
||||
address, breakpoint->unique_id);
|
||||
return ERROR_TARGET_DUPLICATE_BREAKPOINT;
|
||||
|
||||
|
@ -190,13 +189,13 @@ static int hybrid_breakpoint_add_internal(struct target *target,
|
|||
|
||||
retval = target_add_hybrid_breakpoint(target, *breakpoint_p);
|
||||
if (retval != ERROR_OK) {
|
||||
LOG_ERROR("could not add breakpoint");
|
||||
LOG_TARGET_ERROR(target, "could not add breakpoint");
|
||||
free((*breakpoint_p)->orig_instr);
|
||||
free(*breakpoint_p);
|
||||
*breakpoint_p = NULL;
|
||||
return retval;
|
||||
}
|
||||
LOG_DEBUG(
|
||||
LOG_TARGET_DEBUG(target,
|
||||
"added %s Hybrid breakpoint at address " TARGET_ADDR_FMT " of length 0x%8.8x, (BPID: %" PRIu32 ")",
|
||||
breakpoint_type_strings[(*breakpoint_p)->type],
|
||||
(*breakpoint_p)->address,
|
||||
|
@ -298,7 +297,7 @@ static int breakpoint_free(struct target *target, struct breakpoint *breakpoint_
|
|||
return retval;
|
||||
}
|
||||
|
||||
LOG_DEBUG("free BPID: %" PRIu32 " --> %d", breakpoint->unique_id, retval);
|
||||
LOG_TARGET_DEBUG(target, "free BPID: %" PRIu32 " --> %d", breakpoint->unique_id, retval);
|
||||
(*breakpoint_p) = breakpoint->next;
|
||||
free(breakpoint->orig_instr);
|
||||
free(breakpoint);
|
||||
|
@ -404,7 +403,7 @@ static int watchpoint_free(struct target *target, struct watchpoint *watchpoint_
|
|||
return retval;
|
||||
}
|
||||
|
||||
LOG_DEBUG("free WPID: %d --> %d", watchpoint->unique_id, retval);
|
||||
LOG_TARGET_DEBUG(target, "free WPID: %d --> %d", watchpoint->unique_id, retval);
|
||||
(*watchpoint_p) = watchpoint->next;
|
||||
free(watchpoint);
|
||||
|
||||
|
@ -514,7 +513,7 @@ static int watchpoint_add_internal(struct target *target, target_addr_t address,
|
|||
|| watchpoint->value != value
|
||||
|| watchpoint->mask != mask
|
||||
|| watchpoint->rw != rw) {
|
||||
LOG_ERROR("address " TARGET_ADDR_FMT
|
||||
LOG_TARGET_ERROR(target, "address " TARGET_ADDR_FMT
|
||||
" already has watchpoint %d",
|
||||
address, watchpoint->unique_id);
|
||||
return ERROR_FAIL;
|
||||
|
@ -548,7 +547,7 @@ static int watchpoint_add_internal(struct target *target, target_addr_t address,
|
|||
default:
|
||||
reason = "unrecognized error";
|
||||
bye:
|
||||
LOG_ERROR("can't add %s watchpoint at " TARGET_ADDR_FMT ", %s",
|
||||
LOG_TARGET_ERROR(target, "can't add %s watchpoint at " TARGET_ADDR_FMT ", %s",
|
||||
watchpoint_rw_strings[(*watchpoint_p)->rw],
|
||||
address, reason);
|
||||
free(*watchpoint_p);
|
||||
|
@ -556,9 +555,8 @@ bye:
|
|||
return retval;
|
||||
}
|
||||
|
||||
LOG_DEBUG("[%d] added %s watchpoint at " TARGET_ADDR_FMT
|
||||
LOG_TARGET_DEBUG(target, "added %s watchpoint at " TARGET_ADDR_FMT
|
||||
" of length 0x%8.8" PRIx32 " (WPID: %d)",
|
||||
target->coreid,
|
||||
watchpoint_rw_strings[(*watchpoint_p)->rw],
|
||||
(*watchpoint_p)->address,
|
||||
(*watchpoint_p)->length,
|
||||
|
@ -674,7 +672,7 @@ int watchpoint_hit(struct target *target, enum watchpoint_rw *rw,
|
|||
*rw = hit_watchpoint->rw;
|
||||
*address = hit_watchpoint->address;
|
||||
|
||||
LOG_DEBUG("Found hit watchpoint at " TARGET_ADDR_FMT " (WPID: %d)",
|
||||
LOG_TARGET_DEBUG(target, "Found hit watchpoint at " TARGET_ADDR_FMT " (WPID: %d)",
|
||||
hit_watchpoint->address,
|
||||
hit_watchpoint->unique_id);
|
||||
|
||||
|
|
|
@ -3974,7 +3974,7 @@ static int handle_bp_command_set(struct command_invocation *cmd,
|
|||
|
||||
} else if (addr == 0) {
|
||||
if (!target->type->add_context_breakpoint) {
|
||||
LOG_ERROR("Context breakpoint not available");
|
||||
LOG_TARGET_ERROR(target, "Context breakpoint not available");
|
||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||
}
|
||||
retval = context_breakpoint_add(target, asid, length, hw);
|
||||
|
@ -3984,7 +3984,7 @@ static int handle_bp_command_set(struct command_invocation *cmd,
|
|||
|
||||
} else {
|
||||
if (!target->type->add_hybrid_breakpoint) {
|
||||
LOG_ERROR("Hybrid breakpoint not available");
|
||||
LOG_TARGET_ERROR(target, "Hybrid breakpoint not available");
|
||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||
}
|
||||
retval = hybrid_breakpoint_add(target, addr, asid, length, hw);
|
||||
|
@ -4121,7 +4121,7 @@ COMMAND_HANDLER(handle_wp_command)
|
|||
type = WPT_ACCESS;
|
||||
break;
|
||||
default:
|
||||
LOG_ERROR("invalid watchpoint mode ('%c')", CMD_ARGV[2][0]);
|
||||
LOG_TARGET_ERROR(target, "invalid watchpoint mode ('%c')", CMD_ARGV[2][0]);
|
||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||
}
|
||||
/* fall through */
|
||||
|
@ -4137,7 +4137,7 @@ COMMAND_HANDLER(handle_wp_command)
|
|||
int retval = watchpoint_add(target, addr, length, type,
|
||||
data_value, data_mask);
|
||||
if (retval != ERROR_OK)
|
||||
LOG_ERROR("Failure setting watchpoints");
|
||||
LOG_TARGET_ERROR(target, "Failure setting watchpoints");
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue