diff options
author | obrien <obrien@FreeBSD.org> | 2002-02-01 18:16:02 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2002-02-01 18:16:02 +0000 |
commit | c9ab9ae440a8066b2c2b85b157b1fdadcf09916a (patch) | |
tree | 086d9d6c8fbd4fc8fe4495059332f66bc0f8d12b /contrib/gcc/gccspec.c | |
parent | 2ecfd8bd04b63f335c1ec6295740a4bfd97a4fa6 (diff) | |
download | FreeBSD-src-c9ab9ae440a8066b2c2b85b157b1fdadcf09916a.zip FreeBSD-src-c9ab9ae440a8066b2c2b85b157b1fdadcf09916a.tar.gz |
Enlist the FreeBSD-CURRENT users as testers of what is to become Gcc 3.1.0.
These bits are taken from the FSF anoncvs repo on 1-Feb-2002 08:20 PST.
Diffstat (limited to 'contrib/gcc/gccspec.c')
-rw-r--r-- | contrib/gcc/gccspec.c | 104 |
1 files changed, 82 insertions, 22 deletions
diff --git a/contrib/gcc/gccspec.c b/contrib/gcc/gccspec.c index 78c67d2..867cbd5 100644 --- a/contrib/gcc/gccspec.c +++ b/contrib/gcc/gccspec.c @@ -1,43 +1,103 @@ /* Specific flags and argument handling of the C front-end. - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2001 Free Software Foundation, Inc. -This file is part of GNU CC. +This file is part of GCC. -GNU CC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ #include "config.h" #include "system.h" +#include "gcc.h" -/* Filter argc and argv before processing by the gcc driver proper. */ +/* Filter argc and argv before processing by the gcc driver proper. */ void -lang_specific_driver (fn, in_argc, in_argv, in_added_libraries) - void (*fn)() ATTRIBUTE_UNUSED; +lang_specific_driver (in_argc, in_argv, in_added_libraries) int *in_argc ATTRIBUTE_UNUSED; - char ***in_argv ATTRIBUTE_UNUSED; + const char *const **in_argv ATTRIBUTE_UNUSED; int *in_added_libraries ATTRIBUTE_UNUSED; { - return; /* Not used for C. */ +#ifdef ENABLE_SHARED_LIBGCC + int i; + + /* The new argument list will be contained in this. */ + const char **arglist; + + /* True if we should add -shared-libgcc to the command-line. */ + int shared_libgcc = 0; + + /* The total number of arguments with the new stuff. */ + int argc; + + /* The argument list. */ + const char *const *argv; + + argc = *in_argc; + argv = *in_argv; + + for (i = 1; i < argc; i++) + { + if (argv[i][0] == '-') + { + if (strcmp (argv[i], "-static-libgcc") == 0 + || strcmp (argv[i], "-static") == 0) + return; + } + else + { + int len; + + /* If the filename ends in .m or .mi, we are compiling ObjC + and want to pass -shared-libgcc. */ + len = strlen (argv[i]); + if ((len > 2 && argv[i][len - 2] == '.' && argv[i][len - 1] == 'm') + || (len > 3 && argv[i][len - 3] == '.' && argv[i][len - 2] == 'm' + && argv[i][len - 1] == 'i')) + shared_libgcc = 1; + } + } + + if (shared_libgcc) + { + /* Make sure to have room for the trailing NULL argument. */ + arglist = (const char **) xmalloc ((argc+2) * sizeof (char *)); + + i = 0; + do + { + arglist[i] = argv[i]; + i++; + } + while (i < argc); + + arglist[i++] = "-shared-libgcc"; + + arglist[i] = NULL; + + *in_argc = i; + *in_argv = arglist; + } +#endif } -/* Called before linking. Returns 0 on success and -1 on failure. */ +/* Called before linking. Returns 0 on success and -1 on failure. */ int lang_specific_pre_link () { - return 0; /* Not used for C. */ + return 0; /* Not used for C. */ } -/* Number of extra output files that lang_specific_pre_link may generate. */ -int lang_specific_extra_outfiles = 0; /* Not used for C. */ +/* Number of extra output files that lang_specific_pre_link may generate. */ +int lang_specific_extra_outfiles = 0; /* Not used for C. */ |