mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
1cb83cac9a
Correct an issue with commit0f20cc3522
("TLS support for MIPS"), <https://sourceware.org/ml/binutils/2005-02/msg00607.html>, where a condition used to determine whether to use a dynamic symbol for GD, LD and IE TLS dynamic relocations against a symbol that has been defined locally has been incorrectly reversed. It's executables rather than dynamic shared objects where no symbol is required, because such symbols cannot be preempted and therefore their values (thread pointer offsets) are fixed at the static link time as is the associated module ID of the main executable, so the original condition should have been `shared' instead of `!shared'. This wrong condition was then later converted from `!shared' to `!bfd_link_pic', with commit0e1862bb40
("Add output_type to bfd_link_info"). Use the correct `bfd_link_dll' condition then, and adjust code for the dynamic symbol index possibly being -1 as with symbols that have been forced local, removing unnecessary dynamic relocations from dynamic regular executables. PIE executables are unaffected as the existing condition excluded them by chance due to the conversion mentioned above. Adjust test cases accordingly. bfd/ * elfxx-mips.c (mips_tls_got_relocs): Use `bfd_link_dll' rather than `!bfd_link_pic' in determining the dynamic symbol index. Avoid the index of -1. (mips_elf_initialize_tls_slots): Likewise. Flatten code by moving `dyn' to the beginning of the function block. ld/ * testsuite/ld-mips-elf/tlsdyn-o32.d: Update test for dynamic relocation removal. * testsuite/ld-mips-elf/tlsdyn-o32.got: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-1.d: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-1.got: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-2.d: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-2.got: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-3.d: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-3.got: Likewise.
16 lines
495 B
Plaintext
16 lines
495 B
Plaintext
|
|
tmpdir/tls-dynamic-o32: file format elf32-tradbigmips
|
|
|
|
DYNAMIC RELOCATION RECORDS
|
|
OFFSET TYPE VALUE
|
|
00000000 R_MIPS_NONE \*ABS\*
|
|
10000030 R_MIPS_TLS_DTPMOD32 tlsvar_gd
|
|
10000034 R_MIPS_TLS_DTPREL32 tlsvar_gd
|
|
10000040 R_MIPS_TLS_TPREL32 tlsvar_ie
|
|
|
|
|
|
Contents of section .got:
|
|
10000020 00000000 80000000 004004bc ffff900c .........@......
|
|
10000030 00000000 00000000 00000001 00000000 ................
|
|
10000040 00000000 00000001 ffff8008 ............
|