diff options
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elfxx-mips.c | 22 | ||||
-rw-r--r-- | ld/ChangeLog | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tlsdyn-o32.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tlsdyn-o32.got | 7 |
11 files changed, 45 insertions, 39 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 402cdc4..d4e2c21 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,4 +1,12 @@ 2018-07-11 Maciej W. Rozycki <macro@mips.com> + + * 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. + +2018-07-11 Maciej W. Rozycki <macro@mips.com> Rich Felker <bugdal@aerifal.cx> PR ld/22570 diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index a353907..d919423 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -3251,8 +3251,10 @@ mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type, bfd_boolean need_relocs = FALSE; bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; - if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) - && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) + if (h != NULL + && h->dynindx != -1 + && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) + && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) indx = h->dynindx; if ((bfd_link_dll (info) || indx != 0) @@ -3340,6 +3342,7 @@ mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info, struct mips_elf_link_hash_entry *h, bfd_vma value) { + bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; struct mips_elf_link_hash_table *htab; int indx; asection *sreloc, *sgot; @@ -3353,16 +3356,11 @@ mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info, sgot = htab->root.sgot; indx = 0; - if (h != NULL) - { - bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; - - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), - &h->root) - && (!bfd_link_pic (info) - || !SYMBOL_REFERENCES_LOCAL (info, &h->root))) - indx = h->root.dynindx; - } + if (h != NULL + && h->root.dynindx != -1 + && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), &h->root) + && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, &h->root))) + indx = h->root.dynindx; if (entry->tls_initialized) return; diff --git a/ld/ChangeLog b/ld/ChangeLog index ea5468f..9eb2fe0 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,17 @@ 2018-07-11 Maciej W. Rozycki <macro@mips.com> + * 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. + +2018-07-11 Maciej W. Rozycki <macro@mips.com> + PR ld/22570 * testsuite/ld-mips-elf/tlsbin-pie-o32.d: New test. * testsuite/ld-mips-elf/tlsbin-pie-o32.got: New test. diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d index 17e42d0..47af453 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d @@ -5,7 +5,7 @@ Disassembly of section .text: .* <__start>: .*: 3c1c0fc0 lui gp,0xfc0 - .*: 279c7b80 addiu gp,gp,31616 + .*: 279c7ba0 addiu gp,gp,31648 .*: 0399e021 addu gp,gp,t9 .*: 27bdfff0 addiu sp,sp,-16 .*: afbe0008 sw s8,8\(sp\) @@ -55,7 +55,7 @@ Disassembly of section .text: .* <other>: .*: 3c1c0fc0 lui gp,0xfc0 - .*: 279c7ac0 addiu gp,gp,31424 + .*: 279c7ae0 addiu gp,gp,31456 .*: 0399e021 addu gp,gp,t9 .*: 27bdfff0 addiu sp,sp,-16 .*: afbe0008 sw s8,8\(sp\) diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got index 508fed2..9160225 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got @@ -4,15 +4,12 @@ DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 00000000 R_MIPS_NONE \*ABS\* -10000038 R_MIPS_TLS_DTPMOD32 tlsbin_gd@@Base -1000003c R_MIPS_TLS_DTPREL32 tlsbin_gd@@Base 1000002c R_MIPS_TLS_DTPMOD32 tlsvar_gd@VER_1 10000030 R_MIPS_TLS_DTPREL32 tlsvar_gd@VER_1 10000040 R_MIPS_TLS_TPREL32 tlsvar_ie@VER_1 -10000034 R_MIPS_TLS_TPREL32 tlsbin_ie@@Base Contents of section .got: - 10000020 00000000 80000000 0040053c 00000000 .........@...... - 10000030 00000000 00000000 00000000 00000000 ................ + 10000020 00000000 80000000 0040051c 00000000 .........@...... + 10000030 00000000 ffff900c 00000001 ffff8008 ................ 10000040 00000000 00000001 00000000 ............ diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d index 17e42d0..47af453 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d @@ -5,7 +5,7 @@ Disassembly of section .text: .* <__start>: .*: 3c1c0fc0 lui gp,0xfc0 - .*: 279c7b80 addiu gp,gp,31616 + .*: 279c7ba0 addiu gp,gp,31648 .*: 0399e021 addu gp,gp,t9 .*: 27bdfff0 addiu sp,sp,-16 .*: afbe0008 sw s8,8\(sp\) @@ -55,7 +55,7 @@ Disassembly of section .text: .* <other>: .*: 3c1c0fc0 lui gp,0xfc0 - .*: 279c7ac0 addiu gp,gp,31424 + .*: 279c7ae0 addiu gp,gp,31456 .*: 0399e021 addu gp,gp,t9 .*: 27bdfff0 addiu sp,sp,-16 .*: afbe0008 sw s8,8\(sp\) diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got index 4a97099..c7bfec9 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got @@ -4,15 +4,12 @@ DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 00000000 R_MIPS_NONE \*ABS\* -10000038 R_MIPS_TLS_DTPMOD32 tlsbin_gd@@Base -1000003c R_MIPS_TLS_DTPREL32 tlsbin_gd@@Base 1000002c R_MIPS_TLS_DTPMOD32 tlsvar_gd@VER_1 10000030 R_MIPS_TLS_DTPREL32 tlsvar_gd@VER_1 10000040 R_MIPS_TLS_TPREL32 tlsvar_ie@VER_1 -10000034 R_MIPS_TLS_TPREL32 tlsbin_ie@@Base Contents of section .got: - 10000020 00000000 80000000 0040053c 00000000 .* - 10000030 00000000 00000000 00000000 00000000 .* + 10000020 00000000 80000000 0040051c 00000000 .* + 10000030 00000000 ffff900c 00000001 ffff8008 .* 10000040 00000000 00000001 00000000 .* diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d index fb3750a..db2f56c 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d @@ -5,7 +5,7 @@ Disassembly of section .text: .* <other>: .*: 3c1c0fc0 lui gp,0xfc0 - .*: 279c7b80 addiu gp,gp,31616 + .*: 279c7ba0 addiu gp,gp,31648 .*: 0399e021 addu gp,gp,t9 .*: 27bdfff0 addiu sp,sp,-16 .*: afbe0008 sw s8,8\(sp\) @@ -51,7 +51,7 @@ Disassembly of section .text: .* <__start>: .*: 3c1c0fc0 lui gp,0xfc0 - .*: 279c7ad0 addiu gp,gp,31440 + .*: 279c7af0 addiu gp,gp,31472 .*: 0399e021 addu gp,gp,t9 .*: 27bdfff0 addiu sp,sp,-16 .*: afbe0008 sw s8,8\(sp\) diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got index d96375c..87b54f5 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got @@ -4,15 +4,12 @@ DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 00000000 R_MIPS_NONE \*ABS\* -10000038 R_MIPS_TLS_DTPMOD32 tlsbin_gd@@Base -1000003c R_MIPS_TLS_DTPREL32 tlsbin_gd@@Base 1000002c R_MIPS_TLS_DTPMOD32 tlsvar_gd@VER_1 10000030 R_MIPS_TLS_DTPREL32 tlsvar_gd@VER_1 10000040 R_MIPS_TLS_TPREL32 tlsvar_ie@VER_1 -10000034 R_MIPS_TLS_TPREL32 tlsbin_ie@@Base Contents of section .got: - 10000020 00000000 80000000 004005ec 00000000 .* - 10000030 00000000 00000000 00000000 00000000 .* + 10000020 00000000 80000000 004005cc 00000000 .* + 10000030 00000000 ffff900c 00000001 ffff8008 .* 10000040 00000000 00000001 00000000 .* diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32.d index e3f9ccb..688721f 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32.d +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32.d @@ -5,7 +5,7 @@ Disassembly of section .text: .* <__start>: .*: 3c1c0fc0 lui gp,0xfc0 - .*: 279c7be0 addiu gp,gp,31712 + .*: 279c7c00 addiu gp,gp,31744 .*: 0399e021 addu gp,gp,t9 .*: 27bdfff0 addiu sp,sp,-16 .*: afbe0008 sw s8,8\(sp\) diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32.got index 7942188..7c8f93b 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32.got @@ -4,15 +4,12 @@ tmpdir/tls-dynamic-o32: file format elf32-tradbigmips DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 00000000 R_MIPS_NONE \*ABS\* -10000044 R_MIPS_TLS_DTPMOD32 tlsbin_gd -10000048 R_MIPS_TLS_DTPREL32 tlsbin_gd 10000030 R_MIPS_TLS_DTPMOD32 tlsvar_gd 10000034 R_MIPS_TLS_DTPREL32 tlsvar_gd -1000002c R_MIPS_TLS_TPREL32 tlsbin_ie 10000040 R_MIPS_TLS_TPREL32 tlsvar_ie Contents of section .got: - 10000020 00000000 80000000 004004dc 00000000 .........@...... + 10000020 00000000 80000000 004004bc ffff900c .........@...... 10000030 00000000 00000000 00000001 00000000 ................ - 10000040 00000000 00000000 00000000 ............ + 10000040 00000000 00000001 ffff8008 ............ |