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: Patch for ICF string inline bug for SHT_REL sections.


On Thu, Jul 29, 2010 at 3:17 PM, Doug Kwan (關振德) <dougkwan@google.com> wrote:
> The code above assumes that addends are always encoded as integers in
> 1,2,4 and 8 bytes.  That is not true for some targets.  On ARM,
> addends in many instructions are not encoded like that.  Hopefully we
> do not have relocations with irregular addended encoding to merged
> sections on ARM.  I would extract the switch above into a virtual
> function that has the default implementation similar to code above and
> storing relocation codes instead of relocation sizes in a vector.
> This way, targets like ARM can provide an implementation for special
> relocations.

Ahhh, please let me know if you find possibilities for irregular
addend sizes on ARM for relocations to merged sections. Right now,
back-ends are consulted for relocation sizes for a given type using
"get_embedded_addend_size(int sh_type, int r_type, Relobj* obj)" in
gc.h. So, ARM can provide its own implementation in
"get_size_for_reloc" called by "get_embedded_addend_size". I will have
to change icf.cc to handle arbitrary sizes to accomodate ARM if
necessary.

Thanks.
-Sri.

>
> -Doug
>
> 在 2010年7月29日上午1:15,Ian Lance Taylor <iant@google.com> 寫道:
>> Sriraman Tallam <tmsriram@google.com> writes:
>>
>>>       * arm.cc (Target_arm<big_endian>::gc_process_relocs): Add template
>>>       paramter to the call to gold::gc_process_relocs.
>>>       * i386.cc (Target_i386<big_endian>::gc_process_relocs): Add template
>>>       paramter to the call to gold::gc_process_relocs.
>>>       * x86_64.cc (Target_x86_64<big_endian>::gc_process_relocs): Add template
>>>       parameter to the call to gold::gc_process_relocs.
>>>       * powerpc.cc (Target_powerpc<big_endian>::gc_process_relocs): Add
>>>       template parameter to the call to gold::gc_process_relocs.
>>>       * sparc.cc (Target_sparc<big_endian>::gc_process_relocs): Add template
>>>       paramter to the call to gold::gc_process_relocs.
>>>       * gc.h (get_embedded_addend_size): New function.
>>>       (gc_process_relocs): Save the size of the reloc for use by ICF.
>>>       * icf.cc (get_section_contents): Get the addend from the text section
>>>       for SHT_REL relocation sections.
>>>       * icf.h (Icf::Reloc_addend_size_info): New typedef.
>>>       (Icf::Reloc_info): Add new member reloc_addend_size_info.
>>>       * int_encoding.h (read_from_pointer): New overloaded function.
>>>       * testsuite/Makefile.am (icf_sht_rel_addend_test): New test.
>>>       * testsuite/icf_sht_rel_addend_test.sh: New file.
>>>       * testsuite/icf_sht_rel_addend_test_1.cc: New file.
>>>       * testsuite/icf_sht_rel_addend_test_2.cc: New file.
>>
>>
>>> +                   case 0:
>>> +                     {
>>> +                          break;
>>> +                        }
>>> +                      case 1:
>>> +                        {
>>> +                          reloc_addend_value =
>>> +                            read_from_pointer<8>(reloc_addend_ptr);
>>> +                       break;
>>> +                        }
>>> +                      case 2:
>>> +                        {
>>> +                          reloc_addend_value =
>>> +                            read_from_pointer<16>(reloc_addend_ptr);
>>> +                       break;
>>> +                        }
>>> +                      case 4:
>>> +                        {
>>> +                          reloc_addend_value =
>>> +                            read_from_pointer<32>(reloc_addend_ptr);
>>> +                       break;
>>> +                        }
>>
>> Please add "case 8" here, for luck.
>>
>> This is OK with that change.
>>
>> Thanks, and sorry again for the delay.
>>
>> Ian
>>
>


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