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.


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.

-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]