Substituting -msoft-float/-mfloat-abi=* in the proper order in spec file

Richard Sandiford richard.sandiford at linaro.org
Mon Mar 21 11:16:34 UTC 2011


Loïc Minier <loic.minier at linaro.org> writes:
>  I'm trying to extend the *link: specs to pass a different
>  -dynamic-linker depending on the float ABI.  But I didn't manage to
>  build a construct which would preserve the order of the flags; if I do
>  something like:
>     %{msoft-float:-dynamic-linker V1} %{mfloat-abi=softfp:-dynamic-linker V2}
>
>  Then I get V2 for "-mfloat-abi=softfp -msoft-float" instead of V1.
>
>  In gcc/gcc.c I found some docs on spec file syntax; I see one can use
>  %{S*&T*} and %{S*:X}, but apparently %{S*&T*:X} isn't allowed, so I
>  can't manipulate the value.  I tried to use
>     %{msoft-float*:-dynamic-linker V1} %{mfloat-abi=softfp*:-dynamic-linker V2}
>  but that gives the same effect (the msoft-float flags are
>  grouped together in the original order and put first, then the
>  mfloat-abi=softfp are grouped together in the original order and put
>  second).
>
>  I didn't manage to get %{msoft-float*:%<msoft-float -dynamic-linker V1}
>  to work; in fact I didn't get supressions to work.

Having later command-line options reverse earlier ones isn't fully
supported in this kind of context.  The same problem applies to multilibs.
E.g. if you say "-marm -mthumb" in a toolchain that has ARM and Thumb
multilibs, there's no guarantee that you'll link against the Thumb ones.

Joseph Myers is in the process of overhauling the driver's command-line
processing.  It might be easier to do what you want once he's finished.

Richard



More information about the linaro-toolchain mailing list