Improve orphaned TLS section handling

ld/

	PR ld/16498
	* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Improve
	orphaned TLS section handling.

ld/testsuite/

	PR ld/16498
	* ld-elf/pr16498a.d: New file.
	* ld-elf/pr16498a.s: Likewise.
	* ld-elf/pr16498a.t: Likewise.
This commit is contained in:
H.J. Lu 2014-01-22 11:24:12 -08:00
parent 6b6aa82881
commit d85e71fec0
6 changed files with 57 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
PR ld/16498
* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Improve
orphaned TLS section handling.
2014-01-24 Alan Modra <amodra@gmail.com>
* ldlang.c (lang_output_section_find_by_flags): Be careful to

View File

@ -1812,6 +1812,9 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
{ ".rodata",
SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
0, 0, 0, 0 },
{ ".tdata",
SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_THREAD_LOCAL,
0, 0, 0, 0 },
{ ".data",
SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA,
0, 0, 0, 0 },
@ -1835,6 +1838,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
{
orphan_text = 0,
orphan_rodata,
orphan_tdata,
orphan_data,
orphan_bss,
orphan_rel,
@ -1962,6 +1966,8 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
place = &hold[orphan_bss];
else if ((s->flags & SEC_SMALL_DATA) != 0)
place = &hold[orphan_sdata];
else if ((s->flags & SEC_THREAD_LOCAL) != 0)
place = &hold[orphan_tdata];
else if ((s->flags & SEC_READONLY) == 0)
place = &hold[orphan_data];
else if (((iself && (sh_type == SHT_RELA || sh_type == SHT_REL))

View File

@ -1,3 +1,10 @@
2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
PR ld/16498
* ld-elf/pr16498a.d: New file.
* ld-elf/pr16498a.s: Likewise.
* ld-elf/pr16498a.t: Likewise.
2014-01-22 Alan Modra <amodra@gmail.com>
* ld-scripts/pr14962-2.d: Correct target triple.

View File

@ -0,0 +1,9 @@
#ld: -shared -T pr16498a.t
#readelf: -l --wide
#target: *-*-linux* *-*-gnu* *-*-nacl*
#...
TLS .*
#...
[ ]+[0-9]+[ ]+.tdata .tbss[ ]*
#pass

View File

@ -0,0 +1,23 @@
.globl data
.data
.align 32
.type data, %object
.size data, 120
data:
.long 1
.zero 116
.globl foo
.section .tbss,"awT",%nobits
.align 4
.type foo, %object
.size foo, 4
foo:
.zero 4
.globl bar
.section .tdata,"awT",%progbits
.align 16
.type bar, %object
.size bar, 80
bar:
.long 1
.zero 76

View File

@ -0,0 +1,6 @@
SECTIONS
{
.tdata : { *(.tdata) }
.data : { *(.data)
}
}