X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fgcc.c;h=a25077e24f76536b4c78858b1b829aa84472c3eb;hp=9ca245170c2acd2974588df6a9c67465e686f210;hb=b7e3aeb1d14c179214a5509ae0b031dd725c377d;hpb=72b890e7cbdbf9c35090e08769a31b7ef04e55f2 diff --git a/gcc/gcc.c b/gcc/gcc.c index 9ca245170c2..a25077e24f7 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -262,11 +262,11 @@ static int use_pipes; static const char *compiler_version; -/* The target version specified with -V */ +/* The target version. */ static const char *const spec_version = DEFAULT_TARGET_VERSION; -/* The target machine specified with -b. */ +/* The target machine. */ static const char *spec_machine = DEFAULT_TARGET_MACHINE; @@ -403,6 +403,7 @@ static const char *if_exists_else_spec_function (int, const char **); static const char *replace_outfile_spec_function (int, const char **); static const char *version_compare_spec_function (int, const char **); static const char *include_spec_function (int, const char **); +static const char *find_file_spec_function (int, const char **); static const char *print_asm_header_spec_function (int, const char **); static const char *compare_debug_dump_opt_spec_function (int, const char **); static const char *compare_debug_self_opt_spec_function (int, const char **); @@ -872,6 +873,7 @@ static const char *cpp_unique_options = %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\ %{!E:%{!M:%{!MM:%{!MT:%{!MQ:%{MD|MMD:%{o*:-MQ %*}}}}}}}\ %{remap} %{g3|ggdb3|gstabs3|gcoff3|gxcoff3|gvms3:-dD}\ + %{!iplugindir*:%{fplugin*:-iplugindir=%:find-file(plugin)}}\ %{H} %C %{D*&U*&A*} %{i*} %Z %i\ %{fmudflap:-D_MUDFLAP -include mf-runtime.h}\ %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h}\ @@ -894,6 +896,7 @@ static const char *cpp_debug_options = "%{d*}"; /* NB: This is shared amongst all front-ends, except for Ada. */ static const char *cc1_options = "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\ + %{!iplugindir*:%{fplugin*:-iplugindir=%:find-file(plugin)}}\ %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{a*}\ %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} \ %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \ @@ -1726,6 +1729,7 @@ static const struct spec_function static_spec_functions[] = { "replace-outfile", replace_outfile_spec_function }, { "version-compare", version_compare_spec_function }, { "include", include_spec_function }, + { "find-file", find_file_spec_function }, { "print-asm-header", print_asm_header_spec_function }, { "compare-debug-dump-opt", compare_debug_dump_opt_spec_function }, { "compare-debug-self-opt", compare_debug_self_opt_spec_function }, @@ -3420,8 +3424,6 @@ display_help (void) --sysroot= Use as the root directory for headers\n\ and libraries\n"), stdout); fputs (_(" -B Add to the compiler's search paths\n"), stdout); - fputs (_(" -b Run gcc for target , if installed\n"), stdout); - fputs (_(" -V Run gcc version number , if installed\n"), stdout); fputs (_(" -v Display the programs invoked by the compiler\n"), stdout); fputs (_(" -### Like -v but options quoted and commands not executed\n"), stdout); fputs (_(" -E Preprocess only; do not compile, assemble or link\n"), stdout); @@ -3526,81 +3528,6 @@ process_command (int argc, const char **argv) } } - /* If there is a -V or -b option (or both), process it now, before - trying to interpret the rest of the command line. - Use heuristic that all configuration names must have at least - one dash '-'. This allows us to pass options starting with -b. */ - if (argc > 1 && argv[1][0] == '-' - && (argv[1][1] == 'V' - || (argv[1][1] == 'b' - && (argv[1][2] == '\0' - || NULL != strchr (argv[1] + 2, '-'))))) - { - const char *new_version = DEFAULT_TARGET_VERSION; - const char *new_machine = DEFAULT_TARGET_MACHINE; - const char *progname = argv[0]; - char **new_argv; - char *new_argv0; - int baselen; - int status = 0; - int err = 0; - const char *errmsg; - - while (argc > 1 && argv[1][0] == '-' - && (argv[1][1] == 'V' - || (argv[1][1] == 'b' - && (argv[1][2] == '\0' - || NULL != strchr (argv[1] + 2, '-'))))) - { - char opt = argv[1][1]; - const char *arg; - if (argv[1][2] != '\0') - { - arg = argv[1] + 2; - argc -= 1; - argv += 1; - } - else if (argc > 2) - { - arg = argv[2]; - argc -= 2; - argv += 2; - } - else - fatal ("'-%c' option must have argument", opt); - if (opt == 'V') - new_version = arg; - else - new_machine = arg; - } - - for (baselen = strlen (progname); baselen > 0; baselen--) - if (IS_DIR_SEPARATOR (progname[baselen-1])) - break; - new_argv0 = XDUPVAR (char, progname, baselen, - baselen + concat_length (new_version, new_machine, - "-gcc-", NULL) + 1); - strcpy (new_argv0 + baselen, new_machine); - strcat (new_argv0, "-gcc-"); - strcat (new_argv0, new_version); - - new_argv = XDUPVEC (char *, argv, argc + 1); - new_argv[0] = new_argv0; - - errmsg = pex_one (PEX_SEARCH, new_argv0, new_argv, progname, NULL, - NULL, &status, &err); - - if (errmsg) - { - if (err == 0) - fatal ("couldn't run '%s': %s", new_argv0, errmsg); - else - fatal ("couldn't run '%s': %s: %s", new_argv0, errmsg, - xstrerror (err)); - } - exit (status); - } - /* Convert new-style -- options to old-style. */ translate_options (&argc, CONST_CAST2 (const char *const **, const char ***, @@ -4094,15 +4021,6 @@ process_command (int argc, const char **argv) switch (c) { - case 'b': - if (p[1] && NULL == strchr (argv[i] + 2, '-')) - goto normal_switch; - - /* Fall through. */ - case 'V': - fatal ("'-%c' must come at the start of the command line", c); - break; - case 'B': { const char *value; @@ -7577,7 +7495,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n" fuse_linker_plugin + strlen (fuse_linker_plugin), 0)) { linker_plugin_file_spec = find_a_file (&exec_prefixes, - "liblto_plugin.so", X_OK, + "liblto_plugin.so", R_OK, false); if (!linker_plugin_file_spec) fatal ("-fuse-linker-plugin, but liblto_plugin.so not found"); @@ -8796,6 +8714,22 @@ include_spec_function (int argc, const char **argv) return NULL; } +/* %:find-file spec function. This function replace its argument by + the file found thru find_file, that is the -print-file-name gcc + program option. */ +static const char * +find_file_spec_function (int argc, const char**argv) +{ + const char *file; + + if (argc != 1) + abort (); + + file = find_file (argv[0]); + return file; +} + + /* %:print-asm-header spec function. Print a banner to say that the following output is from the assembler. */