123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- From: Lukas Schwaighofer <lukas@schwaighofer.name>
- Date: Sat, 18 Aug 2018 16:56:35 +0200
- Subject: Force the linker to put all sections into a single PT_LOAD segment
- This is required when using binutils >= 2.31 which writes two PT_LOAD segments
- by default. This is not supported by the wrapper.c script used to convert the
- shared object into an elf binary.
- Forwarded: https://www.syslinux.org/archives/2018-August/026167.html
- ---
- efi/i386/syslinux.ld | 37 +++++++++++++++++++++----------------
- efi/x86_64/syslinux.ld | 37 +++++++++++++++++++++----------------
- 2 files changed, 42 insertions(+), 32 deletions(-)
- diff --git a/efi/i386/syslinux.ld b/efi/i386/syslinux.ld
- index bab3fc7..19c1647 100644
- --- a/efi/i386/syslinux.ld
- +++ b/efi/i386/syslinux.ld
- @@ -19,6 +19,11 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
- OUTPUT_ARCH(i386)
- ENTRY(_start)
-
- +PHDRS
- +{
- + all PT_LOAD ;
- +}
- +
- SECTIONS
- {
- . = 0;
- @@ -31,7 +36,7 @@ SECTIONS
- *(.text)
- *(.text.*)
- __text_end = .;
- - }
- + } :all
-
- . = ALIGN(16);
-
- @@ -40,7 +45,7 @@ SECTIONS
- *(.rodata)
- *(.rodata.*)
- __rodata_end = .;
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -49,14 +54,14 @@ SECTIONS
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- __ctors_end = .;
- - }
- + } :all
-
- .dtors : {
- __dtors_start = .;
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- __dtors_end = .;
- - }
- + } :all
-
- . = ALIGN(4096);
- .rel : {
- @@ -64,7 +69,7 @@ SECTIONS
- *(.rel.data)
- *(.rel.data.*)
- *(.rel.ctors)
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -72,14 +77,14 @@ SECTIONS
- __gnu_hash_start = .;
- *(.gnu.hash)
- __gnu_hash_end = .;
- - }
- + } :all
-
-
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- __dynsym_end = .;
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -87,7 +92,7 @@ SECTIONS
- __dynstr_start = .;
- *(.dynstr)
- __dynstr_end = .;
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -104,7 +109,7 @@ SECTIONS
- KEEP (*(.got.plt))
- KEEP (*(.got))
- __got_end = .;
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -112,7 +117,7 @@ SECTIONS
- __dynamic_start = .;
- *(.dynamic)
- __dynamic_end = .;
- - }
- + } :all
-
- . = ALIGN(16);
-
- @@ -122,19 +127,19 @@ SECTIONS
- *(.data.*)
- *(.lowmem)
- __data_end = .;
- - }
- + } :all
-
- .reloc : {
- *(.reloc)
- - }
- + } :all
-
- .symtab : {
- *(.symtab)
- - }
- + } :all
-
- .strtab : {
- *(.strtab)
- - }
- + } :all
-
- .bss (NOLOAD) : {
- /* the EFI loader doesn't seem to like a .bss section,
- @@ -148,7 +153,7 @@ SECTIONS
- __bss_end = .;
- *(.sbss)
- *(.scommon)
- - }
- + } :all
- __bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
- __bss_dwords = (__bss_len + 3) >> 2;
-
- @@ -161,7 +166,7 @@ SECTIONS
- *(.hugebss)
- *(.hugebss.*)
- __hugebss_end = .;
- - }
- + } :all
-
- _end = .;
-
- diff --git a/efi/x86_64/syslinux.ld b/efi/x86_64/syslinux.ld
- index 450641c..a2c124f 100644
- --- a/efi/x86_64/syslinux.ld
- +++ b/efi/x86_64/syslinux.ld
- @@ -19,6 +19,11 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
- OUTPUT_ARCH(i386:x86-64)
- ENTRY(_start)
-
- +PHDRS
- +{
- + all PT_LOAD ;
- +}
- +
- SECTIONS
- {
- . = 0;
- @@ -31,7 +36,7 @@ SECTIONS
- *(.text)
- *(.text.*)
- __text_end = .;
- - }
- + } :all
-
- . = ALIGN(16);
-
- @@ -40,7 +45,7 @@ SECTIONS
- *(.rodata)
- *(.rodata.*)
- __rodata_end = .;
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -49,14 +54,14 @@ SECTIONS
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- __ctors_end = .;
- - }
- + } :all
-
- .dtors : {
- __dtors_start = .;
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- __dtors_end = .;
- - }
- + } :all
-
- . = ALIGN(4096);
- .rel : {
- @@ -64,7 +69,7 @@ SECTIONS
- *(.rel.data)
- *(.rel.data.*)
- *(.rel.ctors)
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -72,14 +77,14 @@ SECTIONS
- __gnu_hash_start = .;
- *(.gnu.hash)
- __gnu_hash_end = .;
- - }
- + } :all
-
-
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- __dynsym_end = .;
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -87,7 +92,7 @@ SECTIONS
- __dynstr_start = .;
- *(.dynstr)
- __dynstr_end = .;
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -104,7 +109,7 @@ SECTIONS
- KEEP (*(.got.plt))
- KEEP (*(.got))
- __got_end = .;
- - }
- + } :all
-
- . = ALIGN(4);
-
- @@ -112,7 +117,7 @@ SECTIONS
- __dynamic_start = .;
- *(.dynamic)
- __dynamic_end = .;
- - }
- + } :all
-
- . = ALIGN(16);
-
- @@ -122,19 +127,19 @@ SECTIONS
- *(.data.*)
- *(.lowmem)
- __data_end = .;
- - }
- + } :all
-
- .reloc : {
- *(.reloc)
- - }
- + } :all
-
- .symtab : {
- *(.symtab)
- - }
- + } :all
-
- .strtab : {
- *(.strtab)
- - }
- + } :all
-
- .bss (NOLOAD) : {
- /* the EFI loader doesn't seem to like a .bss section,
- @@ -148,7 +153,7 @@ SECTIONS
- __bss_end = .;
- *(.sbss)
- *(.scommon)
- - }
- + } :all
- __bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
- __bss_dwords = (__bss_len + 3) >> 2;
-
- @@ -161,7 +166,7 @@ SECTIONS
- *(.hugebss)
- *(.hugebss.*)
- __hugebss_end = .;
- - }
- + } :all
-
- _end = .;
-
|