diff options
author | Alan Modra <amodra@gmail.com> | 2023-08-04 15:09:53 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-08-04 17:59:01 +0930 |
commit | ae33771224660dac25e64c3f70943a17bfab7681 (patch) | |
tree | d48602b894890c97fb00c756b3962aaf8f480ab0 /ld | |
parent | 49459ed32b71aefd0443d82c939f05933505080e (diff) | |
download | gdb-ae33771224660dac25e64c3f70943a17bfab7681.zip gdb-ae33771224660dac25e64c3f70943a17bfab7681.tar.gz gdb-ae33771224660dac25e64c3f70943a17bfab7681.tar.bz2 |
PR30697, ppc32 mix of local-dynamic and global-dynamic TLS
This fixes miscounting of dynamic relocations on GOT entries when
a) there are both local-dynamic and global-dynamic tls accesss for a
given symbol, and
b) the symbol is global with non-default visibility, and
c) the __tls_get_addr calls aren't optimised away.
PR 30697
bfd/
* elf32-ppc.c (allocate_dynrelocs): Correct local-dynamic
reloc count.
ld/
* testsuite/ld-powerpc/tls32ldgd.d,
* testsuite/ld-powerpc/tls32ldgd.s: New test.
* testsuite/ld-powerpc/powerpc.exp: Run it.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ld-powerpc/powerpc.exp | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/tls32ldgd.d | 13 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/tls32ldgd.s | 16 |
3 files changed, 30 insertions, 0 deletions
diff --git a/ld/testsuite/ld-powerpc/powerpc.exp b/ld/testsuite/ld-powerpc/powerpc.exp index 16e25b0..6cb7bd2 100644 --- a/ld/testsuite/ld-powerpc/powerpc.exp +++ b/ld/testsuite/ld-powerpc/powerpc.exp @@ -522,5 +522,6 @@ run_dump_test "non-contiguous-powerpc" run_dump_test "tprel32" run_dump_test "tprelbad" +run_dump_test tls32ldgd run_dump_test "undefweak" diff --git a/ld/testsuite/ld-powerpc/tls32ldgd.d b/ld/testsuite/ld-powerpc/tls32ldgd.d new file mode 100644 index 0000000..88e26b9 --- /dev/null +++ b/ld/testsuite/ld-powerpc/tls32ldgd.d @@ -0,0 +1,13 @@ +#as: -a32 +#ld: -shared -melf32ppc +#readelf: -rW + +Relocation section '\.rela\.dyn' at offset .* contains 3 entries: + Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend +.* +00000044 R_PPC_DTPMOD32 +0 +.* +0000004e R_PPC_DTPREL32 +0 +.* +00000044 R_PPC_DTPMOD32 +0 + +Relocation section '\.rela\.plt' at offset .* contains 1 entry: + Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend +.* +00000215 R_PPC_JMP_SLOT +00000000 +__tls_get_addr \+ 0 diff --git a/ld/testsuite/ld-powerpc/tls32ldgd.s b/ld/testsuite/ld-powerpc/tls32ldgd.s new file mode 100644 index 0000000..889eb44 --- /dev/null +++ b/ld/testsuite/ld-powerpc/tls32ldgd.s @@ -0,0 +1,16 @@ +#PR 30697 + .section ".tbss","awT",@nobits + .global _start,x + .hidden x + .align 2 +x: .space 4 + + .text +_start: + addi 3,30,x@got@tlsgd + bl __tls_get_addr(x@tlsgd)@plt + + addi 3,30,x@got@tlsld + bl __tls_get_addr(x@tlsld)@plt + addis 3,3,x@dtprel@ha + addi 3,3,x@dtprel@l |