From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:44462) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RclH4-0008Sy-M1 for qemu-devel@nongnu.org; Mon, 19 Dec 2011 17:01:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RclH2-0002cY-PL for qemu-devel@nongnu.org; Mon, 19 Dec 2011 17:01:34 -0500 Message-ID: <4EEFB437.8050902@codemonkey.ws> Date: Mon, 19 Dec 2011 16:01:27 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <874o2bhdv5.fsf@industria.weinholt.se> <0F9E6CB6-F6FB-4C3E-B828-370E1486B95E@suse.de> In-Reply-To: <0F9E6CB6-F6FB-4C3E-B828-370E1486B95E@suse.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v2] multiboot: Fix bss segment support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Graf Cc: =?ISO-8859-1?Q?Ren=E9_Rebe?= , "Justin M. Forbes" , =?ISO-8859-1?Q?G=F6ran_Weinholt?= , qemu-devel Developers , qemu-stable@nongnu.org On 12/19/2011 11:35 AM, Alexander Graf wrote: > > On 24.07.2011, at 17:55, Göran Weinholt wrote: > >> Multiboot images can specify a bss segment. The boot loader must clear >> the memory of the bss and ensure that no modules or structures are >> allocated inside it. Several fields are provided in the Multiboot >> header that were previously not used properly. The header is now used >> to determine how much data should be read from the image and how much >> memory should be reserved to the bss segment. > > This patch breaks the OSX booter: > > http://people.exactcode.de/~rene/mac/boot How is this licensed? Is there source available? > > It now fails in fread(). Please revert this change for 1.0.1 and/or provide a timely fix. Is the patch incorrect in some way? I don't see how it's reasonable to expect someone to fix a guest that cannot be legally run under QEMU. If the patch is obviously incorrect, I'm all for reverting it, but I don't think we can reasonably ask people to debug OS X guest failures since OS X is clearly not allowed to run under QEMU. Regards, Anthony Liguori > > Alex > >> >> Signed-off-by: Göran Weinholt >> --- >> hw/multiboot.c | 14 +++++++++----- >> 1 files changed, 9 insertions(+), 5 deletions(-) >> >> diff --git a/hw/multiboot.c b/hw/multiboot.c >> index 2426e84..a1d3f41 100644 >> --- a/hw/multiboot.c >> +++ b/hw/multiboot.c >> @@ -198,11 +198,14 @@ int load_multiboot(void *fw_cfg, >> } else { >> /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_ADDR. */ >> uint32_t mh_header_addr = ldl_p(header+i+12); >> + uint32_t mh_load_end_addr = ldl_p(header+i+20); >> + 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; >> >> mh_entry_addr = ldl_p(header+i+28); >> - mb_kernel_size = kernel_file_size - mb_kernel_text_offset; >> + mb_kernel_size = mh_bss_end_addr - mh_load_addr; >> >> /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_VBE. >> uint32_t mh_mode_type = ldl_p(header+i+32); >> @@ -212,17 +215,18 @@ int load_multiboot(void *fw_cfg, >> >> mb_debug("multiboot: mh_header_addr = %#x\n", mh_header_addr); >> mb_debug("multiboot: mh_load_addr = %#x\n", mh_load_addr); >> - mb_debug("multiboot: mh_load_end_addr = %#x\n", ldl_p(header+i+20)); >> - mb_debug("multiboot: mh_bss_end_addr = %#x\n", ldl_p(header+i+24)); >> + mb_debug("multiboot: mh_load_end_addr = %#x\n", mh_load_end_addr); >> + mb_debug("multiboot: mh_bss_end_addr = %#x\n", mh_bss_end_addr); >> mb_debug("qemu: loading multiboot kernel (%#x bytes) at %#x\n", >> - mb_kernel_size, mh_load_addr); >> + mb_load_size, mh_load_addr); >> >> mbs.mb_buf = qemu_malloc(mb_kernel_size); >> fseek(f, mb_kernel_text_offset, SEEK_SET); >> - if (fread(mbs.mb_buf, 1, mb_kernel_size, f) != mb_kernel_size) { >> + if (fread(mbs.mb_buf, 1, mb_load_size, f) != mb_load_size) { >> fprintf(stderr, "fread() failed\n"); >> exit(1); >> } >> + memset(mbs.mb_buf + mb_load_size, 0, mb_kernel_size - mb_load_size); >> fclose(f); >> } >> >> -- >> 1.7.2.5 >> >> > >