This is an automated email from Gerrit.

Christopher Head ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/5237

-- gerrit

commit ca0fb444cdae1a82beadf2e25b31bd3b0c186f50
Author: Christopher Head <[email protected]>
Date:   Fri Jun 14 15:35:31 2019 -0700

    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 <[email protected]>

diff --git a/src/target/target.c b/src/target/target.c
index 18abfac..401f3bb 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -4048,6 +4048,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);
 
@@ -4078,12 +4079,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);

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to