accel: Hold @can_reverse information in AccelGdbConfig Hold @can_reverse in AccelGdbConfig, set it when initializing AccelState in AccelClass::init_machine handlers (only TCG sets it). Remove gdb_can_reverse() as now unused. Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Message-ID: <20260705215729.62196-17-philmd@oss.qualcomm.com>
diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c index d30b53c..7186c10 100644 --- a/accel/tcg/tcg-all.c +++ b/accel/tcg/tcg-all.c
@@ -159,6 +159,9 @@ */ as->gdbstub.sstep_flags |= SSTEP_NOIRQ | SSTEP_NOTIMER; } + if (replay_mode == REPLAY_MODE_PLAY) { + as->gdbstub.can_reverse = true; + } page_init(); tb_htable_init();
diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 6c4fa06..0a328b0 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c
@@ -1376,7 +1376,7 @@ static void handle_backward(GArray *params, void *user_ctx) { - if (!gdb_can_reverse()) { + if (!gdbserver_state.accel_config.can_reverse) { gdb_put_packet("E22"); return; } @@ -1684,7 +1684,7 @@ g_string_append(gdbserver_state.str_buf, ";qXfer:features:read+"); } - if (gdb_can_reverse()) { + if (gdbserver_state.accel_config.can_reverse) { g_string_append(gdbserver_state.str_buf, ";ReverseStep+;ReverseContinue+"); }
diff --git a/gdbstub/internals.h b/gdbstub/internals.h index 0444dee..0b74ea4 100644 --- a/gdbstub/internals.h +++ b/gdbstub/internals.h
@@ -154,7 +154,6 @@ void gdb_append_thread_id(CPUState *cpu, GString *buf); int gdb_get_cpu_index(CPUState *cpu); unsigned int gdb_get_max_cpus(void); /* both */ -bool gdb_can_reverse(void); /* system emulation, stub for user */ int gdb_target_sigtrap(void); /* user */ void gdb_create_default_process(GDBState *s);
diff --git a/gdbstub/system.c b/gdbstub/system.c index 1179c82..2e8c457 100644 --- a/gdbstub/system.c +++ b/gdbstub/system.c
@@ -479,11 +479,6 @@ return ms->smp.max_cpus; } -bool gdb_can_reverse(void) -{ - return replay_mode == REPLAY_MODE_PLAY; -} - /* * Softmmu specific command helpers */
diff --git a/gdbstub/user.c b/gdbstub/user.c index f7bc4e6..299388b 100644 --- a/gdbstub/user.c +++ b/gdbstub/user.c
@@ -786,12 +786,6 @@ return max_cpus; } -/* replay not supported for user-mode */ -bool gdb_can_reverse(void) -{ - return false; -} - /* * Break/Watch point helpers */
diff --git a/include/qemu/accel.h b/include/qemu/accel.h index 3b01d55..8e0c3df 100644 --- a/include/qemu/accel.h +++ b/include/qemu/accel.h
@@ -77,9 +77,11 @@ * struct AccelGdbConfig - gdbstub configuration for an accelerator. * * @sstep_flags: Set SSTEP_* flags that accelerator supports for guest debug. + * @can_reverse: Whether reverse mode is supported. */ typedef struct AccelGdbConfig { unsigned sstep_flags; + bool can_reverse; } AccelGdbConfig; #endif /* QEMU_ACCEL_H */