mirror of https://github.com/xemu-project/xemu.git
accel/tcg: Use one_insn_per_tb global instead of old singlestep global
The only place left that looks at the old 'singlestep' global variable is the TCG curr_cflags() function. Replace the old global with a new 'one_insn_per_tb' which is defined in tcg-all.c and declared in accel/tcg/internal.h. This keeps it restricted to the TCG code, unlike 'singlestep' which was available to every file in the system and defined in multiple different places for softmmu vs linux-user vs bsd-user. While we're making this change, use qatomic_read() and qatomic_set() on the accesses to the new global, because TCG will read it without holding a lock. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-id: 20230417164041.684562-4-peter.maydell@linaro.org
This commit is contained in:
parent
93cbd6c91d
commit
0e33928cd9
|
@ -159,7 +159,7 @@ uint32_t curr_cflags(CPUState *cpu)
|
||||||
*/
|
*/
|
||||||
if (unlikely(cpu->singlestep_enabled)) {
|
if (unlikely(cpu->singlestep_enabled)) {
|
||||||
cflags |= CF_NO_GOTO_TB | CF_NO_GOTO_PTR | CF_SINGLE_STEP | 1;
|
cflags |= CF_NO_GOTO_TB | CF_NO_GOTO_PTR | CF_SINGLE_STEP | 1;
|
||||||
} else if (singlestep) {
|
} else if (qatomic_read(&one_insn_per_tb)) {
|
||||||
cflags |= CF_NO_GOTO_TB | 1;
|
cflags |= CF_NO_GOTO_TB | 1;
|
||||||
} else if (qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
|
} else if (qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
|
||||||
cflags |= CF_NO_GOTO_TB;
|
cflags |= CF_NO_GOTO_TB;
|
||||||
|
|
|
@ -67,4 +67,6 @@ static inline target_ulong log_pc(CPUState *cpu, const TranslationBlock *tb)
|
||||||
extern int64_t max_delay;
|
extern int64_t max_delay;
|
||||||
extern int64_t max_advance;
|
extern int64_t max_advance;
|
||||||
|
|
||||||
|
extern bool one_insn_per_tb;
|
||||||
|
|
||||||
#endif /* ACCEL_TCG_INTERNAL_H */
|
#endif /* ACCEL_TCG_INTERNAL_H */
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/accel.h"
|
#include "qemu/accel.h"
|
||||||
|
#include "qemu/atomic.h"
|
||||||
#include "qapi/qapi-builtin-visit.h"
|
#include "qapi/qapi-builtin-visit.h"
|
||||||
#include "qemu/units.h"
|
#include "qemu/units.h"
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
|
@ -110,6 +111,7 @@ static void tcg_accel_instance_init(Object *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool mttcg_enabled;
|
bool mttcg_enabled;
|
||||||
|
bool one_insn_per_tb;
|
||||||
|
|
||||||
static int tcg_init_machine(MachineState *ms)
|
static int tcg_init_machine(MachineState *ms)
|
||||||
{
|
{
|
||||||
|
@ -219,8 +221,8 @@ static void tcg_set_one_insn_per_tb(Object *obj, bool value, Error **errp)
|
||||||
{
|
{
|
||||||
TCGState *s = TCG_STATE(obj);
|
TCGState *s = TCG_STATE(obj);
|
||||||
s->one_insn_per_tb = value;
|
s->one_insn_per_tb = value;
|
||||||
/* For the moment, set the global also: this changes the behaviour */
|
/* Set the global also: this changes the behaviour */
|
||||||
singlestep = value;
|
qatomic_set(&one_insn_per_tb, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcg_gdbstub_supported_sstep_flags(void)
|
static int tcg_gdbstub_supported_sstep_flags(void)
|
||||||
|
|
|
@ -49,7 +49,6 @@
|
||||||
#include "host-os.h"
|
#include "host-os.h"
|
||||||
#include "target_arch_cpu.h"
|
#include "target_arch_cpu.h"
|
||||||
|
|
||||||
int singlestep;
|
|
||||||
static bool opt_one_insn_per_tb;
|
static bool opt_one_insn_per_tb;
|
||||||
uintptr_t guest_base;
|
uintptr_t guest_base;
|
||||||
bool have_guest_base;
|
bool have_guest_base;
|
||||||
|
|
|
@ -163,8 +163,6 @@ int cpu_memory_rw_debug(CPUState *cpu, vaddr addr,
|
||||||
void *ptr, size_t len, bool is_write);
|
void *ptr, size_t len, bool is_write);
|
||||||
|
|
||||||
/* vl.c */
|
/* vl.c */
|
||||||
extern int singlestep;
|
|
||||||
|
|
||||||
void list_cpus(void);
|
void list_cpus(void);
|
||||||
|
|
||||||
#endif /* CPU_COMMON_H */
|
#endif /* CPU_COMMON_H */
|
||||||
|
|
|
@ -68,7 +68,6 @@
|
||||||
char *exec_path;
|
char *exec_path;
|
||||||
char real_exec_path[PATH_MAX];
|
char real_exec_path[PATH_MAX];
|
||||||
|
|
||||||
int singlestep;
|
|
||||||
static bool opt_one_insn_per_tb;
|
static bool opt_one_insn_per_tb;
|
||||||
static const char *argv0;
|
static const char *argv0;
|
||||||
static const char *gdbstub;
|
static const char *gdbstub;
|
||||||
|
|
|
@ -43,7 +43,6 @@ int vga_interface_type = VGA_NONE;
|
||||||
bool vga_interface_created;
|
bool vga_interface_created;
|
||||||
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
|
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
|
||||||
int win2k_install_hack;
|
int win2k_install_hack;
|
||||||
int singlestep;
|
|
||||||
int fd_bootchk = 1;
|
int fd_bootchk = 1;
|
||||||
int graphic_rotate;
|
int graphic_rotate;
|
||||||
QEMUOptionRom option_rom[MAX_OPTION_ROMS];
|
QEMUOptionRom option_rom[MAX_OPTION_ROMS];
|
||||||
|
|
Loading…
Reference in New Issue