[PATCH] another discarded DWARF issue
Bob Wilson
bwilson@tensilica.com
Tue Oct 16 06:09:00 GMT 2007
On Oct 15, 2007, at 6:22 PM, Alan Modra wrote:
> On Tue, Oct 16, 2007 at 10:02:17AM +0930, Alan Modra wrote:
>> On Mon, Oct 15, 2007 at 03:42:37PM -0700, Bob Wilson wrote:
>>> - if (kept != NULL && sec->size != kept->size)
>>> + /* The kept section may have been relaxed; compare its
>>> original size. */
>>> + if (kept != NULL
>>> + && (elf_section_data (sec)->this_hdr.sh_size
>>> + != elf_section_data (kept)->this_hdr.sh_size))
>>
>> What if "sec" is non-ELF? (I'm not dead certain this can happen, but
>> I think it can..)
I'll take your word for it. I wasn't sure how to do this. See below.
>
> I think you should probably use
>
> if (kept != NULL
> && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
> == (kept->rawsize != 0 ? kept->rawsize : kept->size)))
>
> OK with that change.
I did that at first but then read the comment describing the rawsize
field: "it is currently only set for sections where the linker
relaxation scheme doesn't cache altered section and reloc contents
(stabs, eh_frame, SEC_MERGE, some coff relaxing targets), and thus
the original size needs to be kept to read the section multiple times."
The Xtensa port _does_ cache the altered section contents and
currently does not set rawsize. I started changing it to set rawsize
but this comment made me think that perhaps that was the wrong
approach. I guess not, since there doesn't seem to be another good
way to get the unrelaxed size of a section. Unless you have other
suggestions, I'll apply the patch with your change, and then fix up
the Xtensa port to set rawsize.
Thanks,
Bob
More information about the Binutils
mailing list