aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/target/riscv/riscv-013.c25
-rw-r--r--src/target/riscv/riscv.c15
-rw-r--r--src/target/target.c20
-rwxr-xr-xtools/filter_openocd_log.py2
4 files changed, 30 insertions, 32 deletions
diff --git a/src/target/riscv/riscv-013.c b/src/target/riscv/riscv-013.c
index ec9cef7..457f18c 100644
--- a/src/target/riscv/riscv-013.c
+++ b/src/target/riscv/riscv-013.c
@@ -652,10 +652,10 @@ static int dmi_op(struct target *target, uint32_t *data_in,
int result = dmi_op_timeout(target, data_in, dmi_busy_encountered, dmi_op,
address, data_out, riscv_command_timeout_sec, exec, ensure_success);
if (result == ERROR_TIMEOUT_REACHED) {
- LOG_ERROR("DMI operation didn't complete in %d seconds. The target is "
+ LOG_ERROR("[%s] DMI operation didn't complete in %d seconds. The target is "
"either really slow or broken. You could increase the "
"timeout with riscv set_command_timeout_sec.",
- riscv_command_timeout_sec);
+ target_name(target), riscv_command_timeout_sec);
return ERROR_FAIL;
}
return result;
@@ -863,8 +863,8 @@ static uint32_t access_register_command(struct target *target, uint32_t number,
command = set_field(command, AC_ACCESS_REGISTER_AARSIZE, 3);
break;
default:
- LOG_ERROR("%d-bit register %s not supported.", size,
- gdb_regno_name(number));
+ LOG_ERROR("[%s] %d-bit register %s not supported.",
+ target_name(target), size, gdb_regno_name(number));
assert(0);
}
@@ -1546,8 +1546,8 @@ static int examine(struct target *target)
return ERROR_FAIL;
}
if (get_field(dtmcontrol, DTM_DTMCS_VERSION) != 1) {
- LOG_ERROR("Unsupported DTM version %d. (dtmcontrol=0x%x)",
- get_field(dtmcontrol, DTM_DTMCS_VERSION), dtmcontrol);
+ LOG_ERROR("[%s] Unsupported DTM version %d. (dtmcontrol=0x%x)",
+ target_name(target), get_field(dtmcontrol, DTM_DTMCS_VERSION), dtmcontrol);
return ERROR_FAIL;
}
@@ -1628,7 +1628,8 @@ static int examine(struct target *target)
info->datacount = get_field(abstractcs, DM_ABSTRACTCS_DATACOUNT);
info->progbufsize = get_field(abstractcs, DM_ABSTRACTCS_PROGBUFSIZE);
- LOG_INFO("datacount=%d progbufsize=%d", info->datacount, info->progbufsize);
+ LOG_INFO("[%s] datacount=%d progbufsize=%d", target_name(target),
+ info->datacount, info->progbufsize);
RISCV_INFO(r);
r->impebreak = get_field(dmstatus, DM_DMSTATUS_IMPEBREAK);
@@ -1685,7 +1686,8 @@ static int examine(struct target *target)
bool halted = riscv_is_halted(target);
if (!halted) {
if (riscv013_halt_go(target) != ERROR_OK) {
- LOG_ERROR("Fatal: Hart %d failed to halt during examine()", r->current_hartid);
+ LOG_ERROR("[%s] Fatal: Hart %d failed to halt during examine()",
+ target_name(target), r->current_hartid);
return ERROR_FAIL;
}
}
@@ -1727,7 +1729,7 @@ static int examine(struct target *target)
return ERROR_FAIL;
/* Display this as early as possible to help people who are using
- * really slow simulators. */
+ * really slow simulators. */
LOG_DEBUG(" hart %d: XLEN=%d, misa=0x%" PRIx64, r->current_hartid, r->xlen,
r->misa);
@@ -4193,9 +4195,8 @@ static int riscv013_halt_go(struct target *target)
if (dmi_read(target, &dmcontrol, DM_DMCONTROL) != ERROR_OK)
return ERROR_FAIL;
- LOG_ERROR("unable to halt hart %d", r->current_hartid);
- LOG_ERROR(" dmcontrol=0x%08x", dmcontrol);
- LOG_ERROR(" dmstatus =0x%08x", dmstatus);
+ LOG_ERROR("[%s] Unable to halt hart %d. dmcontrol=0x%08x, dmstatus=0x%08x",
+ target_name(target), r->current_hartid, dmcontrol, dmstatus);
return ERROR_FAIL;
}
diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index 3d0144d..8d134c1 100644
--- a/src/target/riscv/riscv.c
+++ b/src/target/riscv/riscv.c
@@ -418,7 +418,8 @@ static struct target_type *get_target_type(struct target *target)
case 1:
return &riscv013_target;
default:
- LOG_ERROR("Unsupported DTM version: %d", info->dtm_version);
+ LOG_ERROR("[%s] Unsupported DTM version: %d",
+ target_name(target), info->dtm_version);
return NULL;
}
}
@@ -1108,10 +1109,9 @@ static int old_or_new_riscv_step(struct target *target, int current,
return riscv_openocd_step(target, current, address, handle_breakpoints);
}
-
static int riscv_examine(struct target *target)
{
- LOG_DEBUG("riscv_examine()");
+ LOG_DEBUG("[%s]", target_name(target));
if (target_was_examined(target)) {
LOG_DEBUG("Target was already examined.");
return ERROR_OK;
@@ -2079,7 +2079,8 @@ static enum riscv_poll_hart riscv_poll_hart(struct target *target, int hartid)
if (riscv_set_current_hartid(target, hartid) != ERROR_OK)
return RPH_ERROR;
- LOG_DEBUG("polling hart %d, target->state=%d", hartid, target->state);
+ LOG_DEBUG("[%s] polling hart %d, target->state=%d", target_name(target),
+ hartid, target->state);
/* If OpenOCD thinks we're running but this hart is halted then it's time
* to raise an event. */
@@ -2185,6 +2186,8 @@ int riscv_openocd_poll(struct target *target)
for (struct target_list *list = target->head; list;
list = list->next, i++) {
struct target *t = list->target;
+ if (!target_was_examined(t))
+ continue;
riscv_info_t *r = riscv_info(t);
enum riscv_poll_hart out = riscv_poll_hart(t, r->current_hartid);
switch (out) {
@@ -4099,8 +4102,8 @@ int riscv_init_registers(struct target *target)
target->reg_cache->num_regs += entry->high - entry->low + 1;
}
- LOG_DEBUG("create register cache for %d registers",
- target->reg_cache->num_regs);
+ LOG_DEBUG("[%s] create register cache for %d registers",
+ target_name(target), target->reg_cache->num_regs);
target->reg_cache->reg_list =
calloc(target->reg_cache->num_regs, sizeof(struct reg));
diff --git a/src/target/target.c b/src/target/target.c
index 457dc86..bc4fbf8 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -751,6 +751,7 @@ int target_examine_one(struct target *target)
return retval;
}
+ LOG_USER("[%s] Target successfully examined.", target_name(target));
target_set_examined(target);
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
@@ -3021,9 +3022,6 @@ static int handle_target(void *priv)
is_jtag_poll_safe() && target;
target = target->next) {
- if (!target_was_examined(target))
- continue;
-
if (!target->tap->enabled)
continue;
@@ -3040,10 +3038,9 @@ static int handle_target(void *priv)
retval = target_poll(target);
if (retval != ERROR_OK) {
/* 100ms polling interval. Increase interval between polling up to 5000ms */
- if (target->backoff.times * polling_interval < 5000) {
- target->backoff.times *= 2;
- target->backoff.times++;
- }
+ if (target->backoff.times * polling_interval < 5000)
+ target->backoff.times = MIN(target->backoff.times * 2 + 1,
+ 5000 / polling_interval);
/* Tell GDB to halt the debugger. This allows the user to
* run monitor commands to handle the situation.
@@ -3051,15 +3048,12 @@ static int handle_target(void *priv)
target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
}
if (target->backoff.times > 0) {
- LOG_USER("Polling target %s failed, trying to reexamine", target_name(target));
+ LOG_DEBUG("[%s] Polling failed, trying to reexamine", target_name(target));
target_reset_examined(target);
retval = target_examine_one(target);
- /* Target examination could have failed due to unstable connection,
- * but we set the examined flag anyway to repoll it later */
if (retval != ERROR_OK) {
- target_set_examined(target);
- LOG_USER("Examination failed, GDB will be halted. Polling again in %dms",
- target->backoff.times * polling_interval);
+ LOG_DEBUG("[%s] Examination failed, GDB will be halted. Polling again in %dms",
+ target_name(target), target->backoff.times * polling_interval);
return retval;
}
}
diff --git a/tools/filter_openocd_log.py b/tools/filter_openocd_log.py
index da17b17..cd38efd 100755
--- a/tools/filter_openocd_log.py
+++ b/tools/filter_openocd_log.py
@@ -106,7 +106,7 @@ def main(args):
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('file', nargs='*', help='input file')
parser.add_argument('-o', '--output', help='output file', default=sys.stdout)
- parser.add_argument('-w', '--window', type=int, default=100,
+ parser.add_argument('-w', '--window', type=int, default=400,
help='number of lines to consider when looking for repetitions')
args = parser.parse_args(args)