This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
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
>>
>