We never actually set initial_stack so revert to the previous behaviour and stash pc in the common env->reset_pc holding place.
Signed-off-by: Alex Bennée <[email protected]> --- hw/m68k/virt.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/hw/m68k/virt.c b/hw/m68k/virt.c index e67900c727d..6af74b7ba1d 100644 --- a/hw/m68k/virt.c +++ b/hw/m68k/virt.c @@ -87,21 +87,14 @@ #define VIRT_VIRTIO_MMIO_BASE 0xff010000 /* MMIO: 0xff010000 - 0xff01ffff */ #define VIRT_VIRTIO_IRQ_BASE PIC_IRQ(2, 1) /* PIC: 2, 3, 4, 5, IRQ: ALL */ -typedef struct { - M68kCPU *cpu; - hwaddr initial_pc; - hwaddr initial_stack; -} ResetInfo; - static void main_cpu_reset(void *opaque) { - ResetInfo *reset_info = opaque; - M68kCPU *cpu = reset_info->cpu; + M68kCPU *cpu = opaque; CPUState *cs = CPU(cpu); cpu_reset(cs); - cpu->env.aregs[7] = reset_info->initial_stack; - cpu->env.pc = reset_info->initial_pc; + cpu->env.aregs[7] = ldl_phys(cs->as, 0); + cpu->env.pc = cpu->env.reset_pc; } static void rerandomize_rng_seed(void *opaque) @@ -129,8 +122,8 @@ static void virt_init(MachineState *machine) SysBusDevice *sysbus; hwaddr io_base; int i; - ResetInfo *reset_info; uint8_t rng_seed[32]; + CPUM68KState *env; if (ram_size > 3399672 * KiB) { /* @@ -142,13 +135,10 @@ static void virt_init(MachineState *machine) exit(1); } - reset_info = g_new0(ResetInfo, 1); - /* init CPUs */ cpu = M68K_CPU(cpu_create(machine->cpu_type)); - - reset_info->cpu = cpu; - qemu_register_reset(main_cpu_reset, reset_info); + qemu_register_reset(main_cpu_reset, cpu); + env = &cpu->env; /* RAM */ memory_region_add_subregion(get_system_memory(), 0, machine->ram); @@ -235,7 +225,7 @@ static void virt_init(MachineState *machine) error_report("could not load kernel '%s'", kernel_filename); exit(1); } - reset_info->initial_pc = elf_entry; + env->reset_pc = elf_entry; parameters_base = (high + 1) & ~1; param_ptr = param_blob; -- 2.47.3
