OSDN Git Service

Emit vzerouppers after reload.
[pf3gnuchains/gcc-fork.git] / gcc / gcc.c
1 /* Compiler driver program that can handle many languages.
2    Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
4    2010
5    Free Software Foundation, Inc.
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
13
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* This program is the user interface to the C compiler and possibly to
24 other compilers.  It is used because compilation is a complicated procedure
25 which involves running several programs and passing temporary files between
26 them, forwarding the users switches to those programs selectively,
27 and deleting the temporary files at the end.
28
29 CC recognizes how to compile each input file by suffixes in the file names.
30 Once it knows which kind of compilation to perform, the procedure for
31 compilation is specified by a string called a "spec".  */
32
33 #include "config.h"
34 #include "system.h"
35 #include "coretypes.h"
36 #include "multilib.h" /* before tm.h */
37 #include "tm.h"
38 #include <signal.h>
39 #if ! defined( SIGCHLD ) && defined( SIGCLD )
40 #  define SIGCHLD SIGCLD
41 #endif
42 #include "xregex.h"
43 #include "obstack.h"
44 #include "intl.h"
45 #include "prefix.h"
46 #include "gcc.h"
47 #include "diagnostic.h"
48 #include "flags.h"
49 #include "opts.h"
50
51 #ifdef HAVE_MMAP_FILE
52 # include <sys/mman.h>
53 # ifdef HAVE_MINCORE
54 /* This is on Solaris.  */
55 #  include <sys/types.h>
56 # endif
57 #endif
58
59 #ifndef MAP_FAILED
60 # define MAP_FAILED ((void *)-1)
61 #endif
62
63 /* By default there is no special suffix for target executables.  */
64 /* FIXME: when autoconf is fixed, remove the host check - dj */
65 #if defined(TARGET_EXECUTABLE_SUFFIX) && defined(HOST_EXECUTABLE_SUFFIX)
66 #define HAVE_TARGET_EXECUTABLE_SUFFIX
67 #endif
68
69 /* By default there is no special suffix for host executables.  */
70 #ifdef HOST_EXECUTABLE_SUFFIX
71 #define HAVE_HOST_EXECUTABLE_SUFFIX
72 #else
73 #define HOST_EXECUTABLE_SUFFIX ""
74 #endif
75
76 /* By default, the suffix for target object files is ".o".  */
77 #ifdef TARGET_OBJECT_SUFFIX
78 #define HAVE_TARGET_OBJECT_SUFFIX
79 #else
80 #define TARGET_OBJECT_SUFFIX ".o"
81 #endif
82
83 static const char dir_separator_str[] = { DIR_SEPARATOR, 0 };
84
85 /* Most every one is fine with LIBRARY_PATH.  For some, it conflicts.  */
86 #ifndef LIBRARY_PATH_ENV
87 #define LIBRARY_PATH_ENV "LIBRARY_PATH"
88 #endif
89
90 #ifndef HAVE_KILL
91 #define kill(p,s) raise(s)
92 #endif
93
94 /* If a stage of compilation returns an exit status >= 1,
95    compilation of that file ceases.  */
96
97 #define MIN_FATAL_STATUS 1
98
99 /* Flag set by cppspec.c to 1.  */
100 int is_cpp_driver;
101
102 /* Flag set to nonzero if an @file argument has been supplied to gcc.  */
103 static bool at_file_supplied;
104
105 /* Definition of string containing the arguments given to configure.  */
106 #include "configargs.h"
107
108 /* Flag saying to print the command line options understood by gcc and its
109    sub-processes.  */
110
111 static int print_help_list;
112
113 /* Flag saying to print the version of gcc and its sub-processes.  */
114
115 static int print_version;
116
117 /* Flag indicating whether we should print the command and arguments */
118
119 static int verbose_flag;
120
121 /* Flag indicating whether we should ONLY print the command and
122    arguments (like verbose_flag) without executing the command.
123    Displayed arguments are quoted so that the generated command
124    line is suitable for execution.  This is intended for use in
125    shell scripts to capture the driver-generated command line.  */
126 static int verbose_only_flag;
127
128 /* Flag indicating how to print command line options of sub-processes.  */
129
130 static int print_subprocess_help;
131
132 /* Whether we should report subprocess execution times to a file.  */
133
134 FILE *report_times_to_file = NULL;
135
136 /* Nonzero means place this string before uses of /, so that include
137    and library files can be found in an alternate location.  */
138
139 #ifdef TARGET_SYSTEM_ROOT
140 static const char *target_system_root = TARGET_SYSTEM_ROOT;
141 #else
142 static const char *target_system_root = 0;
143 #endif
144
145 /* Nonzero means pass the updated target_system_root to the compiler.  */
146
147 static int target_system_root_changed;
148
149 /* Nonzero means append this string to target_system_root.  */
150
151 static const char *target_sysroot_suffix = 0;
152
153 /* Nonzero means append this string to target_system_root for headers.  */
154
155 static const char *target_sysroot_hdrs_suffix = 0;
156
157 /* Nonzero means write "temp" files in source directory
158    and use the source file's name in them, and don't delete them.  */
159
160 static enum save_temps {
161   SAVE_TEMPS_NONE,              /* no -save-temps */
162   SAVE_TEMPS_CWD,               /* -save-temps in current directory */
163   SAVE_TEMPS_OBJ                /* -save-temps in object directory */
164 } save_temps_flag;
165
166 /* Output file to use to get the object directory for -save-temps=obj  */
167 static char *save_temps_prefix = 0;
168 static size_t save_temps_length = 0;
169
170 /* The compiler version.  */
171
172 static const char *compiler_version;
173
174 /* The target version.  */
175
176 static const char *const spec_version = DEFAULT_TARGET_VERSION;
177
178 /* The target machine.  */
179
180 static const char *spec_machine = DEFAULT_TARGET_MACHINE;
181
182 /* Nonzero if cross-compiling.
183    When -b is used, the value comes from the `specs' file.  */
184
185 #ifdef CROSS_DIRECTORY_STRUCTURE
186 static const char *cross_compile = "1";
187 #else
188 static const char *cross_compile = "0";
189 #endif
190
191 /* Greatest exit code of sub-processes that has been encountered up to
192    now.  */
193 static int greatest_status = 1;
194
195 /* This is the obstack which we use to allocate many strings.  */
196
197 static struct obstack obstack;
198
199 /* This is the obstack to build an environment variable to pass to
200    collect2 that describes all of the relevant switches of what to
201    pass the compiler in building the list of pointers to constructors
202    and destructors.  */
203
204 static struct obstack collect_obstack;
205
206 /* Forward declaration for prototypes.  */
207 struct path_prefix;
208 struct prefix_list;
209
210 static void init_spec (void);
211 static void store_arg (const char *, int, int);
212 static void insert_wrapper (const char *);
213 static char *load_specs (const char *);
214 static void read_specs (const char *, int);
215 static void set_spec (const char *, const char *);
216 static struct compiler *lookup_compiler (const char *, size_t, const char *);
217 static char *build_search_list (const struct path_prefix *, const char *,
218                                 bool, bool);
219 static void xputenv (const char *);
220 static void putenv_from_prefixes (const struct path_prefix *, const char *,
221                                   bool);
222 static int access_check (const char *, int);
223 static char *find_a_file (const struct path_prefix *, const char *, int, bool);
224 static void add_prefix (struct path_prefix *, const char *, const char *,
225                         int, int, int);
226 static void add_sysrooted_prefix (struct path_prefix *, const char *,
227                                   const char *, int, int, int);
228 static char *skip_whitespace (char *);
229 static void delete_if_ordinary (const char *);
230 static void delete_temp_files (void);
231 static void delete_failure_queue (void);
232 static void clear_failure_queue (void);
233 static int check_live_switch (int, int);
234 static const char *handle_braces (const char *);
235 static inline bool input_suffix_matches (const char *, const char *);
236 static inline bool switch_matches (const char *, const char *, int);
237 static inline void mark_matching_switches (const char *, const char *, int);
238 static inline void process_marked_switches (void);
239 static const char *process_brace_body (const char *, const char *, const char *, int, int);
240 static const struct spec_function *lookup_spec_function (const char *);
241 static const char *eval_spec_function (const char *, const char *);
242 static const char *handle_spec_function (const char *);
243 static char *save_string (const char *, int);
244 static void set_collect_gcc_options (void);
245 static int do_spec_1 (const char *, int, const char *);
246 static int do_spec_2 (const char *);
247 static void do_option_spec (const char *, const char *);
248 static void do_self_spec (const char *);
249 static const char *find_file (const char *);
250 static int is_directory (const char *, bool);
251 static const char *validate_switches (const char *);
252 static void validate_all_switches (void);
253 static inline void validate_switches_from_spec (const char *);
254 static void give_switch (int, int);
255 static int used_arg (const char *, int);
256 static int default_arg (const char *, int);
257 static void set_multilib_dir (void);
258 static void print_multilib_info (void);
259 static void perror_with_name (const char *);
260 static void display_help (void);
261 static void add_preprocessor_option (const char *, int);
262 static void add_assembler_option (const char *, int);
263 static void add_linker_option (const char *, int);
264 static void process_command (unsigned int, struct cl_decoded_option *);
265 static int execute (void);
266 static void alloc_args (void);
267 static void clear_args (void);
268 static void fatal_signal (int);
269 #if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC)
270 static void init_gcc_specs (struct obstack *, const char *, const char *,
271                             const char *);
272 #endif
273 #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
274 static const char *convert_filename (const char *, int, int);
275 #endif
276
277 static const char *getenv_spec_function (int, const char **);
278 static const char *if_exists_spec_function (int, const char **);
279 static const char *if_exists_else_spec_function (int, const char **);
280 static const char *replace_outfile_spec_function (int, const char **);
281 static const char *remove_outfile_spec_function (int, const char **);
282 static const char *version_compare_spec_function (int, const char **);
283 static const char *include_spec_function (int, const char **);
284 static const char *find_file_spec_function (int, const char **);
285 static const char *find_plugindir_spec_function (int, const char **);
286 static const char *print_asm_header_spec_function (int, const char **);
287 static const char *compare_debug_dump_opt_spec_function (int, const char **);
288 static const char *compare_debug_self_opt_spec_function (int, const char **);
289 static const char *compare_debug_auxbase_opt_spec_function (int, const char **);
290 \f
291 /* The Specs Language
292
293 Specs are strings containing lines, each of which (if not blank)
294 is made up of a program name, and arguments separated by spaces.
295 The program name must be exact and start from root, since no path
296 is searched and it is unreliable to depend on the current working directory.
297 Redirection of input or output is not supported; the subprograms must
298 accept filenames saying what files to read and write.
299
300 In addition, the specs can contain %-sequences to substitute variable text
301 or for conditional text.  Here is a table of all defined %-sequences.
302 Note that spaces are not generated automatically around the results of
303 expanding these sequences; therefore, you can concatenate them together
304 or with constant text in a single argument.
305
306  %%     substitute one % into the program name or argument.
307  %i     substitute the name of the input file being processed.
308  %b     substitute the basename of the input file being processed.
309         This is the substring up to (and not including) the last period
310         and not including the directory unless -save-temps was specified
311         to put temporaries in a different location.
312  %B     same as %b, but include the file suffix (text after the last period).
313  %gSUFFIX
314         substitute a file name that has suffix SUFFIX and is chosen
315         once per compilation, and mark the argument a la %d.  To reduce
316         exposure to denial-of-service attacks, the file name is now
317         chosen in a way that is hard to predict even when previously
318         chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
319         might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches
320         the regexp "[.0-9A-Za-z]*%O"; "%O" is treated exactly as if it
321         had been pre-processed.  Previously, %g was simply substituted
322         with a file name chosen once per compilation, without regard
323         to any appended suffix (which was therefore treated just like
324         ordinary text), making such attacks more likely to succeed.
325  %|SUFFIX
326         like %g, but if -pipe is in effect, expands simply to "-".
327  %mSUFFIX
328         like %g, but if -pipe is in effect, expands to nothing.  (We have both
329         %| and %m to accommodate differences between system assemblers; see
330         the AS_NEEDS_DASH_FOR_PIPED_INPUT target macro.)
331  %uSUFFIX
332         like %g, but generates a new temporary file name even if %uSUFFIX
333         was already seen.
334  %USUFFIX
335         substitutes the last file name generated with %uSUFFIX, generating a
336         new one if there is no such last file name.  In the absence of any
337         %uSUFFIX, this is just like %gSUFFIX, except they don't share
338         the same suffix "space", so `%g.s ... %U.s ... %g.s ... %U.s'
339         would involve the generation of two distinct file names, one
340         for each `%g.s' and another for each `%U.s'.  Previously, %U was
341         simply substituted with a file name chosen for the previous %u,
342         without regard to any appended suffix.
343  %jSUFFIX
344         substitutes the name of the HOST_BIT_BUCKET, if any, and if it is
345         writable, and if save-temps is off; otherwise, substitute the name
346         of a temporary file, just like %u.  This temporary file is not
347         meant for communication between processes, but rather as a junk
348         disposal mechanism.
349  %.SUFFIX
350         substitutes .SUFFIX for the suffixes of a matched switch's args when
351         it is subsequently output with %*. SUFFIX is terminated by the next
352         space or %.
353  %d     marks the argument containing or following the %d as a
354         temporary file name, so that that file will be deleted if GCC exits
355         successfully.  Unlike %g, this contributes no text to the argument.
356  %w     marks the argument containing or following the %w as the
357         "output file" of this compilation.  This puts the argument
358         into the sequence of arguments that %o will substitute later.
359  %V     indicates that this compilation produces no "output file".
360  %W{...}
361         like %{...} but mark last argument supplied within
362         as a file to be deleted on failure.
363  %o     substitutes the names of all the output files, with spaces
364         automatically placed around them.  You should write spaces
365         around the %o as well or the results are undefined.
366         %o is for use in the specs for running the linker.
367         Input files whose names have no recognized suffix are not compiled
368         at all, but they are included among the output files, so they will
369         be linked.
370  %O     substitutes the suffix for object files.  Note that this is
371         handled specially when it immediately follows %g, %u, or %U
372         (with or without a suffix argument) because of the need for
373         those to form complete file names.  The handling is such that
374         %O is treated exactly as if it had already been substituted,
375         except that %g, %u, and %U do not currently support additional
376         SUFFIX characters following %O as they would following, for
377         example, `.o'.
378  %I     Substitute any of -iprefix (made from GCC_EXEC_PREFIX), -isysroot
379         (made from TARGET_SYSTEM_ROOT), -isystem (made from COMPILER_PATH
380         and -B options) and -imultilib as necessary.
381  %s     current argument is the name of a library or startup file of some sort.
382         Search for that file in a standard list of directories
383         and substitute the full name found.
384  %eSTR  Print STR as an error message.  STR is terminated by a newline.
385         Use this when inconsistent options are detected.
386  %nSTR  Print STR as a notice.  STR is terminated by a newline.
387  %x{OPTION}     Accumulate an option for %X.
388  %X     Output the accumulated linker options specified by compilations.
389  %Y     Output the accumulated assembler options specified by compilations.
390  %Z     Output the accumulated preprocessor options specified by compilations.
391  %a     process ASM_SPEC as a spec.
392         This allows config.h to specify part of the spec for running as.
393  %A     process ASM_FINAL_SPEC as a spec.  A capital A is actually
394         used here.  This can be used to run a post-processor after the
395         assembler has done its job.
396  %D     Dump out a -L option for each directory in startfile_prefixes.
397         If multilib_dir is set, extra entries are generated with it affixed.
398  %l     process LINK_SPEC as a spec.
399  %L     process LIB_SPEC as a spec.
400  %G     process LIBGCC_SPEC as a spec.
401  %R     Output the concatenation of target_system_root and
402         target_sysroot_suffix.
403  %S     process STARTFILE_SPEC as a spec.  A capital S is actually used here.
404  %E     process ENDFILE_SPEC as a spec.  A capital E is actually used here.
405  %C     process CPP_SPEC as a spec.
406  %1     process CC1_SPEC as a spec.
407  %2     process CC1PLUS_SPEC as a spec.
408  %*     substitute the variable part of a matched option.  (See below.)
409         Note that each comma in the substituted string is replaced by
410         a single space.
411  %<S    remove all occurrences of -S from the command line.
412         Note - this command is position dependent.  % commands in the
413         spec string before this one will see -S, % commands in the
414         spec string after this one will not.
415  %<S*   remove all occurrences of all switches beginning with -S from the
416         command line.
417  %:function(args)
418         Call the named function FUNCTION, passing it ARGS.  ARGS is
419         first processed as a nested spec string, then split into an
420         argument vector in the usual fashion.  The function returns
421         a string which is processed as if it had appeared literally
422         as part of the current spec.
423  %{S}   substitutes the -S switch, if that switch was given to GCC.
424         If that switch was not specified, this substitutes nothing.
425         Here S is a metasyntactic variable.
426  %{S*}  substitutes all the switches specified to GCC whose names start
427         with -S.  This is used for -o, -I, etc; switches that take
428         arguments.  GCC considers `-o foo' as being one switch whose
429         name starts with `o'.  %{o*} would substitute this text,
430         including the space; thus, two arguments would be generated.
431  %{S*&T*} likewise, but preserve order of S and T options (the order
432         of S and T in the spec is not significant).  Can be any number
433         of ampersand-separated variables; for each the wild card is
434         optional.  Useful for CPP as %{D*&U*&A*}.
435
436  %{S:X}   substitutes X, if the -S switch was given to GCC.
437  %{!S:X}  substitutes X, if the -S switch was NOT given to GCC.
438  %{S*:X}  substitutes X if one or more switches whose names start
439           with -S was given to GCC.  Normally X is substituted only
440           once, no matter how many such switches appeared.  However,
441           if %* appears somewhere in X, then X will be substituted
442           once for each matching switch, with the %* replaced by the
443           part of that switch that matched the '*'.
444  %{.S:X}  substitutes X, if processing a file with suffix S.
445  %{!.S:X} substitutes X, if NOT processing a file with suffix S.
446  %{,S:X}  substitutes X, if processing a file which will use spec S.
447  %{!,S:X} substitutes X, if NOT processing a file which will use spec S.
448
449  %{S|T:X} substitutes X if either -S or -T was given to GCC.  This may be
450           combined with '!', '.', ',', and '*' as above binding stronger
451           than the OR.
452           If %* appears in X, all of the alternatives must be starred, and
453           only the first matching alternative is substituted.
454  %{S:X;   if S was given to GCC, substitutes X;
455    T:Y;   else if T was given to GCC, substitutes Y;
456     :D}   else substitutes D.  There can be as many clauses as you need.
457           This may be combined with '.', '!', ',', '|', and '*' as above.
458
459  %(Spec) processes a specification defined in a specs file as *Spec:
460  %[Spec] as above, but put __ around -D arguments
461
462 The conditional text X in a %{S:X} or similar construct may contain
463 other nested % constructs or spaces, or even newlines.  They are
464 processed as usual, as described above.  Trailing white space in X is
465 ignored.  White space may also appear anywhere on the left side of the
466 colon in these constructs, except between . or * and the corresponding
467 word.
468
469 The -O, -f, -m, and -W switches are handled specifically in these
470 constructs.  If another value of -O or the negated form of a -f, -m, or
471 -W switch is found later in the command line, the earlier switch
472 value is ignored, except with {S*} where S is just one letter; this
473 passes all matching options.
474
475 The character | at the beginning of the predicate text is used to indicate
476 that a command should be piped to the following command, but only if -pipe
477 is specified.
478
479 Note that it is built into GCC which switches take arguments and which
480 do not.  You might think it would be useful to generalize this to
481 allow each compiler's spec to say which switches take arguments.  But
482 this cannot be done in a consistent fashion.  GCC cannot even decide
483 which input files have been specified without knowing which switches
484 take arguments, and it must know which input files to compile in order
485 to tell which compilers to run.
486
487 GCC also knows implicitly that arguments starting in `-l' are to be
488 treated as compiler output files, and passed to the linker in their
489 proper position among the other output files.  */
490 \f
491 /* Define the macros used for specs %a, %l, %L, %S, %C, %1.  */
492
493 /* config.h can define ASM_SPEC to provide extra args to the assembler
494    or extra switch-translations.  */
495 #ifndef ASM_SPEC
496 #define ASM_SPEC ""
497 #endif
498
499 /* config.h can define ASM_FINAL_SPEC to run a post processor after
500    the assembler has run.  */
501 #ifndef ASM_FINAL_SPEC
502 #define ASM_FINAL_SPEC ""
503 #endif
504
505 /* config.h can define CPP_SPEC to provide extra args to the C preprocessor
506    or extra switch-translations.  */
507 #ifndef CPP_SPEC
508 #define CPP_SPEC ""
509 #endif
510
511 /* config.h can define CC1_SPEC to provide extra args to cc1 and cc1plus
512    or extra switch-translations.  */
513 #ifndef CC1_SPEC
514 #define CC1_SPEC ""
515 #endif
516
517 /* config.h can define CC1PLUS_SPEC to provide extra args to cc1plus
518    or extra switch-translations.  */
519 #ifndef CC1PLUS_SPEC
520 #define CC1PLUS_SPEC ""
521 #endif
522
523 /* config.h can define LINK_SPEC to provide extra args to the linker
524    or extra switch-translations.  */
525 #ifndef LINK_SPEC
526 #define LINK_SPEC ""
527 #endif
528
529 /* config.h can define LIB_SPEC to override the default libraries.  */
530 #ifndef LIB_SPEC
531 #define LIB_SPEC "%{!shared:%{g*:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}"
532 #endif
533
534 /* mudflap specs */
535 #ifndef MFWRAP_SPEC
536 /* XXX: valid only for GNU ld */
537 /* XXX: should exactly match hooks provided by libmudflap.a */
538 #define MFWRAP_SPEC " %{static: %{fmudflap|fmudflapth: \
539  --wrap=malloc --wrap=free --wrap=calloc --wrap=realloc\
540  --wrap=mmap --wrap=munmap --wrap=alloca\
541 } %{fmudflapth: --wrap=pthread_create\
542 }} %{fmudflap|fmudflapth: --wrap=main}"
543 #endif
544 #ifndef MFLIB_SPEC
545 #define MFLIB_SPEC "%{fmudflap|fmudflapth: -export-dynamic}"
546 #endif
547
548 /* When using -fsplit-stack we need to wrap pthread_create, in order
549    to initialize the stack guard.  We always use wrapping, rather than
550    shared library ordering, and we keep the wrapper function in
551    libgcc.  This is not yet a real spec, though it could become one;
552    it is currently just stuffed into LINK_SPEC.  FIXME: This wrapping
553    only works with GNU ld and gold.  FIXME: This is incompatible with
554    -fmudflap when linking statically, which wants to do its own
555    wrapping.  */
556 #define STACK_SPLIT_SPEC " %{fsplit-stack: --wrap=pthread_create}"
557
558 /* config.h can define LIBGCC_SPEC to override how and when libgcc.a is
559    included.  */
560 #ifndef LIBGCC_SPEC
561 #if defined(REAL_LIBGCC_SPEC)
562 #define LIBGCC_SPEC REAL_LIBGCC_SPEC
563 #elif defined(LINK_LIBGCC_SPECIAL_1)
564 /* Have gcc do the search for libgcc.a.  */
565 #define LIBGCC_SPEC "libgcc.a%s"
566 #else
567 #define LIBGCC_SPEC "-lgcc"
568 #endif
569 #endif
570
571 /* config.h can define STARTFILE_SPEC to override the default crt0 files.  */
572 #ifndef STARTFILE_SPEC
573 #define STARTFILE_SPEC  \
574   "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}}"
575 #endif
576
577 /* config.h can define ENDFILE_SPEC to override the default crtn files.  */
578 #ifndef ENDFILE_SPEC
579 #define ENDFILE_SPEC ""
580 #endif
581
582 #ifndef LINKER_NAME
583 #define LINKER_NAME "collect2"
584 #endif
585
586 #ifdef HAVE_AS_DEBUG_PREFIX_MAP
587 #define ASM_MAP " %{fdebug-prefix-map=*:--debug-prefix-map %*}"
588 #else
589 #define ASM_MAP ""
590 #endif
591
592 /* Define ASM_DEBUG_SPEC to be a spec suitable for translating '-g'
593    to the assembler.  */
594 #ifndef ASM_DEBUG_SPEC
595 # if defined(DBX_DEBUGGING_INFO) && defined(DWARF2_DEBUGGING_INFO) \
596      && defined(HAVE_AS_GDWARF2_DEBUG_FLAG) && defined(HAVE_AS_GSTABS_DEBUG_FLAG)
597 #  define ASM_DEBUG_SPEC                                                \
598       (PREFERRED_DEBUGGING_TYPE == DBX_DEBUG                            \
599        ? "%{!g0:%{gdwarf-2*:--gdwarf2}%{!gdwarf-2*:%{g*:--gstabs}}}" ASM_MAP    \
600        : "%{!g0:%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}}" ASM_MAP)
601 # else
602 #  if defined(DBX_DEBUGGING_INFO) && defined(HAVE_AS_GSTABS_DEBUG_FLAG)
603 #   define ASM_DEBUG_SPEC "%{g*:%{!g0:--gstabs}}" ASM_MAP
604 #  endif
605 #  if defined(DWARF2_DEBUGGING_INFO) && defined(HAVE_AS_GDWARF2_DEBUG_FLAG)
606 #   define ASM_DEBUG_SPEC "%{g*:%{!g0:--gdwarf2}}" ASM_MAP
607 #  endif
608 # endif
609 #endif
610 #ifndef ASM_DEBUG_SPEC
611 # define ASM_DEBUG_SPEC ""
612 #endif
613
614 /* Here is the spec for running the linker, after compiling all files.  */
615
616 /* This is overridable by the target in case they need to specify the
617    -lgcc and -lc order specially, yet not require them to override all
618    of LINK_COMMAND_SPEC.  */
619 #ifndef LINK_GCC_C_SEQUENCE_SPEC
620 #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G"
621 #endif
622
623 #ifndef LINK_SSP_SPEC
624 #ifdef TARGET_LIBC_PROVIDES_SSP
625 #define LINK_SSP_SPEC "%{fstack-protector:}"
626 #else
627 #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all:-lssp_nonshared -lssp}"
628 #endif
629 #endif
630
631 #ifndef LINK_PIE_SPEC
632 #ifdef HAVE_LD_PIE
633 #define LINK_PIE_SPEC "%{pie:-pie} "
634 #else
635 #define LINK_PIE_SPEC "%{pie:} "
636 #endif
637 #endif
638
639 #ifndef LINK_BUILDID_SPEC
640 # if defined(HAVE_LD_BUILDID) && defined(ENABLE_LD_BUILDID)
641 #  define LINK_BUILDID_SPEC "%{!r:--build-id} "
642 # endif
643 #endif
644
645
646 /* -u* was put back because both BSD and SysV seem to support it.  */
647 /* %{static:} simply prevents an error message if the target machine
648    doesn't handle -static.  */
649 /* We want %{T*} after %{L*} and %D so that it can be used to specify linker
650    scripts which exist in user specified directories, or in standard
651    directories.  */
652 /* We pass any -flto and -fwhopr flags on to the linker, which is expected
653    to understand them.  In practice, this means it had better be collect2.  */
654 #ifndef LINK_COMMAND_SPEC
655 #define LINK_COMMAND_SPEC "\
656 %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
657     %(linker) \
658     %{fuse-linker-plugin: \
659     -plugin %(linker_plugin_file) \
660     -plugin-opt=%(lto_wrapper) \
661     -plugin-opt=-fresolution=%u.res \
662     %{static|static-libgcc:-plugin-opt=-pass-through=%(lto_libgcc)}     \
663     %{static:-plugin-opt=-pass-through=-lc}     \
664     } \
665     %{flto:%<fcompare-debug*} %{fwhopr*:%<fcompare-debug*} \
666     %{flto} %{fwhopr*} %l " LINK_PIE_SPEC \
667    "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
668     %{s} %{t} %{u*} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
669     %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
670     %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\
671     %(mflib) " STACK_SPLIT_SPEC "\
672     %{fprofile-arcs|fprofile-generate*|coverage:-lgcov}\
673     %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\
674     %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}"
675 #endif
676
677 #ifndef LINK_LIBGCC_SPEC
678 /* Generate -L options for startfile prefix list.  */
679 # define LINK_LIBGCC_SPEC "%D"
680 #endif
681
682 #ifndef STARTFILE_PREFIX_SPEC
683 # define STARTFILE_PREFIX_SPEC ""
684 #endif
685
686 #ifndef SYSROOT_SPEC
687 # define SYSROOT_SPEC "--sysroot=%R"
688 #endif
689
690 #ifndef SYSROOT_SUFFIX_SPEC
691 # define SYSROOT_SUFFIX_SPEC ""
692 #endif
693
694 #ifndef SYSROOT_HEADERS_SUFFIX_SPEC
695 # define SYSROOT_HEADERS_SUFFIX_SPEC ""
696 #endif
697
698 static const char *asm_debug;
699 static const char *cpp_spec = CPP_SPEC;
700 static const char *cc1_spec = CC1_SPEC;
701 static const char *cc1plus_spec = CC1PLUS_SPEC;
702 static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC;
703 static const char *link_ssp_spec = LINK_SSP_SPEC;
704 static const char *asm_spec = ASM_SPEC;
705 static const char *asm_final_spec = ASM_FINAL_SPEC;
706 static const char *link_spec = LINK_SPEC;
707 static const char *lib_spec = LIB_SPEC;
708 static const char *mfwrap_spec = MFWRAP_SPEC;
709 static const char *mflib_spec = MFLIB_SPEC;
710 static const char *link_gomp_spec = "";
711 static const char *libgcc_spec = LIBGCC_SPEC;
712 static const char *endfile_spec = ENDFILE_SPEC;
713 static const char *startfile_spec = STARTFILE_SPEC;
714 static const char *linker_name_spec = LINKER_NAME;
715 static const char *linker_plugin_file_spec = "";
716 static const char *lto_wrapper_spec = "";
717 static const char *lto_gcc_spec = "";
718 static const char *lto_libgcc_spec = "";
719 static const char *link_command_spec = LINK_COMMAND_SPEC;
720 static const char *link_libgcc_spec = LINK_LIBGCC_SPEC;
721 static const char *startfile_prefix_spec = STARTFILE_PREFIX_SPEC;
722 static const char *sysroot_spec = SYSROOT_SPEC;
723 static const char *sysroot_suffix_spec = SYSROOT_SUFFIX_SPEC;
724 static const char *sysroot_hdrs_suffix_spec = SYSROOT_HEADERS_SUFFIX_SPEC;
725
726 /* Standard options to cpp, cc1, and as, to reduce duplication in specs.
727    There should be no need to override these in target dependent files,
728    but we need to copy them to the specs file so that newer versions
729    of the GCC driver can correctly drive older tool chains with the
730    appropriate -B options.  */
731
732 /* When cpplib handles traditional preprocessing, get rid of this, and
733    call cc1 (or cc1obj in objc/lang-specs.h) from the main specs so
734    that we default the front end language better.  */
735 static const char *trad_capable_cpp =
736 "cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}";
737
738 /* We don't wrap .d files in %W{} since a missing .d file, and
739    therefore no dependency entry, confuses make into thinking a .o
740    file that happens to exist is up-to-date.  */
741 static const char *cpp_unique_options =
742 "%{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*&F*} %{P} %I\
743  %{MD:-MD %{!o:%b.d}%{o*:%.d%*}}\
744  %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}}\
745  %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
746  %{!E:%{!M:%{!MM:%{!MT:%{!MQ:%{MD|MMD:%{o*:-MQ %*}}}}}}}\
747  %{remap} %{g3|ggdb3|gstabs3|gcoff3|gxcoff3|gvms3:-dD}\
748  %{!iplugindir*:%{fplugin*:%:find-plugindir()}}\
749  %{H} %C %{D*&U*&A*} %{i*} %Z %i\
750  %{fmudflap:-D_MUDFLAP -include mf-runtime.h}\
751  %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h}\
752  %{E|M|MM:%W{o*}}";
753
754 /* This contains cpp options which are common with cc1_options and are passed
755    only when preprocessing only to avoid duplication.  We pass the cc1 spec
756    options to the preprocessor so that it the cc1 spec may manipulate
757    options used to set target flags.  Those special target flags settings may
758    in turn cause preprocessor symbols to be defined specially.  */
759 static const char *cpp_options =
760 "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
761  %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\
762  %{undef} %{save-temps*:-fpch-preprocess}";
763
764 /* This contains cpp options which are not passed when the preprocessor
765    output will be used by another program.  */
766 static const char *cpp_debug_options = "%{d*}";
767
768 /* NB: This is shared amongst all front-ends, except for Ada.  */
769 static const char *cc1_options =
770 "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
771  %{!iplugindir*:%{fplugin*:%:find-plugindir()}}\
772  %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{aux-info*}\
773  %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} \
774  %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \
775  %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
776  %{v:-version} %{pg:-p} %{p} %{f*} %{undef}\
777  %{Qn:-fno-ident} %{-help:--help}\
778  %{-target-help:--target-help}\
779  %{-version:--version}\
780  %{-help=*:--help=%*}\
781  %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\
782  %{fsyntax-only:-o %j} %{-param*}\
783  %{fmudflap|fmudflapth:-fno-builtin -fno-merge-constants}\
784  %{coverage:-fprofile-arcs -ftest-coverage}";
785
786 static const char *asm_options =
787 "%{--target-help:%:print-asm-header()} "
788 #if HAVE_GNU_AS
789 /* If GNU AS is used, then convert -w (no warnings), -I, and -v
790    to the assembler equivalents.  */
791 "%{v} %{w:-W} %{I*} "
792 #endif
793 "%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}";
794
795 static const char *invoke_as =
796 #ifdef AS_NEEDS_DASH_FOR_PIPED_INPUT
797 "%{!fwpa:\
798    %{fcompare-debug=*|fdump-final-insns=*:%:compare-debug-dump-opt()}\
799    %{!S:-o %|.s |\n as %(asm_options) %|.s %A }\
800   }";
801 #else
802 "%{!fwpa:\
803    %{fcompare-debug=*|fdump-final-insns=*:%:compare-debug-dump-opt()}\
804    %{!S:-o %|.s |\n as %(asm_options) %m.s %A }\
805   }";
806 #endif
807
808 /* Some compilers have limits on line lengths, and the multilib_select
809    and/or multilib_matches strings can be very long, so we build them at
810    run time.  */
811 static struct obstack multilib_obstack;
812 static const char *multilib_select;
813 static const char *multilib_matches;
814 static const char *multilib_defaults;
815 static const char *multilib_exclusions;
816
817 /* Check whether a particular argument is a default argument.  */
818
819 #ifndef MULTILIB_DEFAULTS
820 #define MULTILIB_DEFAULTS { "" }
821 #endif
822
823 static const char *const multilib_defaults_raw[] = MULTILIB_DEFAULTS;
824
825 #ifndef DRIVER_SELF_SPECS
826 #define DRIVER_SELF_SPECS ""
827 #endif
828
829 /* Adding -fopenmp should imply pthreads.  This is particularly important
830    for targets that use different start files and suchlike.  */
831 #ifndef GOMP_SELF_SPECS
832 #define GOMP_SELF_SPECS "%{fopenmp|ftree-parallelize-loops=*: -pthread}"
833 #endif
834
835 static const char *const driver_self_specs[] = {
836   "%{fdump-final-insns:-fdump-final-insns=.} %<fdump-final-insns",
837   DRIVER_SELF_SPECS, CONFIGURE_SPECS, GOMP_SELF_SPECS
838 };
839
840 #ifndef OPTION_DEFAULT_SPECS
841 #define OPTION_DEFAULT_SPECS { "", "" }
842 #endif
843
844 struct default_spec
845 {
846   const char *name;
847   const char *spec;
848 };
849
850 static const struct default_spec
851   option_default_specs[] = { OPTION_DEFAULT_SPECS };
852
853 struct user_specs
854 {
855   struct user_specs *next;
856   const char *filename;
857 };
858
859 static struct user_specs *user_specs_head, *user_specs_tail;
860
861 \f
862 /* Record the mapping from file suffixes for compilation specs.  */
863
864 struct compiler
865 {
866   const char *suffix;           /* Use this compiler for input files
867                                    whose names end in this suffix.  */
868
869   const char *spec;             /* To use this compiler, run this spec.  */
870
871   const char *cpp_spec;         /* If non-NULL, substitute this spec
872                                    for `%C', rather than the usual
873                                    cpp_spec.  */
874   const int combinable;          /* If nonzero, compiler can deal with
875                                     multiple source files at once (IMA).  */
876   const int needs_preprocessing; /* If nonzero, source files need to
877                                     be run through a preprocessor.  */
878 };
879
880 /* Pointer to a vector of `struct compiler' that gives the spec for
881    compiling a file, based on its suffix.
882    A file that does not end in any of these suffixes will be passed
883    unchanged to the loader and nothing else will be done to it.
884
885    An entry containing two 0s is used to terminate the vector.
886
887    If multiple entries match a file, the last matching one is used.  */
888
889 static struct compiler *compilers;
890
891 /* Number of entries in `compilers', not counting the null terminator.  */
892
893 static int n_compilers;
894
895 /* The default list of file name suffixes and their compilation specs.  */
896
897 static const struct compiler default_compilers[] =
898 {
899   /* Add lists of suffixes of known languages here.  If those languages
900      were not present when we built the driver, we will hit these copies
901      and be given a more meaningful error than "file not used since
902      linking is not done".  */
903   {".m",  "#Objective-C", 0, 0, 0}, {".mi",  "#Objective-C", 0, 0, 0},
904   {".mm", "#Objective-C++", 0, 0, 0}, {".M", "#Objective-C++", 0, 0, 0},
905   {".mii", "#Objective-C++", 0, 0, 0},
906   {".cc", "#C++", 0, 0, 0}, {".cxx", "#C++", 0, 0, 0},
907   {".cpp", "#C++", 0, 0, 0}, {".cp", "#C++", 0, 0, 0},
908   {".c++", "#C++", 0, 0, 0}, {".C", "#C++", 0, 0, 0},
909   {".CPP", "#C++", 0, 0, 0}, {".ii", "#C++", 0, 0, 0},
910   {".ads", "#Ada", 0, 0, 0}, {".adb", "#Ada", 0, 0, 0},
911   {".f", "#Fortran", 0, 0, 0}, {".F", "#Fortran", 0, 0, 0},
912   {".for", "#Fortran", 0, 0, 0}, {".FOR", "#Fortran", 0, 0, 0},
913   {".ftn", "#Fortran", 0, 0, 0}, {".FTN", "#Fortran", 0, 0, 0},
914   {".fpp", "#Fortran", 0, 0, 0}, {".FPP", "#Fortran", 0, 0, 0},
915   {".f90", "#Fortran", 0, 0, 0}, {".F90", "#Fortran", 0, 0, 0},
916   {".f95", "#Fortran", 0, 0, 0}, {".F95", "#Fortran", 0, 0, 0},
917   {".f03", "#Fortran", 0, 0, 0}, {".F03", "#Fortran", 0, 0, 0},
918   {".f08", "#Fortran", 0, 0, 0}, {".F08", "#Fortran", 0, 0, 0},
919   {".r", "#Ratfor", 0, 0, 0},
920   {".p", "#Pascal", 0, 0, 0}, {".pas", "#Pascal", 0, 0, 0},
921   {".java", "#Java", 0, 0, 0}, {".class", "#Java", 0, 0, 0},
922   {".zip", "#Java", 0, 0, 0}, {".jar", "#Java", 0, 0, 0},
923   /* Next come the entries for C.  */
924   {".c", "@c", 0, 0, 1},
925   {"@c",
926    /* cc1 has an integrated ISO C preprocessor.  We should invoke the
927       external preprocessor if -save-temps is given.  */
928      "%{E|M|MM:%(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)}\
929       %{!E:%{!M:%{!MM:\
930           %{traditional|ftraditional:\
931 %eGNU C no longer supports -traditional without -E}\
932       %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
933           %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\
934             cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
935           %(cc1_options)}\
936       %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
937           cc1 %(cpp_unique_options) %(cc1_options)}}}\
938       %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 1},
939   {"-",
940    "%{!E:%e-E or -x required when input is from standard input}\
941     %(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)", 0, 0, 0},
942   {".h", "@c-header", 0, 0, 0},
943   {"@c-header",
944    /* cc1 has an integrated ISO C preprocessor.  We should invoke the
945       external preprocessor if -save-temps is given.  */
946      "%{E|M|MM:%(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)}\
947       %{!E:%{!M:%{!MM:\
948           %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
949                 %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\
950                     cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
951                         %(cc1_options)\
952                         %{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
953                         %W{o*:--output-pch=%*}}%V}\
954           %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
955                 cc1 %(cpp_unique_options) %(cc1_options)\
956                     %{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
957                     %W{o*:--output-pch=%*}}%V}}}}}}", 0, 0, 0},
958   {".i", "@cpp-output", 0, 0, 0},
959   {"@cpp-output",
960    "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 1, 0},
961   {".s", "@assembler", 0, 1, 0},
962   {"@assembler",
963    "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 1, 0},
964   {".sx", "@assembler-with-cpp", 0, 1, 0},
965   {".S", "@assembler-with-cpp", 0, 1, 0},
966   {"@assembler-with-cpp",
967 #ifdef AS_NEEDS_DASH_FOR_PIPED_INPUT
968    "%(trad_capable_cpp) -lang-asm %(cpp_options) -fno-directives-only\
969       %{E|M|MM:%(cpp_debug_options)}\
970       %{!M:%{!MM:%{!E:%{!S:-o %|.s |\n\
971        as %(asm_debug) %(asm_options) %|.s %A }}}}"
972 #else
973    "%(trad_capable_cpp) -lang-asm %(cpp_options) -fno-directives-only\
974       %{E|M|MM:%(cpp_debug_options)}\
975       %{!M:%{!MM:%{!E:%{!S:-o %|.s |\n\
976        as %(asm_debug) %(asm_options) %m.s %A }}}}"
977 #endif
978    , 0, 1, 0},
979
980 #include "specs.h"
981   /* Mark end of table.  */
982   {0, 0, 0, 0, 0}
983 };
984
985 /* Number of elements in default_compilers, not counting the terminator.  */
986
987 static const int n_default_compilers = ARRAY_SIZE (default_compilers) - 1;
988
989 /* A vector of options to give to the linker.
990    These options are accumulated by %x,
991    and substituted into the linker command with %X.  */
992 static int n_linker_options;
993 static char **linker_options;
994
995 /* A vector of options to give to the assembler.
996    These options are accumulated by -Wa,
997    and substituted into the assembler command with %Y.  */
998 static int n_assembler_options;
999 static char **assembler_options;
1000
1001 /* A vector of options to give to the preprocessor.
1002    These options are accumulated by -Wp,
1003    and substituted into the preprocessor command with %Z.  */
1004 static int n_preprocessor_options;
1005 static char **preprocessor_options;
1006 \f
1007 static char *
1008 skip_whitespace (char *p)
1009 {
1010   while (1)
1011     {
1012       /* A fully-blank line is a delimiter in the SPEC file and shouldn't
1013          be considered whitespace.  */
1014       if (p[0] == '\n' && p[1] == '\n' && p[2] == '\n')
1015         return p + 1;
1016       else if (*p == '\n' || *p == ' ' || *p == '\t')
1017         p++;
1018       else if (*p == '#')
1019         {
1020           while (*p != '\n')
1021             p++;
1022           p++;
1023         }
1024       else
1025         break;
1026     }
1027
1028   return p;
1029 }
1030 /* Structures to keep track of prefixes to try when looking for files.  */
1031
1032 struct prefix_list
1033 {
1034   const char *prefix;         /* String to prepend to the path.  */
1035   struct prefix_list *next;   /* Next in linked list.  */
1036   int require_machine_suffix; /* Don't use without machine_suffix.  */
1037   /* 2 means try both machine_suffix and just_machine_suffix.  */
1038   int priority;               /* Sort key - priority within list.  */
1039   int os_multilib;            /* 1 if OS multilib scheme should be used,
1040                                  0 for GCC multilib scheme.  */
1041 };
1042
1043 struct path_prefix
1044 {
1045   struct prefix_list *plist;  /* List of prefixes to try */
1046   int max_len;                /* Max length of a prefix in PLIST */
1047   const char *name;           /* Name of this list (used in config stuff) */
1048 };
1049
1050 /* List of prefixes to try when looking for executables.  */
1051
1052 static struct path_prefix exec_prefixes = { 0, 0, "exec" };
1053
1054 /* List of prefixes to try when looking for startup (crt0) files.  */
1055
1056 static struct path_prefix startfile_prefixes = { 0, 0, "startfile" };
1057
1058 /* List of prefixes to try when looking for include files.  */
1059
1060 static struct path_prefix include_prefixes = { 0, 0, "include" };
1061
1062 /* Suffix to attach to directories searched for commands.
1063    This looks like `MACHINE/VERSION/'.  */
1064
1065 static const char *machine_suffix = 0;
1066
1067 /* Suffix to attach to directories searched for commands.
1068    This is just `MACHINE/'.  */
1069
1070 static const char *just_machine_suffix = 0;
1071
1072 /* Adjusted value of GCC_EXEC_PREFIX envvar.  */
1073
1074 static const char *gcc_exec_prefix;
1075
1076 /* Adjusted value of standard_libexec_prefix.  */
1077
1078 static const char *gcc_libexec_prefix;
1079
1080 /* Default prefixes to attach to command names.  */
1081
1082 #ifndef STANDARD_STARTFILE_PREFIX_1
1083 #define STANDARD_STARTFILE_PREFIX_1 "/lib/"
1084 #endif
1085 #ifndef STANDARD_STARTFILE_PREFIX_2
1086 #define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/"
1087 #endif
1088
1089 #ifdef CROSS_DIRECTORY_STRUCTURE  /* Don't use these prefixes for a cross compiler.  */
1090 #undef MD_EXEC_PREFIX
1091 #undef MD_STARTFILE_PREFIX
1092 #undef MD_STARTFILE_PREFIX_1
1093 #endif
1094
1095 /* If no prefixes defined, use the null string, which will disable them.  */
1096 #ifndef MD_EXEC_PREFIX
1097 #define MD_EXEC_PREFIX ""
1098 #endif
1099 #ifndef MD_STARTFILE_PREFIX
1100 #define MD_STARTFILE_PREFIX ""
1101 #endif
1102 #ifndef MD_STARTFILE_PREFIX_1
1103 #define MD_STARTFILE_PREFIX_1 ""
1104 #endif
1105
1106 /* These directories are locations set at configure-time based on the
1107    --prefix option provided to configure.  Their initializers are
1108    defined in Makefile.in.  These paths are not *directly* used when
1109    gcc_exec_prefix is set because, in that case, we know where the
1110    compiler has been installed, and use paths relative to that
1111    location instead.  */
1112 static const char *const standard_exec_prefix = STANDARD_EXEC_PREFIX;
1113 static const char *const standard_libexec_prefix = STANDARD_LIBEXEC_PREFIX;
1114 static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX;
1115 static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
1116
1117 /* For native compilers, these are well-known paths containing
1118    components that may be provided by the system.  For cross
1119    compilers, these paths are not used.  */
1120 static const char *md_exec_prefix = MD_EXEC_PREFIX;
1121 static const char *md_startfile_prefix = MD_STARTFILE_PREFIX;
1122 static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
1123 static const char *const standard_startfile_prefix_1
1124   = STANDARD_STARTFILE_PREFIX_1;
1125 static const char *const standard_startfile_prefix_2
1126   = STANDARD_STARTFILE_PREFIX_2;
1127
1128 /* A relative path to be used in finding the location of tools
1129    relative to the driver.  */
1130 static const char *const tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
1131
1132 /* Subdirectory to use for locating libraries.  Set by
1133    set_multilib_dir based on the compilation options.  */
1134
1135 static const char *multilib_dir;
1136
1137 /* Subdirectory to use for locating libraries in OS conventions.  Set by
1138    set_multilib_dir based on the compilation options.  */
1139
1140 static const char *multilib_os_dir;
1141 \f
1142 /* Structure to keep track of the specs that have been defined so far.
1143    These are accessed using %(specname) or %[specname] in a compiler
1144    or link spec.  */
1145
1146 struct spec_list
1147 {
1148                                 /* The following 2 fields must be first */
1149                                 /* to allow EXTRA_SPECS to be initialized */
1150   const char *name;             /* name of the spec.  */
1151   const char *ptr;              /* available ptr if no static pointer */
1152
1153                                 /* The following fields are not initialized */
1154                                 /* by EXTRA_SPECS */
1155   const char **ptr_spec;        /* pointer to the spec itself.  */
1156   struct spec_list *next;       /* Next spec in linked list.  */
1157   int name_len;                 /* length of the name */
1158   int alloc_p;                  /* whether string was allocated */
1159 };
1160
1161 #define INIT_STATIC_SPEC(NAME,PTR) \
1162 { NAME, NULL, PTR, (struct spec_list *) 0, sizeof (NAME) - 1, 0 }
1163
1164 /* List of statically defined specs.  */
1165 static struct spec_list static_specs[] =
1166 {
1167   INIT_STATIC_SPEC ("asm",                      &asm_spec),
1168   INIT_STATIC_SPEC ("asm_debug",                &asm_debug),
1169   INIT_STATIC_SPEC ("asm_final",                &asm_final_spec),
1170   INIT_STATIC_SPEC ("asm_options",              &asm_options),
1171   INIT_STATIC_SPEC ("invoke_as",                &invoke_as),
1172   INIT_STATIC_SPEC ("cpp",                      &cpp_spec),
1173   INIT_STATIC_SPEC ("cpp_options",              &cpp_options),
1174   INIT_STATIC_SPEC ("cpp_debug_options",        &cpp_debug_options),
1175   INIT_STATIC_SPEC ("cpp_unique_options",       &cpp_unique_options),
1176   INIT_STATIC_SPEC ("trad_capable_cpp",         &trad_capable_cpp),
1177   INIT_STATIC_SPEC ("cc1",                      &cc1_spec),
1178   INIT_STATIC_SPEC ("cc1_options",              &cc1_options),
1179   INIT_STATIC_SPEC ("cc1plus",                  &cc1plus_spec),
1180   INIT_STATIC_SPEC ("link_gcc_c_sequence",      &link_gcc_c_sequence_spec),
1181   INIT_STATIC_SPEC ("link_ssp",                 &link_ssp_spec),
1182   INIT_STATIC_SPEC ("endfile",                  &endfile_spec),
1183   INIT_STATIC_SPEC ("link",                     &link_spec),
1184   INIT_STATIC_SPEC ("lib",                      &lib_spec),
1185   INIT_STATIC_SPEC ("mfwrap",                   &mfwrap_spec),
1186   INIT_STATIC_SPEC ("mflib",                    &mflib_spec),
1187   INIT_STATIC_SPEC ("link_gomp",                &link_gomp_spec),
1188   INIT_STATIC_SPEC ("libgcc",                   &libgcc_spec),
1189   INIT_STATIC_SPEC ("startfile",                &startfile_spec),
1190   INIT_STATIC_SPEC ("cross_compile",            &cross_compile),
1191   INIT_STATIC_SPEC ("version",                  &compiler_version),
1192   INIT_STATIC_SPEC ("multilib",                 &multilib_select),
1193   INIT_STATIC_SPEC ("multilib_defaults",        &multilib_defaults),
1194   INIT_STATIC_SPEC ("multilib_extra",           &multilib_extra),
1195   INIT_STATIC_SPEC ("multilib_matches",         &multilib_matches),
1196   INIT_STATIC_SPEC ("multilib_exclusions",      &multilib_exclusions),
1197   INIT_STATIC_SPEC ("multilib_options",         &multilib_options),
1198   INIT_STATIC_SPEC ("linker",                   &linker_name_spec),
1199   INIT_STATIC_SPEC ("linker_plugin_file",       &linker_plugin_file_spec),
1200   INIT_STATIC_SPEC ("lto_wrapper",              &lto_wrapper_spec),
1201   INIT_STATIC_SPEC ("lto_gcc",                  &lto_gcc_spec),
1202   INIT_STATIC_SPEC ("lto_libgcc",               &lto_libgcc_spec),
1203   INIT_STATIC_SPEC ("link_libgcc",              &link_libgcc_spec),
1204   INIT_STATIC_SPEC ("md_exec_prefix",           &md_exec_prefix),
1205   INIT_STATIC_SPEC ("md_startfile_prefix",      &md_startfile_prefix),
1206   INIT_STATIC_SPEC ("md_startfile_prefix_1",    &md_startfile_prefix_1),
1207   INIT_STATIC_SPEC ("startfile_prefix_spec",    &startfile_prefix_spec),
1208   INIT_STATIC_SPEC ("sysroot_spec",             &sysroot_spec),
1209   INIT_STATIC_SPEC ("sysroot_suffix_spec",      &sysroot_suffix_spec),
1210   INIT_STATIC_SPEC ("sysroot_hdrs_suffix_spec", &sysroot_hdrs_suffix_spec),
1211 };
1212
1213 #ifdef EXTRA_SPECS              /* additional specs needed */
1214 /* Structure to keep track of just the first two args of a spec_list.
1215    That is all that the EXTRA_SPECS macro gives us.  */
1216 struct spec_list_1
1217 {
1218   const char *const name;
1219   const char *const ptr;
1220 };
1221
1222 static const struct spec_list_1 extra_specs_1[] = { EXTRA_SPECS };
1223 static struct spec_list *extra_specs = (struct spec_list *) 0;
1224 #endif
1225
1226 /* List of dynamically allocates specs that have been defined so far.  */
1227
1228 static struct spec_list *specs = (struct spec_list *) 0;
1229 \f
1230 /* List of static spec functions.  */
1231
1232 static const struct spec_function static_spec_functions[] =
1233 {
1234   { "getenv",                   getenv_spec_function },
1235   { "if-exists",                if_exists_spec_function },
1236   { "if-exists-else",           if_exists_else_spec_function },
1237   { "replace-outfile",          replace_outfile_spec_function },
1238   { "remove-outfile",           remove_outfile_spec_function },
1239   { "version-compare",          version_compare_spec_function },
1240   { "include",                  include_spec_function },
1241   { "find-file",                find_file_spec_function },
1242   { "find-plugindir",           find_plugindir_spec_function },
1243   { "print-asm-header",         print_asm_header_spec_function },
1244   { "compare-debug-dump-opt",   compare_debug_dump_opt_spec_function },
1245   { "compare-debug-self-opt",   compare_debug_self_opt_spec_function },
1246   { "compare-debug-auxbase-opt", compare_debug_auxbase_opt_spec_function },
1247 #ifdef EXTRA_SPEC_FUNCTIONS
1248   EXTRA_SPEC_FUNCTIONS
1249 #endif
1250   { 0, 0 }
1251 };
1252
1253 static int processing_spec_function;
1254 \f
1255 /* Add appropriate libgcc specs to OBSTACK, taking into account
1256    various permutations of -shared-libgcc, -shared, and such.  */
1257
1258 #if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC)
1259
1260 #ifndef USE_LD_AS_NEEDED
1261 #define USE_LD_AS_NEEDED 0
1262 #endif
1263
1264 static void
1265 init_gcc_specs (struct obstack *obstack, const char *shared_name,
1266                 const char *static_name, const char *eh_name)
1267 {
1268   char *buf;
1269
1270   buf = concat ("%{static|static-libgcc:", static_name, " ", eh_name, "}"
1271                 "%{!static:%{!static-libgcc:"
1272 #if USE_LD_AS_NEEDED
1273                 "%{!shared-libgcc:",
1274                 static_name, " --as-needed ", shared_name, " --no-as-needed"
1275                 "}"
1276                 "%{shared-libgcc:",
1277                 shared_name, "%{!shared: ", static_name, "}"
1278                 "}"
1279 #else
1280                 "%{!shared:"
1281                 "%{!shared-libgcc:", static_name, " ", eh_name, "}"
1282                 "%{shared-libgcc:", shared_name, " ", static_name, "}"
1283                 "}"
1284 #ifdef LINK_EH_SPEC
1285                 "%{shared:"
1286                 "%{shared-libgcc:", shared_name, "}"
1287                 "%{!shared-libgcc:", static_name, "}"
1288                 "}"
1289 #else
1290                 "%{shared:", shared_name, "}"
1291 #endif
1292 #endif
1293                 "}}", NULL);
1294
1295   obstack_grow (obstack, buf, strlen (buf));
1296   free (buf);
1297 }
1298 #endif /* ENABLE_SHARED_LIBGCC */
1299
1300 /* Initialize the specs lookup routines.  */
1301
1302 static void
1303 init_spec (void)
1304 {
1305   struct spec_list *next = (struct spec_list *) 0;
1306   struct spec_list *sl   = (struct spec_list *) 0;
1307   int i;
1308
1309   if (specs)
1310     return;                     /* Already initialized.  */
1311
1312   if (verbose_flag)
1313     fnotice (stderr, "Using built-in specs.\n");
1314
1315 #ifdef EXTRA_SPECS
1316   extra_specs = XCNEWVEC (struct spec_list, ARRAY_SIZE (extra_specs_1));
1317
1318   for (i = ARRAY_SIZE (extra_specs_1) - 1; i >= 0; i--)
1319     {
1320       sl = &extra_specs[i];
1321       sl->name = extra_specs_1[i].name;
1322       sl->ptr = extra_specs_1[i].ptr;
1323       sl->next = next;
1324       sl->name_len = strlen (sl->name);
1325       sl->ptr_spec = &sl->ptr;
1326       next = sl;
1327     }
1328 #endif
1329
1330   for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--)
1331     {
1332       sl = &static_specs[i];
1333       sl->next = next;
1334       next = sl;
1335     }
1336
1337 #if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC)
1338   /* ??? If neither -shared-libgcc nor --static-libgcc was
1339      seen, then we should be making an educated guess.  Some proposed
1340      heuristics for ELF include:
1341
1342         (1) If "-Wl,--export-dynamic", then it's a fair bet that the
1343             program will be doing dynamic loading, which will likely
1344             need the shared libgcc.
1345
1346         (2) If "-ldl", then it's also a fair bet that we're doing
1347             dynamic loading.
1348
1349         (3) For each ET_DYN we're linking against (either through -lfoo
1350             or /some/path/foo.so), check to see whether it or one of
1351             its dependencies depends on a shared libgcc.
1352
1353         (4) If "-shared"
1354
1355             If the runtime is fixed to look for program headers instead
1356             of calling __register_frame_info at all, for each object,
1357             use the shared libgcc if any EH symbol referenced.
1358
1359             If crtstuff is fixed to not invoke __register_frame_info
1360             automatically, for each object, use the shared libgcc if
1361             any non-empty unwind section found.
1362
1363      Doing any of this probably requires invoking an external program to
1364      do the actual object file scanning.  */
1365   {
1366     const char *p = libgcc_spec;
1367     int in_sep = 1;
1368
1369     /* Transform the extant libgcc_spec into one that uses the shared libgcc
1370        when given the proper command line arguments.  */
1371     while (*p)
1372       {
1373         if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0)
1374           {
1375             init_gcc_specs (&obstack,
1376                             "-lgcc_s"
1377 #ifdef USE_LIBUNWIND_EXCEPTIONS
1378                             " -lunwind"
1379 #endif
1380                             ,
1381                             "-lgcc",
1382                             "-lgcc_eh"
1383 #ifdef USE_LIBUNWIND_EXCEPTIONS
1384 # ifdef HAVE_LD_STATIC_DYNAMIC
1385                             " %{!static:-Bstatic} -lunwind %{!static:-Bdynamic}"
1386 # else
1387                             " -lunwind"
1388 # endif
1389 #endif
1390                             );
1391
1392             p += 5;
1393             in_sep = 0;
1394           }
1395         else if (in_sep && *p == 'l' && strncmp (p, "libgcc.a%s", 10) == 0)
1396           {
1397             /* Ug.  We don't know shared library extensions.  Hope that
1398                systems that use this form don't do shared libraries.  */
1399             init_gcc_specs (&obstack,
1400                             "-lgcc_s",
1401                             "libgcc.a%s",
1402                             "libgcc_eh.a%s"
1403 #ifdef USE_LIBUNWIND_EXCEPTIONS
1404                             " -lunwind"
1405 #endif
1406                             );
1407             p += 10;
1408             in_sep = 0;
1409           }
1410         else
1411           {
1412             obstack_1grow (&obstack, *p);
1413             in_sep = (*p == ' ');
1414             p += 1;
1415           }
1416       }
1417
1418     obstack_1grow (&obstack, '\0');
1419     libgcc_spec = XOBFINISH (&obstack, const char *);
1420   }
1421 #endif
1422 #ifdef USE_AS_TRADITIONAL_FORMAT
1423   /* Prepend "--traditional-format" to whatever asm_spec we had before.  */
1424   {
1425     static const char tf[] = "--traditional-format ";
1426     obstack_grow (&obstack, tf, sizeof(tf) - 1);
1427     obstack_grow0 (&obstack, asm_spec, strlen (asm_spec));
1428     asm_spec = XOBFINISH (&obstack, const char *);
1429   }
1430 #endif
1431
1432 #if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC
1433 # ifdef LINK_BUILDID_SPEC
1434   /* Prepend LINK_BUILDID_SPEC to whatever link_spec we had before.  */
1435   obstack_grow (&obstack, LINK_BUILDID_SPEC, sizeof(LINK_BUILDID_SPEC) - 1);
1436 # endif
1437 # ifdef LINK_EH_SPEC
1438   /* Prepend LINK_EH_SPEC to whatever link_spec we had before.  */
1439   obstack_grow (&obstack, LINK_EH_SPEC, sizeof(LINK_EH_SPEC) - 1);
1440 # endif
1441   obstack_grow0 (&obstack, link_spec, strlen (link_spec));
1442   link_spec = XOBFINISH (&obstack, const char *);
1443 #endif
1444
1445   specs = sl;
1446 }
1447 \f
1448 /* Change the value of spec NAME to SPEC.  If SPEC is empty, then the spec is
1449    removed; If the spec starts with a + then SPEC is added to the end of the
1450    current spec.  */
1451
1452 static void
1453 set_spec (const char *name, const char *spec)
1454 {
1455   struct spec_list *sl;
1456   const char *old_spec;
1457   int name_len = strlen (name);
1458   int i;
1459
1460   /* If this is the first call, initialize the statically allocated specs.  */
1461   if (!specs)
1462     {
1463       struct spec_list *next = (struct spec_list *) 0;
1464       for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--)
1465         {
1466           sl = &static_specs[i];
1467           sl->next = next;
1468           next = sl;
1469         }
1470       specs = sl;
1471     }
1472
1473   /* See if the spec already exists.  */
1474   for (sl = specs; sl; sl = sl->next)
1475     if (name_len == sl->name_len && !strcmp (sl->name, name))
1476       break;
1477
1478   if (!sl)
1479     {
1480       /* Not found - make it.  */
1481       sl = XNEW (struct spec_list);
1482       sl->name = xstrdup (name);
1483       sl->name_len = name_len;
1484       sl->ptr_spec = &sl->ptr;
1485       sl->alloc_p = 0;
1486       *(sl->ptr_spec) = "";
1487       sl->next = specs;
1488       specs = sl;
1489     }
1490
1491   old_spec = *(sl->ptr_spec);
1492   *(sl->ptr_spec) = ((spec[0] == '+' && ISSPACE ((unsigned char)spec[1]))
1493                      ? concat (old_spec, spec + 1, NULL)
1494                      : xstrdup (spec));
1495
1496 #ifdef DEBUG_SPECS
1497   if (verbose_flag)
1498     fnotice (stderr, "Setting spec %s to '%s'\n\n", name, *(sl->ptr_spec));
1499 #endif
1500
1501   /* Free the old spec.  */
1502   if (old_spec && sl->alloc_p)
1503     free (CONST_CAST(char *, old_spec));
1504
1505   sl->alloc_p = 1;
1506 }
1507 \f
1508 /* Accumulate a command (program name and args), and run it.  */
1509
1510 /* Vector of pointers to arguments in the current line of specifications.  */
1511
1512 static const char **argbuf;
1513
1514 /* Number of elements allocated in argbuf.  */
1515
1516 static int argbuf_length;
1517
1518 /* Number of elements in argbuf currently in use (containing args).  */
1519
1520 static int argbuf_index;
1521
1522 /* Position in the argbuf array containing the name of the output file
1523    (the value associated with the "-o" flag).  */
1524
1525 static int have_o_argbuf_index = 0;
1526
1527 /* Were the options -c, -S or -E passed.  */
1528 static int have_c = 0;
1529
1530 /* Was the option -o passed.  */
1531 static int have_o = 0;
1532
1533 /* This is the list of suffixes and codes (%g/%u/%U/%j) and the associated
1534    temp file.  If the HOST_BIT_BUCKET is used for %j, no entry is made for
1535    it here.  */
1536
1537 static struct temp_name {
1538   const char *suffix;   /* suffix associated with the code.  */
1539   int length;           /* strlen (suffix).  */
1540   int unique;           /* Indicates whether %g or %u/%U was used.  */
1541   const char *filename; /* associated filename.  */
1542   int filename_length;  /* strlen (filename).  */
1543   struct temp_name *next;
1544 } *temp_names;
1545
1546 /* Number of commands executed so far.  */
1547
1548 static int execution_count;
1549
1550 /* Number of commands that exited with a signal.  */
1551
1552 static int signal_count;
1553 \f
1554 /* Allocate the argument vector.  */
1555
1556 static void
1557 alloc_args (void)
1558 {
1559   argbuf_length = 10;
1560   argbuf = XNEWVEC (const char *, argbuf_length);
1561 }
1562
1563 /* Clear out the vector of arguments (after a command is executed).  */
1564
1565 static void
1566 clear_args (void)
1567 {
1568   argbuf_index = 0;
1569 }
1570
1571 /* Add one argument to the vector at the end.
1572    This is done when a space is seen or at the end of the line.
1573    If DELETE_ALWAYS is nonzero, the arg is a filename
1574     and the file should be deleted eventually.
1575    If DELETE_FAILURE is nonzero, the arg is a filename
1576     and the file should be deleted if this compilation fails.  */
1577
1578 static void
1579 store_arg (const char *arg, int delete_always, int delete_failure)
1580 {
1581   if (argbuf_index + 1 == argbuf_length)
1582     argbuf = XRESIZEVEC (const char *, argbuf, (argbuf_length *= 2));
1583
1584   argbuf[argbuf_index++] = arg;
1585   argbuf[argbuf_index] = 0;
1586
1587   if (strcmp (arg, "-o") == 0)
1588     have_o_argbuf_index = argbuf_index;
1589   if (delete_always || delete_failure)
1590     {
1591       const char *p;
1592       /* If the temporary file we should delete is specified as
1593          part of a joined argument extract the filename.  */
1594       if (arg[0] == '-'
1595           && (p = strrchr (arg, '=')))
1596         arg = p + 1;
1597       record_temp_file (arg, delete_always, delete_failure);
1598     }
1599 }
1600 \f
1601 /* Load specs from a file name named FILENAME, replacing occurrences of
1602    various different types of line-endings, \r\n, \n\r and just \r, with
1603    a single \n.  */
1604
1605 static char *
1606 load_specs (const char *filename)
1607 {
1608   int desc;
1609   int readlen;
1610   struct stat statbuf;
1611   char *buffer;
1612   char *buffer_p;
1613   char *specs;
1614   char *specs_p;
1615
1616   if (verbose_flag)
1617     fnotice (stderr, "Reading specs from %s\n", filename);
1618
1619   /* Open and stat the file.  */
1620   desc = open (filename, O_RDONLY, 0);
1621   if (desc < 0)
1622     pfatal_with_name (filename);
1623   if (stat (filename, &statbuf) < 0)
1624     pfatal_with_name (filename);
1625
1626   /* Read contents of file into BUFFER.  */
1627   buffer = XNEWVEC (char, statbuf.st_size + 1);
1628   readlen = read (desc, buffer, (unsigned) statbuf.st_size);
1629   if (readlen < 0)
1630     pfatal_with_name (filename);
1631   buffer[readlen] = 0;
1632   close (desc);
1633
1634   specs = XNEWVEC (char, readlen + 1);
1635   specs_p = specs;
1636   for (buffer_p = buffer; buffer_p && *buffer_p; buffer_p++)
1637     {
1638       int skip = 0;
1639       char c = *buffer_p;
1640       if (c == '\r')
1641         {
1642           if (buffer_p > buffer && *(buffer_p - 1) == '\n')     /* \n\r */
1643             skip = 1;
1644           else if (*(buffer_p + 1) == '\n')                     /* \r\n */
1645             skip = 1;
1646           else                                                  /* \r */
1647             c = '\n';
1648         }
1649       if (! skip)
1650         *specs_p++ = c;
1651     }
1652   *specs_p = '\0';
1653
1654   free (buffer);
1655   return (specs);
1656 }
1657
1658 /* Read compilation specs from a file named FILENAME,
1659    replacing the default ones.
1660
1661    A suffix which starts with `*' is a definition for
1662    one of the machine-specific sub-specs.  The "suffix" should be
1663    *asm, *cc1, *cpp, *link, *startfile, etc.
1664    The corresponding spec is stored in asm_spec, etc.,
1665    rather than in the `compilers' vector.
1666
1667    Anything invalid in the file is a fatal error.  */
1668
1669 static void
1670 read_specs (const char *filename, int main_p)
1671 {
1672   char *buffer;
1673   char *p;
1674
1675   buffer = load_specs (filename);
1676
1677   /* Scan BUFFER for specs, putting them in the vector.  */
1678   p = buffer;
1679   while (1)
1680     {
1681       char *suffix;
1682       char *spec;
1683       char *in, *out, *p1, *p2, *p3;
1684
1685       /* Advance P in BUFFER to the next nonblank nocomment line.  */
1686       p = skip_whitespace (p);
1687       if (*p == 0)
1688         break;
1689
1690       /* Is this a special command that starts with '%'? */
1691       /* Don't allow this for the main specs file, since it would
1692          encourage people to overwrite it.  */
1693       if (*p == '%' && !main_p)
1694         {
1695           p1 = p;
1696           while (*p && *p != '\n')
1697             p++;
1698
1699           /* Skip '\n'.  */
1700           p++;
1701
1702           if (!strncmp (p1, "%include", sizeof ("%include") - 1)
1703               && (p1[sizeof "%include" - 1] == ' '
1704                   || p1[sizeof "%include" - 1] == '\t'))
1705             {
1706               char *new_filename;
1707
1708               p1 += sizeof ("%include");
1709               while (*p1 == ' ' || *p1 == '\t')
1710                 p1++;
1711
1712               if (*p1++ != '<' || p[-2] != '>')
1713                 fatal_error ("specs %%include syntax malformed after "
1714                              "%ld characters",
1715                              (long) (p1 - buffer + 1));
1716
1717               p[-2] = '\0';
1718               new_filename = find_a_file (&startfile_prefixes, p1, R_OK, true);
1719               read_specs (new_filename ? new_filename : p1, FALSE);
1720               continue;
1721             }
1722           else if (!strncmp (p1, "%include_noerr", sizeof "%include_noerr" - 1)
1723                    && (p1[sizeof "%include_noerr" - 1] == ' '
1724                        || p1[sizeof "%include_noerr" - 1] == '\t'))
1725             {
1726               char *new_filename;
1727
1728               p1 += sizeof "%include_noerr";
1729               while (*p1 == ' ' || *p1 == '\t')
1730                 p1++;
1731
1732               if (*p1++ != '<' || p[-2] != '>')
1733                 fatal_error ("specs %%include syntax malformed after "
1734                              "%ld characters",
1735                              (long) (p1 - buffer + 1));
1736
1737               p[-2] = '\0';
1738               new_filename = find_a_file (&startfile_prefixes, p1, R_OK, true);
1739               if (new_filename)
1740                 read_specs (new_filename, FALSE);
1741               else if (verbose_flag)
1742                 fnotice (stderr, "could not find specs file %s\n", p1);
1743               continue;
1744             }
1745           else if (!strncmp (p1, "%rename", sizeof "%rename" - 1)
1746                    && (p1[sizeof "%rename" - 1] == ' '
1747                        || p1[sizeof "%rename" - 1] == '\t'))
1748             {
1749               int name_len;
1750               struct spec_list *sl;
1751               struct spec_list *newsl;
1752
1753               /* Get original name.  */
1754               p1 += sizeof "%rename";
1755               while (*p1 == ' ' || *p1 == '\t')
1756                 p1++;
1757
1758               if (! ISALPHA ((unsigned char) *p1))
1759                 fatal_error ("specs %%rename syntax malformed after "
1760                              "%ld characters",
1761                              (long) (p1 - buffer));
1762
1763               p2 = p1;
1764               while (*p2 && !ISSPACE ((unsigned char) *p2))
1765                 p2++;
1766
1767               if (*p2 != ' ' && *p2 != '\t')
1768                 fatal_error ("specs %%rename syntax malformed after "
1769                              "%ld characters",
1770                              (long) (p2 - buffer));
1771
1772               name_len = p2 - p1;
1773               *p2++ = '\0';
1774               while (*p2 == ' ' || *p2 == '\t')
1775                 p2++;
1776
1777               if (! ISALPHA ((unsigned char) *p2))
1778                 fatal_error ("specs %%rename syntax malformed after "
1779                              "%ld characters",
1780                              (long) (p2 - buffer));
1781
1782               /* Get new spec name.  */
1783               p3 = p2;
1784               while (*p3 && !ISSPACE ((unsigned char) *p3))
1785                 p3++;
1786
1787               if (p3 != p - 1)
1788                 fatal_error ("specs %%rename syntax malformed after "
1789                              "%ld characters",
1790                              (long) (p3 - buffer));
1791               *p3 = '\0';
1792
1793               for (sl = specs; sl; sl = sl->next)
1794                 if (name_len == sl->name_len && !strcmp (sl->name, p1))
1795                   break;
1796
1797               if (!sl)
1798                 fatal_error ("specs %s spec was not found to be renamed", p1);
1799
1800               if (strcmp (p1, p2) == 0)
1801                 continue;
1802
1803               for (newsl = specs; newsl; newsl = newsl->next)
1804                 if (strcmp (newsl->name, p2) == 0)
1805                   fatal_error ("%s: attempt to rename spec %qs to "
1806                                "already defined spec %qs",
1807                     filename, p1, p2);
1808
1809               if (verbose_flag)
1810                 {
1811                   fnotice (stderr, "rename spec %s to %s\n", p1, p2);
1812 #ifdef DEBUG_SPECS
1813                   fnotice (stderr, "spec is '%s'\n\n", *(sl->ptr_spec));
1814 #endif
1815                 }
1816
1817               set_spec (p2, *(sl->ptr_spec));
1818               if (sl->alloc_p)
1819                 free (CONST_CAST (char *, *(sl->ptr_spec)));
1820
1821               *(sl->ptr_spec) = "";
1822               sl->alloc_p = 0;
1823               continue;
1824             }
1825           else
1826             fatal_error ("specs unknown %% command after %ld characters",
1827                          (long) (p1 - buffer));
1828         }
1829
1830       /* Find the colon that should end the suffix.  */
1831       p1 = p;
1832       while (*p1 && *p1 != ':' && *p1 != '\n')
1833         p1++;
1834
1835       /* The colon shouldn't be missing.  */
1836       if (*p1 != ':')
1837         fatal_error ("specs file malformed after %ld characters",
1838                      (long) (p1 - buffer));
1839
1840       /* Skip back over trailing whitespace.  */
1841       p2 = p1;
1842       while (p2 > buffer && (p2[-1] == ' ' || p2[-1] == '\t'))
1843         p2--;
1844
1845       /* Copy the suffix to a string.  */
1846       suffix = save_string (p, p2 - p);
1847       /* Find the next line.  */
1848       p = skip_whitespace (p1 + 1);
1849       if (p[1] == 0)
1850         fatal_error ("specs file malformed after %ld characters",
1851                      (long) (p - buffer));
1852
1853       p1 = p;
1854       /* Find next blank line or end of string.  */
1855       while (*p1 && !(*p1 == '\n' && (p1[1] == '\n' || p1[1] == '\0')))
1856         p1++;
1857
1858       /* Specs end at the blank line and do not include the newline.  */
1859       spec = save_string (p, p1 - p);
1860       p = p1;
1861
1862       /* Delete backslash-newline sequences from the spec.  */
1863       in = spec;
1864       out = spec;
1865       while (*in != 0)
1866         {
1867           if (in[0] == '\\' && in[1] == '\n')
1868             in += 2;
1869           else if (in[0] == '#')
1870             while (*in && *in != '\n')
1871               in++;
1872
1873           else
1874             *out++ = *in++;
1875         }
1876       *out = 0;
1877
1878       if (suffix[0] == '*')
1879         {
1880           if (! strcmp (suffix, "*link_command"))
1881             link_command_spec = spec;
1882           else
1883             set_spec (suffix + 1, spec);
1884         }
1885       else
1886         {
1887           /* Add this pair to the vector.  */
1888           compilers
1889             = XRESIZEVEC (struct compiler, compilers, n_compilers + 2);
1890
1891           compilers[n_compilers].suffix = suffix;
1892           compilers[n_compilers].spec = spec;
1893           n_compilers++;
1894           memset (&compilers[n_compilers], 0, sizeof compilers[n_compilers]);
1895         }
1896
1897       if (*suffix == 0)
1898         link_command_spec = spec;
1899     }
1900
1901   if (link_command_spec == 0)
1902     fatal_error ("spec file has no spec for linking");
1903 }
1904 \f
1905 /* Record the names of temporary files we tell compilers to write,
1906    and delete them at the end of the run.  */
1907
1908 /* This is the common prefix we use to make temp file names.
1909    It is chosen once for each run of this program.
1910    It is substituted into a spec by %g or %j.
1911    Thus, all temp file names contain this prefix.
1912    In practice, all temp file names start with this prefix.
1913
1914    This prefix comes from the envvar TMPDIR if it is defined;
1915    otherwise, from the P_tmpdir macro if that is defined;
1916    otherwise, in /usr/tmp or /tmp;
1917    or finally the current directory if all else fails.  */
1918
1919 static const char *temp_filename;
1920
1921 /* Length of the prefix.  */
1922
1923 static int temp_filename_length;
1924
1925 /* Define the list of temporary files to delete.  */
1926
1927 struct temp_file
1928 {
1929   const char *name;
1930   struct temp_file *next;
1931 };
1932
1933 /* Queue of files to delete on success or failure of compilation.  */
1934 static struct temp_file *always_delete_queue;
1935 /* Queue of files to delete on failure of compilation.  */
1936 static struct temp_file *failure_delete_queue;
1937
1938 /* Record FILENAME as a file to be deleted automatically.
1939    ALWAYS_DELETE nonzero means delete it if all compilation succeeds;
1940    otherwise delete it in any case.
1941    FAIL_DELETE nonzero means delete it if a compilation step fails;
1942    otherwise delete it in any case.  */
1943
1944 void
1945 record_temp_file (const char *filename, int always_delete, int fail_delete)
1946 {
1947   char *const name = xstrdup (filename);
1948
1949   if (always_delete)
1950     {
1951       struct temp_file *temp;
1952       for (temp = always_delete_queue; temp; temp = temp->next)
1953         if (! strcmp (name, temp->name))
1954           goto already1;
1955
1956       temp = XNEW (struct temp_file);
1957       temp->next = always_delete_queue;
1958       temp->name = name;
1959       always_delete_queue = temp;
1960
1961     already1:;
1962     }
1963
1964   if (fail_delete)
1965     {
1966       struct temp_file *temp;
1967       for (temp = failure_delete_queue; temp; temp = temp->next)
1968         if (! strcmp (name, temp->name))
1969           goto already2;
1970
1971       temp = XNEW (struct temp_file);
1972       temp->next = failure_delete_queue;
1973       temp->name = name;
1974       failure_delete_queue = temp;
1975
1976     already2:;
1977     }
1978 }
1979
1980 /* Delete all the temporary files whose names we previously recorded.  */
1981
1982 #ifndef DELETE_IF_ORDINARY
1983 #define DELETE_IF_ORDINARY(NAME,ST,VERBOSE_FLAG)        \
1984 do                                                      \
1985   {                                                     \
1986     if (stat (NAME, &ST) >= 0 && S_ISREG (ST.st_mode))  \
1987       if (unlink (NAME) < 0)                            \
1988         if (VERBOSE_FLAG)                               \
1989           perror_with_name (NAME);                      \
1990   } while (0)
1991 #endif
1992
1993 static void
1994 delete_if_ordinary (const char *name)
1995 {
1996   struct stat st;
1997 #ifdef DEBUG
1998   int i, c;
1999
2000   printf ("Delete %s? (y or n) ", name);
2001   fflush (stdout);
2002   i = getchar ();
2003   if (i != '\n')
2004     while ((c = getchar ()) != '\n' && c != EOF)
2005       ;
2006
2007   if (i == 'y' || i == 'Y')
2008 #endif /* DEBUG */
2009   DELETE_IF_ORDINARY (name, st, verbose_flag);
2010 }
2011
2012 static void
2013 delete_temp_files (void)
2014 {
2015   struct temp_file *temp;
2016
2017   for (temp = always_delete_queue; temp; temp = temp->next)
2018     delete_if_ordinary (temp->name);
2019   always_delete_queue = 0;
2020 }
2021
2022 /* Delete all the files to be deleted on error.  */
2023
2024 static void
2025 delete_failure_queue (void)
2026 {
2027   struct temp_file *temp;
2028
2029   for (temp = failure_delete_queue; temp; temp = temp->next)
2030     delete_if_ordinary (temp->name);
2031 }
2032
2033 static void
2034 clear_failure_queue (void)
2035 {
2036   failure_delete_queue = 0;
2037 }
2038 \f
2039 /* Call CALLBACK for each path in PATHS, breaking out early if CALLBACK
2040    returns non-NULL.
2041    If DO_MULTI is true iterate over the paths twice, first with multilib
2042    suffix then without, otherwise iterate over the paths once without
2043    adding a multilib suffix.  When DO_MULTI is true, some attempt is made
2044    to avoid visiting the same path twice, but we could do better.  For
2045    instance, /usr/lib/../lib is considered different from /usr/lib.
2046    At least EXTRA_SPACE chars past the end of the path passed to
2047    CALLBACK are available for use by the callback.
2048    CALLBACK_INFO allows extra parameters to be passed to CALLBACK.
2049
2050    Returns the value returned by CALLBACK.  */
2051
2052 static void *
2053 for_each_path (const struct path_prefix *paths,
2054                bool do_multi,
2055                size_t extra_space,
2056                void *(*callback) (char *, void *),
2057                void *callback_info)
2058 {
2059   struct prefix_list *pl;
2060   const char *multi_dir = NULL;
2061   const char *multi_os_dir = NULL;
2062   const char *multi_suffix;
2063   const char *just_multi_suffix;
2064   char *path = NULL;
2065   void *ret = NULL;
2066   bool skip_multi_dir = false;
2067   bool skip_multi_os_dir = false;
2068
2069   multi_suffix = machine_suffix;
2070   just_multi_suffix = just_machine_suffix;
2071   if (do_multi && multilib_dir && strcmp (multilib_dir, ".") != 0)
2072     {
2073       multi_dir = concat (multilib_dir, dir_separator_str, NULL);
2074       multi_suffix = concat (multi_suffix, multi_dir, NULL);
2075       just_multi_suffix = concat (just_multi_suffix, multi_dir, NULL);
2076     }
2077   if (do_multi && multilib_os_dir && strcmp (multilib_os_dir, ".") != 0)
2078     multi_os_dir = concat (multilib_os_dir, dir_separator_str, NULL);
2079
2080   while (1)
2081     {
2082       size_t multi_dir_len = 0;
2083       size_t multi_os_dir_len = 0;
2084       size_t suffix_len;
2085       size_t just_suffix_len;
2086       size_t len;
2087
2088       if (multi_dir)
2089         multi_dir_len = strlen (multi_dir);
2090       if (multi_os_dir)
2091         multi_os_dir_len = strlen (multi_os_dir);
2092       suffix_len = strlen (multi_suffix);
2093       just_suffix_len = strlen (just_multi_suffix);
2094
2095       if (path == NULL)
2096         {
2097           len = paths->max_len + extra_space + 1;
2098           if (suffix_len > multi_os_dir_len)
2099             len += suffix_len;
2100           else
2101             len += multi_os_dir_len;
2102           path = XNEWVEC (char, len);
2103         }
2104
2105       for (pl = paths->plist; pl != 0; pl = pl->next)
2106         {
2107           len = strlen (pl->prefix);
2108           memcpy (path, pl->prefix, len);
2109
2110           /* Look first in MACHINE/VERSION subdirectory.  */
2111           if (!skip_multi_dir)
2112             {
2113               memcpy (path + len, multi_suffix, suffix_len + 1);
2114               ret = callback (path, callback_info);
2115               if (ret)
2116                 break;
2117             }
2118
2119           /* Some paths are tried with just the machine (ie. target)
2120              subdir.  This is used for finding as, ld, etc.  */
2121           if (!skip_multi_dir
2122               && pl->require_machine_suffix == 2)
2123             {
2124               memcpy (path + len, just_multi_suffix, just_suffix_len + 1);
2125               ret = callback (path, callback_info);
2126               if (ret)
2127                 break;
2128             }
2129
2130           /* Now try the base path.  */
2131           if (!pl->require_machine_suffix
2132               && !(pl->os_multilib ? skip_multi_os_dir : skip_multi_dir))
2133             {
2134               const char *this_multi;
2135               size_t this_multi_len;
2136
2137               if (pl->os_multilib)
2138                 {
2139                   this_multi = multi_os_dir;
2140                   this_multi_len = multi_os_dir_len;
2141                 }
2142               else
2143                 {
2144                   this_multi = multi_dir;
2145                   this_multi_len = multi_dir_len;
2146                 }
2147
2148               if (this_multi_len)
2149                 memcpy (path + len, this_multi, this_multi_len + 1);
2150               else
2151                 path[len] = '\0';
2152
2153               ret = callback (path, callback_info);
2154               if (ret)
2155                 break;
2156             }
2157         }
2158       if (pl)
2159         break;
2160
2161       if (multi_dir == NULL && multi_os_dir == NULL)
2162         break;
2163
2164       /* Run through the paths again, this time without multilibs.
2165          Don't repeat any we have already seen.  */
2166       if (multi_dir)
2167         {
2168           free (CONST_CAST (char *, multi_dir));
2169           multi_dir = NULL;
2170           free (CONST_CAST (char *, multi_suffix));
2171           multi_suffix = machine_suffix;
2172           free (CONST_CAST (char *, just_multi_suffix));
2173           just_multi_suffix = just_machine_suffix;
2174         }
2175       else
2176         skip_multi_dir = true;
2177       if (multi_os_dir)
2178         {
2179           free (CONST_CAST (char *, multi_os_dir));
2180           multi_os_dir = NULL;
2181         }
2182       else
2183         skip_multi_os_dir = true;
2184     }
2185
2186   if (multi_dir)
2187     {
2188       free (CONST_CAST (char *, multi_dir));
2189       free (CONST_CAST (char *, multi_suffix));
2190       free (CONST_CAST (char *, just_multi_suffix));
2191     }
2192   if (multi_os_dir)
2193     free (CONST_CAST (char *, multi_os_dir));
2194   if (ret != path)
2195     free (path);
2196   return ret;
2197 }
2198
2199 /* Callback for build_search_list.  Adds path to obstack being built.  */
2200
2201 struct add_to_obstack_info {
2202   struct obstack *ob;
2203   bool check_dir;
2204   bool first_time;
2205 };
2206
2207 static void *
2208 add_to_obstack (char *path, void *data)
2209 {
2210   struct add_to_obstack_info *info = (struct add_to_obstack_info *) data;
2211
2212   if (info->check_dir && !is_directory (path, false))
2213     return NULL;
2214
2215   if (!info->first_time)
2216     obstack_1grow (info->ob, PATH_SEPARATOR);
2217
2218   obstack_grow (info->ob, path, strlen (path));
2219
2220   info->first_time = false;
2221   return NULL;
2222 }
2223
2224 /* Add or change the value of an environment variable, outputting the
2225    change to standard error if in verbose mode.  */
2226 static void
2227 xputenv (const char *string)
2228 {
2229   if (verbose_flag)
2230     fnotice (stderr, "%s\n", string);
2231   putenv (CONST_CAST (char *, string));
2232 }
2233
2234 /* Build a list of search directories from PATHS.
2235    PREFIX is a string to prepend to the list.
2236    If CHECK_DIR_P is true we ensure the directory exists.
2237    If DO_MULTI is true, multilib paths are output first, then
2238    non-multilib paths.
2239    This is used mostly by putenv_from_prefixes so we use `collect_obstack'.
2240    It is also used by the --print-search-dirs flag.  */
2241
2242 static char *
2243 build_search_list (const struct path_prefix *paths, const char *prefix,
2244                    bool check_dir, bool do_multi)
2245 {
2246   struct add_to_obstack_info info;
2247
2248   info.ob = &collect_obstack;
2249   info.check_dir = check_dir;
2250   info.first_time = true;
2251
2252   obstack_grow (&collect_obstack, prefix, strlen (prefix));
2253   obstack_1grow (&collect_obstack, '=');
2254
2255   for_each_path (paths, do_multi, 0, add_to_obstack, &info);
2256
2257   obstack_1grow (&collect_obstack, '\0');
2258   return XOBFINISH (&collect_obstack, char *);
2259 }
2260
2261 /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
2262    for collect.  */
2263
2264 static void
2265 putenv_from_prefixes (const struct path_prefix *paths, const char *env_var,
2266                       bool do_multi)
2267 {
2268   xputenv (build_search_list (paths, env_var, true, do_multi));
2269 }
2270 \f
2271 /* Check whether NAME can be accessed in MODE.  This is like access,
2272    except that it never considers directories to be executable.  */
2273
2274 static int
2275 access_check (const char *name, int mode)
2276 {
2277   if (mode == X_OK)
2278     {
2279       struct stat st;
2280
2281       if (stat (name, &st) < 0
2282           || S_ISDIR (st.st_mode))
2283         return -1;
2284     }
2285
2286   return access (name, mode);
2287 }
2288
2289 /* Callback for find_a_file.  Appends the file name to the directory
2290    path.  If the resulting file exists in the right mode, return the
2291    full pathname to the file.  */
2292
2293 struct file_at_path_info {
2294   const char *name;
2295   const char *suffix;
2296   int name_len;
2297   int suffix_len;
2298   int mode;
2299 };
2300
2301 static void *
2302 file_at_path (char *path, void *data)
2303 {
2304   struct file_at_path_info *info = (struct file_at_path_info *) data;
2305   size_t len = strlen (path);
2306
2307   memcpy (path + len, info->name, info->name_len);
2308   len += info->name_len;
2309
2310   /* Some systems have a suffix for executable files.
2311      So try appending that first.  */
2312   if (info->suffix_len)
2313     {
2314       memcpy (path + len, info->suffix, info->suffix_len + 1);
2315       if (access_check (path, info->mode) == 0)
2316         return path;
2317     }
2318
2319   path[len] = '\0';
2320   if (access_check (path, info->mode) == 0)
2321     return path;
2322
2323   return NULL;
2324 }
2325
2326 /* Search for NAME using the prefix list PREFIXES.  MODE is passed to
2327    access to check permissions.  If DO_MULTI is true, search multilib
2328    paths then non-multilib paths, otherwise do not search multilib paths.
2329    Return 0 if not found, otherwise return its name, allocated with malloc.  */
2330
2331 static char *
2332 find_a_file (const struct path_prefix *pprefix, const char *name, int mode,
2333              bool do_multi)
2334 {
2335   struct file_at_path_info info;
2336
2337 #ifdef DEFAULT_ASSEMBLER
2338   if (! strcmp (name, "as") && access (DEFAULT_ASSEMBLER, mode) == 0)
2339     return xstrdup (DEFAULT_ASSEMBLER);
2340 #endif
2341
2342 #ifdef DEFAULT_LINKER
2343   if (! strcmp(name, "ld") && access (DEFAULT_LINKER, mode) == 0)
2344     return xstrdup (DEFAULT_LINKER);
2345 #endif
2346
2347   /* Determine the filename to execute (special case for absolute paths).  */
2348
2349   if (IS_ABSOLUTE_PATH (name))
2350     {
2351       if (access (name, mode) == 0)
2352         return xstrdup (name);
2353
2354       return NULL;
2355     }
2356
2357   info.name = name;
2358   info.suffix = (mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "";
2359   info.name_len = strlen (info.name);
2360   info.suffix_len = strlen (info.suffix);
2361   info.mode = mode;
2362
2363   return (char*) for_each_path (pprefix, do_multi,
2364                                 info.name_len + info.suffix_len,
2365                                 file_at_path, &info);
2366 }
2367
2368 /* Ranking of prefixes in the sort list. -B prefixes are put before
2369    all others.  */
2370
2371 enum path_prefix_priority
2372 {
2373   PREFIX_PRIORITY_B_OPT,
2374   PREFIX_PRIORITY_LAST
2375 };
2376
2377 /* Add an entry for PREFIX in PLIST.  The PLIST is kept in ascending
2378    order according to PRIORITY.  Within each PRIORITY, new entries are
2379    appended.
2380
2381    If WARN is nonzero, we will warn if no file is found
2382    through this prefix.  WARN should point to an int
2383    which will be set to 1 if this entry is used.
2384
2385    COMPONENT is the value to be passed to update_path.
2386
2387    REQUIRE_MACHINE_SUFFIX is 1 if this prefix can't be used without
2388    the complete value of machine_suffix.
2389    2 means try both machine_suffix and just_machine_suffix.  */
2390
2391 static void
2392 add_prefix (struct path_prefix *pprefix, const char *prefix,
2393             const char *component, /* enum prefix_priority */ int priority,
2394             int require_machine_suffix, int os_multilib)
2395 {
2396   struct prefix_list *pl, **prev;
2397   int len;
2398
2399   for (prev = &pprefix->plist;
2400        (*prev) != NULL && (*prev)->priority <= priority;
2401        prev = &(*prev)->next)
2402     ;
2403
2404   /* Keep track of the longest prefix.  */
2405
2406   prefix = update_path (prefix, component);
2407   len = strlen (prefix);
2408   if (len > pprefix->max_len)
2409     pprefix->max_len = len;
2410
2411   pl = XNEW (struct prefix_list);
2412   pl->prefix = prefix;
2413   pl->require_machine_suffix = require_machine_suffix;
2414   pl->priority = priority;
2415   pl->os_multilib = os_multilib;
2416
2417   /* Insert after PREV.  */
2418   pl->next = (*prev);
2419   (*prev) = pl;
2420 }
2421
2422 /* Same as add_prefix, but prepending target_system_root to prefix.  */
2423 /* The target_system_root prefix has been relocated by gcc_exec_prefix.  */
2424 static void
2425 add_sysrooted_prefix (struct path_prefix *pprefix, const char *prefix,
2426                       const char *component,
2427                       /* enum prefix_priority */ int priority,
2428                       int require_machine_suffix, int os_multilib)
2429 {
2430   if (!IS_ABSOLUTE_PATH (prefix))
2431     fatal_error ("system path %qs is not absolute", prefix);
2432
2433   if (target_system_root)
2434     {
2435       if (target_sysroot_suffix)
2436           prefix = concat (target_sysroot_suffix, prefix, NULL);
2437       prefix = concat (target_system_root, prefix, NULL);
2438
2439       /* We have to override this because GCC's notion of sysroot
2440          moves along with GCC.  */
2441       component = "GCC";
2442     }
2443
2444   add_prefix (pprefix, prefix, component, priority,
2445               require_machine_suffix, os_multilib);
2446 }
2447 \f
2448 /* Execute the command specified by the arguments on the current line of spec.
2449    When using pipes, this includes several piped-together commands
2450    with `|' between them.
2451
2452    Return 0 if successful, -1 if failed.  */
2453
2454 static int
2455 execute (void)
2456 {
2457   int i;
2458   int n_commands;               /* # of command.  */
2459   char *string;
2460   struct pex_obj *pex;
2461   struct command
2462   {
2463     const char *prog;           /* program name.  */
2464     const char **argv;          /* vector of args.  */
2465   };
2466
2467   struct command *commands;     /* each command buffer with above info.  */
2468
2469   gcc_assert (!processing_spec_function);
2470
2471   if (wrapper_string)
2472     {
2473       string = find_a_file (&exec_prefixes, argbuf[0], X_OK, false);
2474       argbuf[0] = (string) ? string : argbuf[0];
2475       insert_wrapper (wrapper_string);
2476     }
2477
2478   /* Count # of piped commands.  */
2479   for (n_commands = 1, i = 0; i < argbuf_index; i++)
2480     if (strcmp (argbuf[i], "|") == 0)
2481       n_commands++;
2482
2483   /* Get storage for each command.  */
2484   commands = (struct command *) alloca (n_commands * sizeof (struct command));
2485
2486   /* Split argbuf into its separate piped processes,
2487      and record info about each one.
2488      Also search for the programs that are to be run.  */
2489
2490   commands[0].prog = argbuf[0]; /* first command.  */
2491   commands[0].argv = &argbuf[0];
2492
2493   if (!wrapper_string)
2494     {
2495       string = find_a_file (&exec_prefixes, commands[0].prog, X_OK, false);
2496       commands[0].argv[0] = (string) ? string : commands[0].argv[0];
2497     }
2498
2499   for (n_commands = 1, i = 0; i < argbuf_index; i++)
2500     if (strcmp (argbuf[i], "|") == 0)
2501       {                         /* each command.  */
2502 #if defined (__MSDOS__) || defined (OS2) || defined (VMS)
2503         fatal_error ("-pipe not supported");
2504 #endif
2505         argbuf[i] = 0;  /* termination of command args.  */
2506         commands[n_commands].prog = argbuf[i + 1];
2507         commands[n_commands].argv = &argbuf[i + 1];
2508         string = find_a_file (&exec_prefixes, commands[n_commands].prog,
2509                               X_OK, false);
2510         if (string)
2511           commands[n_commands].argv[0] = string;
2512         n_commands++;
2513       }
2514
2515   argbuf[argbuf_index] = 0;
2516
2517   /* If -v, print what we are about to do, and maybe query.  */
2518
2519   if (verbose_flag)
2520     {
2521       /* For help listings, put a blank line between sub-processes.  */
2522       if (print_help_list)
2523         fputc ('\n', stderr);
2524
2525       /* Print each piped command as a separate line.  */
2526       for (i = 0; i < n_commands; i++)
2527         {
2528           const char *const *j;
2529
2530           if (verbose_only_flag)
2531             {
2532               for (j = commands[i].argv; *j; j++)
2533                 {
2534                   const char *p;
2535                   for (p = *j; *p; ++p)
2536                     if (!ISALNUM ((unsigned char) *p)
2537                         && *p != '_' && *p != '/' && *p != '-' && *p != '.')
2538                       break;
2539                   if (*p || !*j)
2540                     {
2541                       fprintf (stderr, " \"");
2542                       for (p = *j; *p; ++p)
2543                         {
2544                           if (*p == '"' || *p == '\\' || *p == '$')
2545                             fputc ('\\', stderr);
2546                           fputc (*p, stderr);
2547                         }
2548                       fputc ('"', stderr);
2549                     }
2550                   else
2551                     fprintf (stderr, " %s", *j);
2552                 }
2553             }
2554           else
2555             for (j = commands[i].argv; *j; j++)
2556               fprintf (stderr, " %s", *j);
2557
2558           /* Print a pipe symbol after all but the last command.  */
2559           if (i + 1 != n_commands)
2560             fprintf (stderr, " |");
2561           fprintf (stderr, "\n");
2562         }
2563       fflush (stderr);
2564       if (verbose_only_flag != 0)
2565         {
2566           /* verbose_only_flag should act as if the spec was
2567              executed, so increment execution_count before
2568              returning.  This prevents spurious warnings about
2569              unused linker input files, etc.  */
2570           execution_count++;
2571           return 0;
2572         }
2573 #ifdef DEBUG
2574       fnotice (stderr, "\nGo ahead? (y or n) ");
2575       fflush (stderr);
2576       i = getchar ();
2577       if (i != '\n')
2578         while (getchar () != '\n')
2579           ;
2580
2581       if (i != 'y' && i != 'Y')
2582         return 0;
2583 #endif /* DEBUG */
2584     }
2585
2586 #ifdef ENABLE_VALGRIND_CHECKING
2587   /* Run the each command through valgrind.  To simplify prepending the
2588      path to valgrind and the option "-q" (for quiet operation unless
2589      something triggers), we allocate a separate argv array.  */
2590
2591   for (i = 0; i < n_commands; i++)
2592     {
2593       const char **argv;
2594       int argc;
2595       int j;
2596
2597       for (argc = 0; commands[i].argv[argc] != NULL; argc++)
2598         ;
2599
2600       argv = XALLOCAVEC (const char *, argc + 3);
2601
2602       argv[0] = VALGRIND_PATH;
2603       argv[1] = "-q";
2604       for (j = 2; j < argc + 2; j++)
2605         argv[j] = commands[i].argv[j - 2];
2606       argv[j] = NULL;
2607
2608       commands[i].argv = argv;
2609       commands[i].prog = argv[0];
2610     }
2611 #endif
2612
2613   /* Run each piped subprocess.  */
2614
2615   pex = pex_init (PEX_USE_PIPES | ((report_times || report_times_to_file)
2616                                    ? PEX_RECORD_TIMES : 0),
2617                   progname, temp_filename);
2618   if (pex == NULL)
2619     fatal_error ("pex_init failed: %m");
2620
2621   for (i = 0; i < n_commands; i++)
2622     {
2623       const char *errmsg;
2624       int err;
2625       const char *string = commands[i].argv[0];
2626
2627       errmsg = pex_run (pex,
2628                         ((i + 1 == n_commands ? PEX_LAST : 0)
2629                          | (string == commands[i].prog ? PEX_SEARCH : 0)),
2630                         string, CONST_CAST (char **, commands[i].argv),
2631                         NULL, NULL, &err);
2632       if (errmsg != NULL)
2633         {
2634           if (err == 0)
2635             fatal_error (errmsg);
2636           else
2637             {
2638               errno = err;
2639               pfatal_with_name (errmsg);
2640             }
2641         }
2642
2643       if (string != commands[i].prog)
2644         free (CONST_CAST (char *, string));
2645     }
2646
2647   execution_count++;
2648
2649   /* Wait for all the subprocesses to finish.  */
2650
2651   {
2652     int *statuses;
2653     struct pex_time *times = NULL;
2654     int ret_code = 0;
2655
2656     statuses = (int *) alloca (n_commands * sizeof (int));
2657     if (!pex_get_status (pex, n_commands, statuses))
2658       fatal_error ("failed to get exit status: %m");
2659
2660     if (report_times || report_times_to_file)
2661       {
2662         times = (struct pex_time *) alloca (n_commands * sizeof (struct pex_time));
2663         if (!pex_get_times (pex, n_commands, times))
2664           fatal_error ("failed to get process times: %m");
2665       }
2666
2667     pex_free (pex);
2668
2669     for (i = 0; i < n_commands; ++i)
2670       {
2671         int status = statuses[i];
2672
2673         if (WIFSIGNALED (status))
2674           {
2675 #ifdef SIGPIPE
2676             /* SIGPIPE is a special case.  It happens in -pipe mode
2677                when the compiler dies before the preprocessor is done,
2678                or the assembler dies before the compiler is done.
2679                There's generally been an error already, and this is
2680                just fallout.  So don't generate another error unless
2681                we would otherwise have succeeded.  */
2682             if (WTERMSIG (status) == SIGPIPE
2683                 && (signal_count || greatest_status >= MIN_FATAL_STATUS))
2684               {
2685                 signal_count++;
2686                 ret_code = -1;
2687               }
2688             else
2689 #endif
2690               internal_error ("%s (program %s)",
2691                               strsignal (WTERMSIG (status)), commands[i].prog);
2692           }
2693         else if (WIFEXITED (status)
2694                  && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
2695           {
2696             if (WEXITSTATUS (status) > greatest_status)
2697               greatest_status = WEXITSTATUS (status);
2698             ret_code = -1;
2699           }
2700
2701         if (report_times || report_times_to_file)
2702           {
2703             struct pex_time *pt = &times[i];
2704             double ut, st;
2705
2706             ut = ((double) pt->user_seconds
2707                   + (double) pt->user_microseconds / 1.0e6);
2708             st = ((double) pt->system_seconds
2709                   + (double) pt->system_microseconds / 1.0e6);
2710
2711             if (ut + st != 0)
2712               {
2713                 if (report_times)
2714                   fnotice (stderr, "# %s %.2f %.2f\n",
2715                            commands[i].prog, ut, st);
2716
2717                 if (report_times_to_file)
2718                   {
2719                     int c = 0;
2720                     const char *const *j;
2721
2722                     fprintf (report_times_to_file, "%g %g", ut, st);
2723
2724                     for (j = &commands[i].prog; *j; j = &commands[i].argv[++c])
2725                       {
2726                         const char *p;
2727                         for (p = *j; *p; ++p)
2728                           if (*p == '"' || *p == '\\' || *p == '$'
2729                               || ISSPACE (*p))
2730                             break;
2731
2732                         if (*p)
2733                           {
2734                             fprintf (report_times_to_file, " \"");
2735                             for (p = *j; *p; ++p)
2736                               {
2737                                 if (*p == '"' || *p == '\\' || *p == '$')
2738                                   fputc ('\\', report_times_to_file);
2739                                 fputc (*p, report_times_to_file);
2740                               }
2741                             fputc ('"', report_times_to_file);
2742                           }
2743                         else
2744                           fprintf (report_times_to_file, " %s", *j);
2745                       }
2746
2747                     fputc ('\n', report_times_to_file);
2748                   }
2749               }
2750           }
2751       }
2752
2753     return ret_code;
2754   }
2755 }
2756 \f
2757 /* Find all the switches given to us
2758    and make a vector describing them.
2759    The elements of the vector are strings, one per switch given.
2760    If a switch uses following arguments, then the `part1' field
2761    is the switch itself and the `args' field
2762    is a null-terminated vector containing the following arguments.
2763    Bits in the `live_cond' field are:
2764    SWITCH_LIVE to indicate this switch is true in a conditional spec.
2765    SWITCH_FALSE to indicate this switch is overridden by a later switch.
2766    SWITCH_IGNORE to indicate this switch should be ignored (used in %<S).
2767    SWITCH_IGNORE_PERMANENTLY to indicate this switch should be ignored
2768    in all do_spec calls afterwards.  Used for %<S from self specs.
2769    The `validated' field is nonzero if any spec has looked at this switch;
2770    if it remains zero at the end of the run, it must be meaningless.  */
2771
2772 #define SWITCH_LIVE                     0x1
2773 #define SWITCH_FALSE                    0x2
2774 #define SWITCH_IGNORE                   0x4
2775 #define SWITCH_IGNORE_PERMANENTLY       0x8
2776
2777 struct switchstr
2778 {
2779   const char *part1;
2780   const char **args;
2781   unsigned int live_cond;
2782   unsigned char validated;
2783   unsigned char ordering;
2784 };
2785
2786 static struct switchstr *switches;
2787
2788 static int n_switches;
2789
2790 static int n_switches_alloc;
2791
2792 /* Set to zero if -fcompare-debug is disabled, positive if it's
2793    enabled and we're running the first compilation, negative if it's
2794    enabled and we're running the second compilation.  For most of the
2795    time, it's in the range -1..1, but it can be temporarily set to 2
2796    or 3 to indicate that the -fcompare-debug flags didn't come from
2797    the command-line, but rather from the GCC_COMPARE_DEBUG environment
2798    variable, until a synthesized -fcompare-debug flag is added to the
2799    command line.  */
2800 int compare_debug;
2801
2802 /* Set to nonzero if we've seen the -fcompare-debug-second flag.  */
2803 int compare_debug_second;
2804
2805 /* Set to the flags that should be passed to the second compilation in
2806    a -fcompare-debug compilation.  */
2807 const char *compare_debug_opt;
2808
2809 static struct switchstr *switches_debug_check[2];
2810
2811 static int n_switches_debug_check[2];
2812
2813 static int n_switches_alloc_debug_check[2];
2814
2815 static char *debug_check_temp_file[2];
2816
2817 /* Language is one of three things:
2818
2819    1) The name of a real programming language.
2820    2) NULL, indicating that no one has figured out
2821    what it is yet.
2822    3) '*', indicating that the file should be passed
2823    to the linker.  */
2824 struct infile
2825 {
2826   const char *name;
2827   const char *language;
2828   struct compiler *incompiler;
2829   bool compiled;
2830   bool preprocessed;
2831 };
2832
2833 /* Also a vector of input files specified.  */
2834
2835 static struct infile *infiles;
2836
2837 int n_infiles;
2838
2839 static int n_infiles_alloc;
2840
2841 /* True if multiple input files are being compiled to a single
2842    assembly file.  */
2843
2844 static bool combine_inputs;
2845
2846 /* This counts the number of libraries added by lang_specific_driver, so that
2847    we can tell if there were any user supplied any files or libraries.  */
2848
2849 static int added_libraries;
2850
2851 /* And a vector of corresponding output files is made up later.  */
2852
2853 const char **outfiles;
2854 \f
2855 #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
2856
2857 /* Convert NAME to a new name if it is the standard suffix.  DO_EXE
2858    is true if we should look for an executable suffix.  DO_OBJ
2859    is true if we should look for an object suffix.  */
2860
2861 static const char *
2862 convert_filename (const char *name, int do_exe ATTRIBUTE_UNUSED,
2863                   int do_obj ATTRIBUTE_UNUSED)
2864 {
2865 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
2866   int i;
2867 #endif
2868   int len;
2869
2870   if (name == NULL)
2871     return NULL;
2872
2873   len = strlen (name);
2874
2875 #ifdef HAVE_TARGET_OBJECT_SUFFIX
2876   /* Convert x.o to x.obj if TARGET_OBJECT_SUFFIX is ".obj".  */
2877   if (do_obj && len > 2
2878       && name[len - 2] == '.'
2879       && name[len - 1] == 'o')
2880     {
2881       obstack_grow (&obstack, name, len - 2);
2882       obstack_grow0 (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX));
2883       name = XOBFINISH (&obstack, const char *);
2884     }
2885 #endif
2886
2887 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
2888   /* If there is no filetype, make it the executable suffix (which includes
2889      the ".").  But don't get confused if we have just "-o".  */
2890   if (! do_exe || TARGET_EXECUTABLE_SUFFIX[0] == 0 || (len == 2 && name[0] == '-'))
2891     return name;
2892
2893   for (i = len - 1; i >= 0; i--)
2894     if (IS_DIR_SEPARATOR (name[i]))
2895       break;
2896
2897   for (i++; i < len; i++)
2898     if (name[i] == '.')
2899       return name;
2900
2901   obstack_grow (&obstack, name, len);
2902   obstack_grow0 (&obstack, TARGET_EXECUTABLE_SUFFIX,
2903                  strlen (TARGET_EXECUTABLE_SUFFIX));
2904   name = XOBFINISH (&obstack, const char *);
2905 #endif
2906
2907   return name;
2908 }
2909 #endif
2910 \f
2911 /* Display the command line switches accepted by gcc.  */
2912 static void
2913 display_help (void)
2914 {
2915   printf (_("Usage: %s [options] file...\n"), progname);
2916   fputs (_("Options:\n"), stdout);
2917
2918   fputs (_("  -pass-exit-codes         Exit with highest error code from a phase\n"), stdout);
2919   fputs (_("  --help                   Display this information\n"), stdout);
2920   fputs (_("  --target-help            Display target specific command line options\n"), stdout);
2921   fputs (_("  --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]\n"), stdout);
2922   fputs (_("                           Display specific types of command line options\n"), stdout);
2923   if (! verbose_flag)
2924     fputs (_("  (Use '-v --help' to display command line options of sub-processes)\n"), stdout);
2925   fputs (_("  --version                Display compiler version information\n"), stdout);
2926   fputs (_("  -dumpspecs               Display all of the built in spec strings\n"), stdout);
2927   fputs (_("  -dumpversion             Display the version of the compiler\n"), stdout);
2928   fputs (_("  -dumpmachine             Display the compiler's target processor\n"), stdout);
2929   fputs (_("  -print-search-dirs       Display the directories in the compiler's search path\n"), stdout);
2930   fputs (_("  -print-libgcc-file-name  Display the name of the compiler's companion library\n"), stdout);
2931   fputs (_("  -print-file-name=<lib>   Display the full path to library <lib>\n"), stdout);
2932   fputs (_("  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"), stdout);
2933   fputs (_("  -print-multi-directory   Display the root directory for versions of libgcc\n"), stdout);
2934   fputs (_("\
2935   -print-multi-lib         Display the mapping between command line options and\n\
2936                            multiple library search directories\n"), stdout);
2937   fputs (_("  -print-multi-os-directory Display the relative path to OS libraries\n"), stdout);
2938   fputs (_("  -print-sysroot           Display the target libraries directory\n"), stdout);
2939   fputs (_("  -print-sysroot-headers-suffix Display the sysroot suffix used to find headers\n"), stdout);
2940   fputs (_("  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"), stdout);
2941   fputs (_("  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"), stdout);
2942   fputs (_("  -Wl,<options>            Pass comma-separated <options> on to the linker\n"), stdout);
2943   fputs (_("  -Xassembler <arg>        Pass <arg> on to the assembler\n"), stdout);
2944   fputs (_("  -Xpreprocessor <arg>     Pass <arg> on to the preprocessor\n"), stdout);
2945   fputs (_("  -Xlinker <arg>           Pass <arg> on to the linker\n"), stdout);
2946   fputs (_("  -save-temps              Do not delete intermediate files\n"), stdout);
2947   fputs (_("  -save-temps=<arg>        Do not delete intermediate files\n"), stdout);
2948   fputs (_("\
2949   -no-canonical-prefixes   Do not canonicalize paths when building relative\n\
2950                            prefixes to other gcc components\n"), stdout);
2951   fputs (_("  -pipe                    Use pipes rather than intermediate files\n"), stdout);
2952   fputs (_("  -time                    Time the execution of each subprocess\n"), stdout);
2953   fputs (_("  -specs=<file>            Override built-in specs with the contents of <file>\n"), stdout);
2954   fputs (_("  -std=<standard>          Assume that the input sources are for <standard>\n"), stdout);
2955   fputs (_("\
2956   --sysroot=<directory>    Use <directory> as the root directory for headers\n\
2957                            and libraries\n"), stdout);
2958   fputs (_("  -B <directory>           Add <directory> to the compiler's search paths\n"), stdout);
2959   fputs (_("  -v                       Display the programs invoked by the compiler\n"), stdout);
2960   fputs (_("  -###                     Like -v but options quoted and commands not executed\n"), stdout);
2961   fputs (_("  -E                       Preprocess only; do not compile, assemble or link\n"), stdout);
2962   fputs (_("  -S                       Compile only; do not assemble or link\n"), stdout);
2963   fputs (_("  -c                       Compile and assemble, but do not link\n"), stdout);
2964   fputs (_("  -o <file>                Place the output into <file>\n"), stdout);
2965   fputs (_("\
2966   -x <language>            Specify the language of the following input files\n\
2967                            Permissible languages include: c c++ assembler none\n\
2968                            'none' means revert to the default behavior of\n\
2969                            guessing the language based on the file's extension\n\
2970 "), stdout);
2971
2972   printf (_("\
2973 \nOptions starting with -g, -f, -m, -O, -W, or --param are automatically\n\
2974  passed on to the various sub-processes invoked by %s.  In order to pass\n\
2975  other options on to these processes the -W<letter> options must be used.\n\
2976 "), progname);
2977
2978   /* The rest of the options are displayed by invocations of the various
2979      sub-processes.  */
2980 }
2981
2982 static void
2983 add_preprocessor_option (const char *option, int len)
2984 {
2985   n_preprocessor_options++;
2986
2987   if (! preprocessor_options)
2988     preprocessor_options = XNEWVEC (char *, n_preprocessor_options);
2989   else
2990     preprocessor_options = XRESIZEVEC (char *, preprocessor_options,
2991                                        n_preprocessor_options);
2992
2993   preprocessor_options [n_preprocessor_options - 1] =
2994     save_string (option, len);
2995 }
2996
2997 static void
2998 add_assembler_option (const char *option, int len)
2999 {
3000   n_assembler_options++;
3001
3002   if (! assembler_options)
3003     assembler_options = XNEWVEC (char *, n_assembler_options);
3004   else
3005     assembler_options = XRESIZEVEC (char *, assembler_options,
3006                                     n_assembler_options);
3007
3008   assembler_options [n_assembler_options - 1] = save_string (option, len);
3009 }
3010
3011 static void
3012 add_linker_option (const char *option, int len)
3013 {
3014   n_linker_options++;
3015
3016   if (! linker_options)
3017     linker_options = XNEWVEC (char *, n_linker_options);
3018   else
3019     linker_options = XRESIZEVEC (char *, linker_options, n_linker_options);
3020
3021   linker_options [n_linker_options - 1] = save_string (option, len);
3022 }
3023 \f
3024 /* Allocate space for an input file in infiles.  */
3025
3026 static void
3027 alloc_infile (void)
3028 {
3029   if (n_infiles_alloc == 0)
3030     {
3031       n_infiles_alloc = 16;
3032       infiles = XNEWVEC (struct infile, n_infiles_alloc);
3033     }
3034   else if (n_infiles_alloc == n_infiles)
3035     {
3036       n_infiles_alloc *= 2;
3037       infiles = XRESIZEVEC (struct infile, infiles, n_infiles_alloc);
3038     }
3039 }
3040
3041 /* Store an input file with the given NAME and LANGUAGE in
3042    infiles.  */
3043
3044 static void
3045 add_infile (const char *name, const char *language)
3046 {
3047   alloc_infile ();
3048   infiles[n_infiles].name = name;
3049   infiles[n_infiles++].language = language;
3050 }
3051
3052 /* Allocate space for a switch in switches.  */
3053
3054 static void
3055 alloc_switch (void)
3056 {
3057   if (n_switches_alloc == 0)
3058     {
3059       n_switches_alloc = 16;
3060       switches = XNEWVEC (struct switchstr, n_switches_alloc);
3061     }
3062   else if (n_switches_alloc == n_switches)
3063     {
3064       n_switches_alloc *= 2;
3065       switches = XRESIZEVEC (struct switchstr, switches, n_switches_alloc);
3066     }
3067 }
3068
3069 /* Save an option OPT with N_ARGS arguments in array ARGS, marking it
3070    as validated if VALIDATED.  */
3071
3072 static void
3073 save_switch (const char *opt, size_t n_args, const char *const *args,
3074              bool validated)
3075 {
3076   alloc_switch ();
3077   switches[n_switches].part1 = opt + 1;
3078   if (n_args == 0)
3079     switches[n_switches].args = 0;
3080   else
3081     {
3082       switches[n_switches].args = XNEWVEC (const char *, n_args + 1);
3083       memcpy (switches[n_switches].args, args, n_args * sizeof (const char *));
3084       switches[n_switches].args[n_args] = NULL;
3085     }
3086
3087   switches[n_switches].live_cond = 0;
3088   switches[n_switches].validated = validated;
3089   switches[n_switches].ordering = 0;
3090   n_switches++;
3091 }
3092
3093 /* Handle an option DECODED that is unknown to the option-processing
3094    machinery, but may be known to specs.  */
3095
3096 static bool
3097 driver_unknown_option_callback (const struct cl_decoded_option *decoded)
3098 {
3099   save_switch (decoded->canonical_option[0],
3100                decoded->canonical_option_num_elements - 1,
3101                &decoded->canonical_option[1], false);
3102
3103   return false;
3104 }
3105
3106 /* Handle an option DECODED that is not marked as CL_DRIVER.
3107    LANG_MASK will always be CL_DRIVER.  */
3108
3109 static void
3110 driver_wrong_lang_callback (const struct cl_decoded_option *decoded,
3111                             unsigned int lang_mask ATTRIBUTE_UNUSED)
3112 {
3113   /* At this point, non-driver options are accepted (and expected to
3114      be passed down by specs) unless marked to be rejected by the
3115      driver.  Options to be rejected by the driver but accepted by the
3116      compilers proper are treated just like completely unknown
3117      options.  */
3118   const struct cl_option *option = &cl_options[decoded->opt_index];
3119
3120   if (option->flags & CL_REJECT_DRIVER)
3121     error ("unrecognized command line option %qs",
3122            decoded->orig_option_with_args_text);
3123   else
3124     driver_unknown_option_callback (decoded);
3125 }
3126
3127 /* Note that an option (index OPT_INDEX, argument ARG, value VALUE)
3128    has been successfully handled with a handler for mask MASK.  */
3129
3130 static void
3131 driver_post_handling_callback (const struct cl_decoded_option *decoded ATTRIBUTE_UNUSED,
3132                                unsigned int mask ATTRIBUTE_UNUSED)
3133 {
3134   /* Nothing to do here.  */
3135 }
3136
3137 static const char *spec_lang = 0;
3138 static int last_language_n_infiles;
3139
3140 /* Handle a driver option; arguments and return value as for
3141    handle_option.  */
3142
3143 static bool
3144 driver_handle_option (struct gcc_options *opts,
3145                       struct gcc_options *opts_set,
3146                       const struct cl_decoded_option *decoded,
3147                       unsigned int lang_mask ATTRIBUTE_UNUSED, int kind,
3148                       const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED)
3149 {
3150   size_t opt_index = decoded->opt_index;
3151   const char *arg = decoded->arg;
3152   const char *compare_debug_replacement_opt;
3153   int value = decoded->value;
3154   bool validated = false;
3155   bool do_save = true;
3156
3157   gcc_assert (opts == &global_options);
3158   gcc_assert (opts_set == &global_options_set);
3159   gcc_assert (kind == DK_UNSPECIFIED);
3160
3161   switch (opt_index)
3162     {
3163     case OPT_dumpspecs:
3164       {
3165         struct spec_list *sl;
3166         init_spec ();
3167         for (sl = specs; sl; sl = sl->next)
3168           printf ("*%s:\n%s\n\n", sl->name, *(sl->ptr_spec));
3169         if (link_command_spec)
3170           printf ("*link_command:\n%s\n\n", link_command_spec);
3171         exit (0);
3172       }
3173
3174     case OPT_dumpversion:
3175       printf ("%s\n", spec_version);
3176       exit (0);
3177
3178     case OPT_dumpmachine:
3179       printf ("%s\n", spec_machine);
3180       exit (0);
3181
3182     case OPT__version:
3183       print_version = 1;
3184
3185       /* CPP driver cannot obtain switch from cc1_options.  */
3186       if (is_cpp_driver)
3187         add_preprocessor_option ("--version", strlen ("--version"));
3188       add_assembler_option ("--version", strlen ("--version"));
3189       add_linker_option ("--version", strlen ("--version"));
3190       break;
3191
3192     case OPT__help:
3193       print_help_list = 1;
3194
3195       /* CPP driver cannot obtain switch from cc1_options.  */
3196       if (is_cpp_driver)
3197         add_preprocessor_option ("--help", 6);
3198       add_assembler_option ("--help", 6);
3199       add_linker_option ("--help", 6);
3200       break;
3201
3202     case OPT__help_:
3203       print_subprocess_help = 2;
3204       break;
3205
3206     case OPT__target_help:
3207       print_subprocess_help = 1;
3208
3209       /* CPP driver cannot obtain switch from cc1_options.  */
3210       if (is_cpp_driver)
3211         add_preprocessor_option ("--target-help", 13);
3212       add_assembler_option ("--target-help", 13);
3213       add_linker_option ("--target-help", 13);
3214       break;
3215
3216     case OPT_pass_exit_codes:
3217     case OPT_print_search_dirs:
3218     case OPT_print_file_name_:
3219     case OPT_print_prog_name_:
3220     case OPT_print_multi_lib:
3221     case OPT_print_multi_directory:
3222     case OPT_print_sysroot:
3223     case OPT_print_multi_os_directory:
3224     case OPT_print_sysroot_headers_suffix:
3225     case OPT_time:
3226     case OPT_wrapper:
3227       /* These options set the variables specified in common.opt
3228          automatically, and do not need to be saved for spec
3229          processing.  */
3230       do_save = false;
3231       break;
3232
3233     case OPT_print_libgcc_file_name:
3234       print_file_name = "libgcc.a";
3235       do_save = false;
3236       break;
3237
3238     case OPT_fcompare_debug_second:
3239       compare_debug_second = 1;
3240       break;
3241
3242     case OPT_fcompare_debug:
3243       switch (value)
3244         {
3245         case 0:
3246           compare_debug_replacement_opt = "-fcompare-debug=";
3247           arg = "";
3248           goto compare_debug_with_arg;
3249
3250         case 1:
3251           compare_debug_replacement_opt = "-fcompare-debug=-gtoggle";
3252           arg = "-gtoggle";
3253           goto compare_debug_with_arg;
3254
3255         default:
3256           gcc_unreachable ();
3257         }
3258       break;
3259
3260     case OPT_fcompare_debug_:
3261       compare_debug_replacement_opt = decoded->canonical_option[0];
3262     compare_debug_with_arg:
3263       gcc_assert (decoded->canonical_option_num_elements == 1);
3264       gcc_assert (arg != NULL);
3265       if (arg)
3266         compare_debug = 1;
3267       else
3268         compare_debug = -1;
3269       if (compare_debug < 0)
3270         compare_debug_opt = NULL;
3271       else
3272         compare_debug_opt = arg;
3273       save_switch (compare_debug_replacement_opt, 0, NULL, validated);
3274       return true;
3275
3276     case OPT_Wa_:
3277       {
3278         int prev, j;
3279         /* Pass the rest of this option to the assembler.  */
3280
3281         /* Split the argument at commas.  */
3282         prev = 0;
3283         for (j = 0; arg[j]; j++)
3284           if (arg[j] == ',')
3285             {
3286               add_assembler_option (arg + prev, j - prev);
3287               prev = j + 1;
3288             }
3289
3290         /* Record the part after the last comma.  */
3291         add_assembler_option (arg + prev, j - prev);
3292       }
3293       do_save = false;
3294       break;
3295
3296     case OPT_Wp_:
3297       {
3298         int prev, j;
3299         /* Pass the rest of this option to the preprocessor.  */
3300
3301         /* Split the argument at commas.  */
3302         prev = 0;
3303         for (j = 0; arg[j]; j++)
3304           if (arg[j] == ',')
3305             {
3306               add_preprocessor_option (arg + prev, j - prev);
3307               prev = j + 1;
3308             }
3309
3310         /* Record the part after the last comma.  */
3311         add_preprocessor_option (arg + prev, j - prev);
3312       }
3313       do_save = false;
3314       break;
3315
3316     case OPT_Wl_:
3317       {
3318         int prev, j;
3319         /* Split the argument at commas.  */
3320         prev = 0;
3321         for (j = 0; arg[j]; j++)
3322           if (arg[j] == ',')
3323             {
3324               add_infile (save_string (arg + prev, j - prev), "*");
3325               prev = j + 1;
3326             }
3327         /* Record the part after the last comma.  */
3328         add_infile (arg + prev, "*");
3329       }
3330       do_save = false;
3331       break;
3332
3333     case OPT_Xlinker:
3334       add_infile (arg, "*");
3335       do_save = false;
3336       break;
3337
3338     case OPT_Xpreprocessor:
3339       add_preprocessor_option (arg, strlen (arg));
3340       do_save = false;
3341       break;
3342
3343     case OPT_Xassembler:
3344       add_assembler_option (arg, strlen (arg));
3345       do_save = false;
3346       break;
3347
3348     case OPT_l:
3349       /* POSIX allows separation of -l and the lib arg; canonicalize
3350          by concatenating -l with its arg */
3351       add_infile (concat ("-l", arg, NULL), "*");
3352       do_save = false;
3353       break;
3354
3355     case OPT_L:
3356       /* Similarly, canonicalize -L for linkers that may not accept
3357          separate arguments.  */
3358       save_switch (concat ("-L", arg, NULL), 0, NULL, validated);
3359       return true;
3360
3361     case OPT_save_temps:
3362       save_temps_flag = SAVE_TEMPS_CWD;
3363       validated = true;
3364       break;
3365
3366     case OPT_save_temps_:
3367       if (strcmp (arg, "cwd") == 0)
3368         save_temps_flag = SAVE_TEMPS_CWD;
3369       else if (strcmp (arg, "obj") == 0
3370                || strcmp (arg, "object") == 0)
3371         save_temps_flag = SAVE_TEMPS_OBJ;
3372       else
3373         fatal_error ("%qs is an unknown -save-temps option",
3374                      decoded->orig_option_with_args_text);
3375       break;
3376
3377     case OPT_no_canonical_prefixes:
3378       /* Already handled as a special case, so ignored here.  */
3379       do_save = false;
3380       break;
3381
3382     case OPT_pipe:
3383       validated = true;
3384       /* These options set the variables specified in common.opt
3385          automatically, but do need to be saved for spec
3386          processing.  */
3387       break;
3388
3389     case OPT_specs_:
3390       {
3391         struct user_specs *user = XNEW (struct user_specs);
3392
3393         user->next = (struct user_specs *) 0;
3394         user->filename = arg;
3395         if (user_specs_tail)
3396           user_specs_tail->next = user;
3397         else
3398           user_specs_head = user;
3399         user_specs_tail = user;
3400       }
3401       do_save = false;
3402       break;
3403
3404     case OPT__sysroot_:
3405       target_system_root = arg;
3406       target_system_root_changed = 1;
3407       do_save = false;
3408       break;
3409
3410     case OPT_time_:
3411       if (report_times_to_file)
3412         fclose (report_times_to_file);
3413       report_times_to_file = fopen (arg, "a");
3414       do_save = false;
3415       break;
3416
3417     case OPT____:
3418       /* "-###"
3419          This is similar to -v except that there is no execution
3420          of the commands and the echoed arguments are quoted.  It
3421          is intended for use in shell scripts to capture the
3422          driver-generated command line.  */
3423       verbose_only_flag++;
3424       verbose_flag++;
3425       do_save = false;
3426       break;
3427
3428     case OPT_B:
3429       {
3430         size_t len = strlen (arg);
3431
3432         /* Catch the case where the user has forgotten to append a
3433            directory separator to the path.  Note, they may be using
3434            -B to add an executable name prefix, eg "i386-elf-", in
3435            order to distinguish between multiple installations of
3436            GCC in the same directory.  Hence we must check to see
3437            if appending a directory separator actually makes a
3438            valid directory name.  */
3439         if (!IS_DIR_SEPARATOR (arg[len - 1])
3440             && is_directory (arg, false))
3441           {
3442             char *tmp = XNEWVEC (char, len + 2);
3443             strcpy (tmp, arg);
3444             tmp[len] = DIR_SEPARATOR;
3445             tmp[++len] = 0;
3446             arg = tmp;
3447           }
3448
3449         add_prefix (&exec_prefixes, arg, NULL,
3450                     PREFIX_PRIORITY_B_OPT, 0, 0);
3451         add_prefix (&startfile_prefixes, arg, NULL,
3452                     PREFIX_PRIORITY_B_OPT, 0, 0);
3453         add_prefix (&include_prefixes, arg, NULL,
3454                     PREFIX_PRIORITY_B_OPT, 0, 0);
3455       }
3456       validated = true;
3457       break;
3458
3459     case OPT_v: /* Print our subcommands and print versions.  */
3460       verbose_flag++;
3461       break;
3462
3463     case OPT_x:
3464       spec_lang = arg;
3465       if (!strcmp (spec_lang, "none"))
3466         /* Suppress the warning if -xnone comes after the last input
3467            file, because alternate command interfaces like g++ might
3468            find it useful to place -xnone after each input file.  */
3469         spec_lang = 0;
3470       else
3471         last_language_n_infiles = n_infiles;
3472       do_save = false;
3473       break;
3474
3475     case OPT_o:
3476       have_o = 1;
3477 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) || defined(HAVE_TARGET_OBJECT_SUFFIX)
3478       arg = convert_filename (arg, ! have_c, 0);
3479 #endif
3480       /* Save the output name in case -save-temps=obj was used.  */
3481       save_temps_prefix = xstrdup (arg);
3482       /* On some systems, ld cannot handle "-o" without a space.  So
3483          split the option from its argument.  */
3484       save_switch ("-o", 1, &arg, validated);
3485       return true;
3486
3487     case OPT_static_libgcc:
3488     case OPT_shared_libgcc:
3489     case OPT_static_libgfortran:
3490     case OPT_static_libstdc__:
3491       /* These are always valid, since gcc.c itself understands the
3492          first two, gfortranspec.c understands -static-libgfortran and
3493          g++spec.c understands -static-libstdc++ */
3494       validated = true;
3495       break;
3496
3497     default:
3498       /* Various driver options need no special processing at this
3499          point, having been handled in a prescan above or being
3500          handled by specs.  */
3501       break;
3502     }
3503
3504   if (do_save)
3505     save_switch (decoded->canonical_option[0],
3506                  decoded->canonical_option_num_elements - 1,
3507                  &decoded->canonical_option[1], validated);
3508   return true;
3509 }
3510
3511 /* Put the driver's standard set of option handlers in *HANDLERS.  */
3512
3513 static void
3514 set_option_handlers (struct cl_option_handlers *handlers)
3515 {
3516   handlers->unknown_option_callback = driver_unknown_option_callback;
3517   handlers->wrong_lang_callback = driver_wrong_lang_callback;
3518   handlers->post_handling_callback = driver_post_handling_callback;
3519   handlers->num_handlers = 1;
3520   handlers->handlers[0].handler = driver_handle_option;
3521   handlers->handlers[0].mask = CL_DRIVER;
3522 }
3523
3524 /* Create the vector `switches' and its contents.
3525    Store its length in `n_switches'.  */
3526
3527 static void
3528 process_command (unsigned int decoded_options_count,
3529                  struct cl_decoded_option *decoded_options)
3530 {
3531   const char *temp;
3532   char *temp1;
3533   const char *tooldir_prefix;
3534   char *(*get_relative_prefix) (const char *, const char *,
3535                                 const char *) = NULL;
3536   struct cl_option_handlers handlers;
3537   unsigned int j;
3538
3539   GET_ENVIRONMENT (gcc_exec_prefix, "GCC_EXEC_PREFIX");
3540
3541   n_switches = 0;
3542   n_infiles = 0;
3543   added_libraries = 0;
3544
3545   /* Figure compiler version from version string.  */
3546
3547   compiler_version = temp1 = xstrdup (version_string);
3548
3549   for (; *temp1; ++temp1)
3550     {
3551       if (*temp1 == ' ')
3552         {
3553           *temp1 = '\0';
3554           break;
3555         }
3556     }
3557
3558   /* Handle any -no-canonical-prefixes flag early, to assign the function
3559      that builds relative prefixes.  This function creates default search
3560      paths that are needed later in normal option handling.  */
3561
3562   for (j = 1; j < decoded_options_count; j++)
3563     {
3564       if (decoded_options[j].opt_index == OPT_no_canonical_prefixes)
3565         {
3566           get_relative_prefix = make_relative_prefix_ignore_links;
3567           break;
3568         }
3569     }
3570   if (! get_relative_prefix)
3571     get_relative_prefix = make_relative_prefix;
3572
3573   /* Set up the default search paths.  If there is no GCC_EXEC_PREFIX,
3574      see if we can create it from the pathname specified in
3575      decoded_options[0].arg.  */
3576
3577   gcc_libexec_prefix = standard_libexec_prefix;
3578 #ifndef VMS
3579   /* FIXME: make_relative_prefix doesn't yet work for VMS.  */
3580   if (!gcc_exec_prefix)
3581     {
3582       gcc_exec_prefix = get_relative_prefix (decoded_options[0].arg,
3583                                              standard_bindir_prefix,
3584                                              standard_exec_prefix);
3585       gcc_libexec_prefix = get_relative_prefix (decoded_options[0].arg,
3586                                              standard_bindir_prefix,
3587                                              standard_libexec_prefix);
3588       if (gcc_exec_prefix)
3589         xputenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL));
3590     }
3591   else
3592     {
3593       /* make_relative_prefix requires a program name, but
3594          GCC_EXEC_PREFIX is typically a directory name with a trailing
3595          / (which is ignored by make_relative_prefix), so append a
3596          program name.  */
3597       char *tmp_prefix = concat (gcc_exec_prefix, "gcc", NULL);
3598       gcc_libexec_prefix = get_relative_prefix (tmp_prefix,
3599                                                 standard_exec_prefix,
3600                                                 standard_libexec_prefix);
3601
3602       /* The path is unrelocated, so fallback to the original setting.  */
3603       if (!gcc_libexec_prefix)
3604         gcc_libexec_prefix = standard_libexec_prefix;
3605
3606       free (tmp_prefix);
3607     }
3608 #else
3609 #endif
3610   /* From this point onward, gcc_exec_prefix is non-null if the toolchain
3611      is relocated. The toolchain was either relocated using GCC_EXEC_PREFIX
3612      or an automatically created GCC_EXEC_PREFIX from
3613      decoded_options[0].arg.  */
3614
3615   /* Do language-specific adjustment/addition of flags.  */
3616   lang_specific_driver (&decoded_options, &decoded_options_count,
3617                         &added_libraries);
3618
3619   if (gcc_exec_prefix)
3620     {
3621       int len = strlen (gcc_exec_prefix);
3622
3623       if (len > (int) sizeof ("/lib/gcc/") - 1
3624           && (IS_DIR_SEPARATOR (gcc_exec_prefix[len-1])))
3625         {
3626           temp = gcc_exec_prefix + len - sizeof ("/lib/gcc/") + 1;
3627           if (IS_DIR_SEPARATOR (*temp)
3628               && strncmp (temp + 1, "lib", 3) == 0
3629               && IS_DIR_SEPARATOR (temp[4])
3630               && strncmp (temp + 5, "gcc", 3) == 0)
3631             len -= sizeof ("/lib/gcc/") - 1;
3632         }
3633
3634       set_std_prefix (gcc_exec_prefix, len);
3635       add_prefix (&exec_prefixes, gcc_libexec_prefix, "GCC",
3636                   PREFIX_PRIORITY_LAST, 0, 0);
3637       add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC",
3638                   PREFIX_PRIORITY_LAST, 0, 0);
3639     }
3640
3641   /* COMPILER_PATH and LIBRARY_PATH have values
3642      that are lists of directory names with colons.  */
3643
3644   GET_ENVIRONMENT (temp, "COMPILER_PATH");
3645   if (temp)
3646     {
3647       const char *startp, *endp;
3648       char *nstore = (char *) alloca (strlen (temp) + 3);
3649
3650       startp = endp = temp;
3651       while (1)
3652         {
3653           if (*endp == PATH_SEPARATOR || *endp == 0)
3654             {
3655               strncpy (nstore, startp, endp - startp);
3656               if (endp == startp)
3657                 strcpy (nstore, concat (".", dir_separator_str, NULL));
3658               else if (!IS_DIR_SEPARATOR (endp[-1]))
3659                 {
3660                   nstore[endp - startp] = DIR_SEPARATOR;
3661                   nstore[endp - startp + 1] = 0;
3662                 }
3663               else
3664                 nstore[endp - startp] = 0;
3665               add_prefix (&exec_prefixes, nstore, 0,
3666                           PREFIX_PRIORITY_LAST, 0, 0);
3667               add_prefix (&include_prefixes, nstore, 0,
3668                           PREFIX_PRIORITY_LAST, 0, 0);
3669               if (*endp == 0)
3670                 break;
3671               endp = startp = endp + 1;
3672             }
3673           else
3674             endp++;
3675         }
3676     }
3677
3678   GET_ENVIRONMENT (temp, LIBRARY_PATH_ENV);
3679   if (temp && *cross_compile == '0')
3680     {
3681       const char *startp, *endp;
3682       char *nstore = (char *) alloca (strlen (temp) + 3);
3683
3684       startp = endp = temp;
3685       while (1)
3686         {
3687           if (*endp == PATH_SEPARATOR || *endp == 0)
3688             {
3689               strncpy (nstore, startp, endp - startp);
3690               if (endp == startp)
3691                 strcpy (nstore, concat (".", dir_separator_str, NULL));
3692               else if (!IS_DIR_SEPARATOR (endp[-1]))
3693                 {
3694                   nstore[endp - startp] = DIR_SEPARATOR;
3695                   nstore[endp - startp + 1] = 0;
3696                 }
3697               else
3698                 nstore[endp - startp] = 0;
3699               add_prefix (&startfile_prefixes, nstore, NULL,
3700                           PREFIX_PRIORITY_LAST, 0, 1);
3701               if (*endp == 0)
3702                 break;
3703               endp = startp = endp + 1;
3704             }
3705           else
3706             endp++;
3707         }
3708     }
3709
3710   /* Use LPATH like LIBRARY_PATH (for the CMU build program).  */
3711   GET_ENVIRONMENT (temp, "LPATH");
3712   if (temp && *cross_compile == '0')
3713     {
3714       const char *startp, *endp;
3715       char *nstore = (char *) alloca (strlen (temp) + 3);
3716
3717       startp = endp = temp;
3718       while (1)
3719         {
3720           if (*endp == PATH_SEPARATOR || *endp == 0)
3721             {
3722               strncpy (nstore, startp, endp - startp);
3723               if (endp == startp)
3724                 strcpy (nstore, concat (".", dir_separator_str, NULL));
3725               else if (!IS_DIR_SEPARATOR (endp[-1]))
3726                 {
3727                   nstore[endp - startp] = DIR_SEPARATOR;
3728                   nstore[endp - startp + 1] = 0;
3729                 }
3730               else
3731                 nstore[endp - startp] = 0;
3732               add_prefix (&startfile_prefixes, nstore, NULL,
3733                           PREFIX_PRIORITY_LAST, 0, 1);
3734               if (*endp == 0)
3735                 break;
3736               endp = startp = endp + 1;
3737             }
3738           else
3739             endp++;
3740         }
3741     }
3742
3743   /* Process the options and store input files and switches in their
3744      vectors.  */
3745
3746   last_language_n_infiles = -1;
3747
3748   set_option_handlers (&handlers);
3749
3750   for (j = 1; j < decoded_options_count; j++)
3751     {
3752       switch (decoded_options[j].opt_index)
3753         {
3754         case OPT_S:
3755         case OPT_c:
3756         case OPT_E:
3757           have_c = 1;
3758           break;
3759         }
3760       if (have_c)
3761         break;
3762     }
3763
3764   for (j = 1; j < decoded_options_count; j++)
3765     {
3766       if (decoded_options[j].opt_index == OPT_SPECIAL_input_file)
3767         {
3768           const char *arg = decoded_options[j].arg;
3769           const char *p = strrchr (arg, '@');
3770           char *fname;
3771           long offset;
3772           int consumed;
3773 #ifdef HAVE_TARGET_OBJECT_SUFFIX
3774           arg = convert_filename (arg, 0, access (arg, F_OK));
3775 #endif
3776           /* For LTO static archive support we handle input file
3777              specifications that are composed of a filename and
3778              an offset like FNAME@OFFSET.  */
3779           if (p
3780               && p != arg
3781               && sscanf (p, "@%li%n", &offset, &consumed) >= 1
3782               && strlen (p) == (unsigned int)consumed)
3783             {
3784               fname = (char *)xmalloc (p - arg + 1);
3785               memcpy (fname, arg, p - arg);
3786               fname[p - arg] = '\0';
3787               /* Only accept non-stdin and existing FNAME parts, otherwise
3788                  try with the full name.  */
3789               if (strcmp (fname, "-") == 0 || access (fname, F_OK) < 0)
3790                 {
3791                   free (fname);
3792                   fname = xstrdup (arg);
3793                 }
3794             }
3795           else
3796             fname = xstrdup (arg);
3797  
3798           if (strcmp (fname, "-") != 0 && access (fname, F_OK) < 0)
3799             perror_with_name (fname);
3800           else
3801             add_infile (arg, spec_lang);
3802
3803           free (fname);
3804           continue;
3805         }
3806
3807       read_cmdline_option (&global_options, &global_options_set,
3808                            decoded_options + j, CL_DRIVER, &handlers,
3809                            global_dc);
3810     }
3811
3812   /* If -save-temps=obj and -o name, create the prefix to use for %b.
3813      Otherwise just make -save-temps=obj the same as -save-temps=cwd.  */
3814   if (save_temps_flag == SAVE_TEMPS_OBJ && save_temps_prefix != NULL)
3815     {
3816       save_temps_length = strlen (save_temps_prefix);
3817       temp = strrchr (lbasename (save_temps_prefix), '.');
3818       if (temp)
3819         {
3820           save_temps_length -= strlen (temp);
3821           save_temps_prefix[save_temps_length] = '\0';
3822         }
3823
3824     }
3825   else if (save_temps_prefix != NULL)
3826     {
3827       free (save_temps_prefix);
3828       save_temps_prefix = NULL;
3829     }
3830
3831   if (save_temps_flag && use_pipes)
3832     {
3833       /* -save-temps overrides -pipe, so that temp files are produced */
3834       if (save_temps_flag)
3835         warning (0, "-pipe ignored because -save-temps specified");
3836       use_pipes = 0;
3837     }
3838
3839   if (!compare_debug)
3840     {
3841       const char *gcd = getenv ("GCC_COMPARE_DEBUG");
3842
3843       if (gcd && gcd[0] == '-')
3844         {
3845           compare_debug = 2;
3846           compare_debug_opt = gcd;
3847         }
3848       else if (gcd && *gcd && strcmp (gcd, "0"))
3849         {
3850           compare_debug = 3;
3851           compare_debug_opt = "-gtoggle";
3852         }
3853     }
3854   else if (compare_debug < 0)
3855     {
3856       compare_debug = 0;
3857       gcc_assert (!compare_debug_opt);
3858     }
3859
3860   /* Set up the search paths.  We add directories that we expect to
3861      contain GNU Toolchain components before directories specified by
3862      the machine description so that we will find GNU components (like
3863      the GNU assembler) before those of the host system.  */
3864
3865   /* If we don't know where the toolchain has been installed, use the
3866      configured-in locations.  */
3867   if (!gcc_exec_prefix)
3868     {
3869 #ifndef OS2
3870       add_prefix (&exec_prefixes, standard_libexec_prefix, "GCC",
3871                   PREFIX_PRIORITY_LAST, 1, 0);
3872       add_prefix (&exec_prefixes, standard_libexec_prefix, "BINUTILS",
3873                   PREFIX_PRIORITY_LAST, 2, 0);
3874       add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS",
3875                   PREFIX_PRIORITY_LAST, 2, 0);
3876 #endif
3877       add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS",
3878                   PREFIX_PRIORITY_LAST, 1, 0);
3879     }
3880
3881   gcc_assert (!IS_ABSOLUTE_PATH (tooldir_base_prefix));
3882   tooldir_prefix = concat (tooldir_base_prefix, spec_machine,
3883                            dir_separator_str, NULL);
3884
3885   /* Look for tools relative to the location from which the driver is
3886      running, or, if that is not available, the configured prefix.  */
3887   tooldir_prefix
3888     = concat (gcc_exec_prefix ? gcc_exec_prefix : standard_exec_prefix,
3889               spec_machine, dir_separator_str,
3890               spec_version, dir_separator_str, tooldir_prefix, NULL);
3891
3892   add_prefix (&exec_prefixes,
3893               concat (tooldir_prefix, "bin", dir_separator_str, NULL),
3894               "BINUTILS", PREFIX_PRIORITY_LAST, 0, 0);
3895   add_prefix (&startfile_prefixes,
3896               concat (tooldir_prefix, "lib", dir_separator_str, NULL),
3897               "BINUTILS", PREFIX_PRIORITY_LAST, 0, 1);
3898
3899 #if defined(TARGET_SYSTEM_ROOT_RELOCATABLE) && !defined(VMS)
3900   /* If the normal TARGET_SYSTEM_ROOT is inside of $exec_prefix,
3901      then consider it to relocate with the rest of the GCC installation
3902      if GCC_EXEC_PREFIX is set.
3903      ``make_relative_prefix'' is not compiled for VMS, so don't call it.  */
3904   if (target_system_root && !target_system_root_changed && gcc_exec_prefix)
3905     {
3906       char *tmp_prefix = get_relative_prefix (decoded_options[0].arg,
3907                                               standard_bindir_prefix,
3908                                               target_system_root);
3909       if (tmp_prefix && access_check (tmp_prefix, F_OK) == 0)
3910         {
3911           target_system_root = tmp_prefix;
3912           target_system_root_changed = 1;
3913         }
3914     }
3915 #endif
3916
3917   /* More prefixes are enabled in main, after we read the specs file
3918      and determine whether this is cross-compilation or not.  */
3919
3920   if (n_infiles == last_language_n_infiles && spec_lang != 0)
3921     warning (0, "%<-x %s%> after last input file has no effect", spec_lang);
3922
3923   if (compare_debug == 2 || compare_debug == 3)
3924     {
3925       alloc_switch ();
3926       switches[n_switches].part1 = concat ("fcompare-debug=",
3927                                            compare_debug_opt,
3928                                            NULL);
3929       switches[n_switches].args = 0;
3930       switches[n_switches].live_cond = 0;
3931       switches[n_switches].validated = 0;
3932       switches[n_switches].ordering = 0;
3933       n_switches++;
3934       compare_debug = 1;
3935     }
3936
3937   /* Ensure we only invoke each subprocess once.  */
3938   if (print_subprocess_help || print_help_list || print_version)
3939     {
3940       n_infiles = 0;
3941
3942       /* Create a dummy input file, so that we can pass
3943          the help option on to the various sub-processes.  */
3944       add_infile ("help-dummy", "c");
3945     }
3946
3947   alloc_switch ();
3948   switches[n_switches].part1 = 0;
3949   alloc_infile ();
3950   infiles[n_infiles].name = 0;
3951 }
3952
3953 /* Store switches not filtered out by %<S in spec in COLLECT_GCC_OPTIONS
3954    and place that in the environment.  */
3955
3956 static void
3957 set_collect_gcc_options (void)
3958 {
3959   int i;
3960   int first_time;
3961
3962   /* Build COLLECT_GCC_OPTIONS to have all of the options specified to
3963      the compiler.  */
3964   obstack_grow (&collect_obstack, "COLLECT_GCC_OPTIONS=",
3965                 sizeof ("COLLECT_GCC_OPTIONS=") - 1);
3966
3967   first_time = TRUE;
3968   for (i = 0; (int) i < n_switches; i++)
3969     {
3970       const char *const *args;
3971       const char *p, *q;
3972       if (!first_time)
3973         obstack_grow (&collect_obstack, " ", 1);
3974
3975       first_time = FALSE;
3976
3977       /* Ignore elided switches.  */
3978       if ((switches[i].live_cond & SWITCH_IGNORE) != 0)
3979         continue;
3980
3981       obstack_grow (&collect_obstack, "'-", 2);
3982       q = switches[i].part1;
3983       while ((p = strchr (q, '\'')))
3984         {
3985           obstack_grow (&collect_obstack, q, p - q);
3986           obstack_grow (&collect_obstack, "'\\''", 4);
3987           q = ++p;
3988         }
3989       obstack_grow (&collect_obstack, q, strlen (q));
3990       obstack_grow (&collect_obstack, "'", 1);
3991
3992       for (args = switches[i].args; args && *args; args++)
3993         {
3994           obstack_grow (&collect_obstack, " '", 2);
3995           q = *args;
3996           while ((p = strchr (q, '\'')))
3997             {
3998               obstack_grow (&collect_obstack, q, p - q);
3999               obstack_grow (&collect_obstack, "'\\''", 4);
4000               q = ++p;
4001             }
4002           obstack_grow (&collect_obstack, q, strlen (q));
4003           obstack_grow (&collect_obstack, "'", 1);
4004         }
4005     }
4006   obstack_grow (&collect_obstack, "\0", 1);
4007   xputenv (XOBFINISH (&collect_obstack, char *));
4008 }
4009 \f
4010 /* Process a spec string, accumulating and running commands.  */
4011
4012 /* These variables describe the input file name.
4013    input_file_number is the index on outfiles of this file,
4014    so that the output file name can be stored for later use by %o.
4015    input_basename is the start of the part of the input file
4016    sans all directory names, and basename_length is the number
4017    of characters starting there excluding the suffix .c or whatever.  */
4018
4019 static const char *gcc_input_filename;
4020 static int input_file_number;
4021 size_t input_filename_length;
4022 static int basename_length;
4023 static int suffixed_basename_length;
4024 static const char *input_basename;
4025 static const char *input_suffix;
4026 #ifndef HOST_LACKS_INODE_NUMBERS
4027 static struct stat input_stat;
4028 #endif
4029 static int input_stat_set;
4030
4031 /* The compiler used to process the current input file.  */
4032 static struct compiler *input_file_compiler;
4033
4034 /* These are variables used within do_spec and do_spec_1.  */
4035
4036 /* Nonzero if an arg has been started and not yet terminated
4037    (with space, tab or newline).  */
4038 static int arg_going;
4039
4040 /* Nonzero means %d or %g has been seen; the next arg to be terminated
4041    is a temporary file name.  */
4042 static int delete_this_arg;
4043
4044 /* Nonzero means %w has been seen; the next arg to be terminated
4045    is the output file name of this compilation.  */
4046 static int this_is_output_file;
4047
4048 /* Nonzero means %s has been seen; the next arg to be terminated
4049    is the name of a library file and we should try the standard
4050    search dirs for it.  */
4051 static int this_is_library_file;
4052
4053 /* Nonzero means %T has been seen; the next arg to be terminated
4054    is the name of a linker script and we should try all of the
4055    standard search dirs for it.  If it is found insert a --script
4056    command line switch and then substitute the full path in place,
4057    otherwise generate an error message.  */
4058 static int this_is_linker_script;
4059
4060 /* Nonzero means that the input of this command is coming from a pipe.  */
4061 static int input_from_pipe;
4062
4063 /* Nonnull means substitute this for any suffix when outputting a switches
4064    arguments.  */
4065 static const char *suffix_subst;
4066
4067 /* If there is an argument being accumulated, terminate it and store it.  */
4068
4069 static void
4070 end_going_arg (void)
4071 {
4072   if (arg_going)
4073     {
4074       const char *string;
4075
4076       obstack_1grow (&obstack, 0);
4077       string = XOBFINISH (&obstack, const char *);
4078       if (this_is_library_file)
4079         string = find_file (string);
4080       if (this_is_linker_script)
4081         {
4082           char * full_script_path = find_a_file (&startfile_prefixes, string, R_OK, true);
4083
4084           if (full_script_path == NULL)
4085             {
4086               error ("unable to locate default linker script %qs in the library search paths", string);
4087               /* Script was not found on search path.  */
4088               return;
4089             }
4090           store_arg ("--script", false, false);
4091           string = full_script_path;
4092         }
4093       store_arg (string, delete_this_arg, this_is_output_file);
4094       if (this_is_output_file)
4095         outfiles[input_file_number] = string;
4096       arg_going = 0;
4097     }
4098 }
4099
4100
4101 /* Parse the WRAPPER string which is a comma separated list of the command line
4102    and insert them into the beginning of argbuf.  */
4103
4104 static void
4105 insert_wrapper (const char *wrapper)
4106 {
4107   int n = 0;
4108   int i;
4109   char *buf = xstrdup (wrapper);
4110   char *p = buf;
4111
4112   do
4113     {
4114       n++;
4115       while (*p == ',')
4116         p++;
4117     }
4118   while ((p = strchr (p, ',')) != NULL);
4119
4120   if (argbuf_index + n >= argbuf_length)
4121     {
4122       argbuf_length = argbuf_length * 2;
4123       while (argbuf_length < argbuf_index + n)
4124         argbuf_length *= 2;
4125       argbuf = XRESIZEVEC (const char *, argbuf, argbuf_length);
4126     }
4127   for (i = argbuf_index - 1; i >= 0; i--)
4128     argbuf[i + n] = argbuf[i];
4129
4130   i = 0;
4131   p = buf;
4132   do
4133     {
4134       while (*p == ',')
4135         {
4136           *p = 0;
4137           p++;
4138         }
4139       argbuf[i++] = p;
4140     }
4141   while ((p = strchr (p, ',')) != NULL);
4142   gcc_assert (i == n);
4143   argbuf_index += n;
4144 }
4145
4146 /* Process the spec SPEC and run the commands specified therein.
4147    Returns 0 if the spec is successfully processed; -1 if failed.  */
4148
4149 int
4150 do_spec (const char *spec)
4151 {
4152   int value;
4153
4154   value = do_spec_2 (spec);
4155
4156   /* Force out any unfinished command.
4157      If -pipe, this forces out the last command if it ended in `|'.  */
4158   if (value == 0)
4159     {
4160       if (argbuf_index > 0 && !strcmp (argbuf[argbuf_index - 1], "|"))
4161         argbuf_index--;
4162
4163       set_collect_gcc_options ();
4164
4165       if (argbuf_index > 0)
4166         value = execute ();
4167     }
4168
4169   return value;
4170 }
4171
4172 static int
4173 do_spec_2 (const char *spec)
4174 {
4175   int result;
4176
4177   clear_args ();
4178   arg_going = 0;
4179   delete_this_arg = 0;
4180   this_is_output_file = 0;
4181   this_is_library_file = 0;
4182   this_is_linker_script = 0;
4183   input_from_pipe = 0;
4184   suffix_subst = NULL;
4185
4186   result = do_spec_1 (spec, 0, NULL);
4187
4188   end_going_arg ();
4189
4190   return result;
4191 }
4192
4193
4194 /* Process the given spec string and add any new options to the end
4195    of the switches/n_switches array.  */
4196
4197 static void
4198 do_option_spec (const char *name, const char *spec)
4199 {
4200   unsigned int i, value_count, value_len;
4201   const char *p, *q, *value;
4202   char *tmp_spec, *tmp_spec_p;
4203
4204   if (configure_default_options[0].name == NULL)
4205     return;
4206
4207   for (i = 0; i < ARRAY_SIZE (configure_default_options); i++)
4208     if (strcmp (configure_default_options[i].name, name) == 0)
4209       break;
4210   if (i == ARRAY_SIZE (configure_default_options))
4211     return;
4212
4213   value = configure_default_options[i].value;
4214   value_len = strlen (value);
4215
4216   /* Compute the size of the final spec.  */
4217   value_count = 0;
4218   p = spec;
4219   while ((p = strstr (p, "%(VALUE)")) != NULL)
4220     {
4221       p ++;
4222       value_count ++;
4223     }
4224
4225   /* Replace each %(VALUE) by the specified value.  */
4226   tmp_spec = (char *) alloca (strlen (spec) + 1
4227                      + value_count * (value_len - strlen ("%(VALUE)")));
4228   tmp_spec_p = tmp_spec;
4229   q = spec;
4230   while ((p = strstr (q, "%(VALUE)")) != NULL)
4231     {
4232       memcpy (tmp_spec_p, q, p - q);
4233       tmp_spec_p = tmp_spec_p + (p - q);
4234       memcpy (tmp_spec_p, value, value_len);
4235       tmp_spec_p += value_len;
4236       q = p + strlen ("%(VALUE)");
4237     }
4238   strcpy (tmp_spec_p, q);
4239
4240   do_self_spec (tmp_spec);
4241 }
4242
4243 /* Process the given spec string and add any new options to the end
4244    of the switches/n_switches array.  */
4245
4246 static void
4247 do_self_spec (const char *spec)
4248 {
4249   int i;
4250
4251   do_spec_2 (spec);
4252   do_spec_1 (" ", 0, NULL);
4253
4254   /* Mark %<S switches processed by do_self_spec to be ignored permanently.
4255      do_self_specs adds the replacements to switches array, so it shouldn't
4256      be processed afterwards.  */
4257   for (i = 0; i < n_switches; i++)
4258     if ((switches[i].live_cond & SWITCH_IGNORE))
4259       switches[i].live_cond |= SWITCH_IGNORE_PERMANENTLY;
4260
4261   if (argbuf_index > 0)
4262     {
4263       const char **argbuf_copy;
4264       struct cl_decoded_option *decoded_options;
4265       struct cl_option_handlers handlers;
4266       unsigned int decoded_options_count;
4267       unsigned int j;
4268
4269       /* Create a copy of argbuf with a dummy argv[0] entry for
4270          decode_cmdline_options_to_array.  */
4271       argbuf_copy = XNEWVEC (const char *, argbuf_index + 1);
4272       argbuf_copy[0] = "";
4273       memcpy (argbuf_copy + 1, argbuf, argbuf_index * sizeof (const char *));
4274
4275       decode_cmdline_options_to_array (argbuf_index + 1, argbuf_copy,
4276                                        CL_DRIVER, &decoded_options,
4277                                        &decoded_options_count);
4278
4279       set_option_handlers (&handlers);
4280
4281       for (j = 1; j < decoded_options_count; j++)
4282         {
4283           switch (decoded_options[j].opt_index)
4284             {
4285             case OPT_SPECIAL_input_file:
4286               /* Specs should only generate options, not input
4287                  files.  */
4288               if (strcmp (decoded_options[j].arg, "-") != 0)
4289                 fatal_error ("switch %qs does not start with %<-%>",
4290                              decoded_options[j].arg);
4291               else
4292                 fatal_error ("spec-generated switch is just %<-%>");
4293               break;
4294
4295             case OPT_fcompare_debug_second:
4296             case OPT_fcompare_debug:
4297             case OPT_fcompare_debug_:
4298             case OPT_o:
4299               /* Avoid duplicate processing of some options from
4300                  compare-debug specs; just save them here.  */
4301               save_switch (decoded_options[j].canonical_option[0],
4302                            (decoded_options[j].canonical_option_num_elements
4303                             - 1),
4304                            &decoded_options[j].canonical_option[1], false);
4305               break;
4306
4307             default:
4308               read_cmdline_option (&global_options, &global_options_set,
4309                                    decoded_options + j, CL_DRIVER, &handlers,
4310                                    global_dc);
4311               break;
4312             }
4313         }
4314
4315       alloc_switch ();
4316       switches[n_switches].part1 = 0;
4317     }
4318 }
4319
4320 /* Callback for processing %D and %I specs.  */
4321
4322 struct spec_path_info {
4323   const char *option;
4324   const char *append;
4325   size_t append_len;
4326   bool omit_relative;
4327   bool separate_options;
4328 };
4329
4330 static void *
4331 spec_path (char *path, void *data)
4332 {
4333   struct spec_path_info *info = (struct spec_path_info *) data;
4334   size_t len = 0;
4335   char save = 0;
4336
4337   if (info->omit_relative && !IS_ABSOLUTE_PATH (path))
4338     return NULL;
4339
4340   if (info->append_len != 0)
4341     {
4342       len = strlen (path);
4343       memcpy (path + len, info->append, info->append_len + 1);
4344     }
4345
4346   if (!is_directory (path, true))
4347     return NULL;
4348
4349   do_spec_1 (info->option, 1, NULL);
4350   if (info->separate_options)
4351     do_spec_1 (" ", 0, NULL);
4352
4353   if (info->append_len == 0)
4354     {
4355       len = strlen (path);
4356       save = path[len - 1];
4357       if (IS_DIR_SEPARATOR (path[len - 1]))
4358         path[len - 1] = '\0';
4359     }
4360
4361   do_spec_1 (path, 1, NULL);
4362   do_spec_1 (" ", 0, NULL);
4363
4364   /* Must not damage the original path.  */
4365   if (info->append_len == 0)
4366     path[len - 1] = save;
4367
4368   return NULL;
4369 }
4370
4371 /* Create a temporary FILE with the contents of ARGV. Add @FILE to the
4372    argument list. */
4373
4374 static void
4375 create_at_file (char **argv)
4376 {
4377   char *temp_file = make_temp_file ("");
4378   char *at_argument = concat ("@", temp_file, NULL);
4379   FILE *f = fopen (temp_file, "w");
4380   int status;
4381
4382   if (f == NULL)
4383     fatal_error ("could not open temporary response file %s",
4384                  temp_file);
4385
4386   status = writeargv (argv, f);
4387
4388   if (status)
4389     fatal_error ("could not write to temporary response file %s",
4390                  temp_file);
4391
4392   status = fclose (f);
4393
4394   if (EOF == status)
4395     fatal_error ("could not close temporary response file %s",
4396                  temp_file);
4397
4398   store_arg (at_argument, 0, 0);
4399
4400   record_temp_file (temp_file, !save_temps_flag, !save_temps_flag);
4401 }
4402
4403 /* True if we should compile INFILE. */
4404
4405 static bool
4406 compile_input_file_p (struct infile *infile)
4407 {
4408   if ((!infile->language) || (infile->language[0] != '*'))
4409     if (infile->incompiler == input_file_compiler)
4410       return true;
4411   return false;
4412 }
4413
4414 /* Process the sub-spec SPEC as a portion of a larger spec.
4415    This is like processing a whole spec except that we do
4416    not initialize at the beginning and we do not supply a
4417    newline by default at the end.
4418    INSWITCH nonzero means don't process %-sequences in SPEC;
4419    in this case, % is treated as an ordinary character.
4420    This is used while substituting switches.
4421    INSWITCH nonzero also causes SPC not to terminate an argument.
4422
4423    Value is zero unless a line was finished
4424    and the command on that line reported an error.  */
4425
4426 static int
4427 do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
4428 {
4429   const char *p = spec;
4430   int c;
4431   int i;
4432   int value;
4433
4434   while ((c = *p++))
4435     /* If substituting a switch, treat all chars like letters.
4436        Otherwise, NL, SPC, TAB and % are special.  */
4437     switch (inswitch ? 'a' : c)
4438       {
4439       case '\n':
4440         end_going_arg ();
4441
4442         if (argbuf_index > 0 && !strcmp (argbuf[argbuf_index - 1], "|"))
4443           {
4444             /* A `|' before the newline means use a pipe here,
4445                but only if -pipe was specified.
4446                Otherwise, execute now and don't pass the `|' as an arg.  */
4447             if (use_pipes)
4448               {
4449                 input_from_pipe = 1;
4450                 break;
4451               }
4452             else
4453               argbuf_index--;
4454           }
4455
4456         set_collect_gcc_options ();
4457
4458         if (argbuf_index > 0)
4459           {
4460             value = execute ();
4461             if (value)
4462               return value;
4463           }
4464         /* Reinitialize for a new command, and for a new argument.  */
4465         clear_args ();
4466         arg_going = 0;
4467         delete_this_arg = 0;
4468         this_is_output_file = 0;
4469         this_is_library_file = 0;
4470         this_is_linker_script = 0;
4471         input_from_pipe = 0;
4472         break;
4473
4474       case '|':
4475         end_going_arg ();
4476
4477         /* Use pipe */
4478         obstack_1grow (&obstack, c);
4479         arg_going = 1;
4480         break;
4481
4482       case '\t':
4483       case ' ':
4484         end_going_arg ();
4485
4486         /* Reinitialize for a new argument.  */
4487         delete_this_arg = 0;
4488         this_is_output_file = 0;
4489         this_is_library_file = 0;
4490         this_is_linker_script = 0;
4491         break;
4492
4493       case '%':
4494         switch (c = *p++)
4495           {
4496           case 0:
4497             fatal_error ("spec %qs invalid", spec);
4498
4499           case 'b':
4500             if (save_temps_length)
4501               obstack_grow (&obstack, save_temps_prefix, save_temps_length);
4502             else
4503               obstack_grow (&obstack, input_basename, basename_length);
4504             if (compare_debug < 0)
4505               obstack_grow (&obstack, ".gk", 3);
4506             arg_going = 1;
4507             break;
4508
4509           case 'B':
4510             if (save_temps_length)
4511               obstack_grow (&obstack, save_temps_prefix, save_temps_length);
4512             else
4513               obstack_grow (&obstack, input_basename, suffixed_basename_length);
4514             if (compare_debug < 0)
4515               obstack_grow (&obstack, ".gk", 3);
4516             arg_going = 1;
4517             break;
4518
4519           case 'd':
4520             delete_this_arg = 2;
4521             break;
4522
4523           /* Dump out the directories specified with LIBRARY_PATH,
4524              followed by the absolute directories
4525              that we search for startfiles.  */
4526           case 'D':
4527             {
4528               struct spec_path_info info;
4529
4530               info.option = "-L";
4531               info.append_len = 0;
4532 #ifdef RELATIVE_PREFIX_NOT_LINKDIR
4533               /* Used on systems which record the specified -L dirs
4534                  and use them to search for dynamic linking.
4535                  Relative directories always come from -B,
4536                  and it is better not to use them for searching
4537                  at run time.  In particular, stage1 loses.  */
4538               info.omit_relative = true;
4539 #else
4540               info.omit_relative = false;
4541 #endif
4542               info.separate_options = false;
4543
4544               for_each_path (&startfile_prefixes, true, 0, spec_path, &info);
4545             }
4546             break;
4547
4548           case 'e':
4549             /* %efoo means report an error with `foo' as error message
4550                and don't execute any more commands for this file.  */
4551             {
4552               const char *q = p;
4553               char *buf;
4554               while (*p != 0 && *p != '\n')
4555                 p++;
4556               buf = (char *) alloca (p - q + 1);
4557               strncpy (buf, q, p - q);
4558               buf[p - q] = 0;
4559               error ("%s", _(buf));
4560               return -1;
4561             }
4562             break;
4563           case 'n':
4564             /* %nfoo means report a notice with `foo' on stderr.  */
4565             {
4566               const char *q = p;
4567               char *buf;
4568               while (*p != 0 && *p != '\n')
4569                 p++;
4570               buf = (char *) alloca (p - q + 1);
4571               strncpy (buf, q, p - q);
4572               buf[p - q] = 0;
4573               inform (0, "%s", _(buf));
4574               if (*p)
4575                 p++;
4576             }
4577             break;
4578
4579           case 'j':
4580             {
4581               struct stat st;
4582
4583               /* If save_temps_flag is off, and the HOST_BIT_BUCKET is
4584                  defined, and it is not a directory, and it is
4585                  writable, use it.  Otherwise, treat this like any
4586                  other temporary file.  */
4587
4588               if ((!save_temps_flag)
4589                   && (stat (HOST_BIT_BUCKET, &st) == 0) && (!S_ISDIR (st.st_mode))
4590                   && (access (HOST_BIT_BUCKET, W_OK) == 0))
4591                 {
4592                   obstack_grow (&obstack, HOST_BIT_BUCKET,
4593                                 strlen (HOST_BIT_BUCKET));
4594                   delete_this_arg = 0;
4595                   arg_going = 1;
4596                   break;
4597                 }
4598             }
4599             goto create_temp_file;
4600           case '|':
4601             if (use_pipes)
4602               {
4603                 obstack_1grow (&obstack, '-');
4604                 delete_this_arg = 0;
4605                 arg_going = 1;
4606
4607                 /* consume suffix */
4608                 while (*p == '.' || ISALNUM ((unsigned char) *p))
4609                   p++;
4610                 if (p[0] == '%' && p[1] == 'O')
4611                   p += 2;
4612
4613                 break;
4614               }
4615             goto create_temp_file;
4616           case 'm':
4617             if (use_pipes)
4618               {
4619                 /* consume suffix */
4620                 while (*p == '.' || ISALNUM ((unsigned char) *p))
4621                   p++;
4622                 if (p[0] == '%' && p[1] == 'O')
4623                   p += 2;
4624
4625                 break;
4626               }
4627             goto create_temp_file;
4628           case 'g':
4629           case 'u':
4630           case 'U':
4631           create_temp_file:
4632               {
4633                 struct temp_name *t;
4634                 int suffix_length;
4635                 const char *suffix = p;
4636                 char *saved_suffix = NULL;
4637
4638                 while (*p == '.' || ISALNUM ((unsigned char) *p))
4639                   p++;
4640                 suffix_length = p - suffix;
4641                 if (p[0] == '%' && p[1] == 'O')
4642                   {
4643                     p += 2;
4644                     /* We don't support extra suffix characters after %O.  */
4645                     if (*p == '.' || ISALNUM ((unsigned char) *p))
4646                       fatal_error ("spec %qs has invalid %<%%0%c%>", spec, *p);
4647                     if (suffix_length == 0)
4648                       suffix = TARGET_OBJECT_SUFFIX;
4649                     else
4650                       {
4651                         saved_suffix
4652                           = XNEWVEC (char, suffix_length
4653                                      + strlen (TARGET_OBJECT_SUFFIX));
4654                         strncpy (saved_suffix, suffix, suffix_length);
4655                         strcpy (saved_suffix + suffix_length,
4656                                 TARGET_OBJECT_SUFFIX);
4657                       }
4658                     suffix_length += strlen (TARGET_OBJECT_SUFFIX);
4659                   }
4660
4661                 if (compare_debug < 0)
4662                   {
4663                     suffix = concat (".gk", suffix, NULL);
4664                     suffix_length += 3;
4665                   }
4666
4667                 /* If -save-temps=obj and -o were specified, use that for the
4668                    temp file.  */
4669                 if (save_temps_length)
4670                   {
4671                     char *tmp;
4672                     temp_filename_length
4673                       = save_temps_length + suffix_length + 1;
4674                     tmp = (char *) alloca (temp_filename_length);
4675                     memcpy (tmp, save_temps_prefix, save_temps_length);
4676                     memcpy (tmp + save_temps_length, suffix, suffix_length);
4677                     tmp[save_temps_length + suffix_length] = '\0';
4678                     temp_filename = save_string (tmp,
4679                                                  temp_filename_length + 1);
4680                     obstack_grow (&obstack, temp_filename,
4681                                   temp_filename_length);
4682                     arg_going = 1;
4683                     delete_this_arg = 0;
4684                     break;
4685                   }
4686
4687                 /* If the gcc_input_filename has the same suffix specified
4688                    for the %g, %u, or %U, and -save-temps is specified,
4689                    we could end up using that file as an intermediate
4690                    thus clobbering the user's source file (.e.g.,
4691                    gcc -save-temps foo.s would clobber foo.s with the
4692                    output of cpp0).  So check for this condition and
4693                    generate a temp file as the intermediate.  */
4694
4695                 if (save_temps_flag)
4696                   {
4697                     char *tmp;
4698                     temp_filename_length = basename_length + suffix_length + 1;
4699                     tmp = (char *) alloca (temp_filename_length);
4700                     memcpy (tmp, input_basename, basename_length);
4701                     memcpy (tmp + basename_length, suffix, suffix_length);
4702                     tmp[basename_length + suffix_length] = '\0';
4703                     temp_filename = tmp;
4704
4705                     if (strcmp (temp_filename, gcc_input_filename) != 0)
4706                       {
4707 #ifndef HOST_LACKS_INODE_NUMBERS
4708                         struct stat st_temp;
4709
4710                         /* Note, set_input() resets input_stat_set to 0.  */
4711                         if (input_stat_set == 0)
4712                           {
4713                             input_stat_set = stat (gcc_input_filename,
4714                                                    &input_stat);
4715                             if (input_stat_set >= 0)
4716                               input_stat_set = 1;
4717                           }
4718
4719                         /* If we have the stat for the gcc_input_filename
4720                            and we can do the stat for the temp_filename
4721                            then the they could still refer to the same
4722                            file if st_dev/st_ino's are the same.  */
4723                         if (input_stat_set != 1
4724                             || stat (temp_filename, &st_temp) < 0
4725                             || input_stat.st_dev != st_temp.st_dev
4726                             || input_stat.st_ino != st_temp.st_ino)
4727 #else
4728                         /* Just compare canonical pathnames.  */
4729                         char* input_realname = lrealpath (gcc_input_filename);
4730                         char* temp_realname = lrealpath (temp_filename);
4731                         bool files_differ = strcmp (input_realname, temp_realname);
4732                         free (input_realname);
4733                         free (temp_realname);
4734                         if (files_differ)
4735 #endif
4736                           {
4737                             temp_filename = save_string (temp_filename,
4738                                                          temp_filename_length + 1);
4739                             obstack_grow (&obstack, temp_filename,
4740                                                     temp_filename_length);
4741                             arg_going = 1;
4742                             delete_this_arg = 0;
4743                             break;
4744                           }
4745                       }
4746                   }
4747
4748                 /* See if we already have an association of %g/%u/%U and
4749                    suffix.  */
4750                 for (t = temp_names; t; t = t->next)
4751                   if (t->length == suffix_length
4752                       && strncmp (t->suffix, suffix, suffix_length) == 0
4753                       && t->unique == (c == 'u' || c == 'U' || c == 'j'))
4754                     break;
4755
4756                 /* Make a new association if needed.  %u and %j
4757                    require one.  */
4758                 if (t == 0 || c == 'u' || c == 'j')
4759                   {
4760                     if (t == 0)
4761                       {
4762                         t = XNEW (struct temp_name);
4763                         t->next = temp_names;
4764                         temp_names = t;
4765                       }
4766                     t->length = suffix_length;
4767                     if (saved_suffix)
4768                       {
4769                         t->suffix = saved_suffix;
4770                         saved_suffix = NULL;
4771                       }
4772                     else
4773                       t->suffix = save_string (suffix, suffix_length);
4774                     t->unique = (c == 'u' || c == 'U' || c == 'j');
4775                     temp_filename = make_temp_file (t->suffix);
4776                     temp_filename_length = strlen (temp_filename);
4777                     t->filename = temp_filename;
4778                     t->filename_length = temp_filename_length;
4779                   }
4780
4781                 if (saved_suffix)
4782                   free (saved_suffix);
4783
4784                 obstack_grow (&obstack, t->filename, t->filename_length);
4785                 delete_this_arg = 1;
4786               }
4787             arg_going = 1;
4788             break;
4789
4790           case 'i':
4791             if (combine_inputs)
4792               {
4793                 if (at_file_supplied)
4794                   {
4795                     /* We are going to expand `%i' to `@FILE', where FILE
4796                        is a newly-created temporary filename.  The filenames
4797                        that would usually be expanded in place of %o will be
4798                        written to the temporary file.  */
4799                     char **argv;
4800                     int n_files = 0;
4801                     int j;
4802
4803                     for (i = 0; i < n_infiles; i++)
4804                       if (compile_input_file_p (&infiles[i]))
4805                         n_files++;
4806
4807                     argv = (char **) alloca (sizeof (char *) * (n_files + 1));
4808
4809                     /* Copy the strings over.  */
4810                     for (i = 0, j = 0; i < n_infiles; i++)
4811                       if (compile_input_file_p (&infiles[i]))
4812                         {
4813                           argv[j] = CONST_CAST (char *, infiles[i].name);
4814                           infiles[i].compiled = true;
4815                           j++;
4816                         }
4817                     argv[j] = NULL;
4818
4819                     create_at_file (argv);
4820                   }
4821                 else
4822                   for (i = 0; (int) i < n_infiles; i++)
4823                     if (compile_input_file_p (&infiles[i]))
4824                       {
4825                         store_arg (infiles[i].name, 0, 0);
4826                         infiles[i].compiled = true;
4827                       }
4828               }
4829             else
4830               {
4831                 obstack_grow (&obstack, gcc_input_filename,
4832                               input_filename_length);
4833                 arg_going = 1;
4834               }
4835             break;
4836
4837           case 'I':
4838             {
4839               struct spec_path_info info;
4840
4841               if (multilib_dir)
4842                 {
4843                   do_spec_1 ("-imultilib", 1, NULL);
4844                   /* Make this a separate argument.  */
4845                   do_spec_1 (" ", 0, NULL);
4846                   do_spec_1 (multilib_dir, 1, NULL);
4847                   do_spec_1 (" ", 0, NULL);
4848                 }
4849
4850               if (gcc_exec_prefix)
4851                 {
4852                   do_spec_1 ("-iprefix", 1, NULL);
4853                   /* Make this a separate argument.  */
4854                   do_spec_1 (" ", 0, NULL);
4855                   do_spec_1 (gcc_exec_prefix, 1, NULL);
4856                   do_spec_1 (" ", 0, NULL);
4857                 }
4858
4859               if (target_system_root_changed ||
4860                   (target_system_root && target_sysroot_hdrs_suffix))
4861                 {
4862                   do_spec_1 ("-isysroot", 1, NULL);
4863                   /* Make this a separate argument.  */
4864                   do_spec_1 (" ", 0, NULL);
4865                   do_spec_1 (target_system_root, 1, NULL);
4866                   if (target_sysroot_hdrs_suffix)
4867                     do_spec_1 (target_sysroot_hdrs_suffix, 1, NULL);
4868                   do_spec_1 (" ", 0, NULL);
4869                 }
4870
4871               info.option = "-isystem";
4872               info.append = "include";
4873               info.append_len = strlen (info.append);
4874               info.omit_relative = false;
4875               info.separate_options = true;
4876
4877               for_each_path (&include_prefixes, false, info.append_len,
4878                              spec_path, &info);
4879
4880               info.append = "include-fixed";
4881               if (*sysroot_hdrs_suffix_spec)
4882                 info.append = concat (info.append, dir_separator_str,
4883                                       multilib_dir, NULL);
4884               info.append_len = strlen (info.append);
4885               for_each_path (&include_prefixes, false, info.append_len,
4886                              spec_path, &info);
4887             }
4888             break;
4889
4890           case 'o':
4891             {
4892               int max = n_infiles;
4893               max += lang_specific_extra_outfiles;
4894
4895               if (HAVE_GNU_LD && at_file_supplied)
4896                 {
4897                   /* We are going to expand `%o' to `@FILE', where FILE
4898                      is a newly-created temporary filename.  The filenames
4899                      that would usually be expanded in place of %o will be
4900                      written to the temporary file.  */
4901
4902                   char **argv;
4903                   int n_files, j;
4904
4905                   /* Convert OUTFILES into a form suitable for writeargv.  */
4906
4907                   /* Determine how many are non-NULL.  */
4908                   for (n_files = 0, i = 0; i < max; i++)
4909                     n_files += outfiles[i] != NULL;
4910
4911                   argv = (char **) alloca (sizeof (char *) * (n_files + 1));
4912
4913                   /* Copy the strings over.  */
4914                   for (i = 0, j = 0; i < max; i++)
4915                     if (outfiles[i])
4916                       {
4917                         argv[j] = CONST_CAST (char *, outfiles[i]);
4918                         j++;
4919                       }
4920                   argv[j] = NULL;
4921
4922                   create_at_file (argv);
4923                 }
4924               else
4925                 for (i = 0; i < max; i++)
4926                   if (outfiles[i])
4927                     store_arg (outfiles[i], 0, 0);
4928               break;
4929             }
4930
4931           case 'O':
4932             obstack_grow (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX));
4933             arg_going = 1;
4934             break;
4935
4936           case 's':
4937             this_is_library_file = 1;
4938             break;
4939
4940           case 'T':
4941             this_is_linker_script = 1;
4942             break;
4943
4944           case 'V':
4945             outfiles[input_file_number] = NULL;
4946             break;
4947
4948           case 'w':
4949             this_is_output_file = 1;
4950             break;
4951
4952           case 'W':
4953             {
4954               int cur_index = argbuf_index;
4955               /* Handle the {...} following the %W.  */
4956               if (*p != '{')
4957                 fatal_error ("spec %qs has invalid %<%%W%c%>", spec, *p);
4958               p = handle_braces (p + 1);
4959               if (p == 0)
4960                 return -1;
4961               end_going_arg ();
4962               /* If any args were output, mark the last one for deletion
4963                  on failure.  */
4964               if (argbuf_index != cur_index)
4965                 record_temp_file (argbuf[argbuf_index - 1], 0, 1);
4966               break;
4967             }
4968
4969           /* %x{OPTION} records OPTION for %X to output.  */
4970           case 'x':
4971             {
4972               const char *p1 = p;
4973               char *string;
4974
4975               /* Skip past the option value and make a copy.  */
4976               if (*p != '{')
4977                 fatal_error ("spec %qs has invalid %<%%x%c%>", spec, *p);
4978               while (*p++ != '}')
4979                 ;
4980               string = save_string (p1 + 1, p - p1 - 2);
4981
4982               /* See if we already recorded this option.  */
4983               for (i = 0; i < n_linker_options; i++)
4984                 if (! strcmp (string, linker_options[i]))
4985                   {
4986                     free (string);
4987                     return 0;
4988                   }
4989
4990               /* This option is new; add it.  */
4991               add_linker_option (string, strlen (string));
4992             }
4993             break;
4994
4995           /* Dump out the options accumulated previously using %x.  */
4996           case 'X':
4997             for (i = 0; i < n_linker_options; i++)
4998               {
4999                 do_spec_1 (linker_options[i], 1, NULL);
5000                 /* Make each accumulated option a separate argument.  */
5001                 do_spec_1 (" ", 0, NULL);
5002               }
5003             break;
5004
5005           /* Dump out the options accumulated previously using -Wa,.  */
5006           case 'Y':
5007             for (i = 0; i < n_assembler_options; i++)
5008               {
5009                 do_spec_1 (assembler_options[i], 1, NULL);
5010                 /* Make each accumulated option a separate argument.  */
5011                 do_spec_1 (" ", 0, NULL);
5012               }
5013             break;
5014
5015           /* Dump out the options accumulated previously using -Wp,.  */
5016           case 'Z':
5017             for (i = 0; i < n_preprocessor_options; i++)
5018               {
5019                 do_spec_1 (preprocessor_options[i], 1, NULL);
5020                 /* Make each accumulated option a separate argument.  */
5021                 do_spec_1 (" ", 0, NULL);
5022               }
5023             break;
5024
5025             /* Here are digits and numbers that just process
5026                a certain constant string as a spec.  */
5027
5028           case '1':
5029             value = do_spec_1 (cc1_spec, 0, NULL);
5030             if (value != 0)
5031               return value;
5032             break;
5033
5034           case '2':
5035             value = do_spec_1 (cc1plus_spec, 0, NULL);
5036             if (value != 0)
5037               return value;
5038             break;
5039
5040           case 'a':
5041             value = do_spec_1 (asm_spec, 0, NULL);
5042             if (value != 0)
5043               return value;
5044             break;
5045
5046           case 'A':
5047             value = do_spec_1 (asm_final_spec, 0, NULL);
5048             if (value != 0)
5049               return value;
5050             break;
5051
5052           case 'C':
5053             {
5054               const char *const spec
5055                 = (input_file_compiler->cpp_spec
5056                    ? input_file_compiler->cpp_spec
5057                    : cpp_spec);
5058               value = do_spec_1 (spec, 0, NULL);
5059               if (value != 0)
5060                 return value;
5061             }
5062             break;
5063
5064           case 'E':
5065             value = do_spec_1 (endfile_spec, 0, NULL);
5066             if (value != 0)
5067               return value;
5068             break;
5069
5070           case 'l':
5071             value = do_spec_1 (link_spec, 0, NULL);
5072             if (value != 0)
5073               return value;
5074             break;
5075
5076           case 'L':
5077             value = do_spec_1 (lib_spec, 0, NULL);
5078             if (value != 0)
5079               return value;
5080             break;
5081
5082           case 'G':
5083             value = do_spec_1 (libgcc_spec, 0, NULL);
5084             if (value != 0)
5085               return value;
5086             break;
5087
5088           case 'R':
5089             /* We assume there is a directory
5090                separator at the end of this string.  */
5091             if (target_system_root)
5092               {
5093                 obstack_grow (&obstack, target_system_root,
5094                               strlen (target_system_root));
5095                 if (target_sysroot_suffix)
5096                   obstack_grow (&obstack, target_sysroot_suffix,
5097                                 strlen (target_sysroot_suffix));
5098               }
5099             break;
5100
5101           case 'S':
5102             value = do_spec_1 (startfile_spec, 0, NULL);
5103             if (value != 0)
5104               return value;
5105             break;
5106
5107             /* Here we define characters other than letters and digits.  */
5108
5109           case '{':
5110             p = handle_braces (p);
5111             if (p == 0)
5112               return -1;
5113             break;
5114
5115           case ':':
5116             p = handle_spec_function (p);
5117             if (p == 0)
5118               return -1;
5119             break;
5120
5121           case '%':
5122             obstack_1grow (&obstack, '%');
5123             break;
5124
5125           case '.':
5126             {
5127               unsigned len = 0;
5128
5129               while (p[len] && p[len] != ' ' && p[len] != '%')
5130                 len++;
5131               suffix_subst = save_string (p - 1, len + 1);
5132               p += len;
5133             }
5134            break;
5135
5136            /* Henceforth ignore the option(s) matching the pattern
5137               after the %<.  */
5138           case '<':
5139             {
5140               unsigned len = 0;
5141               int have_wildcard = 0;
5142               int i;
5143
5144               while (p[len] && p[len] != ' ' && p[len] != '\t')
5145                 len++;
5146
5147               if (p[len-1] == '*')
5148                 have_wildcard = 1;
5149
5150               for (i = 0; i < n_switches; i++)
5151                 if (!strncmp (switches[i].part1, p, len - have_wildcard)
5152                     && (have_wildcard || switches[i].part1[len] == '\0'))
5153                   {
5154                     switches[i].live_cond |= SWITCH_IGNORE;
5155                     switches[i].validated = 1;
5156                   }
5157
5158               p += len;
5159             }
5160             break;
5161
5162           case '*':
5163             if (soft_matched_part)
5164               {
5165                 do_spec_1 (soft_matched_part, 1, NULL);
5166                 do_spec_1 (" ", 0, NULL);
5167               }
5168             else
5169               /* Catch the case where a spec string contains something like
5170                  '%{foo:%*}'.  i.e. there is no * in the pattern on the left
5171                  hand side of the :.  */
5172               error ("spec failure: %<%%*%> has not been initialized by pattern match");
5173             break;
5174
5175             /* Process a string found as the value of a spec given by name.
5176                This feature allows individual machine descriptions
5177                to add and use their own specs.
5178                %[...] modifies -D options the way %P does;
5179                %(...) uses the spec unmodified.  */
5180           case '[':
5181             warning (0, "use of obsolete %%[ operator in specs");
5182           case '(':
5183             {
5184               const char *name = p;
5185               struct spec_list *sl;
5186               int len;
5187
5188               /* The string after the S/P is the name of a spec that is to be
5189                  processed.  */
5190               while (*p && *p != ')' && *p != ']')
5191                 p++;
5192
5193               /* See if it's in the list.  */
5194               for (len = p - name, sl = specs; sl; sl = sl->next)
5195                 if (sl->name_len == len && !strncmp (sl->name, name, len))
5196                   {
5197                     name = *(sl->ptr_spec);
5198 #ifdef DEBUG_SPECS
5199                     fnotice (stderr, "Processing spec %c%s%c, which is '%s'\n",
5200                             c, sl->name, (c == '(') ? ')' : ']', name);
5201 #endif
5202                     break;
5203                   }
5204
5205               if (sl)
5206                 {
5207                   if (c == '(')
5208                     {
5209                       value = do_spec_1 (name, 0, NULL);
5210                       if (value != 0)
5211                         return value;
5212                     }
5213                   else
5214                     {
5215                       char *x = (char *) alloca (strlen (name) * 2 + 1);
5216                       char *buf = x;
5217                       const char *y = name;
5218                       int flag = 0;
5219
5220                       /* Copy all of NAME into BUF, but put __ after
5221                          every -D and at the end of each arg.  */
5222                       while (1)
5223                         {
5224                           if (! strncmp (y, "-D", 2))
5225                             {
5226                               *x++ = '-';
5227                               *x++ = 'D';
5228                               *x++ = '_';
5229                               *x++ = '_';
5230                               y += 2;
5231                               flag = 1;
5232                               continue;
5233                             }
5234                           else if (flag
5235                                    && (*y == ' ' || *y == '\t' || *y == '='
5236                                        || *y == '}' || *y == 0))
5237                             {
5238                               *x++ = '_';
5239                               *x++ = '_';
5240                               flag = 0;
5241                             }
5242                           if (*y == 0)
5243                             break;
5244                           else
5245                             *x++ = *y++;
5246                         }
5247                       *x = 0;
5248
5249                       value = do_spec_1 (buf, 0, NULL);
5250                       if (value != 0)
5251                         return value;
5252                     }
5253                 }
5254
5255               /* Discard the closing paren or bracket.  */
5256               if (*p)
5257                 p++;
5258             }
5259             break;
5260
5261           default:
5262             error ("spec failure: unrecognized spec option %qc", c);
5263             break;
5264           }
5265         break;
5266
5267       case '\\':
5268         /* Backslash: treat next character as ordinary.  */
5269         c = *p++;
5270
5271         /* Fall through.  */
5272       default:
5273         /* Ordinary character: put it into the current argument.  */
5274         obstack_1grow (&obstack, c);
5275         arg_going = 1;
5276       }
5277
5278   /* End of string.  If we are processing a spec function, we need to
5279      end any pending argument.  */
5280   if (processing_spec_function)
5281     end_going_arg ();
5282
5283   return 0;
5284 }
5285
5286 /* Look up a spec function.  */
5287
5288 static const struct spec_function *
5289 lookup_spec_function (const char *name)
5290 {
5291   const struct spec_function *sf;
5292
5293   for (sf = static_spec_functions; sf->name != NULL; sf++)
5294     if (strcmp (sf->name, name) == 0)
5295       return sf;
5296
5297   return NULL;
5298 }
5299
5300 /* Evaluate a spec function.  */
5301
5302 static const char *
5303 eval_spec_function (const char *func, const char *args)
5304 {
5305   const struct spec_function *sf;
5306   const char *funcval;
5307
5308   /* Saved spec processing context.  */
5309   int save_argbuf_index;
5310   int save_argbuf_length;
5311   const char **save_argbuf;
5312
5313   int save_arg_going;
5314   int save_delete_this_arg;
5315   int save_this_is_output_file;
5316   int save_this_is_library_file;
5317   int save_input_from_pipe;
5318   int save_this_is_linker_script;
5319   const char *save_suffix_subst;
5320
5321
5322   sf = lookup_spec_function (func);
5323   if (sf == NULL)
5324     fatal_error ("unknown spec function %qs", func);
5325
5326   /* Push the spec processing context.  */
5327   save_argbuf_index = argbuf_index;
5328   save_argbuf_length = argbuf_length;
5329   save_argbuf = argbuf;
5330
5331   save_arg_going = arg_going;
5332   save_delete_this_arg = delete_this_arg;
5333   save_this_is_output_file = this_is_output_file;
5334   save_this_is_library_file = this_is_library_file;
5335   save_this_is_linker_script = this_is_linker_script;
5336   save_input_from_pipe = input_from_pipe;
5337   save_suffix_subst = suffix_subst;
5338
5339   /* Create a new spec processing context, and build the function
5340      arguments.  */
5341
5342   alloc_args ();
5343   if (do_spec_2 (args) < 0)
5344     fatal_error ("error in args to spec function %qs", func);
5345
5346   /* argbuf_index is an index for the next argument to be inserted, and
5347      so contains the count of the args already inserted.  */
5348
5349   funcval = (*sf->func) (argbuf_index, argbuf);
5350
5351   /* Pop the spec processing context.  */
5352   argbuf_index = save_argbuf_index;
5353   argbuf_length = save_argbuf_length;
5354   free (argbuf);
5355   argbuf = save_argbuf;
5356
5357   arg_going = save_arg_going;
5358   delete_this_arg = save_delete_this_arg;
5359   this_is_output_file = save_this_is_output_file;
5360   this_is_library_file = save_this_is_library_file;
5361   this_is_linker_script = save_this_is_linker_script;
5362   input_from_pipe = save_input_from_pipe;
5363   suffix_subst = save_suffix_subst;
5364
5365   return funcval;
5366 }
5367
5368 /* Handle a spec function call of the form:
5369
5370    %:function(args)
5371
5372    ARGS is processed as a spec in a separate context and split into an
5373    argument vector in the normal fashion.  The function returns a string
5374    containing a spec which we then process in the caller's context, or
5375    NULL if no processing is required.  */
5376
5377 static const char *
5378 handle_spec_function (const char *p)
5379 {
5380   char *func, *args;
5381   const char *endp, *funcval;
5382   int count;
5383
5384   processing_spec_function++;
5385
5386   /* Get the function name.  */
5387   for (endp = p; *endp != '\0'; endp++)
5388     {
5389       if (*endp == '(')         /* ) */
5390         break;
5391       /* Only allow [A-Za-z0-9], -, and _ in function names.  */
5392       if (!ISALNUM (*endp) && !(*endp == '-' || *endp == '_'))
5393         fatal_error ("malformed spec function name");
5394     }
5395   if (*endp != '(')             /* ) */
5396     fatal_error ("no arguments for spec function");
5397   func = save_string (p, endp - p);
5398   p = ++endp;
5399
5400   /* Get the arguments.  */
5401   for (count = 0; *endp != '\0'; endp++)
5402     {
5403       /* ( */
5404       if (*endp == ')')
5405         {
5406           if (count == 0)
5407             break;
5408           count--;
5409         }
5410       else if (*endp == '(')    /* ) */
5411         count++;
5412     }
5413   /* ( */
5414   if (*endp != ')')
5415     fatal_error ("malformed spec function arguments");
5416   args = save_string (p, endp - p);
5417   p = ++endp;
5418
5419   /* p now points to just past the end of the spec function expression.  */
5420
5421   funcval = eval_spec_function (func, args);
5422   if (funcval != NULL && do_spec_1 (funcval, 0, NULL) < 0)
5423     p = NULL;
5424
5425   free (func);
5426   free (args);
5427
5428   processing_spec_function--;
5429
5430   return p;
5431 }
5432
5433 /* Inline subroutine of handle_braces.  Returns true if the current
5434    input suffix matches the atom bracketed by ATOM and END_ATOM.  */
5435 static inline bool
5436 input_suffix_matches (const char *atom, const char *end_atom)
5437 {
5438   return (input_suffix
5439           && !strncmp (input_suffix, atom, end_atom - atom)
5440           && input_suffix[end_atom - atom] == '\0');
5441 }
5442
5443 /* Subroutine of handle_braces.  Returns true if the current
5444    input file's spec name matches the atom bracketed by ATOM and END_ATOM.  */
5445 static bool
5446 input_spec_matches (const char *atom, const char *end_atom)
5447 {
5448   return (input_file_compiler
5449           && input_file_compiler->suffix
5450           && input_file_compiler->suffix[0] != '\0'
5451           && !strncmp (input_file_compiler->suffix + 1, atom,
5452                        end_atom - atom)
5453           && input_file_compiler->suffix[end_atom - atom + 1] == '\0');
5454 }
5455
5456 /* Subroutine of handle_braces.  Returns true if a switch
5457    matching the atom bracketed by ATOM and END_ATOM appeared on the
5458    command line.  */
5459 static bool
5460 switch_matches (const char *atom, const char *end_atom, int starred)
5461 {
5462   int i;
5463   int len = end_atom - atom;
5464   int plen = starred ? len : -1;
5465
5466   for (i = 0; i < n_switches; i++)
5467     if (!strncmp (switches[i].part1, atom, len)
5468         && (starred || switches[i].part1[len] == '\0')
5469         && check_live_switch (i, plen))
5470       return true;
5471
5472   return false;
5473 }
5474
5475 /* Inline subroutine of handle_braces.  Mark all of the switches which
5476    match ATOM (extends to END_ATOM; STARRED indicates whether there
5477    was a star after the atom) for later processing.  */
5478 static inline void
5479 mark_matching_switches (const char *atom, const char *end_atom, int starred)
5480 {
5481   int i;
5482   int len = end_atom - atom;
5483   int plen = starred ? len : -1;
5484
5485   for (i = 0; i < n_switches; i++)
5486     if (!strncmp (switches[i].part1, atom, len)
5487         && (starred || switches[i].part1[len] == '\0')
5488         && check_live_switch (i, plen))
5489       switches[i].ordering = 1;
5490 }
5491
5492 /* Inline subroutine of handle_braces.  Process all the currently
5493    marked switches through give_switch, and clear the marks.  */
5494 static inline void
5495 process_marked_switches (void)
5496 {
5497   int i;
5498
5499   for (i = 0; i < n_switches; i++)
5500     if (switches[i].ordering == 1)
5501       {
5502         switches[i].ordering = 0;
5503         give_switch (i, 0);
5504       }
5505 }
5506
5507 /* Handle a %{ ... } construct.  P points just inside the leading {.
5508    Returns a pointer one past the end of the brace block, or 0
5509    if we call do_spec_1 and that returns -1.  */
5510
5511 static const char *
5512 handle_braces (const char *p)
5513 {
5514   const char *atom, *end_atom;
5515   const char *d_atom = NULL, *d_end_atom = NULL;
5516   const char *orig = p;
5517
5518   bool a_is_suffix;
5519   bool a_is_spectype;
5520   bool a_is_starred;
5521   bool a_is_negated;
5522   bool a_matched;
5523
5524   bool a_must_be_last = false;
5525   bool ordered_set    = false;
5526   bool disjunct_set   = false;
5527   bool disj_matched   = false;
5528   bool disj_starred   = true;
5529   bool n_way_choice   = false;
5530   bool n_way_matched  = false;
5531
5532 #define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0)
5533
5534   do
5535     {
5536       if (a_must_be_last)
5537         goto invalid;
5538
5539       /* Scan one "atom" (S in the description above of %{}, possibly
5540          with '!', '.', '@', ',', or '*' modifiers).  */
5541       a_matched = false;
5542       a_is_suffix = false;
5543       a_is_starred = false;
5544       a_is_negated = false;
5545       a_is_spectype = false;
5546
5547       SKIP_WHITE();
5548       if (*p == '!')
5549         p++, a_is_negated = true;
5550
5551       SKIP_WHITE();
5552       if (*p == '.')
5553         p++, a_is_suffix = true;
5554       else if (*p == ',')
5555         p++, a_is_spectype = true;
5556
5557       atom = p;
5558       while (ISIDNUM(*p) || *p == '-' || *p == '+' || *p == '='
5559              || *p == ',' || *p == '.' || *p == '@')
5560         p++;
5561       end_atom = p;
5562
5563       if (*p == '*')
5564         p++, a_is_starred = 1;
5565
5566       SKIP_WHITE();
5567       switch (*p)
5568         {
5569         case '&': case '}':
5570           /* Substitute the switch(es) indicated by the current atom.  */
5571           ordered_set = true;
5572           if (disjunct_set || n_way_choice || a_is_negated || a_is_suffix
5573               || a_is_spectype || atom == end_atom)
5574             goto invalid;
5575
5576           mark_matching_switches (atom, end_atom, a_is_starred);
5577
5578           if (*p == '}')
5579             process_marked_switches ();
5580           break;
5581
5582         case '|': case ':':
5583           /* Substitute some text if the current atom appears as a switch
5584              or suffix.  */
5585           disjunct_set = true;
5586           if (ordered_set)
5587             goto invalid;
5588
5589           if (atom == end_atom)
5590             {
5591               if (!n_way_choice || disj_matched || *p == '|'
5592                   || a_is_negated || a_is_suffix || a_is_spectype
5593                   || a_is_starred)
5594                 goto invalid;
5595
5596               /* An empty term may appear as the last choice of an
5597                  N-way choice set; it means "otherwise".  */
5598               a_must_be_last = true;
5599               disj_matched = !n_way_matched;
5600               disj_starred = false;
5601             }
5602           else
5603             {
5604               if ((a_is_suffix || a_is_spectype) && a_is_starred)
5605                 goto invalid;
5606
5607               if (!a_is_starred)
5608                 disj_starred = false;
5609
5610               /* Don't bother testing this atom if we already have a
5611                  match.  */
5612               if (!disj_matched && !n_way_matched)
5613                 {
5614                   if (a_is_suffix)
5615                     a_matched = input_suffix_matches (atom, end_atom);
5616                   else if (a_is_spectype)
5617                     a_matched = input_spec_matches (atom, end_atom);
5618                   else
5619                     a_matched = switch_matches (atom, end_atom, a_is_starred);
5620
5621                   if (a_matched != a_is_negated)
5622                     {
5623                       disj_matched = true;
5624                       d_atom = atom;
5625                       d_end_atom = end_atom;
5626                     }
5627                 }
5628             }
5629
5630           if (*p == ':')
5631             {
5632               /* Found the body, that is, the text to substitute if the
5633                  current disjunction matches.  */
5634               p = process_brace_body (p + 1, d_atom, d_end_atom, disj_starred,
5635                                       disj_matched && !n_way_matched);
5636               if (p == 0)
5637                 return 0;
5638
5639               /* If we have an N-way choice, reset state for the next
5640                  disjunction.  */
5641               if (*p == ';')
5642                 {
5643                   n_way_choice = true;
5644                   n_way_matched |= disj_matched;
5645                   disj_matched = false;
5646                   disj_starred = true;
5647                   d_atom = d_end_atom = NULL;
5648                 }
5649             }
5650           break;
5651
5652         default:
5653           goto invalid;
5654         }
5655     }
5656   while (*p++ != '}');
5657
5658   return p;
5659
5660  invalid:
5661   fatal_error ("braced spec %qs is invalid at %qc", orig, *p);
5662
5663 #undef SKIP_WHITE
5664 }
5665
5666 /* Subroutine of handle_braces.  Scan and process a brace substitution body
5667    (X in the description of %{} syntax).  P points one past the colon;
5668    ATOM and END_ATOM bracket the first atom which was found to be true
5669    (present) in the current disjunction; STARRED indicates whether all
5670    the atoms in the current disjunction were starred (for syntax validation);
5671    MATCHED indicates whether the disjunction matched or not, and therefore
5672    whether or not the body is to be processed through do_spec_1 or just
5673    skipped.  Returns a pointer to the closing } or ;, or 0 if do_spec_1
5674    returns -1.  */
5675
5676 static const char *
5677 process_brace_body (const char *p, const char *atom, const char *end_atom,
5678                     int starred, int matched)
5679 {
5680   const char *body, *end_body;
5681   unsigned int nesting_level;
5682   bool have_subst     = false;
5683
5684   /* Locate the closing } or ;, honoring nested braces.
5685      Trim trailing whitespace.  */
5686   body = p;
5687   nesting_level = 1;
5688   for (;;)
5689     {
5690       if (*p == '{')
5691         nesting_level++;
5692       else if (*p == '}')
5693         {
5694           if (!--nesting_level)
5695             break;
5696         }
5697       else if (*p == ';' && nesting_level == 1)
5698         break;
5699       else if (*p == '%' && p[1] == '*' && nesting_level == 1)
5700         have_subst = true;
5701       else if (*p == '\0')
5702         goto invalid;
5703       p++;
5704     }
5705
5706   end_body = p;
5707   while (end_body[-1] == ' ' || end_body[-1] == '\t')
5708     end_body--;
5709
5710   if (have_subst && !starred)
5711     goto invalid;
5712
5713   if (matched)
5714     {
5715       /* Copy the substitution body to permanent storage and execute it.
5716          If have_subst is false, this is a simple matter of running the
5717          body through do_spec_1...  */
5718       char *string = save_string (body, end_body - body);
5719       if (!have_subst)
5720         {
5721           if (do_spec_1 (string, 0, NULL) < 0)
5722             return 0;
5723         }
5724       else
5725         {
5726           /* ... but if have_subst is true, we have to process the
5727              body once for each matching switch, with %* set to the
5728              variant part of the switch.  */
5729           unsigned int hard_match_len = end_atom - atom;
5730           int i;
5731
5732           for (i = 0; i < n_switches; i++)
5733             if (!strncmp (switches[i].part1, atom, hard_match_len)
5734                 && check_live_switch (i, hard_match_len))
5735               {
5736                 if (do_spec_1 (string, 0,
5737                                &switches[i].part1[hard_match_len]) < 0)
5738                   return 0;
5739                 /* Pass any arguments this switch has.  */
5740                 give_switch (i, 1);
5741                 suffix_subst = NULL;
5742               }
5743         }
5744     }
5745
5746   return p;
5747
5748  invalid:
5749   fatal_error ("braced spec body %qs is invalid", body);
5750 }
5751 \f
5752 /* Return 0 iff switch number SWITCHNUM is obsoleted by a later switch
5753    on the command line.  PREFIX_LENGTH is the length of XXX in an {XXX*}
5754    spec, or -1 if either exact match or %* is used.
5755
5756    A -O switch is obsoleted by a later -O switch.  A -f, -m, or -W switch
5757    whose value does not begin with "no-" is obsoleted by the same value
5758    with the "no-", similarly for a switch with the "no-" prefix.  */
5759
5760 static int
5761 check_live_switch (int switchnum, int prefix_length)
5762 {
5763   const char *name = switches[switchnum].part1;
5764   int i;
5765
5766   /* If we already processed this switch and determined if it was
5767      live or not, return our past determination.  */
5768   if (switches[switchnum].live_cond != 0)
5769     return ((switches[switchnum].live_cond & SWITCH_LIVE) != 0
5770             && (switches[switchnum].live_cond & SWITCH_FALSE) == 0
5771             && (switches[switchnum].live_cond & SWITCH_IGNORE_PERMANENTLY)
5772                == 0);
5773
5774   /* In the common case of {<at-most-one-letter>*}, a negating
5775      switch would always match, so ignore that case.  We will just
5776      send the conflicting switches to the compiler phase.  */
5777   if (prefix_length >= 0 && prefix_length <= 1)
5778     return 1;
5779
5780   /* Now search for duplicate in a manner that depends on the name.  */
5781   switch (*name)
5782     {
5783     case 'O':
5784       for (i = switchnum + 1; i < n_switches; i++)
5785         if (switches[i].part1[0] == 'O')
5786           {
5787             switches[switchnum].validated = 1;
5788             switches[switchnum].live_cond = SWITCH_FALSE;
5789             return 0;
5790           }
5791       break;
5792
5793     case 'W':  case 'f':  case 'm':
5794       if (! strncmp (name + 1, "no-", 3))
5795         {
5796           /* We have Xno-YYY, search for XYYY.  */
5797           for (i = switchnum + 1; i < n_switches; i++)
5798             if (switches[i].part1[0] == name[0]
5799                 && ! strcmp (&switches[i].part1[1], &name[4]))
5800               {
5801                 switches[switchnum].validated = 1;
5802                 switches[switchnum].live_cond = SWITCH_FALSE;
5803                 return 0;
5804               }
5805         }
5806       else
5807         {
5808           /* We have XYYY, search for Xno-YYY.  */
5809           for (i = switchnum + 1; i < n_switches; i++)
5810             if (switches[i].part1[0] == name[0]
5811                 && switches[i].part1[1] == 'n'
5812                 && switches[i].part1[2] == 'o'
5813                 && switches[i].part1[3] == '-'
5814                 && !strcmp (&switches[i].part1[4], &name[1]))
5815               {
5816                 switches[switchnum].validated = 1;
5817                 switches[switchnum].live_cond = SWITCH_FALSE;
5818                 return 0;
5819               }
5820         }
5821       break;
5822     }
5823
5824   /* Otherwise the switch is live.  */
5825   switches[switchnum].live_cond |= SWITCH_LIVE;
5826   return 1;
5827 }
5828 \f
5829 /* Pass a switch to the current accumulating command
5830    in the same form that we received it.
5831    SWITCHNUM identifies the switch; it is an index into
5832    the vector of switches gcc received, which is `switches'.
5833    This cannot fail since it never finishes a command line.
5834
5835    If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument.  */
5836
5837 static void
5838 give_switch (int switchnum, int omit_first_word)
5839 {
5840   if ((switches[switchnum].live_cond & SWITCH_IGNORE) != 0)
5841     return;
5842
5843   if (!omit_first_word)
5844     {
5845       do_spec_1 ("-", 0, NULL);
5846       do_spec_1 (switches[switchnum].part1, 1, NULL);
5847     }
5848
5849   if (switches[switchnum].args != 0)
5850     {
5851       const char **p;
5852       for (p = switches[switchnum].args; *p; p++)
5853         {
5854           const char *arg = *p;
5855
5856           do_spec_1 (" ", 0, NULL);
5857           if (suffix_subst)
5858             {
5859               unsigned length = strlen (arg);
5860               int dot = 0;
5861
5862               while (length-- && !IS_DIR_SEPARATOR (arg[length]))
5863                 if (arg[length] == '.')
5864                   {
5865                     (CONST_CAST(char *, arg))[length] = 0;
5866                     dot = 1;
5867                     break;
5868                   }
5869               do_spec_1 (arg, 1, NULL);
5870               if (dot)
5871                 (CONST_CAST(char *, arg))[length] = '.';
5872               do_spec_1 (suffix_subst, 1, NULL);
5873             }
5874           else
5875             do_spec_1 (arg, 1, NULL);
5876         }
5877     }
5878
5879   do_spec_1 (" ", 0, NULL);
5880   switches[switchnum].validated = 1;
5881 }
5882 \f
5883 /* Search for a file named NAME trying various prefixes including the
5884    user's -B prefix and some standard ones.
5885    Return the absolute file name found.  If nothing is found, return NAME.  */
5886
5887 static const char *
5888 find_file (const char *name)
5889 {
5890   char *newname = find_a_file (&startfile_prefixes, name, R_OK, true);
5891   return newname ? newname : name;
5892 }
5893
5894 /* Determine whether a directory exists.  If LINKER, return 0 for
5895    certain fixed names not needed by the linker.  */
5896
5897 static int
5898 is_directory (const char *path1, bool linker)
5899 {
5900   int len1;
5901   char *path;
5902   char *cp;
5903   struct stat st;
5904
5905   /* Ensure the string ends with "/.".  The resulting path will be a
5906      directory even if the given path is a symbolic link.  */
5907   len1 = strlen (path1);
5908   path = (char *) alloca (3 + len1);
5909   memcpy (path, path1, len1);
5910   cp = path + len1;
5911   if (!IS_DIR_SEPARATOR (cp[-1]))
5912     *cp++ = DIR_SEPARATOR;
5913   *cp++ = '.';
5914   *cp = '\0';
5915
5916   /* Exclude directories that the linker is known to search.  */
5917   if (linker
5918       && IS_DIR_SEPARATOR (path[0])
5919       && ((cp - path == 6
5920            && strncmp (path + 1, "lib", 3) == 0)
5921           || (cp - path == 10
5922               && strncmp (path + 1, "usr", 3) == 0
5923               && IS_DIR_SEPARATOR (path[4])
5924               && strncmp (path + 5, "lib", 3) == 0)))
5925     return 0;
5926
5927   return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode));
5928 }
5929
5930 /* Set up the various global variables to indicate that we're processing
5931    the input file named FILENAME.  */
5932
5933 void
5934 set_input (const char *filename)
5935 {
5936   const char *p;
5937
5938   gcc_input_filename = filename;
5939   input_filename_length = strlen (gcc_input_filename);
5940   input_basename = lbasename (gcc_input_filename);
5941
5942   /* Find a suffix starting with the last period,
5943      and set basename_length to exclude that suffix.  */
5944   basename_length = strlen (input_basename);
5945   suffixed_basename_length = basename_length;
5946   p = input_basename + basename_length;
5947   while (p != input_basename && *p != '.')
5948     --p;
5949   if (*p == '.' && p != input_basename)
5950     {
5951       basename_length = p - input_basename;
5952       input_suffix = p + 1;
5953     }
5954   else
5955     input_suffix = "";
5956
5957   /* If a spec for 'g', 'u', or 'U' is seen with -save-temps then
5958      we will need to do a stat on the gcc_input_filename.  The
5959      INPUT_STAT_SET signals that the stat is needed.  */
5960   input_stat_set = 0;
5961 }
5962 \f
5963 /* On fatal signals, delete all the temporary files.  */
5964
5965 static void
5966 fatal_signal (int signum)
5967 {
5968   signal (signum, SIG_DFL);
5969   delete_failure_queue ();
5970   delete_temp_files ();
5971   /* Get the same signal again, this time not handled,
5972      so its normal effect occurs.  */
5973   kill (getpid (), signum);
5974 }
5975
5976 /* Compare the contents of the two files named CMPFILE[0] and
5977    CMPFILE[1].  Return zero if they're identical, nonzero
5978    otherwise.  */
5979
5980 static int
5981 compare_files (char *cmpfile[])
5982 {
5983   int ret = 0;
5984   FILE *temp[2] = { NULL, NULL };
5985   int i;
5986
5987 #if HAVE_MMAP_FILE
5988   {
5989     size_t length[2];
5990     void *map[2] = { NULL, NULL };
5991
5992     for (i = 0; i < 2; i++)
5993       {
5994         struct stat st;
5995
5996         if (stat (cmpfile[i], &st) < 0 || !S_ISREG (st.st_mode))
5997           {
5998             error ("%s: could not determine length of compare-debug file %s",
5999                    gcc_input_filename, cmpfile[i]);
6000             ret = 1;
6001             break;
6002           }
6003
6004         length[i] = st.st_size;
6005       }
6006
6007     if (!ret && length[0] != length[1])
6008       {
6009         error ("%s: -fcompare-debug failure (length)", gcc_input_filename);
6010         ret = 1;
6011       }
6012
6013     if (!ret)
6014       for (i = 0; i < 2; i++)
6015         {
6016           int fd = open (cmpfile[i], O_RDONLY);
6017           if (fd < 0)
6018             {
6019               error ("%s: could not open compare-debug file %s",
6020                      gcc_input_filename, cmpfile[i]);
6021               ret = 1;
6022               break;
6023             }
6024
6025           map[i] = mmap (NULL, length[i], PROT_READ, MAP_PRIVATE, fd, 0);
6026           close (fd);
6027
6028           if (map[i] == (void *) MAP_FAILED)
6029             {
6030               ret = -1;
6031               break;
6032             }
6033         }
6034
6035     if (!ret)
6036       {
6037         if (memcmp (map[0], map[1], length[0]) != 0)
6038           {
6039             error ("%s: -fcompare-debug failure", gcc_input_filename);
6040             ret = 1;
6041           }
6042       }
6043
6044     for (i = 0; i < 2; i++)
6045       if (map[i])
6046         munmap ((caddr_t) map[i], length[i]);
6047
6048     if (ret >= 0)
6049       return ret;
6050
6051     ret = 0;
6052   }
6053 #endif
6054
6055   for (i = 0; i < 2; i++)
6056     {
6057       temp[i] = fopen (cmpfile[i], "r");
6058       if (!temp[i])
6059         {
6060           error ("%s: could not open compare-debug file %s",
6061                  gcc_input_filename, cmpfile[i]);
6062           ret = 1;
6063           break;
6064         }
6065     }
6066
6067   if (!ret && temp[0] && temp[1])
6068     for (;;)
6069       {
6070         int c0, c1;
6071         c0 = fgetc (temp[0]);
6072         c1 = fgetc (temp[1]);
6073
6074         if (c0 != c1)
6075           {
6076             error ("%s: -fcompare-debug failure",
6077                    gcc_input_filename);
6078             ret = 1;
6079             break;
6080           }
6081
6082         if (c0 == EOF)
6083           break;
6084       }
6085
6086   for (i = 1; i >= 0; i--)
6087     {
6088       if (temp[i])
6089         fclose (temp[i]);
6090     }
6091
6092   return ret;
6093 }
6094
6095 extern int main (int, char **);
6096
6097 int
6098 main (int argc, char **argv)
6099 {
6100   size_t i;
6101   int value;
6102   int linker_was_run = 0;
6103   int lang_n_infiles = 0;
6104   int num_linker_inputs = 0;
6105   char *explicit_link_files;
6106   char *specs_file;
6107   const char *p;
6108   struct user_specs *uptr;
6109   char **old_argv = argv;
6110   struct cl_decoded_option *decoded_options;
6111   unsigned int decoded_options_count;
6112
6113   /* Initialize here, not in definition.  The IRIX 6 O32 cc sometimes chokes
6114      on ?: in file-scope variable initializations.  */
6115   asm_debug = ASM_DEBUG_SPEC;
6116
6117   p = argv[0] + strlen (argv[0]);
6118   while (p != argv[0] && !IS_DIR_SEPARATOR (p[-1]))
6119     --p;
6120   progname = p;
6121
6122   xmalloc_set_program_name (progname);
6123
6124   expandargv (&argc, &argv);
6125
6126   /* Determine if any expansions were made.  */
6127   if (argv != old_argv)
6128     at_file_supplied = true;
6129
6130   global_options = global_options_init;
6131
6132   decode_cmdline_options_to_array (argc, CONST_CAST2 (const char **, char **,
6133                                                       argv),
6134                                    CL_DRIVER,
6135                                    &decoded_options, &decoded_options_count);
6136
6137 #ifdef GCC_DRIVER_HOST_INITIALIZATION
6138   /* Perform host dependent initialization when needed.  */
6139   GCC_DRIVER_HOST_INITIALIZATION;
6140 #endif
6141
6142   /* Unlock the stdio streams.  */
6143   unlock_std_streams ();
6144
6145   gcc_init_libintl ();
6146
6147   diagnostic_initialize (global_dc, 0);
6148   if (atexit (delete_temp_files) != 0)
6149     fatal_error ("atexit failed");
6150
6151   if (signal (SIGINT, SIG_IGN) != SIG_IGN)
6152     signal (SIGINT, fatal_signal);
6153 #ifdef SIGHUP
6154   if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
6155     signal (SIGHUP, fatal_signal);
6156 #endif
6157   if (signal (SIGTERM, SIG_IGN) != SIG_IGN)
6158     signal (SIGTERM, fatal_signal);
6159 #ifdef SIGPIPE
6160   if (signal (SIGPIPE, SIG_IGN) != SIG_IGN)
6161     signal (SIGPIPE, fatal_signal);
6162 #endif
6163 #ifdef SIGCHLD
6164   /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will
6165      receive the signal.  A different setting is inheritable */
6166   signal (SIGCHLD, SIG_DFL);
6167 #endif
6168
6169   /* Allocate the argument vector.  */
6170   alloc_args ();
6171
6172   obstack_init (&obstack);
6173
6174   /* Build multilib_select, et. al from the separate lines that make up each
6175      multilib selection.  */
6176   {
6177     const char *const *q = multilib_raw;
6178     int need_space;
6179
6180     obstack_init (&multilib_obstack);
6181     while ((p = *q++) != (char *) 0)
6182       obstack_grow (&multilib_obstack, p, strlen (p));
6183
6184     obstack_1grow (&multilib_obstack, 0);
6185     multilib_select = XOBFINISH (&multilib_obstack, const char *);
6186
6187     q = multilib_matches_raw;
6188     while ((p = *q++) != (char *) 0)
6189       obstack_grow (&multilib_obstack, p, strlen (p));
6190
6191     obstack_1grow (&multilib_obstack, 0);
6192     multilib_matches = XOBFINISH (&multilib_obstack, const char *);
6193
6194     q = multilib_exclusions_raw;
6195     while ((p = *q++) != (char *) 0)
6196       obstack_grow (&multilib_obstack, p, strlen (p));
6197
6198     obstack_1grow (&multilib_obstack, 0);
6199     multilib_exclusions = XOBFINISH (&multilib_obstack, const char *);
6200
6201     need_space = FALSE;
6202     for (i = 0; i < ARRAY_SIZE (multilib_defaults_raw); i++)
6203       {
6204         if (need_space)
6205           obstack_1grow (&multilib_obstack, ' ');
6206         obstack_grow (&multilib_obstack,
6207                       multilib_defaults_raw[i],
6208                       strlen (multilib_defaults_raw[i]));
6209         need_space = TRUE;
6210       }
6211
6212     obstack_1grow (&multilib_obstack, 0);
6213     multilib_defaults = XOBFINISH (&multilib_obstack, const char *);
6214   }
6215
6216 #ifdef INIT_ENVIRONMENT
6217   /* Set up any other necessary machine specific environment variables.  */
6218   xputenv (INIT_ENVIRONMENT);
6219 #endif
6220
6221   /* Make a table of what switches there are (switches, n_switches).
6222      Make a table of specified input files (infiles, n_infiles).
6223      Decode switches that are handled locally.  */
6224
6225   process_command (decoded_options_count, decoded_options);
6226
6227   /* Initialize the vector of specs to just the default.
6228      This means one element containing 0s, as a terminator.  */
6229
6230   compilers = XNEWVAR (struct compiler, sizeof default_compilers);
6231   memcpy (compilers, default_compilers, sizeof default_compilers);
6232   n_compilers = n_default_compilers;
6233
6234   /* Read specs from a file if there is one.  */
6235
6236   machine_suffix = concat (spec_machine, dir_separator_str,
6237                            spec_version, dir_separator_str, NULL);
6238   just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
6239
6240   specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, true);
6241   /* Read the specs file unless it is a default one.  */
6242   if (specs_file != 0 && strcmp (specs_file, "specs"))
6243     read_specs (specs_file, TRUE);
6244   else
6245     init_spec ();
6246
6247   /* We need to check standard_exec_prefix/just_machine_suffix/specs
6248      for any override of as, ld and libraries.  */
6249   specs_file = (char *) alloca (strlen (standard_exec_prefix)
6250                        + strlen (just_machine_suffix) + sizeof ("specs"));
6251
6252   strcpy (specs_file, standard_exec_prefix);
6253   strcat (specs_file, just_machine_suffix);
6254   strcat (specs_file, "specs");
6255   if (access (specs_file, R_OK) == 0)
6256     read_specs (specs_file, TRUE);
6257
6258   /* Process any configure-time defaults specified for the command line
6259      options, via OPTION_DEFAULT_SPECS.  */
6260   for (i = 0; i < ARRAY_SIZE (option_default_specs); i++)
6261     do_option_spec (option_default_specs[i].name,
6262                     option_default_specs[i].spec);
6263
6264   /* Process DRIVER_SELF_SPECS, adding any new options to the end
6265      of the command line.  */
6266
6267   for (i = 0; i < ARRAY_SIZE (driver_self_specs); i++)
6268     do_self_spec (driver_self_specs[i]);
6269
6270   if (compare_debug)
6271     {
6272       enum save_temps save;
6273
6274       if (!compare_debug_second)
6275         {
6276           n_switches_debug_check[1] = n_switches;
6277           n_switches_alloc_debug_check[1] = n_switches_alloc;
6278           switches_debug_check[1] = XDUPVEC (struct switchstr, switches,
6279                                              n_switches_alloc);
6280
6281           do_self_spec ("%:compare-debug-self-opt()");
6282           n_switches_debug_check[0] = n_switches;
6283           n_switches_alloc_debug_check[0] = n_switches_alloc;
6284           switches_debug_check[0] = switches;
6285
6286           n_switches = n_switches_debug_check[1];
6287           n_switches_alloc = n_switches_alloc_debug_check[1];
6288           switches = switches_debug_check[1];
6289         }
6290
6291       /* Avoid crash when computing %j in this early.  */
6292       save = save_temps_flag;
6293       save_temps_flag = SAVE_TEMPS_NONE;
6294
6295       compare_debug = -compare_debug;
6296       do_self_spec ("%:compare-debug-self-opt()");
6297
6298       save_temps_flag = save;
6299
6300       if (!compare_debug_second)
6301         {
6302           n_switches_debug_check[1] = n_switches;
6303           n_switches_alloc_debug_check[1] = n_switches_alloc;
6304           switches_debug_check[1] = switches;
6305           compare_debug = -compare_debug;
6306           n_switches = n_switches_debug_check[0];
6307           n_switches_alloc = n_switches_debug_check[0];
6308           switches = switches_debug_check[0];
6309         }
6310     }
6311
6312   /* If not cross-compiling, look for executables in the standard
6313      places.  */
6314   if (*cross_compile == '0')
6315     {
6316       if (*md_exec_prefix)
6317         {
6318           add_prefix (&exec_prefixes, md_exec_prefix, "GCC",
6319                       PREFIX_PRIORITY_LAST, 0, 0);
6320         }
6321     }
6322
6323   /* Process sysroot_suffix_spec.  */
6324   if (*sysroot_suffix_spec != 0
6325       && do_spec_2 (sysroot_suffix_spec) == 0)
6326     {
6327       if (argbuf_index > 1)
6328         error ("spec failure: more than one arg to SYSROOT_SUFFIX_SPEC");
6329       else if (argbuf_index == 1)
6330         target_sysroot_suffix = xstrdup (argbuf[argbuf_index -1]);
6331     }
6332
6333 #ifdef HAVE_LD_SYSROOT
6334   /* Pass the --sysroot option to the linker, if it supports that.  If
6335      there is a sysroot_suffix_spec, it has already been processed by
6336      this point, so target_system_root really is the system root we
6337      should be using.  */
6338   if (target_system_root)
6339     {
6340       obstack_grow (&obstack, "%(sysroot_spec) ", strlen ("%(sysroot_spec) "));
6341       obstack_grow0 (&obstack, link_spec, strlen (link_spec));
6342       set_spec ("link", XOBFINISH (&obstack, const char *));
6343     }
6344 #endif
6345
6346   /* Process sysroot_hdrs_suffix_spec.  */
6347   if (*sysroot_hdrs_suffix_spec != 0
6348       && do_spec_2 (sysroot_hdrs_suffix_spec) == 0)
6349     {
6350       if (argbuf_index > 1)
6351         error ("spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC");
6352       else if (argbuf_index == 1)
6353         target_sysroot_hdrs_suffix = xstrdup (argbuf[argbuf_index -1]);
6354     }
6355
6356   /* Look for startfiles in the standard places.  */
6357   if (*startfile_prefix_spec != 0
6358       && do_spec_2 (startfile_prefix_spec) == 0
6359       && do_spec_1 (" ", 0, NULL) == 0)
6360     {
6361       int ndx;
6362       for (ndx = 0; ndx < argbuf_index; ndx++)
6363         add_sysrooted_prefix (&startfile_prefixes, argbuf[ndx], "BINUTILS",
6364                               PREFIX_PRIORITY_LAST, 0, 1);
6365     }
6366   /* We should eventually get rid of all these and stick to
6367      startfile_prefix_spec exclusively.  */
6368   else if (*cross_compile == '0' || target_system_root)
6369     {
6370       if (*md_startfile_prefix)
6371         add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix,
6372                               "GCC", PREFIX_PRIORITY_LAST, 0, 1);
6373
6374       if (*md_startfile_prefix_1)
6375         add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix_1,
6376                               "GCC", PREFIX_PRIORITY_LAST, 0, 1);
6377
6378       /* If standard_startfile_prefix is relative, base it on
6379          standard_exec_prefix.  This lets us move the installed tree
6380          as a unit.  If GCC_EXEC_PREFIX is defined, base
6381          standard_startfile_prefix on that as well.
6382
6383          If the prefix is relative, only search it for native compilers;
6384          otherwise we will search a directory containing host libraries.  */
6385       if (IS_ABSOLUTE_PATH (standard_startfile_prefix))
6386         add_sysrooted_prefix (&startfile_prefixes,
6387                               standard_startfile_prefix, "BINUTILS",
6388                               PREFIX_PRIORITY_LAST, 0, 1);
6389       else if (*cross_compile == '0')
6390         {
6391           add_prefix (&startfile_prefixes,
6392                       concat (gcc_exec_prefix
6393                               ? gcc_exec_prefix : standard_exec_prefix,
6394                               machine_suffix,
6395                               standard_startfile_prefix, NULL),
6396                       NULL, PREFIX_PRIORITY_LAST, 0, 1);
6397         }
6398
6399       /* Sysrooted prefixes are relocated because target_system_root is
6400          also relocated by gcc_exec_prefix.  */
6401       if (*standard_startfile_prefix_1)
6402         add_sysrooted_prefix (&startfile_prefixes,
6403                               standard_startfile_prefix_1, "BINUTILS",
6404                               PREFIX_PRIORITY_LAST, 0, 1);
6405       if (*standard_startfile_prefix_2)
6406         add_sysrooted_prefix (&startfile_prefixes,
6407                               standard_startfile_prefix_2, "BINUTILS",
6408                               PREFIX_PRIORITY_LAST, 0, 1);
6409     }
6410
6411   /* Process any user specified specs in the order given on the command
6412      line.  */
6413   for (uptr = user_specs_head; uptr; uptr = uptr->next)
6414     {
6415       char *filename = find_a_file (&startfile_prefixes, uptr->filename,
6416                                     R_OK, true);
6417       read_specs (filename ? filename : uptr->filename, FALSE);
6418     }
6419
6420   /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake.  */
6421   if (gcc_exec_prefix)
6422     gcc_exec_prefix = concat (gcc_exec_prefix, spec_machine, dir_separator_str,
6423                               spec_version, dir_separator_str, NULL);
6424
6425   /* Now we have the specs.
6426      Set the `valid' bits for switches that match anything in any spec.  */
6427
6428   validate_all_switches ();
6429
6430   /* Now that we have the switches and the specs, set
6431      the subdirectory based on the options.  */
6432   set_multilib_dir ();
6433
6434   /* Set up to remember the pathname of gcc and any options
6435      needed for collect.  We use argv[0] instead of progname because
6436      we need the complete pathname.  */
6437   obstack_init (&collect_obstack);
6438   obstack_grow (&collect_obstack, "COLLECT_GCC=", sizeof ("COLLECT_GCC=") - 1);
6439   obstack_grow (&collect_obstack, argv[0], strlen (argv[0]) + 1);
6440   xputenv (XOBFINISH (&collect_obstack, char *));
6441
6442   /* Set up to remember the pathname of the lto wrapper. */
6443
6444   lto_wrapper_spec = find_a_file (&exec_prefixes, "lto-wrapper", X_OK, false);
6445   if (lto_wrapper_spec)
6446     {
6447       obstack_init (&collect_obstack);
6448       obstack_grow (&collect_obstack, "COLLECT_LTO_WRAPPER=",
6449                     sizeof ("COLLECT_LTO_WRAPPER=") - 1);
6450       obstack_grow (&collect_obstack, lto_wrapper_spec,
6451                     strlen (lto_wrapper_spec) + 1);
6452       xputenv (XOBFINISH (&collect_obstack, char *));
6453     }
6454
6455   /* Warn about any switches that no pass was interested in.  */
6456
6457   for (i = 0; (int) i < n_switches; i++)
6458     if (! switches[i].validated)
6459       error ("unrecognized option %<-%s%>", switches[i].part1);
6460
6461   /* Obey some of the options.  */
6462
6463   if (print_search_dirs)
6464     {
6465       printf (_("install: %s%s\n"),
6466               gcc_exec_prefix ? gcc_exec_prefix : standard_exec_prefix,
6467               gcc_exec_prefix ? "" : machine_suffix);
6468       printf (_("programs: %s\n"),
6469               build_search_list (&exec_prefixes, "", false, false));
6470       printf (_("libraries: %s\n"),
6471               build_search_list (&startfile_prefixes, "", false, true));
6472       return (0);
6473     }
6474
6475   if (print_file_name)
6476     {
6477       printf ("%s\n", find_file (print_file_name));
6478       return (0);
6479     }
6480
6481   if (print_prog_name)
6482     {
6483       char *newname = find_a_file (&exec_prefixes, print_prog_name, X_OK, 0);
6484       printf ("%s\n", (newname ? newname : print_prog_name));
6485       return (0);
6486     }
6487
6488   if (print_multi_lib)
6489     {
6490       print_multilib_info ();
6491       return (0);
6492     }
6493
6494   if (print_multi_directory)
6495     {
6496       if (multilib_dir == NULL)
6497         printf (".\n");
6498       else
6499         printf ("%s\n", multilib_dir);
6500       return (0);
6501     }
6502
6503   if (print_sysroot)
6504     {
6505       if (target_system_root)
6506         {
6507           if (target_sysroot_suffix)
6508             printf ("%s%s\n", target_system_root, target_sysroot_suffix);
6509           else
6510             printf ("%s\n", target_system_root);
6511         }
6512       return (0);
6513     }
6514
6515   if (print_multi_os_directory)
6516     {
6517       if (multilib_os_dir == NULL)
6518         printf (".\n");
6519       else
6520         printf ("%s\n", multilib_os_dir);
6521       return (0);
6522     }
6523
6524   if (print_sysroot_headers_suffix)
6525     {
6526       if (*sysroot_hdrs_suffix_spec)
6527         {
6528           printf("%s\n", (target_sysroot_hdrs_suffix
6529                           ? target_sysroot_hdrs_suffix
6530                           : ""));
6531           return (0);
6532         }
6533       else
6534         /* The error status indicates that only one set of fixed
6535            headers should be built.  */
6536         fatal_error ("not configured with sysroot headers suffix");
6537     }
6538
6539   if (print_help_list)
6540     {
6541       display_help ();
6542
6543       if (! verbose_flag)
6544         {
6545           printf (_("\nFor bug reporting instructions, please see:\n"));
6546           printf ("%s.\n", bug_report_url);
6547
6548           return (0);
6549         }
6550
6551       /* We do not exit here.  Instead we have created a fake input file
6552          called 'help-dummy' which needs to be compiled, and we pass this
6553          on the various sub-processes, along with the --help switch.
6554          Ensure their output appears after ours.  */
6555       fputc ('\n', stdout);
6556       fflush (stdout);
6557     }
6558
6559   if (print_version)
6560     {
6561       printf (_("%s %s%s\n"), progname, pkgversion_string,
6562               version_string);
6563       printf ("Copyright %s 2010 Free Software Foundation, Inc.\n",
6564               _("(C)"));
6565       fputs (_("This is free software; see the source for copying conditions.  There is NO\n\
6566 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"),
6567              stdout);
6568       if (! verbose_flag)
6569         return 0;
6570
6571       /* We do not exit here. We use the same mechanism of --help to print
6572          the version of the sub-processes. */
6573       fputc ('\n', stdout);
6574       fflush (stdout);
6575     }
6576
6577   if (verbose_flag)
6578     {
6579       int n;
6580       const char *thrmod;
6581
6582       fnotice (stderr, "Target: %s\n", spec_machine);
6583       fnotice (stderr, "Configured with: %s\n", configuration_arguments);
6584
6585 #ifdef THREAD_MODEL_SPEC
6586       /* We could have defined THREAD_MODEL_SPEC to "%*" by default,
6587          but there's no point in doing all this processing just to get
6588          thread_model back.  */
6589       obstack_init (&obstack);
6590       do_spec_1 (THREAD_MODEL_SPEC, 0, thread_model);
6591       obstack_1grow (&obstack, '\0');
6592       thrmod = XOBFINISH (&obstack, const char *);
6593 #else
6594       thrmod = thread_model;
6595 #endif
6596
6597       fnotice (stderr, "Thread model: %s\n", thrmod);
6598
6599       /* compiler_version is truncated at the first space when initialized
6600          from version string, so truncate version_string at the first space
6601          before comparing.  */
6602       for (n = 0; version_string[n]; n++)
6603         if (version_string[n] == ' ')
6604           break;
6605
6606       if (! strncmp (version_string, compiler_version, n)
6607           && compiler_version[n] == 0)
6608         fnotice (stderr, "gcc version %s %s\n", version_string,
6609                  pkgversion_string);
6610       else
6611         fnotice (stderr, "gcc driver version %s %sexecuting gcc version %s\n",
6612                  version_string, pkgversion_string, compiler_version);
6613
6614       if (n_infiles == 0)
6615         return (0);
6616     }
6617
6618   if (n_infiles == added_libraries)
6619     fatal_error ("no input files");
6620
6621   /* Make a place to record the compiler output file names
6622      that correspond to the input files.  */
6623
6624   i = n_infiles;
6625   i += lang_specific_extra_outfiles;
6626   outfiles = XCNEWVEC (const char *, i);
6627
6628   /* Record which files were specified explicitly as link input.  */
6629
6630   explicit_link_files = XCNEWVEC (char, n_infiles);
6631
6632   combine_inputs = have_o || flag_wpa;
6633
6634   for (i = 0; (int) i < n_infiles; i++)
6635     {
6636       const char *name = infiles[i].name;
6637       struct compiler *compiler = lookup_compiler (name,
6638                                                    strlen (name),
6639                                                    infiles[i].language);
6640
6641       if (compiler && !(compiler->combinable))
6642         combine_inputs = false;
6643
6644       if (lang_n_infiles > 0 && compiler != input_file_compiler
6645           && infiles[i].language && infiles[i].language[0] != '*')
6646         infiles[i].incompiler = compiler;
6647       else if (compiler)
6648         {
6649           lang_n_infiles++;
6650           input_file_compiler = compiler;
6651           infiles[i].incompiler = compiler;
6652         }
6653       else
6654         {
6655           /* Since there is no compiler for this input file, assume it is a
6656              linker file.  */
6657           explicit_link_files[i] = 1;
6658           infiles[i].incompiler = NULL;
6659         }
6660       infiles[i].compiled = false;
6661       infiles[i].preprocessed = false;
6662     }
6663
6664   if (!combine_inputs && have_c && have_o && lang_n_infiles > 1)
6665     fatal_error ("cannot specify -o with -c, -S or -E with multiple files");
6666
6667   for (i = 0; (int) i < n_infiles; i++)
6668     {
6669       int this_file_error = 0;
6670
6671       /* Tell do_spec what to substitute for %i.  */
6672
6673       input_file_number = i;
6674       set_input (infiles[i].name);
6675
6676       if (infiles[i].compiled)
6677         continue;
6678
6679       /* Use the same thing in %o, unless cp->spec says otherwise.  */
6680
6681       outfiles[i] = gcc_input_filename;
6682
6683       /* Figure out which compiler from the file's suffix.  */
6684
6685       input_file_compiler
6686         = lookup_compiler (infiles[i].name, input_filename_length,
6687                            infiles[i].language);
6688
6689       if (input_file_compiler)
6690         {
6691           /* Ok, we found an applicable compiler.  Run its spec.  */
6692
6693           if (input_file_compiler->spec[0] == '#')
6694             {
6695               error ("%s: %s compiler not installed on this system",
6696                      gcc_input_filename, &input_file_compiler->spec[1]);
6697               this_file_error = 1;
6698             }
6699           else
6700             {
6701               if (compare_debug)
6702                 {
6703                   if (debug_check_temp_file[0])
6704                     free (debug_check_temp_file[0]);
6705                   debug_check_temp_file[0] = NULL;
6706
6707                   if (debug_check_temp_file[1])
6708                     free (debug_check_temp_file[1]);
6709                   debug_check_temp_file[1] = NULL;
6710                 }
6711
6712               value = do_spec (input_file_compiler->spec);
6713               infiles[i].compiled = true;
6714               if (value < 0)
6715                 this_file_error = 1;
6716               else if (compare_debug && debug_check_temp_file[0])
6717                 {
6718                   if (verbose_flag)
6719                     inform (0, "recompiling with -fcompare-debug");
6720
6721                   compare_debug = -compare_debug;
6722                   n_switches = n_switches_debug_check[1];
6723                   n_switches_alloc = n_switches_alloc_debug_check[1];
6724                   switches = switches_debug_check[1];
6725
6726                   value = do_spec (input_file_compiler->spec);
6727
6728                   compare_debug = -compare_debug;
6729                   n_switches = n_switches_debug_check[0];
6730                   n_switches_alloc = n_switches_alloc_debug_check[0];
6731                   switches = switches_debug_check[0];
6732
6733                   if (value < 0)
6734                     {
6735                       error ("during -fcompare-debug recompilation");
6736                       this_file_error = 1;
6737                     }
6738
6739                   gcc_assert (debug_check_temp_file[1]
6740                               && strcmp (debug_check_temp_file[0],
6741                                          debug_check_temp_file[1]));
6742
6743                   if (verbose_flag)
6744                     inform (0, "comparing final insns dumps");
6745
6746                   if (compare_files (debug_check_temp_file))
6747                     this_file_error = 1;
6748                 }
6749
6750               if (compare_debug)
6751                 {
6752                   if (debug_check_temp_file[0])
6753                     free (debug_check_temp_file[0]);
6754                   debug_check_temp_file[0] = NULL;
6755
6756                   if (debug_check_temp_file[1])
6757                     free (debug_check_temp_file[1]);
6758                   debug_check_temp_file[1] = NULL;
6759                 }
6760             }
6761         }
6762
6763       /* If this file's name does not contain a recognized suffix,
6764          record it as explicit linker input.  */
6765
6766       else
6767         explicit_link_files[i] = 1;
6768
6769       /* Clear the delete-on-failure queue, deleting the files in it
6770          if this compilation failed.  */
6771
6772       if (this_file_error)
6773         {
6774           delete_failure_queue ();
6775           errorcount++;
6776         }
6777       /* If this compilation succeeded, don't delete those files later.  */
6778       clear_failure_queue ();
6779     }
6780
6781   /* Reset the input file name to the first compile/object file name, for use
6782      with %b in LINK_SPEC. We use the first input file that we can find
6783      a compiler to compile it instead of using infiles.language since for
6784      languages other than C we use aliases that we then lookup later.  */
6785   if (n_infiles > 0)
6786     {
6787       int i;
6788
6789       for (i = 0; i < n_infiles ; i++)
6790         if (infiles[i].language && infiles[i].language[0] != '*')
6791           {
6792             set_input (infiles[i].name);
6793             break;
6794           }
6795     }
6796
6797   if (!seen_error ())
6798     {
6799       /* Make sure INPUT_FILE_NUMBER points to first available open
6800          slot.  */
6801       input_file_number = n_infiles;
6802       if (lang_specific_pre_link ())
6803         errorcount++;
6804     }
6805
6806   /* Determine if there are any linker input files.  */
6807   num_linker_inputs = 0;
6808   for (i = 0; (int) i < n_infiles; i++)
6809     if (explicit_link_files[i] || outfiles[i] != NULL)
6810       num_linker_inputs++;
6811
6812   /* Run ld to link all the compiler output files.  */
6813
6814   if (num_linker_inputs > 0 && !seen_error () && print_subprocess_help < 2)
6815     {
6816       int tmp = execution_count;
6817       const char *fuse_linker_plugin = "fuse-linker-plugin";
6818
6819       /* We'll use ld if we can't find collect2.  */
6820       if (! strcmp (linker_name_spec, "collect2"))
6821         {
6822           char *s = find_a_file (&exec_prefixes, "collect2", X_OK, false);
6823           if (s == NULL)
6824             linker_name_spec = "ld";
6825         }
6826
6827       if (switch_matches (fuse_linker_plugin,
6828                           fuse_linker_plugin + strlen (fuse_linker_plugin), 0))
6829         {
6830           linker_plugin_file_spec = find_a_file (&exec_prefixes,
6831                                                  LTOPLUGINSONAME, R_OK,
6832                                                  false);
6833           if (!linker_plugin_file_spec)
6834             fatal_error ("-fuse-linker-plugin, but " LTOPLUGINSONAME " not found");
6835
6836           lto_libgcc_spec = find_a_file (&startfile_prefixes, "libgcc.a",
6837                                          R_OK, true);
6838           if (!lto_libgcc_spec)
6839             fatal_error ("could not find libgcc.a");
6840         }
6841       lto_gcc_spec = argv[0];
6842
6843       /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
6844          for collect.  */
6845       putenv_from_prefixes (&exec_prefixes, "COMPILER_PATH", false);
6846       putenv_from_prefixes (&startfile_prefixes, LIBRARY_PATH_ENV, true);
6847
6848       if (print_subprocess_help == 1)
6849         {
6850           printf (_("\nLinker options\n==============\n\n"));
6851           printf (_("Use \"-Wl,OPTION\" to pass \"OPTION\""
6852                     " to the linker.\n\n"));
6853           fflush (stdout);
6854         }
6855       value = do_spec (link_command_spec);
6856       if (value < 0)
6857         errorcount = 1;
6858       linker_was_run = (tmp != execution_count);
6859     }
6860
6861   /* If options said don't run linker,
6862      complain about input files to be given to the linker.  */
6863
6864   if (! linker_was_run && !seen_error ())
6865     for (i = 0; (int) i < n_infiles; i++)
6866       if (explicit_link_files[i]
6867           && !(infiles[i].language && infiles[i].language[0] == '*'))
6868         warning (0, "%s: linker input file unused because linking not done",
6869                  outfiles[i]);
6870
6871   /* Delete some or all of the temporary files we made.  */
6872
6873   if (seen_error ())
6874     delete_failure_queue ();
6875   delete_temp_files ();
6876
6877   if (print_help_list)
6878     {
6879       printf (("\nFor bug reporting instructions, please see:\n"));
6880       printf ("%s\n", bug_report_url);
6881     }
6882
6883   return (signal_count != 0 ? 2
6884           : seen_error () ? (pass_exit_codes ? greatest_status : 1)
6885           : 0);
6886 }
6887
6888 /* Find the proper compilation spec for the file name NAME,
6889    whose length is LENGTH.  LANGUAGE is the specified language,
6890    or 0 if this file is to be passed to the linker.  */
6891
6892 static struct compiler *
6893 lookup_compiler (const char *name, size_t length, const char *language)
6894 {
6895   struct compiler *cp;
6896
6897   /* If this was specified by the user to be a linker input, indicate that.  */
6898   if (language != 0 && language[0] == '*')
6899     return 0;
6900
6901   /* Otherwise, look for the language, if one is spec'd.  */
6902   if (language != 0)
6903     {
6904       for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
6905         if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language))
6906           return cp;
6907
6908       error ("language %s not recognized", language);
6909       return 0;
6910     }
6911
6912   /* Look for a suffix.  */
6913   for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
6914     {
6915       if (/* The suffix `-' matches only the file name `-'.  */
6916           (!strcmp (cp->suffix, "-") && !strcmp (name, "-"))
6917           || (strlen (cp->suffix) < length
6918               /* See if the suffix matches the end of NAME.  */
6919               && !strcmp (cp->suffix,
6920                           name + length - strlen (cp->suffix))
6921          ))
6922         break;
6923     }
6924
6925 #if defined (OS2) ||defined (HAVE_DOS_BASED_FILE_SYSTEM)
6926   /* Look again, but case-insensitively this time.  */
6927   if (cp < compilers)
6928     for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
6929       {
6930         if (/* The suffix `-' matches only the file name `-'.  */
6931             (!strcmp (cp->suffix, "-") && !strcmp (name, "-"))
6932             || (strlen (cp->suffix) < length
6933                 /* See if the suffix matches the end of NAME.  */
6934                 && ((!strcmp (cp->suffix,
6935                              name + length - strlen (cp->suffix))
6936                      || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
6937                     && !strcasecmp (cp->suffix,
6938                                     name + length - strlen (cp->suffix)))
6939            ))
6940           break;
6941       }
6942 #endif
6943
6944   if (cp >= compilers)
6945     {
6946       if (cp->spec[0] != '@')
6947         /* A non-alias entry: return it.  */
6948         return cp;
6949
6950       /* An alias entry maps a suffix to a language.
6951          Search for the language; pass 0 for NAME and LENGTH
6952          to avoid infinite recursion if language not found.  */
6953       return lookup_compiler (NULL, 0, cp->spec + 1);
6954     }
6955   return 0;
6956 }
6957 \f
6958 static char *
6959 save_string (const char *s, int len)
6960 {
6961   char *result = XNEWVEC (char, len + 1);
6962
6963   memcpy (result, s, len);
6964   result[len] = 0;
6965   return result;
6966 }
6967
6968 void
6969 pfatal_with_name (const char *name)
6970 {
6971   perror_with_name (name);
6972   delete_temp_files ();
6973   exit (1);
6974 }
6975
6976 static void
6977 perror_with_name (const char *name)
6978 {
6979   error ("%s: %m", name);
6980 }
6981 \f
6982 static inline void
6983 validate_switches_from_spec (const char *spec)
6984 {
6985   const char *p = spec;
6986   char c;
6987   while ((c = *p++))
6988     if (c == '%' && (*p == '{' || *p == '<' || (*p == 'W' && *++p == '{')))
6989       /* We have a switch spec.  */
6990       p = validate_switches (p + 1);
6991 }
6992
6993 static void
6994 validate_all_switches (void)
6995 {
6996   struct compiler *comp;
6997   struct spec_list *spec;
6998
6999   for (comp = compilers; comp->spec; comp++)
7000     validate_switches_from_spec (comp->spec);
7001
7002   /* Look through the linked list of specs read from the specs file.  */
7003   for (spec = specs; spec; spec = spec->next)
7004     validate_switches_from_spec (*spec->ptr_spec);
7005
7006   validate_switches_from_spec (link_command_spec);
7007 }
7008
7009 /* Look at the switch-name that comes after START
7010    and mark as valid all supplied switches that match it.  */
7011
7012 static const char *
7013 validate_switches (const char *start)
7014 {
7015   const char *p = start;
7016   const char *atom;
7017   size_t len;
7018   int i;
7019   bool suffix = false;
7020   bool starred = false;
7021
7022 #define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0)
7023
7024 next_member:
7025   SKIP_WHITE ();
7026
7027   if (*p == '!')
7028     p++;
7029
7030   SKIP_WHITE ();
7031   if (*p == '.' || *p == ',')
7032     suffix = true, p++;
7033
7034   atom = p;
7035   while (ISIDNUM (*p) || *p == '-' || *p == '+' || *p == '='
7036          || *p == ',' || *p == '.' || *p == '@')
7037     p++;
7038   len = p - atom;
7039
7040   if (*p == '*')
7041     starred = true, p++;
7042
7043   SKIP_WHITE ();
7044
7045   if (!suffix)
7046     {
7047       /* Mark all matching switches as valid.  */
7048       for (i = 0; i < n_switches; i++)
7049         if (!strncmp (switches[i].part1, atom, len)
7050             && (starred || switches[i].part1[len] == 0))
7051           switches[i].validated = 1;
7052     }
7053
7054   if (*p) p++;
7055   if (*p && (p[-1] == '|' || p[-1] == '&'))
7056     goto next_member;
7057
7058   if (*p && p[-1] == ':')
7059     {
7060       while (*p && *p != ';' && *p != '}')
7061         {
7062           if (*p == '%')
7063             {
7064               p++;
7065               if (*p == '{' || *p == '<')
7066                 p = validate_switches (p+1);
7067               else if (p[0] == 'W' && p[1] == '{')
7068                 p = validate_switches (p+2);
7069             }
7070           else
7071             p++;
7072         }
7073
7074       if (*p) p++;
7075       if (*p && p[-1] == ';')
7076         goto next_member;
7077     }
7078
7079   return p;
7080 #undef SKIP_WHITE
7081 }
7082 \f
7083 struct mdswitchstr
7084 {
7085   const char *str;
7086   int len;
7087 };
7088
7089 static struct mdswitchstr *mdswitches;
7090 static int n_mdswitches;
7091
7092 /* Check whether a particular argument was used.  The first time we
7093    canonicalize the switches to keep only the ones we care about.  */
7094
7095 static int
7096 used_arg (const char *p, int len)
7097 {
7098   struct mswitchstr
7099   {
7100     const char *str;
7101     const char *replace;
7102     int len;
7103     int rep_len;
7104   };
7105
7106   static struct mswitchstr *mswitches;
7107   static int n_mswitches;
7108   int i, j;
7109
7110   if (!mswitches)
7111     {
7112       struct mswitchstr *matches;
7113       const char *q;
7114       int cnt = 0;
7115
7116       /* Break multilib_matches into the component strings of string
7117          and replacement string.  */
7118       for (q = multilib_matches; *q != '\0'; q++)
7119         if (*q == ';')
7120           cnt++;
7121
7122       matches
7123         = (struct mswitchstr *) alloca ((sizeof (struct mswitchstr)) * cnt);
7124       i = 0;
7125       q = multilib_matches;
7126       while (*q != '\0')
7127         {
7128           matches[i].str = q;
7129           while (*q != ' ')
7130             {
7131               if (*q == '\0')
7132                 {
7133                 invalid_matches:
7134                   fatal_error ("multilib spec %qs is invalid",
7135                                multilib_matches);
7136                 }
7137               q++;
7138             }
7139           matches[i].len = q - matches[i].str;
7140
7141           matches[i].replace = ++q;
7142           while (*q != ';' && *q != '\0')
7143             {
7144               if (*q == ' ')
7145                 goto invalid_matches;
7146               q++;
7147             }
7148           matches[i].rep_len = q - matches[i].replace;
7149           i++;
7150           if (*q == ';')
7151             q++;
7152         }
7153
7154       /* Now build a list of the replacement string for switches that we care
7155          about.  Make sure we allocate at least one entry.  This prevents
7156          xmalloc from calling fatal, and prevents us from re-executing this
7157          block of code.  */
7158       mswitches
7159         = XNEWVEC (struct mswitchstr, n_mdswitches + (n_switches ? n_switches : 1));
7160       for (i = 0; i < n_switches; i++)
7161         if ((switches[i].live_cond & SWITCH_IGNORE) == 0)
7162           {
7163             int xlen = strlen (switches[i].part1);
7164             for (j = 0; j < cnt; j++)
7165               if (xlen == matches[j].len
7166                   && ! strncmp (switches[i].part1, matches[j].str, xlen))
7167                 {
7168                   mswitches[n_mswitches].str = matches[j].replace;
7169                   mswitches[n_mswitches].len = matches[j].rep_len;
7170                   mswitches[n_mswitches].replace = (char *) 0;
7171                   mswitches[n_mswitches].rep_len = 0;
7172                   n_mswitches++;
7173                   break;
7174                 }
7175           }
7176
7177       /* Add MULTILIB_DEFAULTS switches too, as long as they were not present
7178          on the command line nor any options mutually incompatible with
7179          them.  */
7180       for (i = 0; i < n_mdswitches; i++)
7181         {
7182           const char *r;
7183
7184           for (q = multilib_options; *q != '\0'; q++)
7185             {
7186               while (*q == ' ')
7187                 q++;
7188
7189               r = q;
7190               while (strncmp (q, mdswitches[i].str, mdswitches[i].len) != 0
7191                      || strchr (" /", q[mdswitches[i].len]) == NULL)
7192                 {
7193                   while (*q != ' ' && *q != '/' && *q != '\0')
7194                     q++;
7195                   if (*q != '/')
7196                     break;
7197                   q++;
7198                 }
7199
7200               if (*q != ' ' && *q != '\0')
7201                 {
7202                   while (*r != ' ' && *r != '\0')
7203                     {
7204                       q = r;
7205                       while (*q != ' ' && *q != '/' && *q != '\0')
7206                         q++;
7207
7208                       if (used_arg (r, q - r))
7209                         break;
7210
7211                       if (*q != '/')
7212                         {
7213                           mswitches[n_mswitches].str = mdswitches[i].str;
7214                           mswitches[n_mswitches].len = mdswitches[i].len;
7215                           mswitches[n_mswitches].replace = (char *) 0;
7216                           mswitches[n_mswitches].rep_len = 0;
7217                           n_mswitches++;
7218                           break;
7219                         }
7220
7221                       r = q + 1;
7222                     }
7223                   break;
7224                 }
7225             }
7226         }
7227     }
7228
7229   for (i = 0; i < n_mswitches; i++)
7230     if (len == mswitches[i].len && ! strncmp (p, mswitches[i].str, len))
7231       return 1;
7232
7233   return 0;
7234 }
7235
7236 static int
7237 default_arg (const char *p, int len)
7238 {
7239   int i;
7240
7241   for (i = 0; i < n_mdswitches; i++)
7242     if (len == mdswitches[i].len && ! strncmp (p, mdswitches[i].str, len))
7243       return 1;
7244
7245   return 0;
7246 }
7247
7248 /* Work out the subdirectory to use based on the options. The format of
7249    multilib_select is a list of elements. Each element is a subdirectory
7250    name followed by a list of options followed by a semicolon. The format
7251    of multilib_exclusions is the same, but without the preceding
7252    directory. First gcc will check the exclusions, if none of the options
7253    beginning with an exclamation point are present, and all of the other
7254    options are present, then we will ignore this completely. Passing
7255    that, gcc will consider each multilib_select in turn using the same
7256    rules for matching the options. If a match is found, that subdirectory
7257    will be used.  */
7258
7259 static void
7260 set_multilib_dir (void)
7261 {
7262   const char *p;
7263   unsigned int this_path_len;
7264   const char *this_path, *this_arg;
7265   const char *start, *end;
7266   int not_arg;
7267   int ok, ndfltok, first;
7268
7269   n_mdswitches = 0;
7270   start = multilib_defaults;
7271   while (*start == ' ' || *start == '\t')
7272     start++;
7273   while (*start != '\0')
7274     {
7275       n_mdswitches++;
7276       while (*start != ' ' && *start != '\t' && *start != '\0')
7277         start++;
7278       while (*start == ' ' || *start == '\t')
7279         start++;
7280     }
7281
7282   if (n_mdswitches)
7283     {
7284       int i = 0;
7285
7286       mdswitches = XNEWVEC (struct mdswitchstr, n_mdswitches);
7287       for (start = multilib_defaults; *start != '\0'; start = end + 1)
7288         {
7289           while (*start == ' ' || *start == '\t')
7290             start++;
7291
7292           if (*start == '\0')
7293             break;
7294
7295           for (end = start + 1;
7296                *end != ' ' && *end != '\t' && *end != '\0'; end++)
7297             ;
7298
7299           obstack_grow (&multilib_obstack, start, end - start);
7300           obstack_1grow (&multilib_obstack, 0);
7301           mdswitches[i].str = XOBFINISH (&multilib_obstack, const char *);
7302           mdswitches[i++].len = end - start;
7303
7304           if (*end == '\0')
7305             break;
7306         }
7307     }
7308
7309   p = multilib_exclusions;
7310   while (*p != '\0')
7311     {
7312       /* Ignore newlines.  */
7313       if (*p == '\n')
7314         {
7315           ++p;
7316           continue;
7317         }
7318
7319       /* Check the arguments.  */
7320       ok = 1;
7321       while (*p != ';')
7322         {
7323           if (*p == '\0')
7324             {
7325             invalid_exclusions:
7326               fatal_error ("multilib exclusions %qs is invalid",
7327                            multilib_exclusions);
7328             }
7329
7330           if (! ok)
7331             {
7332               ++p;
7333               continue;
7334             }
7335
7336           this_arg = p;
7337           while (*p != ' ' && *p != ';')
7338             {
7339               if (*p == '\0')
7340                 goto invalid_exclusions;
7341               ++p;
7342             }
7343
7344           if (*this_arg != '!')
7345             not_arg = 0;
7346           else
7347             {
7348               not_arg = 1;
7349               ++this_arg;
7350             }
7351
7352           ok = used_arg (this_arg, p - this_arg);
7353           if (not_arg)
7354             ok = ! ok;
7355
7356           if (*p == ' ')
7357             ++p;
7358         }
7359
7360       if (ok)
7361         return;
7362
7363       ++p;
7364     }
7365
7366   first = 1;
7367   p = multilib_select;
7368   while (*p != '\0')
7369     {
7370       /* Ignore newlines.  */
7371       if (*p == '\n')
7372         {
7373           ++p;
7374           continue;
7375         }
7376
7377       /* Get the initial path.  */
7378       this_path = p;
7379       while (*p != ' ')
7380         {
7381           if (*p == '\0')
7382             {
7383             invalid_select:
7384               fatal_error ("multilib select %qs is invalid",
7385                            multilib_select);
7386             }
7387           ++p;
7388         }
7389       this_path_len = p - this_path;
7390
7391       /* Check the arguments.  */
7392       ok = 1;
7393       ndfltok = 1;
7394       ++p;
7395       while (*p != ';')
7396         {
7397           if (*p == '\0')
7398             goto invalid_select;
7399
7400           if (! ok)
7401             {
7402               ++p;
7403               continue;
7404             }
7405
7406           this_arg = p;
7407           while (*p != ' ' && *p != ';')
7408             {
7409               if (*p == '\0')
7410                 goto invalid_select;
7411               ++p;
7412             }
7413
7414           if (*this_arg != '!')
7415             not_arg = 0;
7416           else
7417             {
7418               not_arg = 1;
7419               ++this_arg;
7420             }
7421
7422           /* If this is a default argument, we can just ignore it.
7423              This is true even if this_arg begins with '!'.  Beginning
7424              with '!' does not mean that this argument is necessarily
7425              inappropriate for this library: it merely means that
7426              there is a more specific library which uses this
7427              argument.  If this argument is a default, we need not
7428              consider that more specific library.  */
7429           ok = used_arg (this_arg, p - this_arg);
7430           if (not_arg)
7431             ok = ! ok;
7432
7433           if (! ok)
7434             ndfltok = 0;
7435
7436           if (default_arg (this_arg, p - this_arg))
7437             ok = 1;
7438
7439           if (*p == ' ')
7440             ++p;
7441         }
7442
7443       if (ok && first)
7444         {
7445           if (this_path_len != 1
7446               || this_path[0] != '.')
7447             {
7448               char *new_multilib_dir = XNEWVEC (char, this_path_len + 1);
7449               char *q;
7450
7451               strncpy (new_multilib_dir, this_path, this_path_len);
7452               new_multilib_dir[this_path_len] = '\0';
7453               q = strchr (new_multilib_dir, ':');
7454               if (q != NULL)
7455                 *q = '\0';
7456               multilib_dir = new_multilib_dir;
7457             }
7458           first = 0;
7459         }
7460
7461       if (ndfltok)
7462         {
7463           const char *q = this_path, *end = this_path + this_path_len;
7464
7465           while (q < end && *q != ':')
7466             q++;
7467           if (q < end)
7468             {
7469               char *new_multilib_os_dir = XNEWVEC (char, end - q);
7470               memcpy (new_multilib_os_dir, q + 1, end - q - 1);
7471               new_multilib_os_dir[end - q - 1] = '\0';
7472               multilib_os_dir = new_multilib_os_dir;
7473               break;
7474             }
7475         }
7476
7477       ++p;
7478     }
7479
7480   if (multilib_dir == NULL && multilib_os_dir != NULL
7481       && strcmp (multilib_os_dir, ".") == 0)
7482     {
7483       free (CONST_CAST (char *, multilib_os_dir));
7484       multilib_os_dir = NULL;
7485     }
7486   else if (multilib_dir != NULL && multilib_os_dir == NULL)
7487     multilib_os_dir = multilib_dir;
7488 }
7489
7490 /* Print out the multiple library subdirectory selection
7491    information.  This prints out a series of lines.  Each line looks
7492    like SUBDIRECTORY;@OPTION@OPTION, with as many options as is
7493    required.  Only the desired options are printed out, the negative
7494    matches.  The options are print without a leading dash.  There are
7495    no spaces to make it easy to use the information in the shell.
7496    Each subdirectory is printed only once.  This assumes the ordering
7497    generated by the genmultilib script. Also, we leave out ones that match
7498    the exclusions.  */
7499
7500 static void
7501 print_multilib_info (void)
7502 {
7503   const char *p = multilib_select;
7504   const char *last_path = 0, *this_path;
7505   int skip;
7506   unsigned int last_path_len = 0;
7507
7508   while (*p != '\0')
7509     {
7510       skip = 0;
7511       /* Ignore newlines.  */
7512       if (*p == '\n')
7513         {
7514           ++p;
7515           continue;
7516         }
7517
7518       /* Get the initial path.  */
7519       this_path = p;
7520       while (*p != ' ')
7521         {
7522           if (*p == '\0')
7523             {
7524             invalid_select:
7525               fatal_error ("multilib select %qs is invalid", multilib_select);
7526             }
7527
7528           ++p;
7529         }
7530
7531       /* When --disable-multilib was used but target defines
7532          MULTILIB_OSDIRNAMES, entries starting with .: are there just
7533          to find multilib_os_dir, so skip them from output.  */
7534       if (this_path[0] == '.' && this_path[1] == ':')
7535         skip = 1;
7536
7537       /* Check for matches with the multilib_exclusions. We don't bother
7538          with the '!' in either list. If any of the exclusion rules match
7539          all of its options with the select rule, we skip it.  */
7540       {
7541         const char *e = multilib_exclusions;
7542         const char *this_arg;
7543
7544         while (*e != '\0')
7545           {
7546             int m = 1;
7547             /* Ignore newlines.  */
7548             if (*e == '\n')
7549               {
7550                 ++e;
7551                 continue;
7552               }
7553
7554             /* Check the arguments.  */
7555             while (*e != ';')
7556               {
7557                 const char *q;
7558                 int mp = 0;
7559
7560                 if (*e == '\0')
7561                   {
7562                   invalid_exclusion:
7563                     fatal_error ("multilib exclusion %qs is invalid",
7564                                  multilib_exclusions);
7565                   }
7566
7567                 if (! m)
7568                   {
7569                     ++e;
7570                     continue;
7571                   }
7572
7573                 this_arg = e;
7574
7575                 while (*e != ' ' && *e != ';')
7576                   {
7577                     if (*e == '\0')
7578                       goto invalid_exclusion;
7579                     ++e;
7580                   }
7581
7582                 q = p + 1;
7583                 while (*q != ';')
7584                   {
7585                     const char *arg;
7586                     int len = e - this_arg;
7587
7588                     if (*q == '\0')
7589                       goto invalid_select;
7590
7591                     arg = q;
7592
7593                     while (*q != ' ' && *q != ';')
7594                       {
7595                         if (*q == '\0')
7596                           goto invalid_select;
7597                         ++q;
7598                       }
7599
7600                     if (! strncmp (arg, this_arg,
7601                                    (len < q - arg) ? q - arg : len)
7602                         || default_arg (this_arg, e - this_arg))
7603                       {
7604                         mp = 1;
7605                         break;
7606                       }
7607
7608                     if (*q == ' ')
7609                       ++q;
7610                   }
7611
7612                 if (! mp)
7613                   m = 0;
7614
7615                 if (*e == ' ')
7616                   ++e;
7617               }
7618
7619             if (m)
7620               {
7621                 skip = 1;
7622                 break;
7623               }
7624
7625             if (*e != '\0')
7626               ++e;
7627           }
7628       }
7629
7630       if (! skip)
7631         {
7632           /* If this is a duplicate, skip it.  */
7633           skip = (last_path != 0
7634                   && (unsigned int) (p - this_path) == last_path_len
7635                   && ! strncmp (last_path, this_path, last_path_len));
7636
7637           last_path = this_path;
7638           last_path_len = p - this_path;
7639         }
7640
7641       /* If this directory requires any default arguments, we can skip
7642          it.  We will already have printed a directory identical to
7643          this one which does not require that default argument.  */
7644       if (! skip)
7645         {
7646           const char *q;
7647
7648           q = p + 1;
7649           while (*q != ';')
7650             {
7651               const char *arg;
7652
7653               if (*q == '\0')
7654                 goto invalid_select;
7655
7656               if (*q == '!')
7657                 arg = NULL;
7658               else
7659                 arg = q;
7660
7661               while (*q != ' ' && *q != ';')
7662                 {
7663                   if (*q == '\0')
7664                     goto invalid_select;
7665                   ++q;
7666                 }
7667
7668               if (arg != NULL
7669                   && default_arg (arg, q - arg))
7670                 {
7671                   skip = 1;
7672                   break;
7673                 }
7674
7675               if (*q == ' ')
7676                 ++q;
7677             }
7678         }
7679
7680       if (! skip)
7681         {
7682           const char *p1;
7683
7684           for (p1 = last_path; p1 < p && *p1 != ':'; p1++)
7685             putchar (*p1);
7686           putchar (';');
7687         }
7688
7689       ++p;
7690       while (*p != ';')
7691         {
7692           int use_arg;
7693
7694           if (*p == '\0')
7695             goto invalid_select;
7696
7697           if (skip)
7698             {
7699               ++p;
7700               continue;
7701             }
7702
7703           use_arg = *p != '!';
7704
7705           if (use_arg)
7706             putchar ('@');
7707
7708           while (*p != ' ' && *p != ';')
7709             {
7710               if (*p == '\0')
7711                 goto invalid_select;
7712               if (use_arg)
7713                 putchar (*p);
7714               ++p;
7715             }
7716
7717           if (*p == ' ')
7718             ++p;
7719         }
7720
7721       if (! skip)
7722         {
7723           /* If there are extra options, print them now.  */
7724           if (multilib_extra && *multilib_extra)
7725             {
7726               int print_at = TRUE;
7727               const char *q;
7728
7729               for (q = multilib_extra; *q != '\0'; q++)
7730                 {
7731                   if (*q == ' ')
7732                     print_at = TRUE;
7733                   else
7734                     {
7735                       if (print_at)
7736                         putchar ('@');
7737                       putchar (*q);
7738                       print_at = FALSE;
7739                     }
7740                 }
7741             }
7742
7743           putchar ('\n');
7744         }
7745
7746       ++p;
7747     }
7748 }
7749 \f
7750 /* getenv built-in spec function.
7751
7752    Returns the value of the environment variable given by its first
7753    argument, concatenated with the second argument.  If the
7754    environment variable is not defined, a fatal error is issued.  */
7755
7756 static const char *
7757 getenv_spec_function (int argc, const char **argv)
7758 {
7759   char *value;
7760   char *result;
7761   char *ptr;
7762   size_t len;
7763
7764   if (argc != 2)
7765     return NULL;
7766
7767   value = getenv (argv[0]);
7768   if (!value)
7769     fatal_error ("environment variable %qs not defined", argv[0]);
7770
7771   /* We have to escape every character of the environment variable so
7772      they are not interpreted as active spec characters.  A
7773      particularly painful case is when we are reading a variable
7774      holding a windows path complete with \ separators.  */
7775   len = strlen (value) * 2 + strlen (argv[1]) + 1;
7776   result = XNEWVAR (char, len);
7777   for (ptr = result; *value; ptr += 2)
7778     {
7779       ptr[0] = '\\';
7780       ptr[1] = *value++;
7781     }
7782
7783   strcpy (ptr, argv[1]);
7784
7785   return result;
7786 }
7787
7788 /* if-exists built-in spec function.
7789
7790    Checks to see if the file specified by the absolute pathname in
7791    ARGS exists.  Returns that pathname if found.
7792
7793    The usual use for this function is to check for a library file
7794    (whose name has been expanded with %s).  */
7795
7796 static const char *
7797 if_exists_spec_function (int argc, const char **argv)
7798 {
7799   /* Must have only one argument.  */
7800   if (argc == 1 && IS_ABSOLUTE_PATH (argv[0]) && ! access (argv[0], R_OK))
7801     return argv[0];
7802
7803   return NULL;
7804 }
7805
7806 /* if-exists-else built-in spec function.
7807
7808    This is like if-exists, but takes an additional argument which
7809    is returned if the first argument does not exist.  */
7810
7811 static const char *
7812 if_exists_else_spec_function (int argc, const char **argv)
7813 {
7814   /* Must have exactly two arguments.  */
7815   if (argc != 2)
7816     return NULL;
7817
7818   if (IS_ABSOLUTE_PATH (argv[0]) && ! access (argv[0], R_OK))
7819     return argv[0];
7820
7821   return argv[1];
7822 }
7823
7824 /* replace-outfile built-in spec function.
7825
7826    This looks for the first argument in the outfiles array's name and
7827    replaces it with the second argument.  */
7828
7829 static const char *
7830 replace_outfile_spec_function (int argc, const char **argv)
7831 {
7832   int i;
7833   /* Must have exactly two arguments.  */
7834   if (argc != 2)
7835     abort ();
7836
7837   for (i = 0; i < n_infiles; i++)
7838     {
7839       if (outfiles[i] && !strcmp (outfiles[i], argv[0]))
7840         outfiles[i] = xstrdup (argv[1]);
7841     }
7842   return NULL;
7843 }
7844
7845 /* remove-outfile built-in spec function.
7846  *
7847  *    This looks for the first argument in the outfiles array's name and
7848  *       removes it.  */
7849
7850 static const char *
7851 remove_outfile_spec_function (int argc, const char **argv)
7852 {
7853   int i;
7854   /* Must have exactly one argument.  */
7855   if (argc != 1)
7856     abort ();
7857
7858   for (i = 0; i < n_infiles; i++)
7859     {
7860       if (outfiles[i] && !strcmp (outfiles[i], argv[0]))
7861         outfiles[i] = NULL;
7862     }
7863   return NULL;
7864 }
7865
7866 /* Given two version numbers, compares the two numbers.
7867    A version number must match the regular expression
7868    ([1-9][0-9]*|0)(\.([1-9][0-9]*|0))*
7869 */
7870 static int
7871 compare_version_strings (const char *v1, const char *v2)
7872 {
7873   int rresult;
7874   regex_t r;
7875
7876   if (regcomp (&r, "^([1-9][0-9]*|0)(\\.([1-9][0-9]*|0))*$",
7877                REG_EXTENDED | REG_NOSUB) != 0)
7878     abort ();
7879   rresult = regexec (&r, v1, 0, NULL, 0);
7880   if (rresult == REG_NOMATCH)
7881     fatal_error ("invalid version number %qs", v1);
7882   else if (rresult != 0)
7883     abort ();
7884   rresult = regexec (&r, v2, 0, NULL, 0);
7885   if (rresult == REG_NOMATCH)
7886     fatal_error ("invalid version number %qs", v2);
7887   else if (rresult != 0)
7888     abort ();
7889
7890   return strverscmp (v1, v2);
7891 }
7892
7893
7894 /* version_compare built-in spec function.
7895
7896    This takes an argument of the following form:
7897
7898    <comparison-op> <arg1> [<arg2>] <switch> <result>
7899
7900    and produces "result" if the comparison evaluates to true,
7901    and nothing if it doesn't.
7902
7903    The supported <comparison-op> values are:
7904
7905    >=  true if switch is a later (or same) version than arg1
7906    !>  opposite of >=
7907    <   true if switch is an earlier version than arg1
7908    !<  opposite of <
7909    ><  true if switch is arg1 or later, and earlier than arg2
7910    <>  true if switch is earlier than arg1 or is arg2 or later
7911
7912    If the switch is not present, the condition is false unless
7913    the first character of the <comparison-op> is '!'.
7914
7915    For example,
7916    %:version-compare(>= 10.3 mmacosx-version-min= -lmx)
7917    adds -lmx if -mmacosx-version-min=10.3.9 was passed.  */
7918
7919 static const char *
7920 version_compare_spec_function (int argc, const char **argv)
7921 {
7922   int comp1, comp2;
7923   size_t switch_len;
7924   const char *switch_value = NULL;
7925   int nargs = 1, i;
7926   bool result;
7927
7928   if (argc < 3)
7929     fatal_error ("too few arguments to %%:version-compare");
7930   if (argv[0][0] == '\0')
7931     abort ();
7932   if ((argv[0][1] == '<' || argv[0][1] == '>') && argv[0][0] != '!')
7933     nargs = 2;
7934   if (argc != nargs + 3)
7935     fatal_error ("too many arguments to %%:version-compare");
7936
7937   switch_len = strlen (argv[nargs + 1]);
7938   for (i = 0; i < n_switches; i++)
7939     if (!strncmp (switches[i].part1, argv[nargs + 1], switch_len)
7940         && check_live_switch (i, switch_len))
7941       switch_value = switches[i].part1 + switch_len;
7942
7943   if (switch_value == NULL)
7944     comp1 = comp2 = -1;
7945   else
7946     {
7947       comp1 = compare_version_strings (switch_value, argv[1]);
7948       if (nargs == 2)
7949         comp2 = compare_version_strings (switch_value, argv[2]);
7950       else
7951         comp2 = -1;  /* This value unused.  */
7952     }
7953
7954   switch (argv[0][0] << 8 | argv[0][1])
7955     {
7956     case '>' << 8 | '=':
7957       result = comp1 >= 0;
7958       break;
7959     case '!' << 8 | '<':
7960       result = comp1 >= 0 || switch_value == NULL;
7961       break;
7962     case '<' << 8:
7963       result = comp1 < 0;
7964       break;
7965     case '!' << 8 | '>':
7966       result = comp1 < 0 || switch_value == NULL;
7967       break;
7968     case '>' << 8 | '<':
7969       result = comp1 >= 0 && comp2 < 0;
7970       break;
7971     case '<' << 8 | '>':
7972       result = comp1 < 0 || comp2 >= 0;
7973       break;
7974
7975     default:
7976       fatal_error ("unknown operator %qs in %%:version-compare", argv[0]);
7977     }
7978   if (! result)
7979     return NULL;
7980
7981   return argv[nargs + 2];
7982 }
7983
7984 /* %:include builtin spec function.  This differs from %include in that it
7985    can be nested inside a spec, and thus be conditionalized.  It takes
7986    one argument, the filename, and looks for it in the startfile path.
7987    The result is always NULL, i.e. an empty expansion.  */
7988
7989 static const char *
7990 include_spec_function (int argc, const char **argv)
7991 {
7992   char *file;
7993
7994   if (argc != 1)
7995     abort ();
7996
7997   file = find_a_file (&startfile_prefixes, argv[0], R_OK, true);
7998   read_specs (file ? file : argv[0], FALSE);
7999
8000   return NULL;
8001 }
8002
8003 /* %:find-file spec function.  This function replaces its argument by
8004     the file found thru find_file, that is the -print-file-name gcc
8005     program option. */
8006 static const char *
8007 find_file_spec_function (int argc, const char **argv)
8008 {
8009   const char *file;
8010
8011   if (argc != 1)
8012     abort ();
8013
8014   file = find_file (argv[0]);
8015   return file;
8016 }
8017
8018
8019 /* %:find-plugindir spec function.  This function replaces its argument
8020     by the -iplugindir=<dir> option.  `dir' is found thru find_file, that
8021     is the -print-file-name gcc program option. */
8022 static const char *
8023 find_plugindir_spec_function (int argc, const char **argv ATTRIBUTE_UNUSED)
8024 {
8025   const char *option;
8026
8027   if (argc != 0)
8028     abort ();
8029
8030   option = concat ("-iplugindir=", find_file ("plugin"), NULL);
8031   return option;
8032 }
8033
8034
8035 /* %:print-asm-header spec function.  Print a banner to say that the
8036    following output is from the assembler.  */
8037
8038 static const char *
8039 print_asm_header_spec_function (int arg ATTRIBUTE_UNUSED,
8040                                 const char **argv ATTRIBUTE_UNUSED)
8041 {
8042   printf (_("Assembler options\n=================\n\n"));
8043   printf (_("Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n\n"));
8044   fflush (stdout);
8045   return NULL;
8046 }
8047
8048 /* Compute a timestamp to initialize flag_random_seed.  */
8049
8050 static unsigned
8051 get_local_tick (void)
8052 {
8053   unsigned ret = 0;
8054
8055   /* Get some more or less random data.  */
8056 #ifdef HAVE_GETTIMEOFDAY
8057   {
8058     struct timeval tv;
8059
8060     gettimeofday (&tv, NULL);
8061     ret = tv.tv_sec * 1000 + tv.tv_usec / 1000;
8062   }
8063 #else
8064   {
8065     time_t now = time (NULL);
8066
8067     if (now != (time_t)-1)
8068       ret = (unsigned) now;
8069   }
8070 #endif
8071
8072   return ret;
8073 }
8074
8075 /* %:compare-debug-dump-opt spec function.  Save the last argument,
8076    expected to be the last -fdump-final-insns option, or generate a
8077    temporary.  */
8078
8079 static const char *
8080 compare_debug_dump_opt_spec_function (int arg,
8081                                       const char **argv ATTRIBUTE_UNUSED)
8082 {
8083   const char *ret;
8084   char *name;
8085   int which;
8086   static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
8087
8088   if (arg != 0)
8089     fatal_error ("too many arguments to %%:compare-debug-dump-opt");
8090
8091   do_spec_2 ("%{fdump-final-insns=*:%*}");
8092   do_spec_1 (" ", 0, NULL);
8093
8094   if (argbuf_index > 0 && strcmp (argv[argbuf_index - 1], "."))
8095     {
8096       if (!compare_debug)
8097         return NULL;
8098
8099       name = xstrdup (argv[argbuf_index - 1]);
8100       ret = NULL;
8101     }
8102   else
8103     {
8104       const char *ext = NULL;
8105
8106       if (argbuf_index > 0)
8107         {
8108           do_spec_2 ("%{o*:%*}%{!o:%{!S:%b%O}%{S:%b.s}}");
8109           ext = ".gkd";
8110         }
8111       else if (!compare_debug)
8112         return NULL;
8113       else
8114         do_spec_2 ("%g.gkd");
8115
8116       do_spec_1 (" ", 0, NULL);
8117
8118       gcc_assert (argbuf_index > 0);
8119
8120       name = concat (argbuf[argbuf_index - 1], ext, NULL);
8121
8122       ret = concat ("-fdump-final-insns=", name, NULL);
8123     }
8124
8125   which = compare_debug < 0;
8126   debug_check_temp_file[which] = name;
8127
8128   if (!which)
8129     {
8130       unsigned HOST_WIDE_INT value = get_local_tick () ^ getpid ();
8131
8132       sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
8133     }
8134
8135   if (*random_seed)
8136     ret = concat ("%{!frandom-seed=*:-frandom-seed=", random_seed, "} ",
8137                   ret, NULL);
8138
8139   if (which)
8140     *random_seed = 0;
8141
8142   return ret;
8143 }
8144
8145 static const char *debug_auxbase_opt;
8146
8147 /* %:compare-debug-self-opt spec function.  Expands to the options
8148     that are to be passed in the second compilation of
8149     compare-debug.  */
8150
8151 static const char *
8152 compare_debug_self_opt_spec_function (int arg,
8153                                       const char **argv ATTRIBUTE_UNUSED)
8154 {
8155   if (arg != 0)
8156     fatal_error ("too many arguments to %%:compare-debug-self-opt");
8157
8158   if (compare_debug >= 0)
8159     return NULL;
8160
8161   do_spec_2 ("%{c|S:%{o*:%*}}");
8162   do_spec_1 (" ", 0, NULL);
8163
8164   if (argbuf_index > 0)
8165     debug_auxbase_opt = concat ("-auxbase-strip ",
8166                                 argbuf[argbuf_index - 1],
8167                                 NULL);
8168   else
8169     debug_auxbase_opt = NULL;
8170
8171   return concat ("\
8172 %<o %<MD %<MMD %<MF* %<MG %<MP %<MQ* %<MT* \
8173 %<fdump-final-insns=* -w -S -o %j \
8174 %{!fcompare-debug-second:-fcompare-debug-second} \
8175 ", compare_debug_opt, NULL);
8176 }
8177
8178 /* %:compare-debug-auxbase-opt spec function.  Expands to the auxbase
8179     options that are to be passed in the second compilation of
8180     compare-debug.  It expects, as an argument, the basename of the
8181     current input file name, with the .gk suffix appended to it.  */
8182
8183 static const char *
8184 compare_debug_auxbase_opt_spec_function (int arg,
8185                                          const char **argv)
8186 {
8187   char *name;
8188   int len;
8189
8190   if (arg == 0)
8191     fatal_error ("too few arguments to %%:compare-debug-auxbase-opt");
8192
8193   if (arg != 1)
8194     fatal_error ("too many arguments to %%:compare-debug-auxbase-opt");
8195
8196   if (compare_debug >= 0)
8197     return NULL;
8198
8199   len = strlen (argv[0]);
8200   if (len < 3 || strcmp (argv[0] + len - 3, ".gk") != 0)
8201     fatal_error ("argument to %%:compare-debug-auxbase-opt "
8202                  "does not end in .gk");
8203
8204   if (debug_auxbase_opt)
8205     return debug_auxbase_opt;
8206
8207 #define OPT "-auxbase "
8208
8209   len -= 3;
8210   name = (char*) xmalloc (sizeof (OPT) + len);
8211   memcpy (name, OPT, sizeof (OPT) - 1);
8212   memcpy (name + sizeof (OPT) - 1, argv[0], len);
8213   name[sizeof (OPT) - 1 + len] = '\0';
8214
8215 #undef OPT
8216
8217   return name;
8218 }