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

bool replay_events_enabled(void)
{
    return false;
}

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

int64_t replay_read_clock(unsigned int kind)
{
    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(Chardev *chr)
{
}

void replay_chr_be_write(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();
}
