This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: Allow pie links to create PLT entries
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Sriraman Tallam <tmsriram at google dot com>
- Cc: Cary Coutant <ccoutant at google dot com>, binutils <binutils at sourceware dot org>, David Li <davidxl at google dot com>, Ian Lance Taylor <iant at google dot com>
- Date: Thu, 29 Jan 2015 11:48:05 -0800
- Subject: Re: Allow pie links to create PLT entries
- Authentication-results: sourceware.org; auth=none
- References: <CAAs8HmyEG-m74+vcKFzuFTzVB-1cQvp1K_k3Hji=9ZnFci7CtA at mail dot gmail dot com>
On Thu, Jan 29, 2015 at 11:00 AM, Sriraman Tallam <tmsriram@google.com> wrote:
> Hi,
>
> Here is a simple example that fails to link with -pie but which
> should work just fine without having to use -fPIE.
>
> foo.cc
> ======
> int extern_func();
> int main()
> {
> extern_func();
> return 0;
> }
>
> bar.cc
> =====
> int extern_func()
> {
> return 1;
> }
>
> $ g++ -fPIC -shared bar.cc -o libbar.so
> $ g++ foo.cc -lbar -pie
>
> ld: error: foo.o: requires dynamic R_X86_64_PC32 reloc against
> '_Z11extern_funcv' which may overflow at runtime; recompile with -fPIC
>
> It fails because the linker disallows creating a PLT for
> R_X86_64_PC32 reloc when it is perfectly fine to do so. Note that I
> could have recompiled foo.cc with -fPIE or -fPIC but I still think
> this can be allowed. With support for copy relocations in pie in gold
> and with this support, the cases where we would need to use -fPIE to
> get working pie links is smaller. This would help us link non-PIE
> objects into pie executables.
You can't do it for x86 since EBX isn't setup for calling via PLT.
For x86-64, there should be little difference between PIE
and non-PIE code. What do you gain by building PIE without
-fPIE on x86-64?
>
> Attached patch to fix this. I have only tested this patch on X86_64.
>
> Please review.
>
> Thanks
> Sri
--
H.J.