This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Your %b patch
- From: Eric Christopher <echristo at redhat dot com>
- To: Mark Mitchell <mark at codesourcery dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 11 Jul 2005 17:54:14 -0700
- Subject: Re: Your %b patch
- References: <42CE2EEC.6090909@codesourcery.com>
> OK, with that change.
>
Here's the patch. It's slightly different from what you asked, but works
just like you wanted.
> Please also update the comment for "infile::language" to indicate the
> special "*" convention, and adjust the comment for your new code.
I'm not sure where you were meaning so i put it above the struct
definition. OK?
2005-07-11 Eric Christopher <echristo@redhat.com>
* gcc.c (struct infile): Update comment for language.
(main): Rewrite input file resetting code.
-eric
Index: gcc.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gcc.c,v
retrieving revision 1.464
diff -u -p -w -r1.464 gcc.c
--- gcc.c 8 Jul 2005 05:50:44 -0000 1.464
+++ gcc.c 12 Jul 2005 00:51:15 -0000
@@ -2936,6 +2936,13 @@ static struct switchstr *switches;
static int n_switches;
+/* Language is one of three things:
+
+ 1) The name of a real programming language.
+ 2) NULL, indicating that no one has figured out
+ what it is yet.
+ 3) '*', indicating that the file should be passed
+ to the linker. */
struct infile
{
const char *name;
@@ -6553,11 +6560,21 @@ 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++)
+ if (infiles[i].language && infiles[i].language != '*')
+ {
+ set_input (infiles[i].name);
+ break;
+ }
+ }
if (error_count == 0)
{