This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Content for TLS_IE_GOT not written to .got.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4dd72ffdfe254fec30fd5eab0c5fd4445df73529

commit 4dd72ffdfe254fec30fd5eab0c5fd4445df73529
Author: Cupertino Miranda <cmiranda@synopsys.com>
Date:   Tue Jul 12 16:31:40 2016 +0200

    Content for TLS_IE_GOT not written to .got.
    
    When no dynamic relocation was generated the .got content would not be
    updated for the TLS_IE_GOT relocation addresses.
    
    bfd/ChangeLog:
    
    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.
    
    ld/ChangeLog:
    
    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

Diff:
---
 bfd/ChangeLog                   |  6 ++++++
 bfd/arc-got.h                   | 24 +++++++++++++++++-------
 ld/ChangeLog                    |  5 +++++
 ld/testsuite/ld-arc/tls_ie-01.d |  9 +++++++++
 ld/testsuite/ld-arc/tls_ie-01.s | 10 ++++++++++
 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 fccaea3..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]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]