This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch ob] Disallow -pie and -static


On Monday 27 February 2012 15:16:12 Ian Lance Taylor wrote:
> Mike Frysinger <vapier@gentoo.org> writes:
> > On Monday 27 February 2012 14:01:37 Ian Lance Taylor wrote:
> >> 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.
> > 
> > my point was from the perspective of the linker, it should not care. 
> > from the perspective of glibc, there is work to be done.
> 
> But the linker has to care, because generating a shared library that
> uses ld.so is one thing, and doing something else that does not use
> ld.so is a different thing.
> 
> For example: should the linker create a PT_INTERP segment for -static
> -pie?

being a PIE and dynamic/static linking are orthogonal issues imo.  if an ELF 
is linked with -static, then there's no ldso and thus no PT_INTERP needed.

> > my point was just that saying, from the perspective of the linker, "-pie
> > and - static are incompatible" is wrong.
> 
> With the current definitions of the options as used in gold, it is not
> wrong.  -static means a statically linked executable with no dynamic
> relocations and only PT_LOAD segments.  -pie means a shared library with
> dynamic relocations and PT_INTERP and PT_DYNAMIC segments.  These are
> purely linker issues, not affected by startup files or libraries.
> 
> Again, we could define what -static -pie means, but that definition
> would include defining how the linker is supposed to handle the option
> combination.

i don't see why -pie should require PT_DYNAMIC or PT_INTERP.  -static controls 
those aspects.

with the compiler driver, -pie would be used to select the appropriate startup 
objects -- Scrt1.o/crt{begin,end}S.o/etc... vs crt1.o/crt{begin,end}.o/etc...
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]