aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorCupertino Miranda <cmiranda@synopsys.com>2016-05-26 16:00:08 +0200
committerClaudiu Zissulescu <claziss@synopsys.com>2016-06-13 16:10:00 +0200
commit3b63d2cee1e6b894981cab59183480ac0972146a (patch)
treecd07920b8f23e6d73a42208a8704e55e16f94f7e /bfd
parent2ab2f40d58e6ad530667b018e42dd71519556f1b (diff)
downloadgdb-3b63d2cee1e6b894981cab59183480ac0972146a.zip
gdb-3b63d2cee1e6b894981cab59183480ac0972146a.tar.gz
gdb-3b63d2cee1e6b894981cab59183480ac0972146a.tar.bz2
[ARC] Fixes related to reordering of .got and .got.plt
- Correctly solved relocations on the .got header. - This bug arrised from enabling RELRO (-z combreloc). Because the .got and .got.plt sections were split in new linker scripts the header is no longer part of sgotplt contents. Changed the patch to sgot contents instead. - Latest fix to .got header relocs. bfd/ 2016-06-13 Cupertino Miranda <cmiranda@synospsy.com> * elf32-arc.c (elf_arc_finish_dynamic_sections): Changed.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog4
-rw-r--r--bfd/elf32-arc.c17
2 files changed, 16 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 1bec3a0..6dccb38 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,9 @@
2016-06-13 Cupertino Miranda <cmiranda@synospsy.com>
+ * elf32-arc.c (elf_arc_finish_dynamic_sections): Changed.
+
+2016-06-13 Cupertino Miranda <cmiranda@synospsy.com>
+
* elf32-arc.c (arc_local_data, arc_local_data): Removed.
(SECTSTART): Changed.
(elf_arc_relocate_section): Fixed mistake in PIE related
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index bb9cb29..7493a1e 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -2546,17 +2546,24 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd,
/* Fill in the first three entries in the global offset table. */
if (htab->sgot)
{
- if (htab->sgot->size > 0 || htab->sgotplt->size > 0)
+ struct elf_link_hash_entry *h;
+ h = elf_link_hash_lookup (elf_hash_table (info), "_GLOBAL_OFFSET_TABLE_",
+ FALSE, FALSE, TRUE);
+
+ if (h != NULL && h->root.type != bfd_link_hash_undefined
+ && h->root.u.def.section != NULL)
{
+ asection *sec = h->root.u.def.section;
+
if (ds.sdyn == NULL)
bfd_put_32 (output_bfd, (bfd_vma) 0,
- htab->sgotplt->contents);
+ sec->contents);
else
bfd_put_32 (output_bfd,
ds.sdyn->output_section->vma + ds.sdyn->output_offset,
- htab->sgotplt->contents);
- bfd_put_32 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + 4);
- bfd_put_32 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + 8);
+ sec->contents);
+ bfd_put_32 (output_bfd, (bfd_vma) 0, sec->contents + 4);
+ bfd_put_32 (output_bfd, (bfd_vma) 0, sec->contents + 8);
}
}