From a672b89e3b65ce6f6525f6e21397fd6d6ef14228 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 12 Jun 2019 12:27:11 -0400 Subject: [PATCH] cpu: Introduce cpu_set_cpustate_pointers Consolidate some boilerplate from foo_cpu_initfn. Backports commit 7506ed902eb97fe4e2a1dd16766c621d32ecc40d from qemu --- qemu/include/exec/cpu-all.h | 11 +++++++++++ qemu/target/arm/cpu.c | 2 +- qemu/target/i386/cpu.c | 2 +- qemu/target/m68k/cpu.c | 3 +-- qemu/target/mips/cpu.c | 2 +- qemu/target/riscv/cpu.c | 3 +-- qemu/target/sparc/cpu.c | 2 +- 7 files changed, 17 insertions(+), 8 deletions(-) diff --git a/qemu/include/exec/cpu-all.h b/qemu/include/exec/cpu-all.h index 458f774a..ce6cc94e 100644 --- a/qemu/include/exec/cpu-all.h +++ b/qemu/include/exec/cpu-all.h @@ -375,6 +375,17 @@ int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr, int cpu_exec(struct uc_struct *uc, CPUState *cpu); +/** + * cpu_set_cpustate_pointers(cpu) + * @cpu: The cpu object + * + * Set the generic pointers in CPUState into the outer object. + */ +static inline void cpu_set_cpustate_pointers(ArchCPU *cpu) +{ + cpu->parent_obj.env_ptr = &cpu->env; +} + /** * env_archcpu(env) * @env: The architecture environment diff --git a/qemu/target/arm/cpu.c b/qemu/target/arm/cpu.c index e30a19d4..8db666ae 100644 --- a/qemu/target/arm/cpu.c +++ b/qemu/target/arm/cpu.c @@ -568,7 +568,7 @@ static void arm_cpu_initfn(struct uc_struct *uc, Object *obj, void *opaque) ARMCPU *cpu = ARM_CPU(uc, obj); uint32_t Aff1, Aff0; - cs->env_ptr = &cpu->env; + cpu_set_cpustate_pointers(cpu); cpu_exec_init(cs, &error_abort, opaque); cpu->cp_regs = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, cpreg_hashtable_data_destroy); diff --git a/qemu/target/i386/cpu.c b/qemu/target/i386/cpu.c index 34146c9a..56e10e13 100644 --- a/qemu/target/i386/cpu.c +++ b/qemu/target/i386/cpu.c @@ -4783,7 +4783,7 @@ static void x86_cpu_initfn(struct uc_struct *uc, Object *obj, void *opaque) X86CPUClass *xcc = X86_CPU_GET_CLASS(uc, obj); CPUX86State *env = &cpu->env; - cs->env_ptr = env; + cpu_set_cpustate_pointers(cpu); cpu_exec_init(cs, &error_abort, opaque); object_property_add(uc, obj, "family", "int", diff --git a/qemu/target/m68k/cpu.c b/qemu/target/m68k/cpu.c index 5067aa97..c0971efa 100644 --- a/qemu/target/m68k/cpu.c +++ b/qemu/target/m68k/cpu.c @@ -228,9 +228,8 @@ static void m68k_cpu_initfn(struct uc_struct *uc, Object *obj, void *opaque) { CPUState *cs = CPU(obj); M68kCPU *cpu = M68K_CPU(uc, obj); - CPUM68KState *env = &cpu->env; - cs->env_ptr = env; + cpu_set_cpustate_pointers(cpu); cpu_exec_init(cs, &error_abort, opaque); } diff --git a/qemu/target/mips/cpu.c b/qemu/target/mips/cpu.c index 766b74ad..9eed92f4 100644 --- a/qemu/target/mips/cpu.c +++ b/qemu/target/mips/cpu.c @@ -128,7 +128,7 @@ static void mips_cpu_initfn(struct uc_struct *uc, Object *obj, void *opaque) CPUMIPSState *env = &cpu->env; MIPSCPUClass *mcc = MIPS_CPU_GET_CLASS(uc, obj); - cs->env_ptr = env; + cpu_set_cpustate_pointers(cpu); env->cpu_model = mcc->cpu_def; cpu_exec_init(cs, &error_abort, opaque); } diff --git a/qemu/target/riscv/cpu.c b/qemu/target/riscv/cpu.c index 4304cd19..2ce88330 100644 --- a/qemu/target/riscv/cpu.c +++ b/qemu/target/riscv/cpu.c @@ -326,9 +326,8 @@ static void riscv_cpu_init(struct uc_struct *uc, Object *obj, void *opaque) { CPUState *cs = CPU(obj); RISCVCPU *cpu = RISCV_CPU(uc, obj); - CPURISCVState *env = &cpu->env; - cs->env_ptr = env; + cpu_set_cpustate_pointers(cpu); cpu_exec_init(cs, &error_abort, opaque); } diff --git a/qemu/target/sparc/cpu.c b/qemu/target/sparc/cpu.c index 8ed737f7..f1b6d5b8 100644 --- a/qemu/target/sparc/cpu.c +++ b/qemu/target/sparc/cpu.c @@ -817,7 +817,7 @@ static void sparc_cpu_initfn(struct uc_struct *uc, Object *obj, void *opaque) SPARCCPUClass *scc = SPARC_CPU_GET_CLASS(uc, obj); CPUSPARCState *env = &cpu->env; - cs->env_ptr = env; + cpu_set_cpustate_pointers(cpu); cpu_exec_init(cs, &error_abort, opaque); if (scc->cpu_def) {