diff --git a/qemu/hw/i386/pc.c b/qemu/hw/i386/pc.c index e901356b..17c50c4f 100644 --- a/qemu/hw/i386/pc.c +++ b/qemu/hw/i386/pc.c @@ -116,7 +116,7 @@ static X86CPU *pc_new_cpu(struct uc_struct *uc, const char *typename, int64_t ap return cpu; } -int pc_cpus_init(struct uc_struct *uc, const char *cpu_model) +int pc_cpus_init(struct uc_struct *uc, PCMachineState *pcms) { int i; CPUClass *cc; @@ -124,13 +124,14 @@ int pc_cpus_init(struct uc_struct *uc, const char *cpu_model) const char *typename; gchar **model_pieces; Error *error = NULL; + MachineState *machine = MACHINE(uc, pcms); /* init CPUs */ - if (cpu_model == NULL) { + if (machine->cpu_model == NULL) { #ifdef TARGET_X86_64 - cpu_model = "qemu64"; + machine->cpu_model = "qemu64"; #else - cpu_model = "qemu32"; + machine->cpu_model = "qemu32"; #endif } diff --git a/qemu/hw/i386/pc_piix.c b/qemu/hw/i386/pc_piix.c index 6af28934..f7a1f0ac 100644 --- a/qemu/hw/i386/pc_piix.c +++ b/qemu/hw/i386/pc_piix.c @@ -41,7 +41,8 @@ /* PC hardware initialisation */ static int pc_init1(struct uc_struct *uc, MachineState *machine) { - return pc_cpus_init(uc, machine->cpu_model); + PCMachineState *pcms = PC_MACHINE(uc, machine); + return pc_cpus_init(uc, pcms); } static void pc_compat_2_2(struct uc_struct *uc, MachineState *machine) diff --git a/qemu/include/hw/i386/pc.h b/qemu/include/hw/i386/pc.h index 159b8b98..4098547d 100644 --- a/qemu/include/hw/i386/pc.h +++ b/qemu/include/hw/i386/pc.h @@ -32,7 +32,7 @@ struct PCMachineClass { #define PC_MACHINE_CLASS(klass) \ OBJECT_CLASS_CHECK(PCMachineClass, (klass), TYPE_PC_MACHINE) -int pc_cpus_init(struct uc_struct *uc, const char *cpu_model); +int pc_cpus_init(struct uc_struct *uc, PCMachineState *pcms); FWCfgState *pc_memory_init(MachineState *machine, MemoryRegion *system_memory, diff --git a/qemu/target/i386/cpu.c b/qemu/target/i386/cpu.c index 71f59bee..544a3c0d 100644 --- a/qemu/target/i386/cpu.c +++ b/qemu/target/i386/cpu.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu/cutils.h" #include "unicorn/platform.h" +#include "uc_priv.h" #include "cpu.h" #include "exec/exec-all.h" diff --git a/qemu/target/i386/cpu.h b/qemu/target/i386/cpu.h index 0fbfb194..35e439a2 100644 --- a/qemu/target/i386/cpu.h +++ b/qemu/target/i386/cpu.h @@ -1211,7 +1211,6 @@ typedef struct CPUX86State { // Unicorn engine struct uc_struct *uc; - bool cpu_globals_initialized; } CPUX86State; /** @@ -1298,6 +1297,9 @@ typedef struct X86CPU { FeatureWordArray plus_features; /* Features to be removed */ FeatureWordArray minus_features; + + // Unicorn: Moved here to prevent a local static + bool cpu_globals_initialized; } X86CPU; static inline X86CPU *x86_env_get_cpu(CPUX86State *env)