aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elfxx-mips.c22
-rw-r--r--ld/ChangeLog12
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d4
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got7
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d4
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got7
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d4
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got7
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32.d2
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32.got7
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 ............