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