]> git.proxmox.com Git - mirror_qemu.git/commitdiff
uImage: return base load address (Hollis Blanchard)
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 20 Nov 2008 22:11:52 +0000 (22:11 +0000)
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 20 Nov 2008 22:11:52 +0000 (22:11 +0000)
Return the base address at which the image was loaded so that callers may keep
track of currently occupied guest memory.

This will be required by the PPC 440 embedded code to avoid hard coding a
device model/initrd location.  Other users of this function could make use of
this parameter to avoid hard coding these locations in the future too.

Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5763 c046a42c-6fe2-441c-8c8c-71466251a162

hw/an5206.c
hw/arm_boot.c
hw/dummy_m68k.c
hw/mcf5208.c
loader.c
sysemu.h

index 9d315f3aa40ee9a2aaf83acb0103670fcc89e7b4..bb9cde10a565662ffa1e44aed6755d227ddae6de 100644 (file)
@@ -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,
index 59909617818d0562f6781957ecfa2d2697463835..765075d9139e01fee27d8645252c47211a3c8ce9 100644 (file)
@@ -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,
index fc06e9cc88f638d56b38ba92bdbe71eafea8616c..5cd53580cca11d69fc5e5a0a2c6c2a4c37c65845 100644 (file)
@@ -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,
index 3e0a8117519d2975c47960a34ab97adcaf200e1e..82db38ddfdb7e8abfb9fed40c9644ef976470cbc 100644 (file)
@@ -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);
index 680569271e89fe94cbc1c6bd7d90724035c90cad..575a23a44b4597121ae27f763519d620f21e208b 100644 (file)
--- 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:
index ef0fe50d7de99db1c87aaa6ec9391d5a612e095f..d3d3203b9ce5a98502726f0e1344c988fe4135d4 100644 (file)
--- 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);