Revision 3b760e04

b/hw/arm_boot.c
192 192
    int is_linux = 0;
193 193
    uint64_t elf_entry;
194 194
    target_ulong entry;
195
    uint32_t pd;
196
    void *loader_phys;
197 195

  
198 196
    /* Load the kernel.  */
199 197
    if (!info->kernel_filename) {
......
208 206
        qemu_register_reset(main_cpu_reset, env);
209 207
    }
210 208

  
211
    /* FIXME: We should make load_image take a guest physical address.  */
212
    pd = cpu_get_physical_page_desc(info->loader_start);
213
    loader_phys = phys_ram_base + (pd & TARGET_PAGE_MASK) +
214
            (info->loader_start & ~TARGET_PAGE_MASK);
215

  
216 209
    /* Assume that raw images are linux kernels, and ELF images are not.  */
217 210
    kernel_size = load_elf(info->kernel_filename, 0, &elf_entry, NULL, NULL);
218 211
    entry = elf_entry;
......
221 214
                                  &is_linux);
222 215
    }
223 216
    if (kernel_size < 0) {
224
        kernel_size = load_image(info->kernel_filename,
225
                                 loader_phys + KERNEL_LOAD_ADDR);
226 217
        entry = info->loader_start + KERNEL_LOAD_ADDR;
218
        kernel_size = load_image_targphys(info->kernel_filename, entry,
219
                                          ram_size - KERNEL_LOAD_ADDR);
227 220
        is_linux = 1;
228 221
    }
229 222
    if (kernel_size < 0) {
......
237 230
        env->thumb = entry & 1;
238 231
    } else {
239 232
        if (info->initrd_filename) {
240
            initrd_size = load_image(info->initrd_filename,
241
                                     loader_phys + INITRD_LOAD_ADDR);
233
            initrd_size = load_image_targphys(info->initrd_filename,
234
                                              info->loader_start
235
                                              + INITRD_LOAD_ADDR,
236
                                              ram_size - INITRD_LOAD_ADDR);
242 237
            if (initrd_size < 0) {
243 238
                fprintf(stderr, "qemu: could not load initrd '%s'\n",
244 239
                        info->initrd_filename);

Also available in: Unified diff