From: Michael Brown Date: Sat, 6 Sep 2008 00:57:25 +0000 (+0100) Subject: [multiboot] Allow for unspecified {load,bss}_end_addr for raw images X-Git-Tag: v0.9.4~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e03610c0d6840aab412e2c2be554453bfd99eb5;p=thirdparty%2Fipxe.git [multiboot] Allow for unspecified {load,bss}_end_addr for raw images The multiboot specification states that, for raw images, if load_end_addr is zero then it should be interpreted as meaning "use the entire file", and if bss_end_addr is zero it should be interpreted as meaning "no bss". --- diff --git a/src/arch/i386/image/multiboot.c b/src/arch/i386/image/multiboot.c index 3aa52e431..a4a340fd2 100644 --- a/src/arch/i386/image/multiboot.c +++ b/src/arch/i386/image/multiboot.c @@ -360,8 +360,11 @@ static int multiboot_load_raw ( struct image *image, /* Verify and prepare segment */ offset = ( hdr->offset - hdr->mb.header_addr + hdr->mb.load_addr ); - filesz = ( hdr->mb.load_end_addr - hdr->mb.load_addr ); - memsz = ( hdr->mb.bss_end_addr - hdr->mb.load_addr ); + filesz = ( hdr->mb.load_end_addr ? + ( hdr->mb.load_end_addr - hdr->mb.load_addr ) : + ( image->len - offset ) ); + memsz = ( hdr->mb.bss_end_addr ? + ( hdr->mb.bss_end_addr - hdr->mb.load_addr ) : filesz ); buffer = phys_to_user ( hdr->mb.load_addr ); if ( ( rc = prep_segment ( buffer, filesz, memsz ) ) != 0 ) { DBGC ( image, "MULTIBOOT %p could not prepare segment: %s\n",