Skip to content

Commit

Permalink
[build] Avoid use of "ld --oformat binary"
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mcb30 committed Jan 2, 2018
1 parent 00c5b95 commit 2bb4ec1
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/arch/x86/Makefile.pcbios
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/arch/x86/prefix/mbr.S
Expand Up @@ -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
Expand Down

0 comments on commit 2bb4ec1

Please sign in to comment.