[lld] r296448 - Add a comment.
Sean Silva via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 28 20:56:23 PST 2017
On Tue, Feb 28, 2017 at 6:49 PM, Rafael Avila de Espindola <
rafael.espindola at gmail.com> wrote:
> Sean Silva <chisophugis at gmail.com> writes:
>
> > On Tue, Feb 28, 2017 at 11:20 AM, Rafael Avila de Espindola <
> > rafael.espindola at gmail.com> wrote:
> >
> >> > + // Note that for an ordinary symbol we do not perform this
> >> > + // adjustment and thus effectively assume that the addend cannot
> >> > + // cross the boundaries of mergeable objects.
> >>
> >> That is not the assumption. The issue is that ".rodata + 42" and ".Lbar
> >> + 42" have different meanings. The first one means the data that starts
> >> 42 bytes after the start of .rodata. The second one means 42 bytes after
> >> the data that starts at .Lbar.
> >>
> >> An example that shows the difference
> >>
> >>
> >> .section .rodata.str1.1,"aMS", at progbits,1
> >> .Lbar:
> >> .asciz "abc"
> >> .asciz "def"
> >>
> >> .data
> >> .quad .Lbar + 4
> >> .quad .rodata.str1.1 + 4
> >>
> >> The first relocation points to 4 bytes after "abc". The second
> >> relocation points to "def".
> >>
> >
> > That's what I was trying to get at with :
> > ```
> > + // We must incorporate the addend into the section offset (and
> > + // zero out the addend for later processing) so that we find the
> > + // right object in the section.
> > ```
> >
> > If I understand what you are saying, then the point is that for
> > STT_SECTION, the addend is not really an addend in the traditional sense
> > (offset from a symbol in the output). It really just means something
> else,
> > in particular, it is just an offset to be used to find a particular
> object
> > in the input.
> >
> > Am I understanding correctly? I'll update the comment if so.
>
> The only issue I noticed with the comment was the part:
>
> >> > + // adjustment and thus effectively assume that the addend cannot
> >> > + // cross the boundaries of mergeable objects.
>
> With a non section symbol the addend can cross the boundary. The meaning
> is that at runtime the value will be past the end of the object.
>
Yeah, I'll delete that. I was trying to capture the notion that if it
crossed the boundary, it wouldn't select the next object, it would just be
off the end (which can be well-defined, albeit somewhat unusual).
i've revised the comment in r296580.
-- Sean Silva
>
> > Still, I'm somewhat wary of describing it with such generality though. Do
> > we also apply this special logic to STT_SECTION in the case of .eh_frame
> > sections? Looking at MarkLive.cpp, I see that the offset only plays a
> role
> > for mergeable sections, so I suspect we don't.
>
> I think we don't support relocatons pointing to arbitrary locations in
> .eh_frame.
>
> Cheers,
> Rafael
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170228/9d40bbb2/attachment.html>
More information about the llvm-commits
mailing list