qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 3/4] uImage: return base load address


From: Hollis Blanchard
Subject: [Qemu-devel] [PATCH 3/4] uImage: return base load address
Date: Mon, 17 Nov 2008 15:18:11 -0600

Return the base address at which the image was loaded so that callers may keep
track of currently occupied guest memory.

Signed-off-by: Hollis Blanchard <address@hidden>
---
 hw/an5206.c     |    2 +-
 hw/arm_boot.c   |    3 ++-
 hw/dummy_m68k.c |    2 +-
 hw/mcf5208.c    |    2 +-
 loader.c        |    6 +++++-
 sysemu.h        |    3 ++-
 6 files changed, 12 insertions(+), 6 deletions(-)

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 c9cb906..9ad3c96 100644
--- a/loader.c
+++ b/loader.c
@@ -432,7 +432,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;
@@ -503,6 +504,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);
     qemu_free(data);
 
+    if (loadaddr)
+        *loadaddr = hdr->ih_load;
+
     return hdr->ih_size;
 
 fail:
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);
-- 
1.5.6.5





reply via email to

[Prev in Thread] Current Thread [Next in Thread]