diff options
author | Alan Modra <amodra@gmail.com> | 2021-10-14 17:01:06 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-10-14 20:02:32 +1030 |
commit | a1251fdcb58f99644c49b65d72507706f2d40200 (patch) | |
tree | 81a69e716f5af0f331085d38728cd69cc5d8e333 /gold | |
parent | f19c3684a6db145f57048bff5485fec6e3dd0f76 (diff) | |
download | gdb-a1251fdcb58f99644c49b65d72507706f2d40200.zip gdb-a1251fdcb58f99644c49b65d72507706f2d40200.tar.gz gdb-a1251fdcb58f99644c49b65d72507706f2d40200.tar.bz2 |
[GOLD] Re: PowerPC64: Don't pretend to support multi-toc
We can't get at section->address() until everything is laid out, so
trying to generalise the offset calculation rather than using a value
of 0x8000 (the old object->toc_base_offset()) was bound to fail.
got->g_o_t() is a little better than a hard-coded 0x8000.
* powerpc.cc (Target_powerpc::Scan::local, global): Don't use
toc_pointer() here.
Diffstat (limited to 'gold')
-rw-r--r-- | gold/powerpc.cc | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/gold/powerpc.cc b/gold/powerpc.cc index d10b11e..4266268 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -8013,8 +8013,7 @@ Target_powerpc<size, big_endian>::Scan::local( break; Reloc_section* rela_dyn = target->rela_dyn_section(layout); - Address got_off = (target->toc_pointer() - - got->output_section()->address()); + Address got_off = got->g_o_t(); rela_dyn->add_output_section_relative(got->output_section(), elfcpp::R_POWERPC_RELATIVE, output_section, @@ -8740,8 +8739,7 @@ Target_powerpc<size, big_endian>::Scan::global( break; Reloc_section* rela_dyn = target->rela_dyn_section(layout); - Address got_off = (target->toc_pointer() - - got->output_section()->address()); + Address got_off = got->g_o_t(); rela_dyn->add_output_section_relative(got->output_section(), elfcpp::R_POWERPC_RELATIVE, output_section, |