On Sun, Apr 17, 2005 at 07:48:53PM -0700, Gary Funck wrote:
> This usage of a null substitution came up while I was trying to use
> this form of spec. for a different switch, but the following illustrates
> the problem using the existing gcc compiler as built for Redhat Linux
> running on an SGI Altix:
> 
> 
> Given a spec of this form,
>  %{S:X}   substitutes X, if the -S switch was given to CC.
> 
> And a switch definition for -static:
> 
> /* %{static:} simply prevents an error message if the target machine
>    doesn't handle -static.  */
> 
> And the resulting link command spec:
> 
> *link_command:
> %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %{pie:-pie} %X 
> %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}    %{s} %{t}
> %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} 
> %{L*} %(link_libgcc) %o
> %{fprofile-arcs|fprofile-generate:-lgcov}    
> %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}
> %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}

Take a look at your %(link) in the same file.

> I haven't followed the logic in detail, but should the spec.
> %{static:} above erase the explicit -static switch that was
> passed to gcc?

No.  See the documentation in gcc/gcc.c for what you want:

 %<S    remove all occurrences of -S from the command line.
        Note - this command is position dependent.  % commands in the
        spec string before this one will see -S, % commands in the
        spec string after this one will not.

%{static:} prevents the compiler from issuing an error, if a target
does not include any other references to -static in its specs.

-- 
Daniel Jacobowitz
CodeSourcery, LLC

Reply via email to