#include "qemu/osdep.h"
#include "sysemu/replay.h"
#include "block/aio.h"

bool replay_events_enabled(void)
{
    return false;
}

int64_t replay_save_clock(ReplayClockKind kind,
                          int64_t clock, int64_t raw_icount)
{
    abort();
    return 0;
}

int64_t replay_read_clock(ReplayClockKind kind, int64_t raw_icount)
{
    abort();
    return 0;
}

uint64_t replay_get_current_icount(void)
{
    return 0;
}

void replay_bh_schedule_event(QEMUBH *bh)
{
    qemu_bh_schedule(bh);
}

void replay_bh_schedule_oneshot_event(AioContext *ctx,
     QEMUBHFunc *cb, void *opaque)
{
    aio_bh_schedule_oneshot(ctx, cb, opaque);
}

bool replay_checkpoint(ReplayCheckpoint checkpoint)
{
    return true;
}

void replay_mutex_lock(void)
{
}

void replay_mutex_unlock(void)
{
}

void replay_register_char_driver(struct Chardev *chr)
{
}

void replay_chr_be_write(struct Chardev *s, uint8_t *buf, int len)
{
    abort();
}

void replay_char_write_event_save(int res, int offset)
{
    abort();
}

void replay_char_write_event_load(int *res, int *offset)
{
    abort();
}

int replay_char_read_all_load(uint8_t *buf)
{
    abort();
}

void replay_char_read_all_save_error(int res)
{
    abort();
}

void replay_char_read_all_save_buf(uint8_t *buf, int offset)
{
    abort();
}
