Patch for ICF string inline bug for SHT_REL sections.

Doug Kwan (關振德) dougkwan@google.com
Thu Jul 29 22:17:00 GMT 2010


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
>



More information about the Binutils mailing list