target: restore last run state after profiling
Now that it’s possible to start profiling from either a running or a halted state, rather than unconditionally halting after profiling finishes, it makes more sense to restore the processor to whatever state (running or halted) it was in before profiling started. Change-Id: If6f6e70a1a365c1ce3b348a306c435c220b8bf12 Signed-off-by: Christopher Head <chead@zaber.com> Reviewed-on: http://openocd.zylin.com/5237 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
parent
d3aa2d3536
commit
d05ef53cbd
|
@ -4097,6 +4097,7 @@ COMMAND_HANDLER(handle_profile_command)
|
|||
uint32_t offset;
|
||||
uint32_t num_of_samples;
|
||||
int retval = ERROR_OK;
|
||||
bool halted_before_profiling = target->state == TARGET_HALTED;
|
||||
|
||||
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], offset);
|
||||
|
||||
|
@ -4127,12 +4128,23 @@ COMMAND_HANDLER(handle_profile_command)
|
|||
free(samples);
|
||||
return retval;
|
||||
}
|
||||
if (target->state == TARGET_RUNNING) {
|
||||
|
||||
if (target->state == TARGET_RUNNING && halted_before_profiling) {
|
||||
/* The target was halted before we started and is running now. Halt it,
|
||||
* for consistency. */
|
||||
retval = target_halt(target);
|
||||
if (retval != ERROR_OK) {
|
||||
free(samples);
|
||||
return retval;
|
||||
}
|
||||
} else if (target->state == TARGET_HALTED && !halted_before_profiling) {
|
||||
/* The target was running before we started and is halted now. Resume
|
||||
* it, for consistency. */
|
||||
retval = target_resume(target, 1, 0, 0, 0);
|
||||
if (retval != ERROR_OK) {
|
||||
free(samples);
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
||||
retval = target_poll(target);
|
||||
|
|
Loading…
Reference in New Issue