target/riscv: Set target->state in riscv013_halt_go()
Then also set it when we resume in examine(), which doesn't use the full abstractions because not all required data structures are filled out yet. Hopefully fixes #749. Change-Id: I0c6ab16da1f035ca2fbdb9f7be1462d44ddce3a0 Signed-off-by: Tim Newsome <tim@sifive.com>
This commit is contained in:
parent
d6bf022560
commit
86e84d3f6d
|
@ -1765,8 +1765,11 @@ static int examine(struct target *target)
|
|||
return ERROR_FAIL;
|
||||
}
|
||||
|
||||
if (!halted)
|
||||
if (!halted) {
|
||||
riscv013_step_or_resume_current_hart(target, false);
|
||||
target->state = TARGET_RUNNING;
|
||||
target->debug_reason = DBG_REASON_NOTHALTED;
|
||||
}
|
||||
|
||||
if (target->smp) {
|
||||
bool haltgroup_supported;
|
||||
|
@ -4331,8 +4334,17 @@ static int riscv013_halt_go(struct target *target)
|
|||
t->state = TARGET_UNAVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
/* Set state for the current target based on its dmstatus. */
|
||||
if (get_field(dmstatus, DM_DMSTATUS_ALLHALTED)) {
|
||||
target->state = TARGET_HALTED;
|
||||
if (target->debug_reason == DBG_REASON_NOTHALTED)
|
||||
target->debug_reason = DBG_REASON_DBGRQ;
|
||||
} else if (get_field(dmstatus, DM_DMSTATUS_ALLUNAVAIL)) {
|
||||
target->state = TARGET_UNAVAILABLE;
|
||||
}
|
||||
}
|
||||
/* The "else" case is handled in halt_go(). */
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue