[GOLD] Fix powerpc64 optimization of TOC accesses
Fixes a thinko. Given code that puts variables into the TOC (a bad idea, but some see the TOC as a small data section) this bug could result in an attempt to optimize a sequence that should not be optimized. * powerpc.cc (Target_powerpc::Scan::local): Correct dst_off calculation for TOC16 relocs. (Target_powerpc::Scan::global): Likewise.
This commit is contained in:
parent
b27de576d4
commit
412294daf8
@ -1,3 +1,10 @@
|
||||
2017-10-18 Kyle Butt <iteratee@google.com>
|
||||
Alan Modra <amodra@gmail.com>
|
||||
|
||||
* powerpc.cc (Target_powerpc::Scan::local): Correct dst_off
|
||||
calculation for TOC16 relocs.
|
||||
(Target_powerpc::Scan::global): Likewise.
|
||||
|
||||
2017-09-26 Cary Coutant <ccoutant@gmail.com>
|
||||
|
||||
PR gold/22213
|
||||
|
@ -6917,7 +6917,7 @@ Target_powerpc<size, big_endian>::Scan::local(
|
||||
shndx = ppc_object->adjust_sym_shndx(r_sym, shndx, &is_ordinary);
|
||||
if (is_ordinary && shndx == ppc_object->toc_shndx())
|
||||
{
|
||||
Address dst_off = lsym.get_st_value() + reloc.get_r_offset();
|
||||
Address dst_off = lsym.get_st_value() + reloc.get_r_addend();
|
||||
if (dst_off < ppc_object->section_size(shndx))
|
||||
{
|
||||
bool ok = false;
|
||||
@ -7591,7 +7591,7 @@ Target_powerpc<size, big_endian>::Scan::global(
|
||||
if (shndx == sym_object->toc_shndx())
|
||||
{
|
||||
Sized_symbol<size>* sym = symtab->get_sized_symbol<size>(gsym);
|
||||
Address dst_off = sym->value() + reloc.get_r_offset();
|
||||
Address dst_off = sym->value() + reloc.get_r_addend();
|
||||
if (dst_off < sym_object->section_size(shndx))
|
||||
{
|
||||
bool ok = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user