diff options
author | Stephen Crane <sjc@immunant.com> | 2018-05-10 00:09:32 -0700 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2018-05-10 00:13:33 -0700 |
commit | a45a8f9178448171b51d9fc80d45ede73e99e399 (patch) | |
tree | ebc147bcb7140503515c37d525eb720fddf7425a | |
parent | 6fe88226c25fa3fdea506538688897272d42822b (diff) | |
download | fsf-binutils-gdb-a45a8f9178448171b51d9fc80d45ede73e99e399.zip fsf-binutils-gdb-a45a8f9178448171b51d9fc80d45ede73e99e399.tar.gz fsf-binutils-gdb-a45a8f9178448171b51d9fc80d45ede73e99e399.tar.bz2 |
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.
-rw-r--r-- | gold/ChangeLog | 5 | ||||
-rw-r--r-- | 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 |