diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2014-01-22 11:24:12 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2014-01-24 08:56:07 -0800 |
commit | d85e71fec0aa4d9d8ca0d8c2401cd8ab69fe2edc (patch) | |
tree | c2f6433e306e4666c6c801c25cea4c9725df2146 | |
parent | 6b6aa828818fa4a5754fb8520751077146d9d16c (diff) | |
download | fsf-binutils-gdb-d85e71fec0aa4d9d8ca0d8c2401cd8ab69fe2edc.zip fsf-binutils-gdb-d85e71fec0aa4d9d8ca0d8c2401cd8ab69fe2edc.tar.gz fsf-binutils-gdb-d85e71fec0aa4d9d8ca0d8c2401cd8ab69fe2edc.tar.bz2 |
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.
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/emultempl/elf32.em | 6 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/pr16498a.d | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/pr16498a.s | 23 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/pr16498a.t | 6 |
6 files changed, 57 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 9beee8c..dcf0b15 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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 diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index a4f04f1..fda0e68 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -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)) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index a269b07..4f0a75b 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -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. diff --git a/ld/testsuite/ld-elf/pr16498a.d b/ld/testsuite/ld-elf/pr16498a.d new file mode 100644 index 0000000..436bf97 --- /dev/null +++ b/ld/testsuite/ld-elf/pr16498a.d @@ -0,0 +1,9 @@ +#ld: -shared -T pr16498a.t +#readelf: -l --wide +#target: *-*-linux* *-*-gnu* *-*-nacl* + +#... + TLS .* +#... +[ ]+[0-9]+[ ]+.tdata .tbss[ ]* +#pass diff --git a/ld/testsuite/ld-elf/pr16498a.s b/ld/testsuite/ld-elf/pr16498a.s new file mode 100644 index 0000000..77f80e6 --- /dev/null +++ b/ld/testsuite/ld-elf/pr16498a.s @@ -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 diff --git a/ld/testsuite/ld-elf/pr16498a.t b/ld/testsuite/ld-elf/pr16498a.t new file mode 100644 index 0000000..928724f --- /dev/null +++ b/ld/testsuite/ld-elf/pr16498a.t @@ -0,0 +1,6 @@ +SECTIONS +{ + .tdata : { *(.tdata) } + .data : { *(.data) + } +} |