aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hw/an5206.c2
-rw-r--r--hw/arm_boot.c3
-rw-r--r--hw/dummy_m68k.c2
-rw-r--r--hw/mcf5208.c2
-rw-r--r--loader.c6
-rw-r--r--sysemu.h3
6 files changed, 12 insertions, 6 deletions
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);