diff options
author | Alan Modra <amodra@gmail.com> | 2019-06-28 10:18:03 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2019-06-28 10:18:03 +0930 |
commit | f60c61e60e59c2bfc5fdd1b448408c2af287899e (patch) | |
tree | 4e768737ff28498934c79746fdd25f3cebaf2f66 | |
parent | f073a3e8c6735bd8fc24d35a957d8944087ea367 (diff) | |
download | gdb-f60c61e60e59c2bfc5fdd1b448408c2af287899e.zip gdb-f60c61e60e59c2bfc5fdd1b448408c2af287899e.tar.gz gdb-f60c61e60e59c2bfc5fdd1b448408c2af287899e.tar.bz2 |
[GOLD] PowerPC tweak relnum tests
There is a call of relocate() to perform a single relocation. In that
case the "relnum" parameter is -1U and of course it isn't appropriate
to consider any of the PowerPC code sequence optimisations triggered
by a following relocation.
* powerpc.cc (Target_powerpc::Relocate::relocate): Don't look
at next/previous reloc when relnum is -1.
-rw-r--r-- | gold/ChangeLog | 5 | ||||
-rw-r--r-- | gold/powerpc.cc | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 225a85c..b024dfa 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,10 @@ 2019-06-28 Alan Modra <amodra@gmail.com> + * powerpc.cc (Target_powerpc::Relocate::relocate): Don't look + at next/previous reloc when relnum is -1. + +2019-06-28 Alan Modra <amodra@gmail.com> + * powerpc.cc (Stub_table::plt_error): New function. (Stub_table::do_write): Use it. (Output_data_glink::do_write): Don't segfault emitting linkage diff --git a/gold/powerpc.cc b/gold/powerpc.cc index 43010b8..6f0be09 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -8986,7 +8986,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate( size_t reloc_count = shdr.get_sh_size() / reloc_size; if (size == 64 && ent->r2save_ - && relnum + 1 < reloc_count) + && relnum < reloc_count - 1) { Reltype next_rela(preloc + reloc_size); if (elfcpp::elf_r_type<size>(next_rela.get_r_info()) @@ -9757,7 +9757,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate( // addi 2,2,.TOC.@l // if .TOC. is in range. */ if (value + address - 4 + 0x80008000 <= 0xffffffff - && relnum != 0 + && relnum + 1 > 1 && preloc != NULL && target->abiversion() >= 2 && !parameters->options().output_is_position_independent() |