From: Lukas Schwaighofer 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 = .;