This is the mail archive of the binutils@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]

[GOLD] revert powerpc optimisation


This reverts the "optimisation" I made for plt/glink entries a week ago.
I'd forgotten that more than one glink entry might be needed per plt
entry for ppc32 -fPIC code.  Applied.

	* powerpc.cc (Output_data_plt_powerpc::add_entry, add_ifunc_entry,
	add_local_ifunc_entry): Revert last change.
	(Target_powerpc::make_plt_entry, make_local_ifunc_plt_entry): Likewise.

Index: gold/powerpc.cc
===================================================================
RCS file: /cvs/src/src/gold/powerpc.cc,v
retrieving revision 1.61
diff -u -p -r1.61 powerpc.cc
--- gold/powerpc.cc	5 Oct 2012 08:18:07 -0000	1.61
+++ gold/powerpc.cc	12 Oct 2012 09:18:14 -0000
@@ -1544,13 +1544,13 @@ class Output_data_plt_powerpc : public O
   { }
 
   // Add an entry to the PLT.
-  bool
+  void
   add_entry(Symbol*);
 
-  bool
+  void
   add_ifunc_entry(Symbol*);
 
-  bool
+  void
   add_local_ifunc_entry(Sized_relobj_file<size, big_endian>*, unsigned int);
 
   // Return the .rela.plt section data.
@@ -1611,7 +1611,7 @@ class Output_data_plt_powerpc : public O
 // Add an entry to the PLT.
 
 template<int size, bool big_endian>
-bool
+void
 Output_data_plt_powerpc<size, big_endian>::add_entry(Symbol* gsym)
 {
   if (!gsym->has_plt_offset())
@@ -1625,15 +1625,13 @@ Output_data_plt_powerpc<size, big_endian
       this->rel_->add_global(gsym, dynrel, this, off, 0);
       off += plt_entry_size;
       this->set_current_data_size(off);
-      return true;
     }
-  return false;
 }
 
 // Add an entry for a global ifunc symbol that resolves locally, to the IPLT.
 
 template<int size, bool big_endian>
-bool
+void
 Output_data_plt_powerpc<size, big_endian>::add_ifunc_entry(Symbol* gsym)
 {
   if (!gsym->has_plt_offset())
@@ -1646,15 +1644,13 @@ Output_data_plt_powerpc<size, big_endian
       this->rel_->add_symbolless_global_addend(gsym, dynrel, this, off, 0);
       off += plt_entry_size;
       this->set_current_data_size(off);
-      return true;
     }
-  return false;
 }
 
 // Add an entry for a local ifunc symbol to the IPLT.
 
 template<int size, bool big_endian>
-bool
+void
 Output_data_plt_powerpc<size, big_endian>::add_local_ifunc_entry(
     Sized_relobj_file<size, big_endian>* relobj,
     unsigned int local_sym_index)
@@ -1670,9 +1666,7 @@ Output_data_plt_powerpc<size, big_endian
 					      this, off, 0);
       off += plt_entry_size;
       this->set_current_data_size(off);
-      return true;
     }
-  return false;
 }
 
 static const uint32_t add_0_11_11	= 0x7c0b5a14;
@@ -2430,16 +2424,15 @@ Target_powerpc<size, big_endian>::make_p
     {
       if (this->iplt_ == NULL)
 	this->make_iplt_section(layout);
-      if (this->iplt_->add_ifunc_entry(gsym))
-	this->glink_->add_entry(object, gsym, reloc);
+      this->iplt_->add_ifunc_entry(gsym);
     }
   else
     {
       if (this->plt_ == NULL)
 	this->make_plt_section(layout);
-      if (this->plt_->add_entry(gsym))
-	this->glink_->add_entry(object, gsym, reloc);
+      this->plt_->add_entry(gsym);
     }
+  this->glink_->add_entry(object, gsym, reloc);
 }
 
 // Make a PLT entry for a local STT_GNU_IFUNC symbol.
@@ -2454,8 +2447,8 @@ Target_powerpc<size, big_endian>::make_l
   if (this->iplt_ == NULL)
     this->make_iplt_section(layout);
   unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
-  if (this->iplt_->add_local_ifunc_entry(relobj, r_sym))
-    this->glink_->add_entry(relobj, r_sym, reloc);
+  this->iplt_->add_local_ifunc_entry(relobj, r_sym);
+  this->glink_->add_entry(relobj, r_sym, reloc);
 }
 
 // Return the number of entries in the PLT.

-- 
Alan Modra
Australia Development Lab, IBM


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