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] | |
Hi Ian,
I have attached the patch with that change.
* 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.
Thanks,
-Sri.
On Wed, Jul 28, 2010 at 1:36 PM, Ian Lance Taylor <iant@google.com> wrote:
> Sriraman Tallam <tmsriram@google.com> writes:
>
>> + ? ? ? ? ? ? ? ? ? ? ?case 1:
>> + ? ? ? ? ? ? ? ? ? ? ? ?{
>> + ? ? ? ? ? ? ? ? ? ? ? ? ?reloc_addend_value =
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?*(reinterpret_cast<const uint8_t*>(reloc_addend_ptr));
>> + ? ? ? ? ? ? ? ? ? ? ? break;
>> + ? ? ? ? ? ? ? ? ? ? ? ?}
>> + ? ? ? ? ? ? ? ? ? ? ?case 2:
>> + ? ? ? ? ? ? ? ? ? ? ? ?{
>> + ? ? ? ? ? ? ? ? ? ? ? ? ?reloc_addend_value =
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?*(reinterpret_cast<const uint16_t*>(reloc_addend_ptr));
>> + ? ? ? ? ? ? ? ? ? ? ? break;
>> + ? ? ? ? ? ? ? ? ? ? ? ?}
>> + ? ? ? ? ? ? ? ? ? ? ?case 4:
>> + ? ? ? ? ? ? ? ? ? ? ? ?{
>> + ? ? ? ? ? ? ? ? ? ? ? ? ?reloc_addend_value =
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?*(reinterpret_cast<const uint32_t*>(reloc_addend_ptr));
>> + ? ? ? ? ? ? ? ? ? ? ? break;
>
> You can't use these reinterpret_casts. ?In general the addend need not
> be aligned, and this will crash when running on a strict alignment host
> like SPARC. ?Without some knowledge that the addend is aligned, you need
> to use Swap_unaligned. ?It may be easiest to use read_from_pointer from
> int_encoding.h.
>
> Sorry for the long delay.
>
> Ian
>
Attachment:
icf_addend_sht_rel_bug.txt
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |