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: PR ld/16428: Disallow -shared/-pie, -shared/-static, -pie/-static


On Mon, Jan 13, 2014 at 02:25:50PM -0800, Cary Coutant wrote:
> >>> +  bfd_boolean seen_pie = FALSE, seen_shared = FALSE, seen_static = FALSE;
> >>
> >> Do we really want to error on the mere presense of an option on the
> >> command line that is later cancelled by some other option?  I think
> >> this is a bad idea.
> >
> > That is what gold does.
> 
> Are there "no" versions of these options? In gold, once any of these
> options is set, it can't be unset.

In effect, yes.  -static has these synonyms:
	-a archive
	-Bstatic
	-dn
	-non_shared
and these antonyms:
	-a shared
	-a default
	-Bdynamic
	-call_shared
	-dy
What's more, these options in part imply -static:
	-N / -omagic
	-n / -nmagic
	-r / --relocatable
	-Ur

I do not see the point in adding a boolean that singles out one or two
of these options for a warning, when the rest of the linker operates
according to the final state these options leave input_flags.dynamic.
Quite clearly if "-static -pie" is nonsense, then so is "-Bstatic -pie".
Also, I don't see why we should disallow something like
LD="ld -static" LDFLAGS="-pie -Bdynamic".

> (Nevertheless, if there were a way to unset any of them, gold only
> checks the final state of the options -- it wouldn't complain if you
> had, e.g., "--static --shared --nostatic". HJ's patch appears to do it
> this way as well; if there were a --nostatic, it should set
> seen_static to FALSE, and you wouldn't get an error.)

No, HJ's patch does not do it this way at all.

In fact on thinking about it some more, I reject not just HJ's
implementation but the whole idea behind the patch.

I see no reason why "-static -pie" should not work.  "-static" does
*not* specify the type of output directly.  "-static" chooses input
objects.  "-pie" affects output.  The two options are logically
orthogonal.  You ought to be able to build a PIE that doesn't use any
shared libraries!  If it doesn't work, then we have a bug elsewhere.

-- 
Alan Modra
Australia Development Lab, IBM


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