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
|
* breakpoint" ... check all the parameters before
|
||||||
* succeeding.
|
* 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);
|
address, breakpoint->unique_id);
|
||||||
return ERROR_TARGET_DUPLICATE_BREAKPOINT;
|
return ERROR_TARGET_DUPLICATE_BREAKPOINT;
|
||||||
}
|
}
|
||||||
|
@ -83,16 +83,15 @@ static int breakpoint_add_internal(struct target *target,
|
||||||
default:
|
default:
|
||||||
reason = "unknown reason";
|
reason = "unknown reason";
|
||||||
fail:
|
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)->orig_instr);
|
||||||
free(*breakpoint_p);
|
free(*breakpoint_p);
|
||||||
*breakpoint_p = NULL;
|
*breakpoint_p = NULL;
|
||||||
return retval;
|
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 ")",
|
" of length 0x%8.8x, (BPID: %" PRIu32 ")",
|
||||||
target->coreid,
|
|
||||||
breakpoint_type_strings[(*breakpoint_p)->type],
|
breakpoint_type_strings[(*breakpoint_p)->type],
|
||||||
(*breakpoint_p)->address, (*breakpoint_p)->length,
|
(*breakpoint_p)->address, (*breakpoint_p)->length,
|
||||||
(*breakpoint_p)->unique_id);
|
(*breakpoint_p)->unique_id);
|
||||||
|
@ -134,14 +133,14 @@ static int context_breakpoint_add_internal(struct target *target,
|
||||||
(*breakpoint_p)->unique_id = bpwp_unique_id++;
|
(*breakpoint_p)->unique_id = bpwp_unique_id++;
|
||||||
retval = target_add_context_breakpoint(target, *breakpoint_p);
|
retval = target_add_context_breakpoint(target, *breakpoint_p);
|
||||||
if (retval != ERROR_OK) {
|
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)->orig_instr);
|
||||||
free(*breakpoint_p);
|
free(*breakpoint_p);
|
||||||
*breakpoint_p = NULL;
|
*breakpoint_p = NULL;
|
||||||
return retval;
|
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_type_strings[(*breakpoint_p)->type],
|
||||||
(*breakpoint_p)->asid, (*breakpoint_p)->length,
|
(*breakpoint_p)->asid, (*breakpoint_p)->length,
|
||||||
(*breakpoint_p)->unique_id);
|
(*breakpoint_p)->unique_id);
|
||||||
|
@ -165,11 +164,11 @@ static int hybrid_breakpoint_add_internal(struct target *target,
|
||||||
* breakpoint" ... check all the parameters before
|
* breakpoint" ... check all the parameters before
|
||||||
* succeeding.
|
* 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);
|
asid, breakpoint->unique_id);
|
||||||
return ERROR_TARGET_DUPLICATE_BREAKPOINT;
|
return ERROR_TARGET_DUPLICATE_BREAKPOINT;
|
||||||
} else if ((breakpoint->address == address) && (breakpoint->asid == 0)) {
|
} 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);
|
address, breakpoint->unique_id);
|
||||||
return ERROR_TARGET_DUPLICATE_BREAKPOINT;
|
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);
|
retval = target_add_hybrid_breakpoint(target, *breakpoint_p);
|
||||||
if (retval != ERROR_OK) {
|
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)->orig_instr);
|
||||||
free(*breakpoint_p);
|
free(*breakpoint_p);
|
||||||
*breakpoint_p = NULL;
|
*breakpoint_p = NULL;
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
LOG_DEBUG(
|
LOG_TARGET_DEBUG(target,
|
||||||
"added %s Hybrid breakpoint at address " TARGET_ADDR_FMT " of length 0x%8.8x, (BPID: %" PRIu32 ")",
|
"added %s Hybrid breakpoint at address " TARGET_ADDR_FMT " of length 0x%8.8x, (BPID: %" PRIu32 ")",
|
||||||
breakpoint_type_strings[(*breakpoint_p)->type],
|
breakpoint_type_strings[(*breakpoint_p)->type],
|
||||||
(*breakpoint_p)->address,
|
(*breakpoint_p)->address,
|
||||||
|
@ -298,7 +297,7 @@ static int breakpoint_free(struct target *target, struct breakpoint *breakpoint_
|
||||||
return retval;
|
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;
|
(*breakpoint_p) = breakpoint->next;
|
||||||
free(breakpoint->orig_instr);
|
free(breakpoint->orig_instr);
|
||||||
free(breakpoint);
|
free(breakpoint);
|
||||||
|
@ -404,7 +403,7 @@ static int watchpoint_free(struct target *target, struct watchpoint *watchpoint_
|
||||||
return retval;
|
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;
|
(*watchpoint_p) = watchpoint->next;
|
||||||
free(watchpoint);
|
free(watchpoint);
|
||||||
|
|
||||||
|
@ -514,7 +513,7 @@ static int watchpoint_add_internal(struct target *target, target_addr_t address,
|
||||||
|| watchpoint->value != value
|
|| watchpoint->value != value
|
||||||
|| watchpoint->mask != mask
|
|| watchpoint->mask != mask
|
||||||
|| watchpoint->rw != rw) {
|
|| watchpoint->rw != rw) {
|
||||||
LOG_ERROR("address " TARGET_ADDR_FMT
|
LOG_TARGET_ERROR(target, "address " TARGET_ADDR_FMT
|
||||||
" already has watchpoint %d",
|
" already has watchpoint %d",
|
||||||
address, watchpoint->unique_id);
|
address, watchpoint->unique_id);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
@ -548,7 +547,7 @@ static int watchpoint_add_internal(struct target *target, target_addr_t address,
|
||||||
default:
|
default:
|
||||||
reason = "unrecognized error";
|
reason = "unrecognized error";
|
||||||
bye:
|
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],
|
watchpoint_rw_strings[(*watchpoint_p)->rw],
|
||||||
address, reason);
|
address, reason);
|
||||||
free(*watchpoint_p);
|
free(*watchpoint_p);
|
||||||
|
@ -556,9 +555,8 @@ bye:
|
||||||
return retval;
|
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)",
|
" of length 0x%8.8" PRIx32 " (WPID: %d)",
|
||||||
target->coreid,
|
|
||||||
watchpoint_rw_strings[(*watchpoint_p)->rw],
|
watchpoint_rw_strings[(*watchpoint_p)->rw],
|
||||||
(*watchpoint_p)->address,
|
(*watchpoint_p)->address,
|
||||||
(*watchpoint_p)->length,
|
(*watchpoint_p)->length,
|
||||||
|
@ -674,7 +672,7 @@ int watchpoint_hit(struct target *target, enum watchpoint_rw *rw,
|
||||||
*rw = hit_watchpoint->rw;
|
*rw = hit_watchpoint->rw;
|
||||||
*address = hit_watchpoint->address;
|
*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->address,
|
||||||
hit_watchpoint->unique_id);
|
hit_watchpoint->unique_id);
|
||||||
|
|
||||||
|
|
|
@ -3974,7 +3974,7 @@ static int handle_bp_command_set(struct command_invocation *cmd,
|
||||||
|
|
||||||
} else if (addr == 0) {
|
} else if (addr == 0) {
|
||||||
if (!target->type->add_context_breakpoint) {
|
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;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
retval = context_breakpoint_add(target, asid, length, hw);
|
retval = context_breakpoint_add(target, asid, length, hw);
|
||||||
|
@ -3984,7 +3984,7 @@ static int handle_bp_command_set(struct command_invocation *cmd,
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (!target->type->add_hybrid_breakpoint) {
|
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;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
retval = hybrid_breakpoint_add(target, addr, asid, length, hw);
|
retval = hybrid_breakpoint_add(target, addr, asid, length, hw);
|
||||||
|
@ -4121,7 +4121,7 @@ COMMAND_HANDLER(handle_wp_command)
|
||||||
type = WPT_ACCESS;
|
type = WPT_ACCESS;
|
||||||
break;
|
break;
|
||||||
default:
|
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;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
@ -4137,7 +4137,7 @@ COMMAND_HANDLER(handle_wp_command)
|
||||||
int retval = watchpoint_add(target, addr, length, type,
|
int retval = watchpoint_add(target, addr, length, type,
|
||||||
data_value, data_mask);
|
data_value, data_mask);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
LOG_ERROR("Failure setting watchpoints");
|
LOG_TARGET_ERROR(target, "Failure setting watchpoints");
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue