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.


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]