mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
f26a32876b
It is possible to create shared libraries on PowerPC using -ftls-model=inital-exec or -ftls-model=local-exec. The first is half reasonable, getting you a shared library that can't be dlopen'd but otherwise is reasonable. The second is quite bad. Not only do you lose being able to dlopen, the library also has dynamic text relocations. Worse, the TPREL16_LO, TPREL16_HA and other TPREL16 dynamic relocs emitted were wrong, resulting in wrong values being applied by ld.so. Using the first TLS section symbol in dynamic relocations for local TLS symbols doesn't work. It's wrong because TLS symbols used by TLS relocs have values relative to the TLS segment, whereas the TLS section symbols are addresses. This patch instead uses a symbol index of zero which is used elsewhere by PowerPC on dynamic TLS relocs. It's not strictly ABI compliant to use a non-TLS symbol with TLS relocs but symbol index zero can be interpreted as "no symbol". Not using the first TLS section symbol means it doesn't need to be dynamic. The patch also fixes a further problem with PowerPC32 dynamic TPREL16* relocs, which shouldn't have the symbol value in the addend as we do for non-TLS symbols. bfd/ * elflink.c (_bfd_elf_omit_section_dynsym_default): Don't keep tls_sec. (_bfd_elf_init_1_index_section): Prefer not using TLS sections. (_bfd_elf_init_2_index_sections): Likewise. * elf64-ppc.c (ppc64_elf_relocate_section): When emitting dynamic relocations for local TLS symbols, use STN_UNDEF as the relocation symbol. * elf32-ppc.c (ppc_elf_relocate_section): Likewise, and don't leave TLS symbol value in the addend. ld/ * testsuite/ld-powerpc/tlsso.r: Update. * testsuite/ld-powerpc/tlsso32.g: Update. * testsuite/ld-powerpc/tlsso32.r: Update. * testsuite/ld-powerpc/tlstocso.r: Update. * testsuite/ld-cris/tls-dso-dtpoffd2.d: Update. * testsuite/ld-cris/tls-dso-dtpoffd4.d: Update. * testsuite/ld-cris/tls-dso-tpoffgotcomm1.d: Update. * testsuite/ld-cris/tls-gd-1.d: Update. * testsuite/ld-cris/tls-gd-1h.d: Update. * testsuite/ld-cris/tls-gd-2.d: Update. * testsuite/ld-cris/tls-gd-2h.d: Update. * testsuite/ld-cris/tls-ie-10.d: Update. * testsuite/ld-cris/tls-ie-11.d: Update. * testsuite/ld-cris/tls-ie-8.d: Update. * testsuite/ld-cris/tls-ie-9.d: Update. * testsuite/ld-cris/tls-js1.d: Update. * testsuite/ld-cris/tls-ld-4.d: Update. * testsuite/ld-cris/tls-ld-5.d: Update. * testsuite/ld-cris/tls-ld-6.d: Update. * testsuite/ld-cris/tls-ld-7.d: Update. * testsuite/ld-cris/tls-ldgd-14.d: Update. * testsuite/ld-cris/tls-ldgd-15.d: Update. * testsuite/ld-cris/tls-ldgdx-14.d: Update. * testsuite/ld-cris/tls-ldgdx-15.d: Update. * testsuite/ld-cris/tls-local-54.d: Update. * testsuite/ld-cris/tls-local-60.d: Update. * testsuite/ld-cris/tls-local-61.d: Update. * testsuite/ld-cris/tls-local-63.d: Update. * testsuite/ld-cris/tls-local-64.d: Update. * testsuite/ld-cris/tls-ok-30.d: Update. * testsuite/ld-cris/tls-ok-32.d: Update. * testsuite/ld-cris/tls-ok-34.d: Update. * testsuite/ld-mips-elf/tls-multi-got-1.got: Update. * testsuite/ld-mips-elf/tls-multi-got-1.r: Update. * testsuite/ld-mips-elf/tlsdyn-pie-o32.d: Update. * testsuite/ld-mips-elf/tlsdyn-pie-o32.got: Update. * testsuite/ld-mips-elf/tlslib-o32-hidden.got: Update. * testsuite/ld-mips-elf/tlslib-o32-ver.got: Update. * testsuite/ld-mips-elf/tlslib-o32.got: Update. * testsuite/ld-s390/tlspic.rd: Update. * testsuite/ld-s390/tlspic_64.rd: Update. * testsuite/ld-sparc/tlssunnopic32.rd: Update. * testsuite/ld-sparc/tlssunnopic64.rd: Update. * testsuite/ld-sparc/tlssunpic32.rd: Update. * testsuite/ld-sparc/tlssunpic64.rd: Update.
37 lines
1.1 KiB
Plaintext
37 lines
1.1 KiB
Plaintext
|
|
.*: file format elf32-tradbigmips
|
|
|
|
DYNAMIC RELOCATION RECORDS
|
|
OFFSET TYPE VALUE
|
|
00000000 R_MIPS_NONE \*ABS\*
|
|
0013f7f0 R_MIPS_TLS_DTPMOD32 \*ABS\*
|
|
0014944c R_MIPS_TLS_DTPMOD32 \*ABS\*
|
|
0013f7f8 R_MIPS_TLS_DTPMOD32 tlsvar_gd
|
|
0013f7fc R_MIPS_TLS_DTPREL32 tlsvar_gd
|
|
00149458 R_MIPS_TLS_DTPMOD32 tlsvar_gd
|
|
0014945c R_MIPS_TLS_DTPREL32 tlsvar_gd
|
|
0013f800 R_MIPS_TLS_TPREL32 tlsvar_ie
|
|
00149454 R_MIPS_TLS_TPREL32 tlsvar_ie
|
|
00143e78 R_MIPS_REL32 sym_1_9526
|
|
#...
|
|
00139a54 R_MIPS_REL32 sym_2_8654
|
|
|
|
|
|
Contents of section .got:
|
|
122320 00000000 80000000 000d7f48 000d65a4 .*
|
|
122330 000d1f54 000d5fc0 000d59f8 000d1970 .*
|
|
#...
|
|
135ba0 000cf1b4 000e0df8 00000000 80000000 .*
|
|
135bb0 00000000 00000000 00000000 00000000 .*
|
|
#...
|
|
13f7e0 00000000 00000000 00000000 00000000 .*
|
|
13f7f0 00000000 00000000 00000000 00000000 .*
|
|
13f800 00000000 00000000 80000000 00000000 .*
|
|
#...
|
|
149410 00000000 00000000 00000000 00000000 .*
|
|
149420 00000000 00000000 00000000 00000000 .*
|
|
149430 00000000 00000000 00000000 00000000 .*
|
|
149440 00000000 00000000 00000000 00000000 .*
|
|
149450 00000000 00000000 00000000 00000000 .*
|
|
#pass
|