[ARC] Fixed issue with DTSOFF relocs.
authorCupertino Miranda <cmiranda@synopsys.com>
Wed, 5 Sep 2018 23:50:35 +0000 (00:50 +0100)
committerCupertino Miranda <cmiranda@synopsys.com>
Mon, 1 Oct 2018 11:42:11 +0000 (12:42 +0100)
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/arc-got.h
bfd/elf32-arc.c
include/elf/arc-reloc.def

index e32d9b3..07722fd 100644 (file)
@@ -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)),
index c52e2fb..7a1b304 100644 (file)
@@ -1214,6 +1214,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) \
index e1c69c9..61edd6e 100644 (file)
@@ -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, \