aboutsummaryrefslogtreecommitdiff
path: root/src/target/target.c
diff options
context:
space:
mode:
authorTarek BOCHKATI <tarek.bouchkati@gmail.com>2021-09-07 14:25:32 +0100
committerAntonio Borneo <borneo.antonio@gmail.com>2021-10-02 13:15:57 +0000
commit98d9f1168cbdc59e4c2c0b1f01b225a4df9ad98a (patch)
treeabbf004fe04480b1dcb48409ce37dc9fe712ebe1 /src/target/target.c
parentba1061fe1daf0071499e40da860350979105b69e (diff)
downloadriscv-openocd-98d9f1168cbdc59e4c2c0b1f01b225a4df9ad98a.zip
riscv-openocd-98d9f1168cbdc59e4c2c0b1f01b225a4df9ad98a.tar.gz
riscv-openocd-98d9f1168cbdc59e4c2c0b1f01b225a4df9ad98a.tar.bz2
target: reset target examined flag if target::examine() fails
For example: before this change in cortex_m_examine, if we fail reading CPUID we return a failure code but target was set to examined which is not consistent. Change-Id: I9f0ebe8f811849e54d1b350b0db506cb3fdd58f4 Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6548 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src/target/target.c')
-rw-r--r--src/target/target.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/target/target.c b/src/target/target.c
index fa0c2b2..35e9b53 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -717,6 +717,15 @@ static int no_mmu(struct target *target, int *enabled)
return ERROR_OK;
}
+/**
+ * Reset the @c examined flag for the given target.
+ * Pure paranoia -- targets are zeroed on allocation.
+ */
+static inline void target_reset_examined(struct target *target)
+{
+ target->examined = false;
+}
+
static int default_examine(struct target *target)
{
target_set_examined(target);
@@ -737,10 +746,12 @@ int target_examine_one(struct target *target)
int retval = target->type->examine(target);
if (retval != ERROR_OK) {
+ target_reset_examined(target);
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_FAIL);
return retval;
}
+ target_set_examined(target);
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
return ERROR_OK;
@@ -1522,15 +1533,6 @@ static int target_profiling(struct target *target, uint32_t *samples,
num_samples, seconds);
}
-/**
- * Reset the @c examined flag for the given target.
- * Pure paranoia -- targets are zeroed on allocation.
- */
-static void target_reset_examined(struct target *target)
-{
- target->examined = false;
-}
-
static int handle_target(void *priv);
static int target_init_one(struct command_context *cmd_ctx,
@@ -3055,7 +3057,7 @@ static int handle_target(void *priv)
/* 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->examined = true;
+ target_set_examined(target);
LOG_USER("Examination failed, GDB will be halted. Polling again in %dms",
target->backoff.times * polling_interval);
return retval;
@@ -5308,8 +5310,13 @@ static int jim_target_examine(Jim_Interp *interp, int argc, Jim_Obj *const *argv
}
int e = target->type->examine(target);
- if (e != ERROR_OK)
+ if (e != ERROR_OK) {
+ target_reset_examined(target);
return JIM_ERR;
+ }
+
+ target_set_examined(target);
+
return JIM_OK;
}