aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/arc-got.h24
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/testsuite/ld-arc/tls_ie-01.d9
-rw-r--r--ld/testsuite/ld-arc/tls_ie-01.s10
5 files changed, 47 insertions, 7 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index b7206ae..66e65c3 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,11 @@
2016-08-26 Cupertino Miranda <cmiranda@synopsys.com>
+ * arc-got.h (relocate_fix_got_relocs_for_got_info): Fixed addresses in
+ debug comments. Fixed address in .got related to TLS_IE_GOT dynamic
+ relocation.
+
+2016-08-26 Cupertino Miranda <cmiranda@synopsys.com>
+
* reloc.c: Fixed type in ARC_SECTOFF relocations. Added ARC_SDA_12
relocation.
* bfd-in2.h: Regenerated from the previous changes.
diff --git a/bfd/arc-got.h b/bfd/arc-got.h
index 7c3cfd9..9ac0295 100644
--- a/bfd/arc-got.h
+++ b/bfd/arc-got.h
@@ -334,13 +334,15 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p,
? 4 : 0));
ARC_DEBUG ("arc_info: FIXED -> %s value = %#lx "
- "@ %p, for symbol %s\n",
+ "@ %lx, for symbol %s\n",
(entry->type == GOT_TLS_GD ? "GOT_TLS_GD" :
"GOT_TLS_IE"),
(long) (sym_value - sec_vma),
- htab->sgot->contents + entry->offset
- + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
- ? 4 : 0),
+ (long) (htab->sgot->output_section->vma
+ + htab->sgot->output_offset->vma
+ + entry->offset
+ + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
+ ? 4 : 0)),
symbol_name);
}
break;
@@ -351,14 +353,22 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p,
bfd_vma ATTRIBUTE_UNUSED sec_vma
= tls_sec->output_section->vma;
+ bfd_put_32 (output_bfd,
+ sym_value - sec_vma,
+ htab->sgot->contents + entry->offset
+ + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
+ ? 4 : 0));
+
ARC_DEBUG ("arc_info: FIXED -> %s value = %#lx "
"@ %p, for symbol %s\n",
(entry->type == GOT_TLS_GD ? "GOT_TLS_GD" :
"GOT_TLS_IE"),
(long) (sym_value - sec_vma),
- htab->sgot->contents + entry->offset
- + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
- ? 4 : 0),
+ (long) (htab->sgot->output_section->vma
+ + htab->sgot->output_offset->vma
+ + entry->offset
+ + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
+ ? 4 : 0)),
symbol_name);
}
break;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index fccaea3b..76c2863 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,8 @@
+2016-08-26 Cupertino Miranda <cmiranda@synopsys.com>
+
+ * testsuite/ld-arc/tls_ie-01.s: Added to verify associated fix.
+ * testsuite/ld-arc/tls_ie-01.d: Likewise
+
2016-08-26 Thomas Preud'homme <thomas.preudhomme@arm.com>
* emultempl/armelf.em (in_implib_filename): Declare and initialize new
diff --git a/ld/testsuite/ld-arc/tls_ie-01.d b/ld/testsuite/ld-arc/tls_ie-01.d
new file mode 100644
index 0000000..8d53ef5
--- /dev/null
+++ b/ld/testsuite/ld-arc/tls_ie-01.d
@@ -0,0 +1,9 @@
+#source: tls_ie-01.s
+#as: -mcpu=arc700
+#ld:
+#objdump: -s -j .got
+
+[^:]+: file format elf32-littlearc
+
+Contents of section \.got:
+ [0-9a-f]+ 00000000 04000000 .+
diff --git a/ld/testsuite/ld-arc/tls_ie-01.s b/ld/testsuite/ld-arc/tls_ie-01.s
new file mode 100644
index 0000000..74f40ed
--- /dev/null
+++ b/ld/testsuite/ld-arc/tls_ie-01.s
@@ -0,0 +1,10 @@
+ .tls_common foo,4,4
+ .tls_common bar,4,4
+
+ .text
+ .align 4
+
+ .global __start
+__start:
+ ld r14, [pcl, @foo@tlsie]
+ ld r15, [pcl, @bar@tlsie]