diff --git a/hw/an5206.c b/hw/an5206.c index 9d315f3aa4..bb9cde10a5 100644 --- a/hw/an5206.c +++ b/hw/an5206.c @@ -68,7 +68,7 @@ static void an5206_init(ram_addr_t ram_size, int vga_ram_size, kernel_size = load_elf(kernel_filename, 0, &elf_entry, NULL, NULL); entry = elf_entry; if (kernel_size < 0) { - kernel_size = load_uboot(kernel_filename, &entry, NULL); + kernel_size = load_uboot(kernel_filename, &entry, NULL, NULL); } if (kernel_size < 0) { kernel_size = load_image(kernel_filename, diff --git a/hw/arm_boot.c b/hw/arm_boot.c index 5990961781..765075d913 100644 --- a/hw/arm_boot.c +++ b/hw/arm_boot.c @@ -205,7 +205,8 @@ void arm_load_kernel(CPUState *env, struct arm_boot_info *info) kernel_size = load_elf(info->kernel_filename, 0, &elf_entry, NULL, NULL); entry = elf_entry; if (kernel_size < 0) { - kernel_size = load_uboot(info->kernel_filename, &entry, &is_linux); + kernel_size = load_uboot(info->kernel_filename, &entry, NULL, + &is_linux); } if (kernel_size < 0) { kernel_size = load_image(info->kernel_filename, diff --git a/hw/dummy_m68k.c b/hw/dummy_m68k.c index fc06e9cc88..5cd53580cc 100644 --- a/hw/dummy_m68k.c +++ b/hw/dummy_m68k.c @@ -44,7 +44,7 @@ static void dummy_m68k_init(ram_addr_t ram_size, int vga_ram_size, kernel_size = load_elf(kernel_filename, 0, &elf_entry, NULL, NULL); entry = elf_entry; if (kernel_size < 0) { - kernel_size = load_uboot(kernel_filename, &entry, NULL); + kernel_size = load_uboot(kernel_filename, &entry, NULL, NULL); } if (kernel_size < 0) { kernel_size = load_image(kernel_filename, diff --git a/hw/mcf5208.c b/hw/mcf5208.c index 3e0a811751..82db38ddfd 100644 --- a/hw/mcf5208.c +++ b/hw/mcf5208.c @@ -290,7 +290,7 @@ static void mcf5208evb_init(ram_addr_t ram_size, int vga_ram_size, kernel_size = load_elf(kernel_filename, 0, &elf_entry, NULL, NULL); entry = elf_entry; if (kernel_size < 0) { - kernel_size = load_uboot(kernel_filename, &entry, NULL); + kernel_size = load_uboot(kernel_filename, &entry, NULL, NULL); } if (kernel_size < 0) { kernel_size = load_image(kernel_filename, phys_ram_base); diff --git a/loader.c b/loader.c index 680569271e..575a23a44b 100644 --- a/loader.c +++ b/loader.c @@ -456,7 +456,8 @@ static ssize_t gunzip(void *dst, size_t dstlen, uint8_t *src, } /* Load a U-Boot image. */ -int load_uboot(const char *filename, target_ulong *ep, int *is_linux) +int load_uboot(const char *filename, target_ulong *ep, target_ulong *loadaddr, + int *is_linux) { int fd; int size; @@ -533,6 +534,9 @@ int load_uboot(const char *filename, target_ulong *ep, int *is_linux) cpu_physical_memory_write_rom(hdr->ih_load, data, hdr->ih_size); + if (loadaddr) + *loadaddr = hdr->ih_load; + ret = hdr->ih_size; out: diff --git a/sysemu.h b/sysemu.h index ef0fe50d7d..d3d3203b9c 100644 --- a/sysemu.h +++ b/sysemu.h @@ -165,7 +165,8 @@ int load_image_targphys(const char *filename, target_phys_addr_t, int max_sz); int load_elf(const char *filename, int64_t address_offset, uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr); int load_aout(const char *filename, target_phys_addr_t addr, int max_sz); -int load_uboot(const char *filename, target_ulong *ep, int *is_linux); +int load_uboot(const char *filename, target_ulong *ep, target_ulong *loadaddr, + int *is_linux); int fread_targphys(target_phys_addr_t dst_addr, size_t nbytes, FILE *f); int fread_targphys_ok(target_phys_addr_t dst_addr, size_t nbytes, FILE *f);