This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] [GOLD] PowerPC tweak relnum tests


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f60c61e60e59c2bfc5fdd1b448408c2af287899e

commit f60c61e60e59c2bfc5fdd1b448408c2af287899e
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Jun 28 10:18:03 2019 +0930

    [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.

Diff:
---
 gold/ChangeLog  | 5 +++++
 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()


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]