@@ -10,6 +10,7 @@
#ifndef TCG_CPU_OPS_H
#define TCG_CPU_OPS_H
+#include "qemu/arch_id.h"
#include "exec/breakpoint.h"
#include "exec/hwaddr.h"
#include "exec/memattrs.h"
@@ -18,6 +19,8 @@
#include "exec/vaddr.h"
struct TCGCPUOps {
+ QemuArch arch_id;
+
/**
* @initialize_once: Initialize TCG state
*
@@ -220,6 +220,7 @@ static const struct SysemuCPUOps alpha_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps alpha_tcg_ops = {
+ .arch_id = QEMU_ARCH_ALPHA,
.initialize_once = alpha_translate_init,
.synchronize_from_tb = alpha_cpu_synchronize_from_tb,
.restore_state_to_opc = alpha_restore_state_to_opc,
@@ -2671,6 +2671,7 @@ static const struct SysemuCPUOps arm_sysemu_ops = {
#ifdef CONFIG_TCG
static const TCGCPUOps arm_tcg_ops = {
+ .arch_id = QEMU_ARCH_ARM,
.initialize_once = arm_translate_init,
.synchronize_from_tb = arm_cpu_synchronize_from_tb,
.debug_excp_handler = arm_debug_excp_handler,
@@ -233,6 +233,7 @@ static void cortex_m55_initfn(Object *obj)
}
static const TCGCPUOps arm_v7m_tcg_ops = {
+ .arch_id = QEMU_ARCH_ARM,
.initialize_once = arm_translate_init,
.synchronize_from_tb = arm_cpu_synchronize_from_tb,
.debug_excp_handler = arm_debug_excp_handler,
@@ -206,6 +206,7 @@ static const struct SysemuCPUOps avr_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps avr_tcg_ops = {
+ .arch_id = QEMU_ARCH_AVR,
.initialize_once = avr_cpu_tcg_init,
.synchronize_from_tb = avr_cpu_synchronize_from_tb,
.restore_state_to_opc = avr_restore_state_to_opc,
@@ -322,6 +322,7 @@ static void hexagon_cpu_init(Object *obj)
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps hexagon_tcg_ops = {
+ .arch_id = QEMU_ARCH_HEXAGON,
.initialize_once = hexagon_translate_init,
.synchronize_from_tb = hexagon_cpu_synchronize_from_tb,
.restore_state_to_opc = hexagon_restore_state_to_opc,
@@ -221,6 +221,7 @@ static const struct SysemuCPUOps hppa_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps hppa_tcg_ops = {
+ .arch_id = QEMU_ARCH_HPPA,
.initialize_once = hppa_translate_init,
.synchronize_from_tb = hppa_cpu_synchronize_from_tb,
.restore_state_to_opc = hppa_restore_state_to_opc,
@@ -107,6 +107,7 @@ static bool x86_debug_check_breakpoint(CPUState *cs)
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps x86_tcg_ops = {
+ .arch_id = QEMU_ARCH_I386,
.initialize_once = tcg_x86_init,
.synchronize_from_tb = x86_cpu_synchronize_from_tb,
.restore_state_to_opc = x86_restore_state_to_opc,
@@ -793,6 +793,7 @@ void loongarch_cpu_dump_state(CPUState *cs, FILE *f, int flags)
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps loongarch_tcg_ops = {
+ .arch_id = QEMU_ARCH_LOONGARCH,
.initialize_once = loongarch_translate_init,
.synchronize_from_tb = loongarch_cpu_synchronize_from_tb,
.restore_state_to_opc = loongarch_restore_state_to_opc,
@@ -546,6 +546,7 @@ static const struct SysemuCPUOps m68k_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps m68k_tcg_ops = {
+ .arch_id = QEMU_ARCH_M68K,
.initialize_once = m68k_tcg_init,
.restore_state_to_opc = m68k_restore_state_to_opc,
@@ -420,6 +420,7 @@ static const struct SysemuCPUOps mb_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps mb_tcg_ops = {
+ .arch_id = QEMU_ARCH_MICROBLAZE,
.initialize_once = mb_tcg_init,
.synchronize_from_tb = mb_cpu_synchronize_from_tb,
.restore_state_to_opc = mb_restore_state_to_opc,
@@ -551,6 +551,7 @@ static Property mips_cpu_properties[] = {
* mips hardware (see hw/mips/jazz.c).
*/
static const TCGCPUOps mips_tcg_ops = {
+ .arch_id = QEMU_ARCH_MIPS,
.initialize_once = mips_tcg_init,
.synchronize_from_tb = mips_cpu_synchronize_from_tb,
.restore_state_to_opc = mips_restore_state_to_opc,
@@ -232,6 +232,7 @@ static const struct SysemuCPUOps openrisc_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps openrisc_tcg_ops = {
+ .arch_id = QEMU_ARCH_OPENRISC,
.initialize_once = openrisc_translate_init,
.synchronize_from_tb = openrisc_cpu_synchronize_from_tb,
.restore_state_to_opc = openrisc_restore_state_to_opc,
@@ -7416,6 +7416,7 @@ static const struct SysemuCPUOps ppc_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps ppc_tcg_ops = {
+ .arch_id = QEMU_ARCH_PPC,
.initialize_once = ppc_translate_init,
.restore_state_to_opc = ppc_restore_state_to_opc,
#ifdef CONFIG_USER_ONLY
@@ -133,6 +133,7 @@ static void riscv_restore_state_to_opc(CPUState *cs,
}
static const TCGCPUOps riscv_tcg_ops = {
+ .arch_id = QEMU_ARCH_RISCV,
.initialize_once = riscv_translate_init,
.synchronize_from_tb = riscv_cpu_synchronize_from_tb,
.restore_state_to_opc = riscv_restore_state_to_opc,
@@ -192,6 +192,7 @@ static const struct SysemuCPUOps rx_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps rx_tcg_ops = {
+ .arch_id = QEMU_ARCH_RX,
.initialize_once = rx_translate_init,
.synchronize_from_tb = rx_cpu_synchronize_from_tb,
.restore_state_to_opc = rx_restore_state_to_opc,
@@ -357,6 +357,7 @@ void cpu_get_tb_cpu_state(CPUS390XState *env, vaddr *pc,
}
static const TCGCPUOps s390_tcg_ops = {
+ .arch_id = QEMU_ARCH_S390X,
.initialize_once = s390x_translate_init,
.restore_state_to_opc = s390x_restore_state_to_opc,
@@ -247,6 +247,7 @@ static const struct SysemuCPUOps sh4_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps superh_tcg_ops = {
+ .arch_id = QEMU_ARCH_SH4,
.initialize_once = sh4_translate_init,
.synchronize_from_tb = superh_cpu_synchronize_from_tb,
.restore_state_to_opc = superh_restore_state_to_opc,
@@ -927,6 +927,7 @@ static const struct SysemuCPUOps sparc_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps sparc_tcg_ops = {
+ .arch_id = QEMU_ARCH_SPARC,
.initialize_once = sparc_tcg_init,
.synchronize_from_tb = sparc_cpu_synchronize_from_tb,
.restore_state_to_opc = sparc_restore_state_to_opc,
@@ -170,6 +170,7 @@ static const struct SysemuCPUOps tricore_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps tricore_tcg_ops = {
+ .arch_id = QEMU_ARCH_TRICORE,
.initialize_once = tricore_tcg_init,
.synchronize_from_tb = tricore_cpu_synchronize_from_tb,
.restore_state_to_opc = tricore_restore_state_to_opc,
@@ -227,6 +227,7 @@ static const struct SysemuCPUOps xtensa_sysemu_ops = {
#include "hw/core/tcg-cpu-ops.h"
static const TCGCPUOps xtensa_tcg_ops = {
+ .arch_id = QEMU_ARCH_XTENSA,
.initialize_once = xtensa_translate_init,
.debug_excp_handler = xtensa_breakpoint_handler,
.restore_state_to_opc = xtensa_restore_state_to_opc,
When using multiple TCG frontends concurrently, we need to be able to discriminate by target architecture. While we can infer that from the CPUClass, it can be quicker to get it from a direct field in TCGCPUOps. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- include/hw/core/tcg-cpu-ops.h | 3 +++ target/alpha/cpu.c | 1 + target/arm/cpu.c | 1 + target/arm/tcg/cpu-v7m.c | 1 + target/avr/cpu.c | 1 + target/hexagon/cpu.c | 1 + target/hppa/cpu.c | 1 + target/i386/tcg/tcg-cpu.c | 1 + target/loongarch/cpu.c | 1 + target/m68k/cpu.c | 1 + target/microblaze/cpu.c | 1 + target/mips/cpu.c | 1 + target/openrisc/cpu.c | 1 + target/ppc/cpu_init.c | 1 + target/riscv/tcg/tcg-cpu.c | 1 + target/rx/cpu.c | 1 + target/s390x/cpu.c | 1 + target/sh4/cpu.c | 1 + target/sparc/cpu.c | 1 + target/tricore/cpu.c | 1 + target/xtensa/cpu.c | 1 + 21 files changed, 23 insertions(+)