Revision 409dbce5 hw/ppc_oldworld.c

b/hw/ppc_oldworld.c
122 122
    return 0;
123 123
}
124 124

  
125

  
126
static uint64_t translate_kernel_address(void *opaque, uint64_t addr)
127
{
128
    return (addr & 0x0fffffff) + KERNEL_LOAD_ADDR;
129
}
130

  
125 131
static void ppc_heathrow_init (ram_addr_t ram_size,
126 132
                               const char *boot_device,
127 133
                               const char *kernel_filename,
......
185 191

  
186 192
    /* Load OpenBIOS (ELF) */
187 193
    if (filename) {
188
        bios_size = load_elf(filename, 0, NULL, NULL, NULL,
189
                               1, ELF_MACHINE, 0);
194
        bios_size = load_elf(filename, 0, NULL, NULL, NULL, NULL,
195
                             1, ELF_MACHINE, 0);
190 196
        qemu_free(filename);
191 197
    } else {
192 198
        bios_size = -1;
......
236 242
        bswap_needed = 0;
237 243
#endif
238 244
        kernel_base = KERNEL_LOAD_ADDR;
239
        /* Now we can load the kernel. The first step tries to load the kernel
240
           supposing PhysAddr = 0x00000000. If that was wrong the kernel is
241
           loaded again, the new PhysAddr being computed from lowaddr. */
242
        kernel_size = load_elf(kernel_filename, kernel_base, NULL, &lowaddr, NULL,
243
                               1, ELF_MACHINE, 0);
244
        if (kernel_size > 0 && lowaddr != KERNEL_LOAD_ADDR) {
245
            kernel_size = load_elf(kernel_filename, (2 * kernel_base) - lowaddr,
246
                                   NULL, NULL, NULL, 1, ELF_MACHINE, 0);
247
        }
245
        kernel_size = load_elf(kernel_filename, translate_kernel_address, NULL,
246
                               NULL, &lowaddr, NULL, 1, ELF_MACHINE, 0);
248 247
        if (kernel_size < 0)
249 248
            kernel_size = load_aout(kernel_filename, kernel_base,
250 249
                                    ram_size - kernel_base, bswap_needed,

Also available in: Unified diff