diff --git a/hw/an5206.c b/hw/an5206.c index 9d315f3..bb9cde1 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 5990961..765075d 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 fc06e9c..5cd5358 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 3e0a811..82db38d 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 6805692..575a23a 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 ef0fe50..d3d3203 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);