This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: Difference in documentation vs implementation of R_X86_64_GOTPC32/64
On Mon, Mar 18, 2019 at 2:59 PM Siva Chandra <sivachandra@google.com> wrote:
>
> On Mon, Mar 18, 2019 at 2:05 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > On 3/19/19, Siva Chandra via binutils <binutils@sourceware.org> wrote:
> > > Hello,
> > >
> > > The documentation I have at hand for the x86_64 ABI says the
> > > R_X86_64_GOTPC32/64 should be evaluated as:
> > >
> > > GOT + A - P
> > >
> > > where GOT is the address of the global offset table, A the addend, and
> > > P the program counter. But, I notice that, the implementations
> > > actually interpret GOT as the address of .got.plt.
> > >
> > > Also, it seems to me that a similar interpretation is also applied to
> > > R_X86_64_GOTOFF64, R_386_GOTPC and R_386_GOTOFF.
> > >
> > > Is there any reason why GOT is interpreted to be the address of
> > > .got.plt? Or, is it a defect in the documentation?
> >
> > In 5.2 Dynamic Linking, there are
> >
> > The symbol _GLOBAL_OFFSET_TABLE_ may reside in the middle of the .got section,
> > allowing both negative and non-negative offsets into the array of addresses.
>
> So, if I understand you correctly:
>
> 1. GOT is different from .got.
> 2. GOT is in .got, but not necessarily at the at the beginning of .got.
> 3. First entry in the GOT is _GLOBAL_OFFSET_TABLE_.
>
> So, how does one view what .got.plt is?
Ah, is this what it is:
1. GOT spans .got and .got.plt.
2. Non-negative indices into the GOT are in .got.plt.
3. Negative indices into the GOT are in .got.
4. The first location of GOT, which is the zero-th entry in GOT, is
_GLOBAL_OFFSET_TABLE_.
If _this_ is the interpretation, then I am good with everything :)
>
> Thanks,
> Siva Chandra