]> git.proxmox.com Git - mirror_qemu.git/commitdiff
replay: assert time only goes forward
authorAlex Bennée <alex.bennee@linaro.org>
Wed, 5 Apr 2017 10:05:28 +0000 (11:05 +0100)
committerAlex Bennée <alex.bennee@linaro.org>
Mon, 10 Apr 2017 09:23:38 +0000 (10:23 +0100)
If we find ourselves trying to add an event to the log where time has
gone backwards it is because a vCPU event has occurred and the
main-loop is not yet aware of time moving forward. This should not
happen and if it does its better to fail early than generate a log
that will have weird behaviour.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
replay/replay-internal.c
replay/replay.c

index bea7b4aa6b18a2875f413ab9292b248aa723a093..fca851401292714f0cf7ae066e5729e495767ef5 100644 (file)
@@ -195,6 +195,10 @@ void replay_save_instructions(void)
     if (replay_file && replay_mode == REPLAY_MODE_RECORD) {
         replay_mutex_lock();
         int diff = (int)(replay_get_current_step() - replay_state.current_step);
+
+        /* Time can only go forward */
+        assert(diff >= 0);
+
         if (diff > 0) {
             replay_put_event(EVENT_INSTRUCTION);
             replay_put_dword(diff);
index 9e0724e756b8156a305ed5a9d2654731df3136e1..f810628cac525cad3202de1bb3dc7d9fc424a239 100644 (file)
@@ -84,6 +84,10 @@ void replay_account_executed_instructions(void)
         if (replay_state.instructions_count > 0) {
             int count = (int)(replay_get_current_step()
                               - replay_state.current_step);
+
+            /* Time can only go forward */
+            assert(count >= 0);
+
             replay_state.instructions_count -= count;
             replay_state.current_step += count;
             if (replay_state.instructions_count == 0) {