diff options
author | Cupertino Miranda <cmiranda@synopsys.com> | 2016-07-12 16:31:40 +0200 |
---|---|---|
committer | Cupertino Miranda <cmiranda@synopsys.com> | 2016-08-26 12:09:17 +0200 |
commit | 4dd72ffdfe254fec30fd5eab0c5fd4445df73529 (patch) | |
tree | f1d8dfa7da9ff84146c0ca39d9c6167d9c8c13ab /bfd/arc-got.h | |
parent | a87aa054a67e23faeead400bdf902a1eddb242a4 (diff) | |
download | gdb-4dd72ffdfe254fec30fd5eab0c5fd4445df73529.zip gdb-4dd72ffdfe254fec30fd5eab0c5fd4445df73529.tar.gz gdb-4dd72ffdfe254fec30fd5eab0c5fd4445df73529.tar.bz2 |
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
Diffstat (limited to 'bfd/arc-got.h')
-rw-r--r-- | bfd/arc-got.h | 24 |
1 files changed, 17 insertions, 7 deletions
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; |