summaryrefslogtreecommitdiffstats
path: root/src/arch
diff options
context:
space:
mode:
authorMichael Brown2016-03-21 18:33:45 +0100
committerMichael Brown2016-03-21 18:49:58 +0100
commit1afcccd5fdd0662cfc45b5dd3cc32b6e3128719c (patch)
tree2090cd351ac01866b4542268f4f7a4656b92162b /src/arch
parent[infiniband] Allow drivers to override the eIPoIB LEMAC (diff)
downloadipxe-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>
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/x86/Makefile.pcbios12
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