mirror of https://github.com/ipxe/ipxe.git
[build] Use unique entry symbols for each prefix
Some binutils versions will drag in an object to satisfy the entry symbol; some won't. Try to cope with this exciting variety of behaviour by ensuring that all entry symbols are unique. Remove the explicit inclusion of the prefix object on the linker command line, since the entry symbol now provides all the information needed to identify the prefix. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/1/head
parent
295c2fd671
commit
030e5a064e
|
@ -656,9 +656,9 @@ TGT_PCI_DEVICE = $(PCI_DEVICE_$(TGT_ROM_NAME))
|
|||
# ROM header (e.g."pci_vendor_id=0x1186 pci_device_id=0x1300")
|
||||
#
|
||||
TGT_LD_DRIVERS = $(subst -,_,$(patsubst %,obj_%,$(TGT_DRIVERS)))
|
||||
TGT_LD_PREFIX = obj_$(TGT_PREFIX)prefix
|
||||
TGT_LD_IDS = pci_vendor_id=$(firstword $(TGT_PCI_VENDOR) 0) \
|
||||
pci_device_id=$(firstword $(TGT_PCI_DEVICE) 0)
|
||||
TGT_LD_ENTRY = _$(TGT_PREFIX)_start
|
||||
|
||||
# Calculate linker flags based on link-time options for the current
|
||||
# target type (e.g. "bin/dfe538--prism2_pci.zrom.tmp") and derive the
|
||||
|
@ -668,10 +668,10 @@ TGT_LD_IDS = pci_vendor_id=$(firstword $(TGT_PCI_VENDOR) 0) \
|
|||
# "-u obj_zpciprefix -u obj_rtl8139 -u obj_prism2_pci
|
||||
# --defsym pci_vendor=0x1186 --defsym pci_device=0x1300")
|
||||
#
|
||||
TGT_LD_FLAGS = $(foreach SYM,$(TGT_LD_PREFIX) $(TGT_LD_DRIVERS) obj_config,\
|
||||
TGT_LD_FLAGS = $(foreach SYM,$(TGT_LD_ENTRY) $(TGT_LD_DRIVERS) obj_config,\
|
||||
-u $(SYM) --defsym check_$(SYM)=$(SYM) ) \
|
||||
$(patsubst %,--defsym %,$(TGT_LD_IDS)) \
|
||||
$(TGT_LD_FLAGS_PRE)
|
||||
-e $(TGT_LD_ENTRY)
|
||||
|
||||
# Calculate list of debugging versions of objects to be included in
|
||||
# the target.
|
||||
|
@ -698,8 +698,8 @@ $(BIN)/%.info :
|
|||
@$(ECHO) 'PCI device : $(TGT_PCI_DEVICE)'
|
||||
@$(ECHO)
|
||||
@$(ECHO) 'LD driver symbols : $(TGT_LD_DRIVERS)'
|
||||
@$(ECHO) 'LD prefix symbols : $(TGT_LD_PREFIX)'
|
||||
@$(ECHO) 'LD ID symbols : $(TGT_LD_IDS)'
|
||||
@$(ECHO) 'LD entry point : $(TGT_LD_ENTRY)'
|
||||
@$(ECHO)
|
||||
@$(ECHO) 'LD target flags : $(TGT_LD_FLAGS)'
|
||||
@$(ECHO)
|
||||
|
|
|
@ -27,8 +27,8 @@ FILE_LICENCE ( GPL2_ONLY )
|
|||
.text
|
||||
.section ".prefix", "ax", @progbits
|
||||
.code16
|
||||
.globl start
|
||||
start:
|
||||
.globl _dsk_start
|
||||
_dsk_start:
|
||||
|
||||
jmp $BOOTSEG, $go /* reload cs:ip to match relocation addr */
|
||||
go:
|
||||
|
|
|
@ -5,8 +5,8 @@ FILE_LICENCE ( GPL2_OR_LATER )
|
|||
.section ".prefix", "awx", @progbits
|
||||
.code16
|
||||
.org 0
|
||||
.globl start
|
||||
start:
|
||||
.globl _hd_start
|
||||
_hd_start:
|
||||
|
||||
movw $load_image, %bp
|
||||
jmp find_active_partition
|
||||
|
|
|
@ -10,4 +10,5 @@ REQUEST_OBJECT ( pxeparent_dhcp )
|
|||
|
||||
#define PXELOADER_KEEP_UNDI
|
||||
#define PXELOADER_KEEP_PXE
|
||||
#define _pxe_start _kkpxe_start
|
||||
#include "pxeprefix.S"
|
||||
|
|
|
@ -6,4 +6,5 @@
|
|||
FILE_LICENCE ( GPL2_OR_LATER )
|
||||
|
||||
#define PXELOADER_KEEP_UNDI
|
||||
#define _pxe_start _kpxe_start
|
||||
#include "pxeprefix.S"
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
.section ".text"
|
||||
.code32
|
||||
.globl _start
|
||||
.type _start, @function
|
||||
.globl _linux_start
|
||||
.type _linux_start, @function
|
||||
|
||||
_start:
|
||||
_linux_start:
|
||||
xorl %ebp, %ebp
|
||||
|
||||
popl %esi // save argc
|
||||
|
|
|
@ -49,8 +49,8 @@ FILE_LICENCE ( GPL_ANY )
|
|||
.arch i386
|
||||
.org 0
|
||||
.section ".prefix", "ax", @progbits
|
||||
.globl start
|
||||
start:
|
||||
.globl _lkrn_start
|
||||
_lkrn_start:
|
||||
/*
|
||||
This is a minimal boot sector. If anyone tries to execute it (e.g., if
|
||||
a .lilo file is dd'ed to a floppy), print an error message.
|
||||
|
|
|
@ -30,6 +30,7 @@ FILE_LICENCE ( GPL2_OR_LATER )
|
|||
#define PCI_BAR_EXPROM 0x30
|
||||
|
||||
#define ROMPREFIX_EXCLUDE_PAYLOAD 1
|
||||
#define _rom_start _mrom_start
|
||||
#include "romprefix.S"
|
||||
|
||||
.text
|
||||
|
|
|
@ -17,7 +17,7 @@ file_header:
|
|||
.byte 0
|
||||
.byte 0 /* No flags */
|
||||
.word 0x0000, 0x07c0 /* Load header to 0x07c0:0x0000 */
|
||||
.word start, 0x07c0 /* Start execution at 0x07c0:entry */
|
||||
.word _nbi_start, 0x07c0 /* Start execution at 0x07c0:entry */
|
||||
.size file_header, . - file_header
|
||||
|
||||
/*****************************************************************************
|
||||
|
@ -49,8 +49,8 @@ memlen: .long -512
|
|||
* NBI entry point
|
||||
*****************************************************************************
|
||||
*/
|
||||
.globl start
|
||||
start:
|
||||
.globl _nbi_start
|
||||
_nbi_start:
|
||||
/* Install iPXE */
|
||||
call install
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@ FILE_LICENCE ( GPL2_OR_LATER )
|
|||
*****************************************************************************
|
||||
*/
|
||||
.section ".prefix", "ax", @progbits
|
||||
.globl start
|
||||
start:
|
||||
.globl _pxe_start
|
||||
_pxe_start:
|
||||
jmp $0x7c0, $1f
|
||||
1:
|
||||
/* Preserve registers for possible return to PXE */
|
||||
|
|
|
@ -45,8 +45,8 @@ FILE_LICENCE ( GPL2_OR_LATER )
|
|||
.code16
|
||||
.arch i386
|
||||
.section ".prefix", "ax", @progbits
|
||||
.globl start
|
||||
start:
|
||||
.globl _rom_start
|
||||
_rom_start:
|
||||
|
||||
.org 0x00
|
||||
romheader:
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
OUTPUT_FORMAT ( "elf32-i386", "elf32-i386", "elf32-i386" )
|
||||
OUTPUT_ARCH ( i386 )
|
||||
ENTRY ( _entry )
|
||||
|
||||
SECTIONS {
|
||||
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
ENTRY ( start )
|
||||
|
||||
SECTIONS {
|
||||
|
||||
/* Each section starts at a virtual address of zero.
|
||||
|
|
|
@ -8,8 +8,6 @@
|
|||
OUTPUT_FORMAT ( "elf32-i386", "elf32-i386", "elf32-i386" )
|
||||
OUTPUT_ARCH ( i386 )
|
||||
|
||||
ENTRY ( _start )
|
||||
|
||||
SECTIONS {
|
||||
_max_align = 32;
|
||||
|
||||
|
|
|
@ -13,10 +13,6 @@ LDFLAGS += -q -S
|
|||
NON_AUTO_MEDIA += efi
|
||||
NON_AUTO_MEDIA += efidrv
|
||||
|
||||
# Specify entry point
|
||||
#
|
||||
TGT_LD_FLAGS_PRE = -e _$(TGT_PREFIX)_start
|
||||
|
||||
# Rules for building EFI files
|
||||
#
|
||||
$(BIN)/%.efi : $(BIN)/%.efi.tmp $(ELF2EFI)
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
.section ".text"
|
||||
.code64
|
||||
.globl _start
|
||||
.type _start, @function
|
||||
.globl _linux_start
|
||||
.type _linux_start, @function
|
||||
|
||||
_start:
|
||||
_linux_start:
|
||||
xorq %rbp, %rbp
|
||||
|
||||
popq %rdi // argc -> C arg1
|
||||
|
|
|
@ -8,8 +8,6 @@
|
|||
OUTPUT_FORMAT ( "elf64-x86-64", "elf64-x86-64", "elf64-x86-64" )
|
||||
OUTPUT_ARCH ( i386:x86-64 )
|
||||
|
||||
ENTRY ( _start )
|
||||
|
||||
SECTIONS {
|
||||
_max_align = 32;
|
||||
|
||||
|
|
Loading…
Reference in New Issue