qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] fix multiboot loading if load_end_addr == 0 (fwd)
@ 2012-03-18 17:45 Scott Moser
  2012-03-20 15:04 ` Serge E. Hallyn
  2012-03-26 19:17 ` Anthony Liguori
  0 siblings, 2 replies; 6+ messages in thread
From: Scott Moser @ 2012-03-18 17:45 UTC (permalink / raw)
  To: qemu-devel

Re-sending to qemu-devel.  I'd originally sent this to kvm mailing list.


---------- Forwarded message ----------
Date: Sat, 17 Mar 2012 00:08:06
From: Scott Moser <smoser@ubuntu.com>
To: kvm@vger.kernel.org
Subject: [PATCH] fix multiboot loading if load_end_addr == 0

The previous code did not treat the case where load_end_addr was 0
specially.  The multiboot specification says the following:
 * load_end_addr
   Contains the physical address of the end of the data segment.
   (load_end_addr - load_addr) specifies how much data to load. This
   implies that the text and data segments must be consecutive in the
   OS image; this is true for existing a.out executable formats. If
   this field is zero, the boot loader assumes that the text and data
   segments occupy the whole OS image file.

This was raised initially as launchpad bug
https://bugs.launchpad.net/qemu/+bug/957622

diff --git a/hw/multiboot.c b/hw/multiboot.c
index b4484a3..b1e04c5 100644
--- a/hw/multiboot.c
+++ b/hw/multiboot.c
@@ -202,10 +202,16 @@ int load_multiboot(void *fw_cfg,
         uint32_t mh_bss_end_addr = ldl_p(header+i+24);
         mh_load_addr = ldl_p(header+i+16);
         uint32_t mb_kernel_text_offset = i - (mh_header_addr - mh_load_addr);
-        uint32_t mb_load_size = mh_load_end_addr - mh_load_addr;
-
+        uint32_t mb_load_size = 0;
         mh_entry_addr = ldl_p(header+i+28);
-        mb_kernel_size = mh_bss_end_addr - mh_load_addr;
+
+        if (mh_load_end_addr) {
+            mb_kernel_size = mh_bss_end_addr - mh_load_addr;
+            mb_load_size = mh_load_end_addr - mh_load_addr;
+        } else {
+            mb_kernel_size = kernel_file_size - mb_kernel_text_offset;
+            mb_load_size = mb_kernel_size;
+        }

         /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_VBE.
         uint32_t mh_mode_type = ldl_p(header+i+32);

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-05-27  0:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-18 17:45 [Qemu-devel] [PATCH] fix multiboot loading if load_end_addr == 0 (fwd) Scott Moser
2012-03-20 15:04 ` Serge E. Hallyn
2012-03-26 19:17 ` Anthony Liguori
2012-03-26 19:27   ` [Qemu-devel] [PATCH] fix multiboot loading if load_end_addr == 0 Scott Moser
2012-05-26 22:17     ` Kevin Wolf
2012-05-27  0:52       ` Anthony Liguori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).