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>
This commit is contained in:
parent
ba1061fe1d
commit
98d9f1168c
|
@ -717,6 +717,15 @@ static int no_mmu(struct target *target, int *enabled)
|
||||||
return ERROR_OK;
|
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)
|
static int default_examine(struct target *target)
|
||||||
{
|
{
|
||||||
target_set_examined(target);
|
target_set_examined(target);
|
||||||
|
@ -737,10 +746,12 @@ int target_examine_one(struct target *target)
|
||||||
|
|
||||||
int retval = target->type->examine(target);
|
int retval = target->type->examine(target);
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
|
target_reset_examined(target);
|
||||||
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_FAIL);
|
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_FAIL);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
target_set_examined(target);
|
||||||
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
|
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
@ -1522,15 +1533,6 @@ static int target_profiling(struct target *target, uint32_t *samples,
|
||||||
num_samples, seconds);
|
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 handle_target(void *priv);
|
||||||
|
|
||||||
static int target_init_one(struct command_context *cmd_ctx,
|
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,
|
/* Target examination could have failed due to unstable connection,
|
||||||
* but we set the examined flag anyway to repoll it later */
|
* but we set the examined flag anyway to repoll it later */
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
target->examined = true;
|
target_set_examined(target);
|
||||||
LOG_USER("Examination failed, GDB will be halted. Polling again in %dms",
|
LOG_USER("Examination failed, GDB will be halted. Polling again in %dms",
|
||||||
target->backoff.times * polling_interval);
|
target->backoff.times * polling_interval);
|
||||||
return retval;
|
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);
|
int e = target->type->examine(target);
|
||||||
if (e != ERROR_OK)
|
if (e != ERROR_OK) {
|
||||||
|
target_reset_examined(target);
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
target_set_examined(target);
|
||||||
|
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue