[4/6,ARC] Fixed issue with DTSOFF relocs.

Message ID 20181115154430.23071-5-claziss@gmail.com
State New
Headers show
Series
  • Backports from mainline.
Related show

Commit Message

Claudiu Zissulescu Nov. 15, 2018, 3:44 p.m.
From: Cupertino Miranda <cmiranda@synopsys.com>


Inserted offset in final section in the GOT entry of type DTSOFF soon to be
relocated by the dynamic loader.

bfd/
2018-09-06  Cupertino Miranda <cmiranda@synopsys.com>

	* arc-got.h (relocate_fix_got_relocs_for_got_info): Changed. Take TLS
	    section alignment in consideration for this relocation.
	* elf32-arc.c (FINAL_SECTSTART): Added this formula macro.
	  (ARC_TLS_DTPOFF) Updated reloc to use new created macro instead.
---
 bfd/ChangeLog             | 12 +++++++++---
 bfd/arc-got.h             | 10 +++++++---
 bfd/elf32-arc.c           |  2 ++
 include/elf/arc-reloc.def |  2 +-
 4 files changed, 19 insertions(+), 7 deletions(-)

-- 
2.19.1

Patch

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index b26e53135c..896adc86c6 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,12 @@ 
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+	Backport from mainline
+	2018-09-06  Cupertino Miranda <cmiranda@synopsys.com>
+	* arc-got.h (relocate_fix_got_relocs_for_got_info): Changed. Take
+	TLS section alignment in consideration for this relocation.
+	* elf32-arc.c (FINAL_SECTSTART): Added this formula macro.
+	(ARC_TLS_DTPOFF) Updated reloc to use new created macro instead.
+
 2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
 
 	Backport from mainline
@@ -6,21 +15,18 @@ 
 	TCB_SIZE offsize to include section alignment.
 	* elf32-arc.c (arc_special_overflow_checks): Likewise.
 
-
 2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
 
 	Backport from mainline
 	2018-03-02  Cupertino Miranda <cmiranda@synopsys.com>
 	* elf32-arc.c (elf_arc_check_relocs): Changed.
 
-
 2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
 
 	Backport from mainline
 	2018-03-02  Cupertino Miranda <cmiranda@synopsys.com>
 	* elf32-arc.c (elf_arc_check_relocs): Changed.
 
-
 2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
 
 	Backport from mainline
diff --git a/bfd/arc-got.h b/bfd/arc-got.h
index e32d9b30e3..07722fdffd 100644
--- a/bfd/arc-got.h
+++ b/bfd/arc-got.h
@@ -335,7 +335,11 @@  relocate_fix_got_relocs_for_got_info (struct got_entry **	   list_p,
 		bfd_vma sec_vma = tls_sec->output_section->vma;
 
 		bfd_put_32 (output_bfd,
-			    sym_value - sec_vma,
+			    sym_value - sec_vma
+			    + (elf_hash_table (info)->dynamic_sections_created
+			       ? 0
+			       : (align_power (TCB_SIZE,
+					       tls_sec->alignment_power))),
 			    htab->sgot->contents + entry->offset
 			    + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
 			       ? 4 : 0));
@@ -346,7 +350,7 @@  relocate_fix_got_relocs_for_got_info (struct got_entry **	   list_p,
 			    "GOT_TLS_IE"),
 			   (long) (sym_value - sec_vma),
 			   (long) (htab->sgot->output_section->vma
-			      + htab->sgot->output_offset->vma
+			      + htab->sgot->output_offset
 			      + entry->offset
 			      + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
 				 ? 4 : 0)),
@@ -376,7 +380,7 @@  relocate_fix_got_relocs_for_got_info (struct got_entry **	   list_p,
 			    "GOT_TLS_IE"),
 			   (long) (sym_value - sec_vma),
 			   (long) (htab->sgot->output_section->vma
-			      + htab->sgot->output_offset->vma
+			      + htab->sgot->output_offset
 			      + entry->offset
 			      + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
 				 ? 4 : 0)),
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index d11b773adc..5ef62aa218 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -1198,6 +1198,8 @@  arc_special_overflow_checks (const struct arc_relocation_data reloc_data,
 	     + (reloc_data.reloc_offset))))
 #define SECTSTART (bfd_signed_vma) (reloc_data.sym_section->output_section->vma \
 				    + reloc_data.sym_section->output_offset)
+#define FINAL_SECTSTART \
+  (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
 #define JLI (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
 #define _SDA_BASE_ (bfd_signed_vma) (reloc_data.sdata_begin_symbol_vma)
 #define TLS_REL (bfd_signed_vma) \
diff --git a/include/elf/arc-reloc.def b/include/elf/arc-reloc.def
index e1c69c9d70..61edd6e67a 100644
--- a/include/elf/arc-reloc.def
+++ b/include/elf/arc-reloc.def
@@ -468,7 +468,7 @@  ARC_RELOC_HOWTO(ARC_TLS_DTPOFF, 67, \
                 32, \
                 replace_word32, \
                 dont, \
-                ( ME ( S - SECTSTART ) + A ))
+		( ME ( S - FINAL_SECTSTART ) + A ))
 
 ARC_RELOC_HOWTO(ARC_TLS_DTPOFF_S9, 73, \
                 2, \