mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-31 18:20:12 +08:00
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.
This commit is contained in:

committed by
Cary Coutant

parent
6fe88226c2
commit
a45a8f9178
@ -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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user