This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [patch ob] Disallow -pie and -static
Mike Frysinger <vapier@gentoo.org> writes:
> On Monday 27 February 2012 12:41:22 Ian Lance Taylor wrote:
>> Mike Frysinger writes:
>> > On Tuesday 14 February 2012 19:48:43 Cary Coutant wrote:
>> >> I'm committing this patch under the trivial and obvious rule. If -pie
>> >> and -static are both given together, gold will currently issue an
>> >> internal error.
>> >
>> > shouldn't there be a bug to fix this then ? there's no technical reason
>> > for disallowing static pie's from the perspective of the linker ...
>>
>> On GNU/Linux a PIE is just an executable shared library. How would you
>> implement a statically linked PIE?
>
> from what perspective ? if i build all my code with -fPIE (including libc.a
> and friends), then link with -static -pie, i should have an ELF that doesn't
> need shared libraries nor runtime ldso and can be run from any address.
But linking with -pie really just generates a shared library. And a
shared library requires ld.so. So I don't understand what you would
generate.
> conceptually, i don't see why static PIE is anything special from static non-
> PIE. maybe i'm missing something fundamental.
In order to implement any sort of PIE something needs to do runtime
relocation of all absolute references. In a statically linked
executable, what is going to do that?
It is not impossible to generate a statically linked PIE, but it
requires support from the startup files and libraries which does not
currently exist on GNU/Linux systems. If somebody wrote that support,
and defined what the linker had to do to invoke it, then it would make
sense for the linker to support -static -pie. Until then, it is better
for the linker to give an error.
Ian