Parcourir la source

[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>
tags/v1.20.1
Michael Brown il y a 7 ans
Parent
révision
2bb4ec1f54
2 fichiers modifiés avec 5 ajouts et 4 suppressions
  1. 4
    4
      src/arch/x86/Makefile.pcbios
  2. 1
    0
      src/arch/x86/prefix/mbr.S

+ 4
- 4
src/arch/x86/Makefile.pcbios Voir le fichier

106
 	$(Q)sync
106
 	$(Q)sync
107
 
107
 
108
 # Special target for building Master Boot Record binary
108
 # Special target for building Master Boot Record binary
109
-$(BIN)/mbr.bin : $(BIN)/mbr.o
109
+$(BIN)/mbr.tmp : $(BIN)/mbr.o
110
 	$(QM)$(ECHO) "  [LD] $@"
110
 	$(QM)$(ECHO) "  [LD] $@"
111
-	$(Q)$(LD) $(LDFLAGS) -o $@ --oformat binary -e 0 $<
111
+	$(Q)$(LD) $(LDFLAGS) -o $@ -e mbr $<
112
 
112
 
113
 # rule to make a USB disk image
113
 # rule to make a USB disk image
114
-$(BIN)/usbdisk.bin : $(BIN)/usbdisk.o
114
+$(BIN)/usbdisk.tmp : $(BIN)/usbdisk.o
115
 	$(QM)$(ECHO) "  [LD] $@"
115
 	$(QM)$(ECHO) "  [LD] $@"
116
-	$(Q)$(LD) $(LDFLAGS) -o $@ --oformat binary -e 0 $<
116
+	$(Q)$(LD) $(LDFLAGS) -o $@ -e mbr $<
117
 
117
 
118
 NON_AUTO_MEDIA	+= usb
118
 NON_AUTO_MEDIA	+= usb
119
 %usb: $(BIN)/usbdisk.bin %hd
119
 %usb: $(BIN)/usbdisk.bin %hd

+ 1
- 0
src/arch/x86/prefix/mbr.S Voir le fichier

6
 	.code16
6
 	.code16
7
 	.org 0
7
 	.org 0
8
 
8
 
9
+	.globl mbr
9
 mbr:
10
 mbr:
10
 	movw	$exec_sector, %bp
11
 	movw	$exec_sector, %bp
11
 	jmp	find_active_partition
12
 	jmp	find_active_partition

Chargement…
Annuler
Enregistrer