[patch] fix %b resetting
Eric Christopher
echristo@redhat.com
Thu Jun 2 17:42:00 GMT 2005
In gcc.c we reset the input to the first input filename so that %b
behavior works reasonably well. The problem is that for drivers other
than c this wasn't working. With the following type of spec addition:
#define LINK_SPEC "-soname=%b"
and the command line:
g++ -Wl,-Tfoo bar.cc -o bar.x
We'd get a soname of -Wl,
Which is definitely not what we wanted. This appears to fix the problem
by using the first infile with a language.
Bootstrapped and regtested on x86-linux (and tested on s390x-ibm-tpf for
that matter). No regressions.
OK?
-eric
2005-06-02 Eric Christopher <echristo@redhat.com>
* gcc.c (main): Reset input to the first object with
a language.
Index: gcc/gcc.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gcc.c,v
retrieving revision 1.458
diff -u -p -w -r1.458 gcc.c
--- gcc/gcc.c 15 May 2005 17:06:16 -0000 1.458
+++ gcc/gcc.c 2 Jun 2005 17:35:41 -0000
@@ -6540,11 +6540,24 @@ main (int argc, const char **argv)
clear_failure_queue ();
}
- /* Reset the output file name to the first input file name, for use
- with %b in LINK_SPEC on a target that prefers not to emit a.out
- by default. */
+ /* Reset the input file name to the first compile/object file name,
for use
+ with %b in LINK_SPEC. We use the first input file that we can find
+ a compiler to compile it instead of using infiles.language since
for
+ languages other than C we use aliases that we then lookup later.
*/
if (n_infiles > 0)
- set_input (infiles[0].name);
+ {
+ int i;
+
+ for (i = 0; i < n_infiles ; i++)
+ {
+ struct compiler *cp =
+ lookup_compiler (infiles[i].name, strlen (infiles[i].name),
+ infiles[i].language);
+
+ if (cp)
+ set_input (infiles[i].name);
+ }
+ }
if (error_count == 0)
{
More information about the Gcc-patches
mailing list