summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2018-01-02 21:26:40 +0100
committerMichael Brown2018-01-02 21:26:40 +0100
commit2bb4ec1f54af11f51f6f064c0086b6b80be2dcd2 (patch)
tree33dea6104ca71f5457a707609b12ebb9e712c707
parent[legal] Add missing FILE_LICENCE declarations (diff)
downloadipxe-2bb4ec1f54af11f51f6f064c0086b6b80be2dcd2.tar.gz
ipxe-2bb4ec1f54af11f51f6f064c0086b6b80be2dcd2.tar.xz
ipxe-2bb4ec1f54af11f51f6f064c0086b6b80be2dcd2.zip
[build] Avoid use of "ld --oformat binary"
Using "ld --oformat binary" for mbr.bin and usbdisk.bin seems to cause segmentation faults on some versions of binutils (observed on Fedora 27). Work around this problem by using ld to create an intermediate ELF object, followed by objcopy (via the existing %.tmp -> %.bin rule) to create the final binary. Note that we cannot simply use a single-stage "objcopy -O binary" since this will not process the relocation records for x86_64: see commit 1afcccd ("[build] Do not use "objcopy -O binary" for objects with relocation records"). Reported-by: Brent S <bts@square-r00t.net> Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/arch/x86/Makefile.pcbios8
-rw-r--r--src/arch/x86/prefix/mbr.S1
2 files changed, 5 insertions, 4 deletions
diff --git a/src/arch/x86/Makefile.pcbios b/src/arch/x86/Makefile.pcbios
index df08e018..c44eefc1 100644
--- a/src/arch/x86/Makefile.pcbios
+++ b/src/arch/x86/Makefile.pcbios
@@ -106,14 +106,14 @@ NON_AUTO_MEDIA += fd0
$(Q)sync
# Special target for building Master Boot Record binary
-$(BIN)/mbr.bin : $(BIN)/mbr.o
+$(BIN)/mbr.tmp : $(BIN)/mbr.o
$(QM)$(ECHO) " [LD] $@"
- $(Q)$(LD) $(LDFLAGS) -o $@ --oformat binary -e 0 $<
+ $(Q)$(LD) $(LDFLAGS) -o $@ -e mbr $<
# rule to make a USB disk image
-$(BIN)/usbdisk.bin : $(BIN)/usbdisk.o
+$(BIN)/usbdisk.tmp : $(BIN)/usbdisk.o
$(QM)$(ECHO) " [LD] $@"
- $(Q)$(LD) $(LDFLAGS) -o $@ --oformat binary -e 0 $<
+ $(Q)$(LD) $(LDFLAGS) -o $@ -e mbr $<
NON_AUTO_MEDIA += usb
%usb: $(BIN)/usbdisk.bin %hd
diff --git a/src/arch/x86/prefix/mbr.S b/src/arch/x86/prefix/mbr.S
index a1e237de..032c0e77 100644
--- a/src/arch/x86/prefix/mbr.S
+++ b/src/arch/x86/prefix/mbr.S
@@ -6,6 +6,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
.code16
.org 0
+ .globl mbr
mbr:
movw $exec_sector, %bp
jmp find_active_partition