PATCH: PR ld/16428: Disallow -shared/-pie, -shared/-static, -pie/-static
Alan Modra
amodra@gmail.com
Tue Jan 14 00:39:00 GMT 2014
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
More information about the Binutils
mailing list