aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-scripts
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2016-11-23 11:10:39 +0000
committerNick Clifton <nickc@redhat.com>2016-11-23 11:10:39 +0000
commit1a9ccd70f9a75dc6b48d340059f28ef3550c107b (patch)
treea270b05984cd44808359c6f6773ce0dfa5d3dff7 /ld/testsuite/ld-scripts
parent128e85e3ab36b8e30f6612fb50de3cbb4ede6824 (diff)
downloadgdb-1a9ccd70f9a75dc6b48d340059f28ef3550c107b.zip
gdb-1a9ccd70f9a75dc6b48d340059f28ef3550c107b.tar.gz
gdb-1a9ccd70f9a75dc6b48d340059f28ef3550c107b.tar.bz2
Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries.
PR ld/20815 bfd * elf.c (elf_modify_segment_map): Allow empty LOAD segments if they contain the program headers. (_bfd_elf_map_sections_to_segments): If the linker created the PHDR segment then always attempt to include it in a LOAD segment. (assign_file_positions_for_non_load_sections): Allow LOAD segments to overlap PHDR segments. (phdr_sorter): New function. Sorts program headers. (assign_file_positions_except_relocs): Sort the program headers before writing them out. Issue an error if the PHDR segment is not covered by a LOAD segment, unless the backend allows it. * elf-bfd.h (struct elf_backend_data): Add elf_backend_allow_non_load_phdr. * elfxx-target.h (elf_backend_allow_non_load_phdr): Provide default definition that returns FALSE. (elfNN_bed): Initialise the elf_backend_allow_non_load_phdr field. * elf64-hppa.c (elf64_hppa_allow_non_load_phdr): New function. Returns TRUE. (elf_backend_allow_non_load_phdr): Define. * elf-m10300.c (_bfd_mn10300_elf_size_dynamic_sections): Do not place the interpreter string into the .interp section if the nointerp flag is set in the link info structure. * elf32-arc.c (elf_arc_size_dynamic_sections): Likewise. * elf32-score7.c (score_elf_final_link_relocate): Allow for the _gp symbol not being part of the output. binutils* readelf.c (process_program_headers): Check PT_LOAD and PT_PHDR segments for validity. ld * ld.texinfo: Note that PT_TLS can be used as a segment type. * testsuite/ld-discard/discard.ld: Add space for program headers. * testsuite/ld-elf/flags1.ld: Likewise. * testsuite/ld-elf/maxpage3.t: Likewise. * testsuite/ld-elf/noload-1.t: Likewise. * testsuite/ld-elf/orphan.ld: Likewise. * testsuite/ld-elf/overlay.t: Likewise. * testsuite/ld-elf/pr14052.t: Likewise. * testsuite/ld-elf/pr19539.t: Likewise. * testsuite/ld-elf/provide-hidden-1.ld: Likewise. * testsuite/ld-elf/provide-hidden-s.ld: Likewise. * testsuite/ld-elf/weak-dyn-1.ld: Likewise. * testsuite/ld-i386/pr19539.t: Likewise. * testsuite/ld-scripts/defined.t: Likewise. * testsuite/ld-scripts/defined6.t: Likewise. * testsuite/ld-scripts/dynamic-sections.t: Likewise. * testsuite/ld-scripts/empty-aligned.t: Likewise. * testsuite/ld-scripts/provide-2.t: Likewise. * testsuite/ld-scripts/provide-4.t: Likewise. * testsuite/ld-vax-elf/plt-local.ld: Likewise. * testsuite/ld-x86-64/pr19539.t: Likewise. * testsuite/ld-elf/ehdr_start-missing.d: Do not initialise the dynamic linker. * testsuite/ld-elf/ehdr_start-weak.d: Likewise. * testsuite/ld-elf/elf.exp (pr14170, pr17068): Likewise. * testsuite/ld-elf/loadaddr1.d: Update expected readelf output. * testsuite/ld-elf/noload-2.d: Likewise. * testsuite/ld-powerpc/vxworks2.sd: Likewise. * testsuite/ld-scripts/phdrs3a.d: Likewise. * testsuite/ld-scripts/size-2.d: Likewise. * testsuite/ld-elf/group.ld: Add program headers. * testsuite/ld-elf/overlay.d: Skip for SPU. * testsuite/ld-elf/flags1.d: Skip for RX. * testsuite/ld-elf/pr19162.d: Skip for HPPA64. * testsuite/ld-elf/pr19539.d: Skip for ALPHA. * testsuite/ld-scripts/empty-orphan.t: Update program headers. * testsuite/ld-scripts/size-2.t: Likewise.
Diffstat (limited to 'ld/testsuite/ld-scripts')
-rw-r--r--ld/testsuite/ld-scripts/defined.t1
-rw-r--r--ld/testsuite/ld-scripts/defined6.t1
-rw-r--r--ld/testsuite/ld-scripts/dynamic-sections.t1
-rw-r--r--ld/testsuite/ld-scripts/empty-aligned.t1
-rw-r--r--ld/testsuite/ld-scripts/empty-orphan.t6
-rw-r--r--ld/testsuite/ld-scripts/phdrs3a.d2
-rw-r--r--ld/testsuite/ld-scripts/provide-2.t1
-rw-r--r--ld/testsuite/ld-scripts/provide-4.t1
-rw-r--r--ld/testsuite/ld-scripts/size-2.d4
-rw-r--r--ld/testsuite/ld-scripts/size-2.t4
10 files changed, 14 insertions, 8 deletions
diff --git a/ld/testsuite/ld-scripts/defined.t b/ld/testsuite/ld-scripts/defined.t
index c1ef1b6..e4e105f 100644
--- a/ld/testsuite/ld-scripts/defined.t
+++ b/ld/testsuite/ld-scripts/defined.t
@@ -1,4 +1,5 @@
SECTIONS {
+ . = SIZEOF_HEADERS;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) *(COMMON) }
diff --git a/ld/testsuite/ld-scripts/defined6.t b/ld/testsuite/ld-scripts/defined6.t
index f4ca38a..9713aac 100644
--- a/ld/testsuite/ld-scripts/defined6.t
+++ b/ld/testsuite/ld-scripts/defined6.t
@@ -1,5 +1,6 @@
SECTIONS
{
+ . = SIZEOF_HEADERS;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) *(COMMON) }
diff --git a/ld/testsuite/ld-scripts/dynamic-sections.t b/ld/testsuite/ld-scripts/dynamic-sections.t
index f1f24c8..64cf47d6 100644
--- a/ld/testsuite/ld-scripts/dynamic-sections.t
+++ b/ld/testsuite/ld-scripts/dynamic-sections.t
@@ -1,5 +1,6 @@
SECTIONS
{
+ . = SIZEOF_HEADERS;
.data : { *(.data) }
.rodata : { *(.rodata) }
diff --git a/ld/testsuite/ld-scripts/empty-aligned.t b/ld/testsuite/ld-scripts/empty-aligned.t
index 5f6a38d..0073f13 100644
--- a/ld/testsuite/ld-scripts/empty-aligned.t
+++ b/ld/testsuite/ld-scripts/empty-aligned.t
@@ -1,5 +1,6 @@
SECTIONS
{
+ . = SIZEOF_HEADERS;
.text : { *(.text) }
/* Alignment at beginning shouldn't result in empty section being kept. */
.text1 ALIGN (4096) :
diff --git a/ld/testsuite/ld-scripts/empty-orphan.t b/ld/testsuite/ld-scripts/empty-orphan.t
index b57e164..c0dc628 100644
--- a/ld/testsuite/ld-scripts/empty-orphan.t
+++ b/ld/testsuite/ld-scripts/empty-orphan.t
@@ -7,14 +7,14 @@ MEMORY
PHDRS
{
- default_phdr PT_LOAD;
- text_phdr PT_LOAD;
+ headers PT_PHDR PHDRS;
+ text_phdr PT_LOAD PHDRS;
data_phdr PT_LOAD;
}
SECTIONS
{
- .text : { *(.text) } > text_mem : text_phdr
+ .text : { *(.text) } > text_mem : text_phdr :headers
.data : { *(.data) } > data_mem : data_phdr
.bss : { *(.bss) } > data_mem : data_phdr
/DISCARD/ : { *(.reginfo) *(.glue*) }
diff --git a/ld/testsuite/ld-scripts/phdrs3a.d b/ld/testsuite/ld-scripts/phdrs3a.d
index 80bde71..d96bd13 100644
--- a/ld/testsuite/ld-scripts/phdrs3a.d
+++ b/ld/testsuite/ld-scripts/phdrs3a.d
@@ -4,6 +4,6 @@
#readelf: -l --wide
#...
-[ \t]+LOAD[ x0-9a-f]+ R [ x0-9a-f]+
[ \t]+LOAD[ x0-9a-f]+ E [ x0-9a-f]+
+[ \t]+LOAD[ x0-9a-f]+ R [ x0-9a-f]+
#pass
diff --git a/ld/testsuite/ld-scripts/provide-2.t b/ld/testsuite/ld-scripts/provide-2.t
index fe30dd8..abf6eb3 100644
--- a/ld/testsuite/ld-scripts/provide-2.t
+++ b/ld/testsuite/ld-scripts/provide-2.t
@@ -1,5 +1,6 @@
SECTIONS
{
+ . = SIZEOF_HEADERS;
PROVIDE (foo = 1);
PROVIDE (bar = 2);
PROVIDE (baz = 3);
diff --git a/ld/testsuite/ld-scripts/provide-4.t b/ld/testsuite/ld-scripts/provide-4.t
index 424c238..da663db 100644
--- a/ld/testsuite/ld-scripts/provide-4.t
+++ b/ld/testsuite/ld-scripts/provide-4.t
@@ -1,5 +1,6 @@
SECTIONS
{
+ . = SIZEOF_HEADERS;
PROVIDE (foo = 1);
PROVIDE (bar = 2);
PROVIDE (baz = 3);
diff --git a/ld/testsuite/ld-scripts/size-2.d b/ld/testsuite/ld-scripts/size-2.d
index c925673..d76745e 100644
--- a/ld/testsuite/ld-scripts/size-2.d
+++ b/ld/testsuite/ld-scripts/size-2.d
@@ -6,9 +6,9 @@
#...
Program Headers:
+Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg +Align
- +PHDR +0x[0-9a-f]+ 0x0+0000 0x0+0000 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x[0-9a-f]+
+ +PHDR +0x[0-9a-f]+ 0x0+00.. 0x0+00.. 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x[0-9a-f]+
#...
- +LOAD +0x[0-9a-f]+ 0x0+0100 0x0+0100 0x0+0030 0x0+0030 R E +0x[0-9a-f]+
+ +LOAD +0x[0-9a-f]+ 0x0+0... 0x0+0... 0x0+0... 0x0+0... R E +0x[0-9a-f]+
+TLS +0x[0-9a-f]+ 0x0+0108 0x0+0108 0x0+0014 0x0+002c R +0x[0-9a-f]+
Section to Segment mapping:
diff --git a/ld/testsuite/ld-scripts/size-2.t b/ld/testsuite/ld-scripts/size-2.t
index e67b3fa..7238639 100644
--- a/ld/testsuite/ld-scripts/size-2.t
+++ b/ld/testsuite/ld-scripts/size-2.t
@@ -1,8 +1,8 @@
PHDRS
{
- header PT_PHDR FILEHDR PHDRS ;
+ header PT_PHDR PHDRS ;
- image PT_LOAD FLAGS (5);
+ image PT_LOAD FLAGS (5) PHDRS;
tls PT_TLS FLAGS (4);
}