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