Skip to content

Commit

Permalink
accel/tcg: Use one_insn_per_tb global instead of old singlestep global
Browse files Browse the repository at this point in the history
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
  • Loading branch information
pm215 committed May 2, 2023
1 parent 93cbd6c commit 0e33928
Show file tree
Hide file tree
Showing 7 changed files with 7 additions and 8 deletions.
2 changes: 1 addition & 1 deletion accel/tcg/cpu-exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ uint32_t curr_cflags(CPUState *cpu)
*/
if (unlikely(cpu->singlestep_enabled)) {
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;
} else if (qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
cflags |= CF_NO_GOTO_TB;
Expand Down
2 changes: 2 additions & 0 deletions accel/tcg/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,6 @@ static inline target_ulong log_pc(CPUState *cpu, const TranslationBlock *tb)
extern int64_t max_delay;
extern int64_t max_advance;

extern bool one_insn_per_tb;

#endif /* ACCEL_TCG_INTERNAL_H */
6 changes: 4 additions & 2 deletions accel/tcg/tcg-all.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include "qapi/error.h"
#include "qemu/error-report.h"
#include "qemu/accel.h"
#include "qemu/atomic.h"
#include "qapi/qapi-builtin-visit.h"
#include "qemu/units.h"
#if !defined(CONFIG_USER_ONLY)
Expand Down Expand Up @@ -110,6 +111,7 @@ static void tcg_accel_instance_init(Object *obj)
}

bool mttcg_enabled;
bool one_insn_per_tb;

static int tcg_init_machine(MachineState *ms)
{
Expand Down Expand Up @@ -219,8 +221,8 @@ static void tcg_set_one_insn_per_tb(Object *obj, bool value, Error **errp)
{
TCGState *s = TCG_STATE(obj);
s->one_insn_per_tb = value;
/* For the moment, set the global also: this changes the behaviour */
singlestep = value;
/* Set the global also: this changes the behaviour */
qatomic_set(&one_insn_per_tb, value);
}

static int tcg_gdbstub_supported_sstep_flags(void)
Expand Down
1 change: 0 additions & 1 deletion bsd-user/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
#include "host-os.h"
#include "target_arch_cpu.h"

int singlestep;
static bool opt_one_insn_per_tb;
uintptr_t guest_base;
bool have_guest_base;
Expand Down
2 changes: 0 additions & 2 deletions include/exec/cpu-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,6 @@ int cpu_memory_rw_debug(CPUState *cpu, vaddr addr,
void *ptr, size_t len, bool is_write);

/* vl.c */
extern int singlestep;

void list_cpus(void);

#endif /* CPU_COMMON_H */
1 change: 0 additions & 1 deletion linux-user/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@
char *exec_path;
char real_exec_path[PATH_MAX];

int singlestep;
static bool opt_one_insn_per_tb;
static const char *argv0;
static const char *gdbstub;
Expand Down
1 change: 0 additions & 1 deletion softmmu/globals.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ int vga_interface_type = VGA_NONE;
bool vga_interface_created;
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
int win2k_install_hack;
int singlestep;
int fd_bootchk = 1;
int graphic_rotate;
QEMUOptionRom option_rom[MAX_OPTION_ROMS];
Expand Down

0 comments on commit 0e33928

Please sign in to comment.