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

Re: ICF on PowerPC Bug

On Tue, Apr 01, 2014 at 03:06:37PM -0700, Sriraman Tallam wrote:
> because fold2 is folded onto fold1.    The only way to differentiate
> fold1 and fold2 which have the same object code is via the relocation
> type and the Info value is different.  However, with powerpc this is
> rewritten here in
> // Look through function descriptors
> parameters->target().function_location(&loc);
>  if (loc.shndx != it_v->second)
> {
>  it_v->second = loc.shndx;
>  // Modify symvalue/addend to the code entry.
>  it_a->first = loc.offset;
>  it_a->second = 0;
> }
> I am not sure how to fix it.

The following patch fixes the problem, but did you really mean to copy
all the vectors here?

      Icf::Sections_reachable_info v =
      // Stores the information of the symbol pointed to by the reloc.
      Icf::Symbol_info s = (it_reloc_info_list->second).symbol_info;
      // Stores the addend and the symbol value.
      Icf::Addend_info a = (it_reloc_info_list->second).addend_info;
      // Stores the offset of the reloc.
      Icf::Offset_info o = (it_reloc_info_list->second).offset_info;
      Icf::Reloc_addend_size_info reloc_addend_size_info =

diff --git a/gold/ b/gold/
index f30eb41..920514c 100644
--- a/gold/
+++ b/gold/
@@ -288,8 +288,7 @@ get_section_contents(bool first_iteration,
       for (; it_v != v.end(); ++it_v, ++it_s, ++it_a, ++it_o, ++it_addend_size)
-	  if (first_iteration
-	      && it_v->first != NULL)
+	  if (it_v->first != NULL)
 	      Symbol_location loc;
 	      loc.object = it_v->first;

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]