mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
replay: introduce breakpoint at the specified step
This patch introduces replay_break, replay_delete_break qmp and hmp commands. These commands allow stopping at the specified instruction. It may be useful for debugging when there are some known events that should be investigated. replay_break command has one argument - number of instructions executed since the start of the replay. replay_delete_break removes previously set breakpoint. Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru> Acked-by: Markus Armbruster <armbru@redhat.com> -- v4 changes: - removed useless error_free call Message-Id: <160174520606.12451.7056879546045599378.stgit@pasha-ThinkPad-X280> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e3b09ad2b6
commit
e751067179
6 changed files with 175 additions and 0 deletions
|
@ -34,6 +34,10 @@ static char *replay_filename;
|
|||
ReplayState replay_state;
|
||||
static GSList *replay_blockers;
|
||||
|
||||
/* Replay breakpoints */
|
||||
uint64_t replay_break_icount = -1ULL;
|
||||
QEMUTimer *replay_break_timer;
|
||||
|
||||
bool replay_next_event_is(int event)
|
||||
{
|
||||
bool res = false;
|
||||
|
@ -73,6 +77,13 @@ int replay_get_instructions(void)
|
|||
replay_mutex_lock();
|
||||
if (replay_next_event_is(EVENT_INSTRUCTION)) {
|
||||
res = replay_state.instruction_count;
|
||||
if (replay_break_icount != -1LL) {
|
||||
uint64_t current = replay_get_current_icount();
|
||||
assert(replay_break_icount >= current);
|
||||
if (current + res > replay_break_icount) {
|
||||
res = replay_break_icount - current;
|
||||
}
|
||||
}
|
||||
}
|
||||
replay_mutex_unlock();
|
||||
return res;
|
||||
|
@ -99,6 +110,12 @@ void replay_account_executed_instructions(void)
|
|||
will be read from the log. */
|
||||
qemu_notify_event();
|
||||
}
|
||||
/* Execution reached the break step */
|
||||
if (replay_break_icount == replay_state.current_icount) {
|
||||
/* Cannot make callback directly from the vCPU thread */
|
||||
timer_mod_ns(replay_break_timer,
|
||||
qemu_clock_get_ns(QEMU_CLOCK_REALTIME));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue