X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=gcc%2Fcppspec.c;h=344da17a37ed25085c7111a37882b6e5fd002a99;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=5f787d61c8dbbe8cfaa97a4b98c9386a78e6e048;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/cppspec.c b/gcc/cppspec.c index 5f787d61..344da17a 100644 --- a/gcc/cppspec.c +++ b/gcc/cppspec.c @@ -1,11 +1,11 @@ /* Specific flags and argument handling of the C preprocessor. - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2007 Free Software Foundation, Inc. This file is part of GCC. 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 +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -14,12 +14,13 @@ 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 GCC; 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 COPYING3. If not see +. */ #include "config.h" #include "system.h" +#include "coretypes.h" +#include "tm.h" #include "gcc.h" /* The `cpp' executable installed in $(bindir) and $(cpp_install_dir) @@ -29,32 +30,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA assume the user knows what they're doing. If no explicit input is mentioned, it will read stdin. */ -/* Snarfed from gcc.c: */ - -/* This defines which switch letters take arguments. */ - -#define DEFAULT_SWITCH_TAKES_ARG(CHAR) \ - ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \ - || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \ - || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \ - || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \ - || (CHAR) == 'B' || (CHAR) == 'b') - #ifndef SWITCH_TAKES_ARG #define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR) #endif -/* This defines which multi-letter switches take arguments. */ - -#define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \ - (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \ - || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \ - || !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \ - || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \ - || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \ - || !strcmp (STR, "isystem") || !strcmp (STR, "specs") \ - || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ")) - #ifndef WORD_SWITCH_TAKES_ARG #define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR) #endif @@ -66,15 +45,14 @@ static const char *const known_suffixes[] = { ".c", ".C", ".S", ".m", ".cc", ".cxx", ".cpp", ".cp", ".c++", + ".sx", NULL }; /* Filter argc and argv before processing by the gcc driver proper. */ void -lang_specific_driver (in_argc, in_argv, in_added_libraries) - int *in_argc; - const char *const **in_argv; - int *in_added_libraries ATTRIBUTE_UNUSED; +lang_specific_driver (int *in_argc, const char *const **in_argv, + int *in_added_libraries ATTRIBUTE_UNUSED) { int argc = *in_argc; const char *const *argv = *in_argv; @@ -85,12 +63,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) /* Do we need to insert -E? */ int need_E = 1; - /* Do we need to insert -no-gcc? */ - int need_no_gcc = 1; - /* Have we seen an input file? */ int seen_input = 0; - + /* Positions to insert -xc, -xassembler-with-cpp, and -o, if necessary. 0 means unnecessary. */ int lang_c_here = 0; @@ -99,7 +74,7 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) /* Do we need to fix up an input file with an unrecognized suffix? */ int need_fixups = 1; - + int i, j, quote = 0; const char **new_argv; int new_argc; @@ -117,7 +92,7 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) quote = 0; continue; } - + if (argv[i][0] == '-') { if (argv[i][1] == '\0') @@ -142,8 +117,6 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) } else if (argv[i][1] == 'x') need_fixups = 0; - else if (argv[i][1] == 'g' && !strcmp(&argv[i][2], "cc")) - need_no_gcc = 0; else if (WORD_SWITCH_TAKES_ARG (&argv[i][1])) quote = 1; } @@ -192,14 +165,14 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) /* If we don't need to edit the command line, we can bail early. */ - new_argc = argc + need_E + need_no_gcc + read_stdin + new_argc = argc + need_E + read_stdin + !!o_here + !!lang_c_here + !!lang_S_here; if (new_argc == argc) return; /* One more slot for a terminating null. */ - new_argv = (const char **) xmalloc ((new_argc + 1) * sizeof(char *)); + new_argv = XNEWVEC (const char *, new_argc + 1); new_argv[0] = argv[0]; j = 1; @@ -207,9 +180,6 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) if (need_E) new_argv[j++] = "-E"; - if (need_no_gcc) - new_argv[j++] = "-no-gcc"; - for (i = 1; i < argc; i++, j++) { if (i == lang_c_here) @@ -228,10 +198,10 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) new_argv[j] = NULL; *in_argc = new_argc; *in_argv = new_argv; -} +} /* Called before linking. Returns 0 on success and -1 on failure. */ -int lang_specific_pre_link () +int lang_specific_pre_link (void) { return 0; /* Not used for cpp. */ }