xemu/stubs/replay.c
Pavel Dovgalyuk fda8458bd3 gdbstub: add reverse step support in replay mode
GDB remote protocol supports two reverse debugging commands:
reverse step and reverse continue.
This patch adds support of the first one to the gdbstub.
Reverse step is intended to step one instruction in the backwards
direction. This is not possible in regular execution.
But replayed execution is deterministic, therefore we can load one of
the prior snapshots and proceed to the desired step. It is equivalent
to stepping one instruction back.
There should be at least one snapshot preceding the debugged part of
the replay log.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

--

v4 changes:
 - inverted condition in cpu_handle_guest_debug (suggested by Alex Bennée)
Message-Id: <160174522341.12451.1498758422543765253.stgit@pasha-ThinkPad-X280>

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-10-06 08:34:49 +02:00

101 lines
1.3 KiB
C

#include "qemu/osdep.h"
#include "sysemu/replay.h"
ReplayMode replay_mode;
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;
}
bool replay_checkpoint(ReplayCheckpoint checkpoint)
{
return true;
}
bool replay_events_enabled(void)
{
return false;
}
void replay_finish(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();
}
void replay_block_event(QEMUBH *bh, uint64_t id)
{
}
uint64_t blkreplay_next_id(void)
{
return 0;
}
void replay_mutex_lock(void)
{
}
void replay_mutex_unlock(void)
{
}
void replay_save_random(int ret, void *buf, size_t len)
{
}
int replay_read_random(void *buf, size_t len)
{
return 0;
}
uint64_t replay_get_current_icount(void)
{
return 0;
}
bool replay_reverse_step(void)
{
return false;
}