Skip to content

Commit

Permalink
[build] Do not use "objcopy -O binary" for objects with relocation re…
Browse files Browse the repository at this point in the history
…cords

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>
  • Loading branch information
mcb30 committed Mar 21, 2016
1 parent 173c0c2 commit 1afcccd
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/arch/x86/Makefile.pcbios
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 1afcccd

Please sign in to comment.