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

Gbp-Pq: Name 0017-single-load-segment.patch
This commit is contained in:
Lukas Schwaighofer 2018-08-18 16:56:35 +02:00 committed by openKylinBot
parent bfa5029962
commit 0f957eb8bd
2 changed files with 42 additions and 32 deletions

View File

@ -19,6 +19,11 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386) OUTPUT_ARCH(i386)
ENTRY(_start) ENTRY(_start)
PHDRS
{
all PT_LOAD ;
}
SECTIONS SECTIONS
{ {
. = 0; . = 0;
@ -31,7 +36,7 @@ SECTIONS
*(.text) *(.text)
*(.text.*) *(.text.*)
__text_end = .; __text_end = .;
} } :all
. = ALIGN(16); . = ALIGN(16);
@ -40,7 +45,7 @@ SECTIONS
*(.rodata) *(.rodata)
*(.rodata.*) *(.rodata.*)
__rodata_end = .; __rodata_end = .;
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -49,14 +54,14 @@ SECTIONS
KEEP (*(SORT(.ctors.*))) KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors)) KEEP (*(.ctors))
__ctors_end = .; __ctors_end = .;
} } :all
.dtors : { .dtors : {
__dtors_start = .; __dtors_start = .;
KEEP (*(SORT(.dtors.*))) KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors)) KEEP (*(.dtors))
__dtors_end = .; __dtors_end = .;
} } :all
. = ALIGN(4096); . = ALIGN(4096);
.rel : { .rel : {
@ -64,7 +69,7 @@ SECTIONS
*(.rel.data) *(.rel.data)
*(.rel.data.*) *(.rel.data.*)
*(.rel.ctors) *(.rel.ctors)
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -72,14 +77,14 @@ SECTIONS
__gnu_hash_start = .; __gnu_hash_start = .;
*(.gnu.hash) *(.gnu.hash)
__gnu_hash_end = .; __gnu_hash_end = .;
} } :all
.dynsym : { .dynsym : {
__dynsym_start = .; __dynsym_start = .;
*(.dynsym) *(.dynsym)
__dynsym_end = .; __dynsym_end = .;
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -87,7 +92,7 @@ SECTIONS
__dynstr_start = .; __dynstr_start = .;
*(.dynstr) *(.dynstr)
__dynstr_end = .; __dynstr_end = .;
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -104,7 +109,7 @@ SECTIONS
KEEP (*(.got.plt)) KEEP (*(.got.plt))
KEEP (*(.got)) KEEP (*(.got))
__got_end = .; __got_end = .;
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -112,7 +117,7 @@ SECTIONS
__dynamic_start = .; __dynamic_start = .;
*(.dynamic) *(.dynamic)
__dynamic_end = .; __dynamic_end = .;
} } :all
. = ALIGN(16); . = ALIGN(16);
@ -122,19 +127,19 @@ SECTIONS
*(.data.*) *(.data.*)
*(.lowmem) *(.lowmem)
__data_end = .; __data_end = .;
} } :all
.reloc : { .reloc : {
*(.reloc) *(.reloc)
} } :all
.symtab : { .symtab : {
*(.symtab) *(.symtab)
} } :all
.strtab : { .strtab : {
*(.strtab) *(.strtab)
} } :all
.bss (NOLOAD) : { .bss (NOLOAD) : {
/* the EFI loader doesn't seem to like a .bss section, /* the EFI loader doesn't seem to like a .bss section,
@ -148,7 +153,7 @@ SECTIONS
__bss_end = .; __bss_end = .;
*(.sbss) *(.sbss)
*(.scommon) *(.scommon)
} } :all
__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start); __bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
__bss_dwords = (__bss_len + 3) >> 2; __bss_dwords = (__bss_len + 3) >> 2;
@ -161,7 +166,7 @@ SECTIONS
*(.hugebss) *(.hugebss)
*(.hugebss.*) *(.hugebss.*)
__hugebss_end = .; __hugebss_end = .;
} } :all
_end = .; _end = .;

View File

@ -19,6 +19,11 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64) OUTPUT_ARCH(i386:x86-64)
ENTRY(_start) ENTRY(_start)
PHDRS
{
all PT_LOAD ;
}
SECTIONS SECTIONS
{ {
. = 0; . = 0;
@ -31,7 +36,7 @@ SECTIONS
*(.text) *(.text)
*(.text.*) *(.text.*)
__text_end = .; __text_end = .;
} } :all
. = ALIGN(16); . = ALIGN(16);
@ -40,7 +45,7 @@ SECTIONS
*(.rodata) *(.rodata)
*(.rodata.*) *(.rodata.*)
__rodata_end = .; __rodata_end = .;
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -49,14 +54,14 @@ SECTIONS
KEEP (*(SORT(.ctors.*))) KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors)) KEEP (*(.ctors))
__ctors_end = .; __ctors_end = .;
} } :all
.dtors : { .dtors : {
__dtors_start = .; __dtors_start = .;
KEEP (*(SORT(.dtors.*))) KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors)) KEEP (*(.dtors))
__dtors_end = .; __dtors_end = .;
} } :all
. = ALIGN(4096); . = ALIGN(4096);
.rel : { .rel : {
@ -64,7 +69,7 @@ SECTIONS
*(.rel.data) *(.rel.data)
*(.rel.data.*) *(.rel.data.*)
*(.rel.ctors) *(.rel.ctors)
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -72,14 +77,14 @@ SECTIONS
__gnu_hash_start = .; __gnu_hash_start = .;
*(.gnu.hash) *(.gnu.hash)
__gnu_hash_end = .; __gnu_hash_end = .;
} } :all
.dynsym : { .dynsym : {
__dynsym_start = .; __dynsym_start = .;
*(.dynsym) *(.dynsym)
__dynsym_end = .; __dynsym_end = .;
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -87,7 +92,7 @@ SECTIONS
__dynstr_start = .; __dynstr_start = .;
*(.dynstr) *(.dynstr)
__dynstr_end = .; __dynstr_end = .;
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -104,7 +109,7 @@ SECTIONS
KEEP (*(.got.plt)) KEEP (*(.got.plt))
KEEP (*(.got)) KEEP (*(.got))
__got_end = .; __got_end = .;
} } :all
. = ALIGN(4); . = ALIGN(4);
@ -112,7 +117,7 @@ SECTIONS
__dynamic_start = .; __dynamic_start = .;
*(.dynamic) *(.dynamic)
__dynamic_end = .; __dynamic_end = .;
} } :all
. = ALIGN(16); . = ALIGN(16);
@ -122,19 +127,19 @@ SECTIONS
*(.data.*) *(.data.*)
*(.lowmem) *(.lowmem)
__data_end = .; __data_end = .;
} } :all
.reloc : { .reloc : {
*(.reloc) *(.reloc)
} } :all
.symtab : { .symtab : {
*(.symtab) *(.symtab)
} } :all
.strtab : { .strtab : {
*(.strtab) *(.strtab)
} } :all
.bss (NOLOAD) : { .bss (NOLOAD) : {
/* the EFI loader doesn't seem to like a .bss section, /* the EFI loader doesn't seem to like a .bss section,
@ -148,7 +153,7 @@ SECTIONS
__bss_end = .; __bss_end = .;
*(.sbss) *(.sbss)
*(.scommon) *(.scommon)
} } :all
__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start); __bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
__bss_dwords = (__bss_len + 3) >> 2; __bss_dwords = (__bss_len + 3) >> 2;
@ -161,7 +166,7 @@ SECTIONS
*(.hugebss) *(.hugebss)
*(.hugebss.*) *(.hugebss.*)
__hugebss_end = .; __hugebss_end = .;
} } :all
_end = .; _end = .;