X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=target-xtensa%2Fcpu.c;h=6e93dd8d2483654faed3ce42ea81ca998b20a15c;hb=95efb20c714800de7eaf991f19dab6e7a29d5364;hp=ebc7e9979b89a3904d71cdc53c3f2ae7e16f319a;hpb=fabb60424d68b7c3af1be447a1f48c5b9ffe5123;p=qemu.git diff --git a/target-xtensa/cpu.c b/target-xtensa/cpu.c index ebc7e9979..6e93dd8d2 100644 --- a/target-xtensa/cpu.c +++ b/target-xtensa/cpu.c @@ -57,12 +57,31 @@ static void xtensa_cpu_reset(CPUState *s) reset_mmu(env); } +static void xtensa_cpu_realizefn(DeviceState *dev, Error **errp) +{ + XtensaCPU *cpu = XTENSA_CPU(dev); + XtensaCPUClass *xcc = XTENSA_CPU_GET_CLASS(dev); + + qemu_init_vcpu(&cpu->env); + + xcc->parent_realize(dev, errp); +} + static void xtensa_cpu_initfn(Object *obj) { + CPUState *cs = CPU(obj); XtensaCPU *cpu = XTENSA_CPU(obj); CPUXtensaState *env = &cpu->env; + static bool tcg_inited; + cs->env_ptr = env; cpu_exec_init(env); + + if (tcg_enabled() && !tcg_inited) { + tcg_inited = true; + xtensa_translate_init(); + cpu_set_debug_excp_handler(xtensa_breakpoint_handler); + } } static const VMStateDescription vmstate_xtensa_cpu = { @@ -76,9 +95,13 @@ static void xtensa_cpu_class_init(ObjectClass *oc, void *data) CPUClass *cc = CPU_CLASS(oc); XtensaCPUClass *xcc = XTENSA_CPU_CLASS(cc); + xcc->parent_realize = dc->realize; + dc->realize = xtensa_cpu_realizefn; + xcc->parent_reset = cc->reset; cc->reset = xtensa_cpu_reset; + cc->do_interrupt = xtensa_cpu_do_interrupt; dc->vmsd = &vmstate_xtensa_cpu; }