|  | Author: Lukas Schwaighofer <lukas@schwaighofer.name> | 
|  | Description: 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..5b4589d 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..cad28a8 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 = .; | 
|  |  |