[binutils-gdb] Fix _GLOBAL_OFFSET_TABLE_ value for large GOTs (aarch64).
Cary Coutant
ccoutant@sourceware.org
Thu May 10 07:16:00 GMT 2018
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a45a8f9178448171b51d9fc80d45ede73e99e399
commit a45a8f9178448171b51d9fc80d45ede73e99e399
Author: Stephen Crane <sjc@immunant.com>
Date: Thu May 10 00:09:32 2018 -0700
Fix _GLOBAL_OFFSET_TABLE_ value for large GOTs (aarch64).
Gold resolves GOT-relative relocs relative to the GOT base +
0x8000 when the GOT is larger than 0x8000. However, previously
the _GLOBAL_OFFSET_TABLE_ symbol was set to GOT base + 0x8000
when the .got.plt was larger than 0x8000. This patch makes both
checks use the size of the .got section so that they agree when
to add 0x8000.
Diff:
---
gold/ChangeLog | 5 +++++
gold/aarch64.cc | 4 ++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 26ccad1..bad0f29 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,8 @@
+2018-05-10 Stephen Crane <sjc@immunant.com>
+
+ * aarch64.cc (Target_aarch64::do_finalize_sections): Use size of
+ .got section for the _GLOBAL_OFFSET_TABLE_ symbol computation.
+
2018-04-24 Cary Coutant <ccoutant@gmail.com>
PR gold/20642
diff --git a/gold/aarch64.cc b/gold/aarch64.cc
index 8de9a26..67f2108 100644
--- a/gold/aarch64.cc
+++ b/gold/aarch64.cc
@@ -6965,11 +6965,11 @@ Target_aarch64<size, big_endian>::do_finalize_sections(
}
// Set the size of the _GLOBAL_OFFSET_TABLE_ symbol to the size of
- // the .got.plt section.
+ // the .got section.
Symbol* sym = this->global_offset_table_;
if (sym != NULL)
{
- uint64_t data_size = this->got_plt_->current_data_size();
+ uint64_t data_size = this->got_->current_data_size();
symtab->get_sized_symbol<size>(sym)->set_symsize(data_size);
// If the .got section is more than 0x8000 bytes, we add
More information about the Binutils-cvs
mailing list