qemu/replay/replay-time.c
<<
>>
Prefs
   1/*
   2 * replay-time.c
   3 *
   4 * Copyright (c) 2010-2015 Institute for System Programming
   5 *                         of the Russian Academy of Sciences.
   6 *
   7 * This work is licensed under the terms of the GNU GPL, version 2 or later.
   8 * See the COPYING file in the top-level directory.
   9 *
  10 */
  11
  12#include "qemu/osdep.h"
  13#include "sysemu/replay.h"
  14#include "replay-internal.h"
  15#include "qemu/error-report.h"
  16
  17int64_t replay_save_clock(ReplayClockKind kind, int64_t clock,
  18                          int64_t raw_icount)
  19{
  20    g_assert(replay_file);
  21    g_assert(replay_mutex_locked());
  22
  23    /*
  24     * Due to the caller's locking requirements we get the icount from it
  25     * instead of using replay_save_instructions().
  26     */
  27    replay_advance_current_icount(raw_icount);
  28    replay_put_event(EVENT_CLOCK + kind);
  29    replay_put_qword(clock);
  30
  31    return clock;
  32}
  33
  34void replay_read_next_clock(ReplayClockKind kind)
  35{
  36    unsigned int read_kind = replay_state.data_kind - EVENT_CLOCK;
  37
  38    assert(read_kind == kind);
  39
  40    int64_t clock = replay_get_qword();
  41
  42    replay_check_error();
  43    replay_finish_event();
  44
  45    replay_state.cached_clock[read_kind] = clock;
  46}
  47
  48/*! Reads next clock event from the input. */
  49int64_t replay_read_clock(ReplayClockKind kind, int64_t raw_icount)
  50{
  51    int64_t ret;
  52    g_assert(replay_file && replay_mutex_locked());
  53
  54    replay_advance_current_icount(raw_icount);
  55
  56    if (replay_next_event_is(EVENT_CLOCK + kind)) {
  57        replay_read_next_clock(kind);
  58    }
  59    ret = replay_state.cached_clock[kind];
  60
  61    return ret;
  62}
  63