Implement property instead of direct assignment of cpu->env.irqchip Signed-off-by: Pavel Fedin <p.fe...@samsung.com> --- hw/arm/armv7m.c | 5 ++--- target-arm/cpu.c | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index 19742b7..782fd3e 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -170,7 +170,6 @@ qemu_irq *armv7m_init(MemoryRegion *system_memory, int mem_size, int num_irq, const char *kernel_filename, const char *cpu_model) { ARMCPU *cpu; - CPUARMState *env; DeviceState *nvic; qemu_irq *pic = g_new(qemu_irq, num_irq); int image_size; @@ -188,13 +187,13 @@ qemu_irq *armv7m_init(MemoryRegion *system_memory, int mem_size, int num_irq, fprintf(stderr, "Unable to find CPU definition\n"); exit(1); } - env = &cpu->env; armv7m_bitband_init(); nvic = qdev_create(NULL, "armv7m_nvic"); qdev_prop_set_uint32(nvic, "num-irq", num_irq); - env->irqchip = nvic; + object_property_set_link(OBJECT(cpu), OBJECT(nvic), "irqchip", + &error_abort); qdev_init_nofail(nvic); sysbus_connect_irq(SYS_BUS_DEVICE(nvic), 0, qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_IRQ)); diff --git a/target-arm/cpu.c b/target-arm/cpu.c index cc6c6f3..aed58bc 100644 --- a/target-arm/cpu.c +++ b/target-arm/cpu.c @@ -447,6 +447,12 @@ static void arm_cpu_initfn(Object *obj) static bool inited; uint32_t Aff1, Aff0; + object_property_add_link(obj, "irqchip", + "arm_gic_common", (Object **)&cpu->env.irqchip, + object_property_allow_set_link, + OBJ_PROP_LINK_UNREF_ON_RELEASE, + &error_abort); + cs->env_ptr = &cpu->env; cpu_exec_init(cs, &error_abort); cpu->cp_regs = g_hash_table_new_full(g_int_hash, g_int_equal, -- 1.9.5.msysgit.0