diff options
author | Michael Brown | 2016-03-21 18:33:45 +0100 |
---|---|---|
committer | Michael Brown | 2016-03-21 18:49:58 +0100 |
commit | 1afcccd5fdd0662cfc45b5dd3cc32b6e3128719c (patch) | |
tree | 2090cd351ac01866b4542268f4f7a4656b92162b | |
parent | [infiniband] Allow drivers to override the eIPoIB LEMAC (diff) | |
download | ipxe-1afcccd5fdd0662cfc45b5dd3cc32b6e3128719c.tar.gz ipxe-1afcccd5fdd0662cfc45b5dd3cc32b6e3128719c.tar.xz ipxe-1afcccd5fdd0662cfc45b5dd3cc32b6e3128719c.zip |
[build] Do not use "objcopy -O binary" for objects with relocation records
The mbr.bin and usbdisk.bin standalone blobs are currently generated
using "objcopy -O binary", which does not process relocation records.
For the i386 build, this does not matter since the section start
address is zero and so the ".rel" relocation records are effectively
no-ops anyway.
For the x86_64 build, the ".rela" relocation records are not no-ops,
since the addend is included as part of the relocation record (rather
than inline). Using "objcopy -O binary" will silently discard the
relocation records, with the result that all symbols are effectively
given a value of zero.
Fix by using "ld --oformat binary" instead of "objcopy -O binary" to
generate mbr.bin and usbdisk.bin.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/arch/x86/Makefile.pcbios | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/arch/x86/Makefile.pcbios b/src/arch/x86/Makefile.pcbios index 18a6f759..f8c22535 100644 --- a/src/arch/x86/Makefile.pcbios +++ b/src/arch/x86/Makefile.pcbios @@ -12,6 +12,10 @@ LDSCRIPT = arch/x86/scripts/pcbios.lds # LDFLAGS += -N --no-check-sections +# Prefix always starts at address zero +# +LDFLAGS += --section-start=.prefix=0 + # Media types. # MEDIA += rom @@ -103,13 +107,13 @@ NON_AUTO_MEDIA += fd0 # Special target for building Master Boot Record binary $(BIN)/mbr.bin : $(BIN)/mbr.o - $(QM)$(ECHO) " [OBJCOPY] $@" - $(Q)$(OBJCOPY) -O binary $< $@ + $(QM)$(ECHO) " [LD] $@" + $(Q)$(LD) $(LDFLAGS) -o $@ --oformat binary -e 0 $< # rule to make a USB disk image $(BIN)/usbdisk.bin : $(BIN)/usbdisk.o - $(QM)$(ECHO) " [OBJCOPY] $@" - $(Q)$(OBJCOPY) -O binary $< $@ + $(QM)$(ECHO) " [LD] $@" + $(Q)$(LD) $(LDFLAGS) -o $@ --oformat binary -e 0 $< NON_AUTO_MEDIA += usb %usb: $(BIN)/usbdisk.bin %hd |