summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brown2011-02-23 22:12:56 +0100
committerMichael Brown2011-02-23 22:12:56 +0100
commit030e5a064e5f7252b3b77a27c78169f4a5c974c5 (patch)
treed6d310ab791f714a0d2da64543deb3cb6f261b4a /src
parent[build] Ensure an entry point symbol exists in all builds (diff)
downloadipxe-030e5a064e5f7252b3b77a27c78169f4a5c974c5.tar.gz
ipxe-030e5a064e5f7252b3b77a27c78169f4a5c974c5.tar.xz
ipxe-030e5a064e5f7252b3b77a27c78169f4a5c974c5.zip
[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>
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.housekeeping8
-rw-r--r--src/arch/i386/prefix/dskprefix.S4
-rw-r--r--src/arch/i386/prefix/hdprefix.S4
-rw-r--r--src/arch/i386/prefix/kkpxeprefix.S1
-rw-r--r--src/arch/i386/prefix/kpxeprefix.S1
-rw-r--r--src/arch/i386/prefix/linuxprefix.S6
-rw-r--r--src/arch/i386/prefix/lkrnprefix.S4
-rw-r--r--src/arch/i386/prefix/mromprefix.S1
-rw-r--r--src/arch/i386/prefix/nbiprefix.S6
-rw-r--r--src/arch/i386/prefix/pxeprefix.S4
-rw-r--r--src/arch/i386/prefix/romprefix.S4
-rw-r--r--src/arch/i386/scripts/i386-kir.lds1
-rw-r--r--src/arch/i386/scripts/i386.lds2
-rw-r--r--src/arch/i386/scripts/linux.lds2
-rw-r--r--src/arch/x86/Makefile.efi4
-rw-r--r--src/arch/x86_64/prefix/linuxprefix.S6
-rw-r--r--src/arch/x86_64/scripts/linux.lds2
17 files changed, 26 insertions, 34 deletions
diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
index c4350671a..0570f018a 100644
--- a/src/Makefile.housekeeping
+++ b/src/Makefile.housekeeping
@@ -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)
diff --git a/src/arch/i386/prefix/dskprefix.S b/src/arch/i386/prefix/dskprefix.S
index 78a108b55..7aa017ccd 100644
--- a/src/arch/i386/prefix/dskprefix.S
+++ b/src/arch/i386/prefix/dskprefix.S
@@ -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:
diff --git a/src/arch/i386/prefix/hdprefix.S b/src/arch/i386/prefix/hdprefix.S
index a471aa0df..876bfe1be 100644
--- a/src/arch/i386/prefix/hdprefix.S
+++ b/src/arch/i386/prefix/hdprefix.S
@@ -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
diff --git a/src/arch/i386/prefix/kkpxeprefix.S b/src/arch/i386/prefix/kkpxeprefix.S
index 02cc6feea..d177d7d62 100644
--- a/src/arch/i386/prefix/kkpxeprefix.S
+++ b/src/arch/i386/prefix/kkpxeprefix.S
@@ -10,4 +10,5 @@ REQUEST_OBJECT ( pxeparent_dhcp )
#define PXELOADER_KEEP_UNDI
#define PXELOADER_KEEP_PXE
+#define _pxe_start _kkpxe_start
#include "pxeprefix.S"
diff --git a/src/arch/i386/prefix/kpxeprefix.S b/src/arch/i386/prefix/kpxeprefix.S
index 923facccd..c75608172 100644
--- a/src/arch/i386/prefix/kpxeprefix.S
+++ b/src/arch/i386/prefix/kpxeprefix.S
@@ -6,4 +6,5 @@
FILE_LICENCE ( GPL2_OR_LATER )
#define PXELOADER_KEEP_UNDI
+#define _pxe_start _kpxe_start
#include "pxeprefix.S"
diff --git a/src/arch/i386/prefix/linuxprefix.S b/src/arch/i386/prefix/linuxprefix.S
index b32b08f2e..ff22e9fee 100644
--- a/src/arch/i386/prefix/linuxprefix.S
+++ b/src/arch/i386/prefix/linuxprefix.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
diff --git a/src/arch/i386/prefix/lkrnprefix.S b/src/arch/i386/prefix/lkrnprefix.S
index 7577a8a16..008c79efd 100644
--- a/src/arch/i386/prefix/lkrnprefix.S
+++ b/src/arch/i386/prefix/lkrnprefix.S
@@ -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.
diff --git a/src/arch/i386/prefix/mromprefix.S b/src/arch/i386/prefix/mromprefix.S
index 3e177d001..7bbe44c4e 100644
--- a/src/arch/i386/prefix/mromprefix.S
+++ b/src/arch/i386/prefix/mromprefix.S
@@ -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
diff --git a/src/arch/i386/prefix/nbiprefix.S b/src/arch/i386/prefix/nbiprefix.S
index b93170e50..01dce90fb 100644
--- a/src/arch/i386/prefix/nbiprefix.S
+++ b/src/arch/i386/prefix/nbiprefix.S
@@ -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
diff --git a/src/arch/i386/prefix/pxeprefix.S b/src/arch/i386/prefix/pxeprefix.S
index 0bfd0ae3a..b7468cdf0 100644
--- a/src/arch/i386/prefix/pxeprefix.S
+++ b/src/arch/i386/prefix/pxeprefix.S
@@ -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 */
diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S
index 53af422a4..ede0fb425 100644
--- a/src/arch/i386/prefix/romprefix.S
+++ b/src/arch/i386/prefix/romprefix.S
@@ -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:
diff --git a/src/arch/i386/scripts/i386-kir.lds b/src/arch/i386/scripts/i386-kir.lds
index 620bc2fe3..338d6ee87 100644
--- a/src/arch/i386/scripts/i386-kir.lds
+++ b/src/arch/i386/scripts/i386-kir.lds
@@ -7,7 +7,6 @@
OUTPUT_FORMAT ( "elf32-i386", "elf32-i386", "elf32-i386" )
OUTPUT_ARCH ( i386 )
-ENTRY ( _entry )
SECTIONS {
diff --git a/src/arch/i386/scripts/i386.lds b/src/arch/i386/scripts/i386.lds
index dd07194cb..c5bc631fa 100644
--- a/src/arch/i386/scripts/i386.lds
+++ b/src/arch/i386/scripts/i386.lds
@@ -5,8 +5,6 @@
*
*/
-ENTRY ( start )
-
SECTIONS {
/* Each section starts at a virtual address of zero.
diff --git a/src/arch/i386/scripts/linux.lds b/src/arch/i386/scripts/linux.lds
index 654f68e30..5501d93f7 100644
--- a/src/arch/i386/scripts/linux.lds
+++ b/src/arch/i386/scripts/linux.lds
@@ -8,8 +8,6 @@
OUTPUT_FORMAT ( "elf32-i386", "elf32-i386", "elf32-i386" )
OUTPUT_ARCH ( i386 )
-ENTRY ( _start )
-
SECTIONS {
_max_align = 32;
diff --git a/src/arch/x86/Makefile.efi b/src/arch/x86/Makefile.efi
index 4f0c1b245..bef8d59d8 100644
--- a/src/arch/x86/Makefile.efi
+++ b/src/arch/x86/Makefile.efi
@@ -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)
diff --git a/src/arch/x86_64/prefix/linuxprefix.S b/src/arch/x86_64/prefix/linuxprefix.S
index 4aa0b8403..713b9e38d 100644
--- a/src/arch/x86_64/prefix/linuxprefix.S
+++ b/src/arch/x86_64/prefix/linuxprefix.S
@@ -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
diff --git a/src/arch/x86_64/scripts/linux.lds b/src/arch/x86_64/scripts/linux.lds
index 3bcd7aa1b..ed32b7cf5 100644
--- a/src/arch/x86_64/scripts/linux.lds
+++ b/src/arch/x86_64/scripts/linux.lds
@@ -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;