[committed, PATCH] x86: Properly check building shared library

H.J. Lu hjl.tools@gmail.com
Wed Feb 14 05:13:00 GMT 2018


On Tue, Feb 13, 2018 at 6:11 PM, Alan Modra <amodra@gmail.com> wrote:
> On Tue, Feb 13, 2018 at 02:31:43PM -0800, H.J. Lu wrote:
>> If a symbol is not defined in a regular file, and we are not generating
>> a shared library, then set the symbol to its location in the .plt.  This
>> is required to make function pointers compare as equal between the normal
>> executable and the shared library.
>
> I'm curious as to why this is necessary, in case other targets need
> the same treatment.  Normally a PIE is built from position independent
> code, and thus addresses of functions are loaded from the GOT.  That
> means there is no need to use any tricks to avoid dynamic text relocs.
>

This is true in most cases.  However, you can use PC-relative relocation
to compute function address without GOT.  Here is a patch for

https://sourceware.org/bugzilla/show_bug.cgi?id=22842

with testcases in assembly for i386 and x86-64.  I think you can create
similar testcases for other targets.

I will check it in tomorrow.

-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-x86-64-Use-PLT-address-for-PC-relative-reloc.patch
Type: text/x-patch
Size: 15021 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20180214/1a714f5f/attachment.bin>


More information about the Binutils mailing list