diff options
author | Michael Brown <mcb30@ipxe.org> | 2021-02-15 09:54:03 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2021-02-15 10:02:32 +0000 |
commit | 1b99ba2a93df92df63a7cddfb1b2cfb7b96be772 (patch) | |
tree | 4dd2e876f75b02c740913b4b0c6adc182f51463c | |
parent | 83516ba7f0e816a7e1f17a711c8cdef2e633738c (diff) | |
download | ipxe-1b99ba2a93df92df63a7cddfb1b2cfb7b96be772.tar.gz |
[build] Work around stray sections introduced by some binutils versions
Some versions of GNU ld (observed with binutils 2.36 on Arch Linux)
introduce a .note.gnu.property section marked as loadable at a high
address and with non-empty contents. This adds approximately 128MB of
garbage to the BIOS .usb disk images.
Fix by using a custom linker script for the prefix-only binaries such
as the USB disk partition table and MBR, in order to allow unwanted
sections to be explicitly discarded.
Reported-by: Christian Hesse <mail@eworm.de>
Tested-by: Christian Hesse <mail@eworm.de>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/arch/x86/Makefile.pcbios | 11 | ||||
-rw-r--r-- | src/arch/x86/scripts/prefixonly.lds | 29 |
2 files changed, 33 insertions, 7 deletions
diff --git a/src/arch/x86/Makefile.pcbios b/src/arch/x86/Makefile.pcbios index 751d7d28c..ed8d554a7 100644 --- a/src/arch/x86/Makefile.pcbios +++ b/src/arch/x86/Makefile.pcbios @@ -4,18 +4,15 @@ # SRCDIRS += arch/x86/drivers/net -# The i386 linker script +# The linker scripts # LDSCRIPT = arch/x86/scripts/pcbios.lds +LDSCRIPT_PREFIX = arch/x86/scripts/prefixonly.lds # Stop ld from complaining about our customised linker script # LDFLAGS += -N --no-check-sections -# Prefix always starts at address zero -# -LDFLAGS += --section-start=.prefix=0 - # Media types. # MEDIA += rom @@ -73,12 +70,12 @@ NON_AUTO_MEDIA += fd0 # Special target for building Master Boot Record binary $(BIN)/mbr.tmp : $(BIN)/mbr.o $(QM)$(ECHO) " [LD] $@" - $(Q)$(LD) $(LDFLAGS) -o $@ -e mbr $< + $(Q)$(LD) $(LDFLAGS) -T $(LDSCRIPT_PREFIX) -o $@ -e mbr $< # rule to make a USB disk image $(BIN)/usbdisk.tmp : $(BIN)/usbdisk.o $(QM)$(ECHO) " [LD] $@" - $(Q)$(LD) $(LDFLAGS) -o $@ -e mbr $< + $(Q)$(LD) $(LDFLAGS) -T $(LDSCRIPT_PREFIX) -o $@ -e mbr $< NON_AUTO_MEDIA += usb %usb: $(BIN)/usbdisk.bin %hd diff --git a/src/arch/x86/scripts/prefixonly.lds b/src/arch/x86/scripts/prefixonly.lds new file mode 100644 index 000000000..dce0930b5 --- /dev/null +++ b/src/arch/x86/scripts/prefixonly.lds @@ -0,0 +1,29 @@ +/* -*- ld-script -*- */ + +/* + * Linker script for prefix-only binaries (e.g. USB disk MBR) + * + */ + +SECTIONS { + + .prefix 0x0 : AT ( 0x0 ) { + *(.prefix) + } + + /DISCARD/ : { + *(.comment) + *(.comment.*) + *(.note) + *(.note.*) + *(.eh_frame) + *(.eh_frame.*) + *(.rel) + *(.rel.*) + *(.einfo) + *(.einfo.*) + *(.discard) + *(.discard.*) + } + +} |