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]

Re: ICF on PowerPC Bug


Attached patch to fix the PPC ICF problem by using references to the
reloc info vectors. Ok to commit?

Thanks
Sri

On Wed, Apr 2, 2014 at 9:49 AM, Sriraman Tallam <tmsriram@google.com> wrote:
> On Tue, Apr 1, 2014 at 11:54 PM, Alan Modra <amodra@gmail.com> wrote:
>> 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 icf.cc:
>>>
>>> // 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?
>
> Yikes!, no did not intend that. I will make these references and send a patch.
>
> Thanks
> Sri
>
>>
>>       Icf::Sections_reachable_info v =
>>         (it_reloc_info_list->second).section_info;
>>       // 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 =
>>         (it_reloc_info_list->second).reloc_addend_size_info;
>>
>>
>> diff --git a/gold/icf.cc b/gold/icf.cc
>> index f30eb41..920514c 100644
>> --- a/gold/icf.cc
>> +++ b/gold/icf.cc
>> @@ -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

Attachment: icf_fix.txt
Description: Text document


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