Merge branch 'vendor/GCC50'
[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 #if 0 /* MACHINE/VERSION isn't used anywhere DragonFly */
2314           /* Look first in MACHINE/VERSION subdirectory.  */
2315           if (!skip_multi_dir)
2316             {
2317               memcpy (path + len, multi_suffix, suffix_len + 1);
2318               ret = callback (path, callback_info);
2319               if (ret)
2320                 break;
2321             }
2322 #endif
2323
2324           /* Some paths are tried with just the machine (ie. target)
2325              subdir.  This is used for finding as, ld, etc.  */
2326           if (!skip_multi_dir
2327               && pl->require_machine_suffix == 2)
2328             {
2329               memcpy (path + len, just_multi_suffix, just_suffix_len + 1);
2330               ret = callback (path, callback_info);
2331               if (ret)
2332                 break;
2333             }
2334
2335           /* Now try the multiarch path.  */
2336           if (!skip_multi_dir
2337               && !pl->require_machine_suffix && multiarch_dir)
2338             {
2339               memcpy (path + len, multiarch_suffix, multiarch_len + 1);
2340               ret = callback (path, callback_info);
2341               if (ret)
2342                 break;
2343             }
2344
2345           /* Now try the base path.  */
2346           if (!pl->require_machine_suffix
2347               && !(pl->os_multilib ? skip_multi_os_dir : skip_multi_dir))
2348             {
2349               const char *this_multi;
2350               size_t this_multi_len;
2351
2352               if (pl->os_multilib)
2353                 {
2354                   this_multi = multi_os_dir;
2355                   this_multi_len = multi_os_dir_len;
2356                 }
2357               else
2358                 {
2359                   this_multi = multi_dir;
2360                   this_multi_len = multi_dir_len;
2361                 }
2362
2363               if (this_multi_len)
2364                 memcpy (path + len, this_multi, this_multi_len + 1);
2365               else
2366                 path[len] = '\0';
2367
2368               ret = callback (path, callback_info);
2369               if (ret)
2370                 break;
2371             }
2372         }
2373       if (pl)
2374         break;
2375
2376       if (multi_dir == NULL && multi_os_dir == NULL)
2377         break;
2378
2379       /* Run through the paths again, this time without multilibs.
2380          Don't repeat any we have already seen.  */
2381       if (multi_dir)
2382         {
2383           free (CONST_CAST (char *, multi_dir));
2384           multi_dir = NULL;
2385           free (CONST_CAST (char *, multi_suffix));
2386           multi_suffix = machine_suffix;
2387           free (CONST_CAST (char *, just_multi_suffix));
2388           just_multi_suffix = just_machine_suffix;
2389         }
2390       else
2391         skip_multi_dir = true;
2392       if (multi_os_dir)
2393         {
2394           free (CONST_CAST (char *, multi_os_dir));
2395           multi_os_dir = NULL;
2396         }
2397       else
2398         skip_multi_os_dir = true;
2399     }
2400
2401   if (multi_dir)
2402     {
2403       free (CONST_CAST (char *, multi_dir));
2404       free (CONST_CAST (char *, multi_suffix));
2405       free (CONST_CAST (char *, just_multi_suffix));
2406     }
2407   if (multi_os_dir)
2408     free (CONST_CAST (char *, multi_os_dir));
2409   if (ret != path)
2410     free (path);
2411   return ret;
2412 }
2413
2414 /* Callback for build_search_list.  Adds path to obstack being built.  */
2415
2416 struct add_to_obstack_info {
2417   struct obstack *ob;
2418   bool check_dir;
2419   bool first_time;
2420 };
2421
2422 static void *
2423 add_to_obstack (char *path, void *data)
2424 {
2425   struct add_to_obstack_info *info = (struct add_to_obstack_info *) data;
2426
2427   if (info->check_dir && !is_directory (path, false))
2428     return NULL;
2429
2430   if (!info->first_time)
2431     obstack_1grow (info->ob, PATH_SEPARATOR);
2432
2433   obstack_grow (info->ob, path, strlen (path));
2434
2435   info->first_time = false;
2436   return NULL;
2437 }
2438
2439 /* Add or change the value of an environment variable, outputting the
2440    change to standard error if in verbose mode.  */
2441 static void
2442 xputenv (const char *string)
2443 {
2444   if (verbose_flag)
2445     fnotice (stderr, "%s\n", string);
2446   putenv (CONST_CAST (char *, string));
2447 }
2448
2449 /* Build a list of search directories from PATHS.
2450    PREFIX is a string to prepend to the list.
2451    If CHECK_DIR_P is true we ensure the directory exists.
2452    If DO_MULTI is true, multilib paths are output first, then
2453    non-multilib paths.
2454    This is used mostly by putenv_from_prefixes so we use `collect_obstack'.
2455    It is also used by the --print-search-dirs flag.  */
2456
2457 static char *
2458 build_search_list (const struct path_prefix *paths, const char *prefix,
2459                    bool check_dir, bool do_multi)
2460 {
2461   struct add_to_obstack_info info;
2462
2463   info.ob = &collect_obstack;
2464   info.check_dir = check_dir;
2465   info.first_time = true;
2466
2467   obstack_grow (&collect_obstack, prefix, strlen (prefix));
2468   obstack_1grow (&collect_obstack, '=');
2469
2470   for_each_path (paths, do_multi, 0, add_to_obstack, &info);
2471
2472   obstack_1grow (&collect_obstack, '\0');
2473   return XOBFINISH (&collect_obstack, char *);
2474 }
2475
2476 /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
2477    for collect.  */
2478
2479 static void
2480 putenv_from_prefixes (const struct path_prefix *paths, const char *env_var,
2481                       bool do_multi)
2482 {
2483   xputenv (build_search_list (paths, env_var, true, do_multi));
2484 }
2485 \f
2486 /* Check whether NAME can be accessed in MODE.  This is like access,
2487    except that it never considers directories to be executable.  */
2488
2489 static int
2490 access_check (const char *name, int mode)
2491 {
2492   if (mode == X_OK)
2493     {
2494       struct stat st;
2495
2496       if (stat (name, &st) < 0
2497           || S_ISDIR (st.st_mode))
2498         return -1;
2499     }
2500
2501   return access (name, mode);
2502 }
2503
2504 /* Callback for find_a_file.  Appends the file name to the directory
2505    path.  If the resulting file exists in the right mode, return the
2506    full pathname to the file.  */
2507
2508 struct file_at_path_info {
2509   const char *name;
2510   const char *suffix;
2511   int name_len;
2512   int suffix_len;
2513   int mode;
2514 };
2515
2516 static void *
2517 file_at_path (char *path, void *data)
2518 {
2519   struct file_at_path_info *info = (struct file_at_path_info *) data;
2520   size_t len = strlen (path);
2521
2522   memcpy (path + len, info->name, info->name_len);
2523   len += info->name_len;
2524
2525   /* Some systems have a suffix for executable files.
2526      So try appending that first.  */
2527   if (info->suffix_len)
2528     {
2529       memcpy (path + len, info->suffix, info->suffix_len + 1);
2530       if (access_check (path, info->mode) == 0)
2531         return path;
2532     }
2533
2534   path[len] = '\0';
2535   if (access_check (path, info->mode) == 0)
2536     return path;
2537
2538   return NULL;
2539 }
2540
2541 /* Search for NAME using the prefix list PREFIXES.  MODE is passed to
2542    access to check permissions.  If DO_MULTI is true, search multilib
2543    paths then non-multilib paths, otherwise do not search multilib paths.
2544    Return 0 if not found, otherwise return its name, allocated with malloc.  */
2545
2546 static char *
2547 find_a_file (const struct path_prefix *pprefix, const char *name, int mode,
2548              bool do_multi)
2549 {
2550   struct file_at_path_info info;
2551
2552 #ifdef DEFAULT_ASSEMBLER
2553   if (! strcmp (name, "as") && access (DEFAULT_ASSEMBLER, mode) == 0)
2554     return xstrdup (DEFAULT_ASSEMBLER);
2555 #endif
2556
2557 #ifdef DEFAULT_LINKER
2558   if (! strcmp (name, "ld") && access (DEFAULT_LINKER, mode) == 0)
2559     return xstrdup (DEFAULT_LINKER);
2560 #endif
2561
2562   /* Determine the filename to execute (special case for absolute paths).  */
2563
2564   if (IS_ABSOLUTE_PATH (name))
2565     {
2566       if (access (name, mode) == 0)
2567         return xstrdup (name);
2568
2569       return NULL;
2570     }
2571
2572   info.name = name;
2573   info.suffix = (mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "";
2574   info.name_len = strlen (info.name);
2575   info.suffix_len = strlen (info.suffix);
2576   info.mode = mode;
2577
2578   return (char*) for_each_path (pprefix, do_multi,
2579                                 info.name_len + info.suffix_len,
2580                                 file_at_path, &info);
2581 }
2582
2583 /* Ranking of prefixes in the sort list. -B prefixes are put before
2584    all others.  */
2585
2586 enum path_prefix_priority
2587 {
2588   PREFIX_PRIORITY_B_OPT,
2589   PREFIX_PRIORITY_LAST
2590 };
2591
2592 /* Add an entry for PREFIX in PLIST.  The PLIST is kept in ascending
2593    order according to PRIORITY.  Within each PRIORITY, new entries are
2594    appended.
2595
2596    If WARN is nonzero, we will warn if no file is found
2597    through this prefix.  WARN should point to an int
2598    which will be set to 1 if this entry is used.
2599
2600    COMPONENT is the value to be passed to update_path.
2601
2602    REQUIRE_MACHINE_SUFFIX is 1 if this prefix can't be used without
2603    the complete value of machine_suffix.
2604    2 means try both machine_suffix and just_machine_suffix.  */
2605
2606 static void
2607 add_prefix (struct path_prefix *pprefix, const char *prefix,
2608             const char *component, /* enum prefix_priority */ int priority,
2609             int require_machine_suffix, int os_multilib)
2610 {
2611   struct prefix_list *pl, **prev;
2612   int len;
2613
2614   for (prev = &pprefix->plist;
2615        (*prev) != NULL && (*prev)->priority <= priority;
2616        prev = &(*prev)->next)
2617     ;
2618
2619   /* Keep track of the longest prefix.  */
2620
2621   prefix = update_path (prefix, component);
2622   len = strlen (prefix);
2623   if (len > pprefix->max_len)
2624     pprefix->max_len = len;
2625
2626   pl = XNEW (struct prefix_list);
2627   pl->prefix = prefix;
2628   pl->require_machine_suffix = require_machine_suffix;
2629   pl->priority = priority;
2630   pl->os_multilib = os_multilib;
2631
2632   /* Insert after PREV.  */
2633   pl->next = (*prev);
2634   (*prev) = pl;
2635 }
2636
2637 /* Same as add_prefix, but prepending target_system_root to prefix.  */
2638 /* The target_system_root prefix has been relocated by gcc_exec_prefix.  */
2639 static void
2640 add_sysrooted_prefix (struct path_prefix *pprefix, const char *prefix,
2641                       const char *component,
2642                       /* enum prefix_priority */ int priority,
2643                       int require_machine_suffix, int os_multilib)
2644 {
2645   if (!IS_ABSOLUTE_PATH (prefix))
2646     fatal_error (input_location, "system path %qs is not absolute", prefix);
2647
2648   if (target_system_root)
2649     {
2650       char *sysroot_no_trailing_dir_separator = xstrdup (target_system_root);
2651       size_t sysroot_len = strlen (target_system_root);
2652
2653       if (sysroot_len > 0
2654           && target_system_root[sysroot_len - 1] == DIR_SEPARATOR)
2655         sysroot_no_trailing_dir_separator[sysroot_len - 1] = '\0';
2656
2657       if (target_sysroot_suffix)
2658         prefix = concat (sysroot_no_trailing_dir_separator,
2659                          target_sysroot_suffix, prefix, NULL);
2660       else
2661         prefix = concat (sysroot_no_trailing_dir_separator, prefix, NULL);
2662
2663       free (sysroot_no_trailing_dir_separator);
2664
2665       /* We have to override this because GCC's notion of sysroot
2666          moves along with GCC.  */
2667       component = "GCC";
2668     }
2669
2670   add_prefix (pprefix, prefix, component, priority,
2671               require_machine_suffix, os_multilib);
2672 }
2673 \f
2674 /* Execute the command specified by the arguments on the current line of spec.
2675    When using pipes, this includes several piped-together commands
2676    with `|' between them.
2677
2678    Return 0 if successful, -1 if failed.  */
2679
2680 static int
2681 execute (void)
2682 {
2683   int i;
2684   int n_commands;               /* # of command.  */
2685   char *string;
2686   struct pex_obj *pex;
2687   struct command
2688   {
2689     const char *prog;           /* program name.  */
2690     const char **argv;          /* vector of args.  */
2691   };
2692   const char *arg;
2693
2694   struct command *commands;     /* each command buffer with above info.  */
2695
2696   gcc_assert (!processing_spec_function);
2697
2698   if (wrapper_string)
2699     {
2700       string = find_a_file (&exec_prefixes,
2701                             argbuf[0], X_OK, false);
2702       if (string)
2703         argbuf[0] = string;
2704       insert_wrapper (wrapper_string);
2705     }
2706
2707   /* Count # of piped commands.  */
2708   for (n_commands = 1, i = 0; argbuf.iterate (i, &arg); i++)
2709     if (strcmp (arg, "|") == 0)
2710       n_commands++;
2711
2712   /* Get storage for each command.  */
2713   commands = (struct command *) alloca (n_commands * sizeof (struct command));
2714
2715   /* Split argbuf into its separate piped processes,
2716      and record info about each one.
2717      Also search for the programs that are to be run.  */
2718
2719   argbuf.safe_push (0);
2720
2721   commands[0].prog = argbuf[0]; /* first command.  */
2722   commands[0].argv = argbuf.address ();
2723
2724   if (!wrapper_string)
2725     {
2726       string = find_a_file (&exec_prefixes, commands[0].prog, X_OK, false);
2727       commands[0].argv[0] = (string) ? string : commands[0].argv[0];
2728     }
2729
2730   for (n_commands = 1, i = 0; argbuf.iterate (i, &arg); i++)
2731     if (arg && strcmp (arg, "|") == 0)
2732       {                         /* each command.  */
2733 #if defined (__MSDOS__) || defined (OS2) || defined (VMS)
2734         fatal_error (input_location, "-pipe not supported");
2735 #endif
2736         argbuf[i] = 0; /* Termination of
2737                                                      command args.  */
2738         commands[n_commands].prog = argbuf[i + 1];
2739         commands[n_commands].argv
2740           = &(argbuf.address ())[i + 1];
2741         string = find_a_file (&exec_prefixes, commands[n_commands].prog,
2742                               X_OK, false);
2743         if (string)
2744           commands[n_commands].argv[0] = string;
2745         n_commands++;
2746       }
2747
2748   /* If -v, print what we are about to do, and maybe query.  */
2749
2750   if (verbose_flag)
2751     {
2752       /* For help listings, put a blank line between sub-processes.  */
2753       if (print_help_list)
2754         fputc ('\n', stderr);
2755
2756       /* Print each piped command as a separate line.  */
2757       for (i = 0; i < n_commands; i++)
2758         {
2759           const char *const *j;
2760
2761           if (verbose_only_flag)
2762             {
2763               for (j = commands[i].argv; *j; j++)
2764                 {
2765                   const char *p;
2766                   for (p = *j; *p; ++p)
2767                     if (!ISALNUM ((unsigned char) *p)
2768                         && *p != '_' && *p != '/' && *p != '-' && *p != '.')
2769                       break;
2770                   if (*p || !*j)
2771                     {
2772                       fprintf (stderr, " \"");
2773                       for (p = *j; *p; ++p)
2774                         {
2775                           if (*p == '"' || *p == '\\' || *p == '$')
2776                             fputc ('\\', stderr);
2777                           fputc (*p, stderr);
2778                         }
2779                       fputc ('"', stderr);
2780                     }
2781                   /* If it's empty, print "".  */
2782                   else if (!**j)
2783                     fprintf (stderr, " \"\"");
2784                   else
2785                     fprintf (stderr, " %s", *j);
2786                 }
2787             }
2788           else
2789             for (j = commands[i].argv; *j; j++)
2790               /* If it's empty, print "".  */
2791               if (!**j)
2792                 fprintf (stderr, " \"\"");
2793               else
2794                 fprintf (stderr, " %s", *j);
2795
2796           /* Print a pipe symbol after all but the last command.  */
2797           if (i + 1 != n_commands)
2798             fprintf (stderr, " |");
2799           fprintf (stderr, "\n");
2800         }
2801       fflush (stderr);
2802       if (verbose_only_flag != 0)
2803         {
2804           /* verbose_only_flag should act as if the spec was
2805              executed, so increment execution_count before
2806              returning.  This prevents spurious warnings about
2807              unused linker input files, etc.  */
2808           execution_count++;
2809           return 0;
2810         }
2811 #ifdef DEBUG
2812       fnotice (stderr, "\nGo ahead? (y or n) ");
2813       fflush (stderr);
2814       i = getchar ();
2815       if (i != '\n')
2816         while (getchar () != '\n')
2817           ;
2818
2819       if (i != 'y' && i != 'Y')
2820         return 0;
2821 #endif /* DEBUG */
2822     }
2823
2824 #ifdef ENABLE_VALGRIND_CHECKING
2825   /* Run the each command through valgrind.  To simplify prepending the
2826      path to valgrind and the option "-q" (for quiet operation unless
2827      something triggers), we allocate a separate argv array.  */
2828
2829   for (i = 0; i < n_commands; i++)
2830     {
2831       const char **argv;
2832       int argc;
2833       int j;
2834
2835       for (argc = 0; commands[i].argv[argc] != NULL; argc++)
2836         ;
2837
2838       argv = XALLOCAVEC (const char *, argc + 3);
2839
2840       argv[0] = VALGRIND_PATH;
2841       argv[1] = "-q";
2842       for (j = 2; j < argc + 2; j++)
2843         argv[j] = commands[i].argv[j - 2];
2844       argv[j] = NULL;
2845
2846       commands[i].argv = argv;
2847       commands[i].prog = argv[0];
2848     }
2849 #endif
2850
2851   /* Run each piped subprocess.  */
2852
2853   pex = pex_init (PEX_USE_PIPES | ((report_times || report_times_to_file)
2854                                    ? PEX_RECORD_TIMES : 0),
2855                   progname, temp_filename);
2856   if (pex == NULL)
2857     fatal_error (input_location, "pex_init failed: %m");
2858
2859   for (i = 0; i < n_commands; i++)
2860     {
2861       const char *errmsg;
2862       int err;
2863       const char *string = commands[i].argv[0];
2864
2865       errmsg = pex_run (pex,
2866                         ((i + 1 == n_commands ? PEX_LAST : 0)
2867                          | (string == commands[i].prog ? PEX_SEARCH : 0)),
2868                         string, CONST_CAST (char **, commands[i].argv),
2869                         NULL, NULL, &err);
2870       if (errmsg != NULL)
2871         {
2872           if (err == 0)
2873             fatal_error (input_location, errmsg);
2874           else
2875             {
2876               errno = err;
2877               pfatal_with_name (errmsg);
2878             }
2879         }
2880
2881       if (i && string != commands[i].prog)
2882         free (CONST_CAST (char *, string));
2883     }
2884
2885   execution_count++;
2886
2887   /* Wait for all the subprocesses to finish.  */
2888
2889   {
2890     int *statuses;
2891     struct pex_time *times = NULL;
2892     int ret_code = 0;
2893
2894     statuses = (int *) alloca (n_commands * sizeof (int));
2895     if (!pex_get_status (pex, n_commands, statuses))
2896       fatal_error (input_location, "failed to get exit status: %m");
2897
2898     if (report_times || report_times_to_file)
2899       {
2900         times = (struct pex_time *) alloca (n_commands * sizeof (struct pex_time));
2901         if (!pex_get_times (pex, n_commands, times))
2902           fatal_error (input_location, "failed to get process times: %m");
2903       }
2904
2905     pex_free (pex);
2906
2907     for (i = 0; i < n_commands; ++i)
2908       {
2909         int status = statuses[i];
2910
2911         if (WIFSIGNALED (status))
2912           {
2913 #ifdef SIGPIPE
2914             /* SIGPIPE is a special case.  It happens in -pipe mode
2915                when the compiler dies before the preprocessor is done,
2916                or the assembler dies before the compiler is done.
2917                There's generally been an error already, and this is
2918                just fallout.  So don't generate another error unless
2919                we would otherwise have succeeded.  */
2920             if (WTERMSIG (status) == SIGPIPE
2921                 && (signal_count || greatest_status >= MIN_FATAL_STATUS))
2922               {
2923                 signal_count++;
2924                 ret_code = -1;
2925               }
2926             else
2927 #endif
2928               internal_error_no_backtrace ("%s (program %s)",
2929                                            strsignal (WTERMSIG (status)),
2930                                            commands[i].prog);
2931           }
2932         else if (WIFEXITED (status)
2933                  && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
2934           {
2935             /* For ICEs in cc1, cc1obj, cc1plus see if it is
2936                reproducible or not.  */
2937             const char *p;
2938             if (flag_report_bug
2939                 && WEXITSTATUS (status) == ICE_EXIT_CODE
2940                 && i == 0
2941                 && (p = strrchr (commands[0].argv[0], DIR_SEPARATOR))
2942                 && ! strncmp (p + 1, "cc1", 3))
2943               try_generate_repro (commands[0].argv);
2944             if (WEXITSTATUS (status) > greatest_status)
2945               greatest_status = WEXITSTATUS (status);
2946             ret_code = -1;
2947           }
2948
2949         if (report_times || report_times_to_file)
2950           {
2951             struct pex_time *pt = &times[i];
2952             double ut, st;
2953
2954             ut = ((double) pt->user_seconds
2955                   + (double) pt->user_microseconds / 1.0e6);
2956             st = ((double) pt->system_seconds
2957                   + (double) pt->system_microseconds / 1.0e6);
2958
2959             if (ut + st != 0)
2960               {
2961                 if (report_times)
2962                   fnotice (stderr, "# %s %.2f %.2f\n",
2963                            commands[i].prog, ut, st);
2964
2965                 if (report_times_to_file)
2966                   {
2967                     int c = 0;
2968                     const char *const *j;
2969
2970                     fprintf (report_times_to_file, "%g %g", ut, st);
2971
2972                     for (j = &commands[i].prog; *j; j = &commands[i].argv[++c])
2973                       {
2974                         const char *p;
2975                         for (p = *j; *p; ++p)
2976                           if (*p == '"' || *p == '\\' || *p == '$'
2977                               || ISSPACE (*p))
2978                             break;
2979
2980                         if (*p)
2981                           {
2982                             fprintf (report_times_to_file, " \"");
2983                             for (p = *j; *p; ++p)
2984                               {
2985                                 if (*p == '"' || *p == '\\' || *p == '$')
2986                                   fputc ('\\', report_times_to_file);
2987                                 fputc (*p, report_times_to_file);
2988                               }
2989                             fputc ('"', report_times_to_file);
2990                           }
2991                         else
2992                           fprintf (report_times_to_file, " %s", *j);
2993                       }
2994
2995                     fputc ('\n', report_times_to_file);
2996                   }
2997               }
2998           }
2999       }
3000
3001    if (commands[0].argv[0] != commands[0].prog)
3002      free (CONST_CAST (char *, commands[0].argv[0]));
3003
3004     return ret_code;
3005   }
3006 }
3007 \f
3008 /* Find all the switches given to us
3009    and make a vector describing them.
3010    The elements of the vector are strings, one per switch given.
3011    If a switch uses following arguments, then the `part1' field
3012    is the switch itself and the `args' field
3013    is a null-terminated vector containing the following arguments.
3014    Bits in the `live_cond' field are:
3015    SWITCH_LIVE to indicate this switch is true in a conditional spec.
3016    SWITCH_FALSE to indicate this switch is overridden by a later switch.
3017    SWITCH_IGNORE to indicate this switch should be ignored (used in %<S).
3018    SWITCH_IGNORE_PERMANENTLY to indicate this switch should be ignored
3019    in all do_spec calls afterwards.  Used for %<S from self specs.
3020    The `validated' field is nonzero if any spec has looked at this switch;
3021    if it remains zero at the end of the run, it must be meaningless.  */
3022
3023 #define SWITCH_LIVE                     (1 << 0)
3024 #define SWITCH_FALSE                    (1 << 1)
3025 #define SWITCH_IGNORE                   (1 << 2)
3026 #define SWITCH_IGNORE_PERMANENTLY       (1 << 3)
3027 #define SWITCH_KEEP_FOR_GCC             (1 << 4)
3028
3029 struct switchstr
3030 {
3031   const char *part1;
3032   const char **args;
3033   unsigned int live_cond;
3034   bool known;
3035   bool validated;
3036   bool ordering;
3037 };
3038
3039 static struct switchstr *switches;
3040
3041 static int n_switches;
3042
3043 static int n_switches_alloc;
3044
3045 /* Set to zero if -fcompare-debug is disabled, positive if it's
3046    enabled and we're running the first compilation, negative if it's
3047    enabled and we're running the second compilation.  For most of the
3048    time, it's in the range -1..1, but it can be temporarily set to 2
3049    or 3 to indicate that the -fcompare-debug flags didn't come from
3050    the command-line, but rather from the GCC_COMPARE_DEBUG environment
3051    variable, until a synthesized -fcompare-debug flag is added to the
3052    command line.  */
3053 int compare_debug;
3054
3055 /* Set to nonzero if we've seen the -fcompare-debug-second flag.  */
3056 int compare_debug_second;
3057
3058 /* Set to the flags that should be passed to the second compilation in
3059    a -fcompare-debug compilation.  */
3060 const char *compare_debug_opt;
3061
3062 static struct switchstr *switches_debug_check[2];
3063
3064 static int n_switches_debug_check[2];
3065
3066 static int n_switches_alloc_debug_check[2];
3067
3068 static char *debug_check_temp_file[2];
3069
3070 /* Language is one of three things:
3071
3072    1) The name of a real programming language.
3073    2) NULL, indicating that no one has figured out
3074    what it is yet.
3075    3) '*', indicating that the file should be passed
3076    to the linker.  */
3077 struct infile
3078 {
3079   const char *name;
3080   const char *language;
3081   struct compiler *incompiler;
3082   bool compiled;
3083   bool preprocessed;
3084 };
3085
3086 /* Also a vector of input files specified.  */
3087
3088 static struct infile *infiles;
3089
3090 int n_infiles;
3091
3092 static int n_infiles_alloc;
3093
3094 /* True if multiple input files are being compiled to a single
3095    assembly file.  */
3096
3097 static bool combine_inputs;
3098
3099 /* This counts the number of libraries added by lang_specific_driver, so that
3100    we can tell if there were any user supplied any files or libraries.  */
3101
3102 static int added_libraries;
3103
3104 /* And a vector of corresponding output files is made up later.  */
3105
3106 const char **outfiles;
3107 \f
3108 #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
3109
3110 /* Convert NAME to a new name if it is the standard suffix.  DO_EXE
3111    is true if we should look for an executable suffix.  DO_OBJ
3112    is true if we should look for an object suffix.  */
3113
3114 static const char *
3115 convert_filename (const char *name, int do_exe ATTRIBUTE_UNUSED,
3116                   int do_obj ATTRIBUTE_UNUSED)
3117 {
3118 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
3119   int i;
3120 #endif
3121   int len;
3122
3123   if (name == NULL)
3124     return NULL;
3125
3126   len = strlen (name);
3127
3128 #ifdef HAVE_TARGET_OBJECT_SUFFIX
3129   /* Convert x.o to x.obj if TARGET_OBJECT_SUFFIX is ".obj".  */
3130   if (do_obj && len > 2
3131       && name[len - 2] == '.'
3132       && name[len - 1] == 'o')
3133     {
3134       obstack_grow (&obstack, name, len - 2);
3135       obstack_grow0 (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX));
3136       name = XOBFINISH (&obstack, const char *);
3137     }
3138 #endif
3139
3140 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
3141   /* If there is no filetype, make it the executable suffix (which includes
3142      the ".").  But don't get confused if we have just "-o".  */
3143   if (! do_exe || TARGET_EXECUTABLE_SUFFIX[0] == 0 || (len == 2 && name[0] == '-'))
3144     return name;
3145
3146   for (i = len - 1; i >= 0; i--)
3147     if (IS_DIR_SEPARATOR (name[i]))
3148       break;
3149
3150   for (i++; i < len; i++)
3151     if (name[i] == '.')
3152       return name;
3153
3154   obstack_grow (&obstack, name, len);
3155   obstack_grow0 (&obstack, TARGET_EXECUTABLE_SUFFIX,
3156                  strlen (TARGET_EXECUTABLE_SUFFIX));
3157   name = XOBFINISH (&obstack, const char *);
3158 #endif
3159
3160   return name;
3161 }
3162 #endif
3163 \f
3164 /* Display the command line switches accepted by gcc.  */
3165 static void
3166 display_help (void)
3167 {
3168   printf (_("Usage: %s [options] file...\n"), progname);
3169   fputs (_("Options:\n"), stdout);
3170
3171   fputs (_("  -pass-exit-codes         Exit with highest error code from a phase\n"), stdout);
3172   fputs (_("  --help                   Display this information\n"), stdout);
3173   fputs (_("  --target-help            Display target specific command line options\n"), stdout);
3174   fputs (_("  --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]\n"), stdout);
3175   fputs (_("                           Display specific types of command line options\n"), stdout);
3176   if (! verbose_flag)
3177     fputs (_("  (Use '-v --help' to display command line options of sub-processes)\n"), stdout);
3178   fputs (_("  --version                Display compiler version information\n"), stdout);
3179   fputs (_("  -dumpspecs               Display all of the built in spec strings\n"), stdout);
3180   fputs (_("  -dumpversion             Display the version of the compiler\n"), stdout);
3181   fputs (_("  -dumpmachine             Display the compiler's target processor\n"), stdout);
3182   fputs (_("  -print-search-dirs       Display the directories in the compiler's search path\n"), stdout);
3183   fputs (_("  -print-libgcc-file-name  Display the name of the compiler's companion library\n"), stdout);
3184   fputs (_("  -print-file-name=<lib>   Display the full path to library <lib>\n"), stdout);
3185   fputs (_("  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"), stdout);
3186   fputs (_("\
3187   -print-multiarch         Display the target's normalized GNU triplet, used as\n\
3188                            a component in the library path\n"), stdout);
3189   fputs (_("  -print-multi-directory   Display the root directory for versions of libgcc\n"), stdout);
3190   fputs (_("\
3191   -print-multi-lib         Display the mapping between command line options and\n\
3192                            multiple library search directories\n"), stdout);
3193   fputs (_("  -print-multi-os-directory Display the relative path to OS libraries\n"), stdout);
3194   fputs (_("  -print-sysroot           Display the target libraries directory\n"), stdout);
3195   fputs (_("  -print-sysroot-headers-suffix Display the sysroot suffix used to find headers\n"), stdout);
3196   fputs (_("  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"), stdout);
3197   fputs (_("  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"), stdout);
3198   fputs (_("  -Wl,<options>            Pass comma-separated <options> on to the linker\n"), stdout);
3199   fputs (_("  -Xassembler <arg>        Pass <arg> on to the assembler\n"), stdout);
3200   fputs (_("  -Xpreprocessor <arg>     Pass <arg> on to the preprocessor\n"), stdout);
3201   fputs (_("  -Xlinker <arg>           Pass <arg> on to the linker\n"), stdout);
3202   fputs (_("  -save-temps              Do not delete intermediate files\n"), stdout);
3203   fputs (_("  -save-temps=<arg>        Do not delete intermediate files\n"), stdout);
3204   fputs (_("\
3205   -no-canonical-prefixes   Do not canonicalize paths when building relative\n\
3206                            prefixes to other gcc components\n"), stdout);
3207   fputs (_("  -pipe                    Use pipes rather than intermediate files\n"), stdout);
3208   fputs (_("  -time                    Time the execution of each subprocess\n"), stdout);
3209   fputs (_("  -specs=<file>            Override built-in specs with the contents of <file>\n"), stdout);
3210   fputs (_("  -std=<standard>          Assume that the input sources are for <standard>\n"), stdout);
3211   fputs (_("\
3212   --sysroot=<directory>    Use <directory> as the root directory for headers\n\
3213                            and libraries\n"), stdout);
3214   fputs (_("  -B <directory>           Add <directory> to the compiler's search paths\n"), stdout);
3215   fputs (_("  -v                       Display the programs invoked by the compiler\n"), stdout);
3216   fputs (_("  -###                     Like -v but options quoted and commands not executed\n"), stdout);
3217   fputs (_("  -E                       Preprocess only; do not compile, assemble or link\n"), stdout);
3218   fputs (_("  -S                       Compile only; do not assemble or link\n"), stdout);
3219   fputs (_("  -c                       Compile and assemble, but do not link\n"), stdout);
3220   fputs (_("  -o <file>                Place the output into <file>\n"), stdout);
3221   fputs (_("  -pie                     Create a position independent executable\n"), stdout);
3222   fputs (_("  -shared                  Create a shared library\n"), stdout);
3223   fputs (_("\
3224   -x <language>            Specify the language of the following input files\n\
3225                            Permissible languages include: c c++ assembler none\n\
3226                            'none' means revert to the default behavior of\n\
3227                            guessing the language based on the file's extension\n\
3228 "), stdout);
3229
3230   printf (_("\
3231 \nOptions starting with -g, -f, -m, -O, -W, or --param are automatically\n\
3232  passed on to the various sub-processes invoked by %s.  In order to pass\n\
3233  other options on to these processes the -W<letter> options must be used.\n\
3234 "), progname);
3235
3236   /* The rest of the options are displayed by invocations of the various
3237      sub-processes.  */
3238 }
3239
3240 static void
3241 add_preprocessor_option (const char *option, int len)
3242 {
3243   preprocessor_options.safe_push (save_string (option, len));
3244 }
3245
3246 static void
3247 add_assembler_option (const char *option, int len)
3248 {
3249   assembler_options.safe_push (save_string (option, len));
3250 }
3251
3252 static void
3253 add_linker_option (const char *option, int len)
3254 {
3255   linker_options.safe_push (save_string (option, len));
3256 }
3257 \f
3258 /* Allocate space for an input file in infiles.  */
3259
3260 static void
3261 alloc_infile (void)
3262 {
3263   if (n_infiles_alloc == 0)
3264     {
3265       n_infiles_alloc = 16;
3266       infiles = XNEWVEC (struct infile, n_infiles_alloc);
3267     }
3268   else if (n_infiles_alloc == n_infiles)
3269     {
3270       n_infiles_alloc *= 2;
3271       infiles = XRESIZEVEC (struct infile, infiles, n_infiles_alloc);
3272     }
3273 }
3274
3275 /* Store an input file with the given NAME and LANGUAGE in
3276    infiles.  */
3277
3278 static void
3279 add_infile (const char *name, const char *language)
3280 {
3281   alloc_infile ();
3282   infiles[n_infiles].name = name;
3283   infiles[n_infiles++].language = language;
3284 }
3285
3286 /* Allocate space for a switch in switches.  */
3287
3288 static void
3289 alloc_switch (void)
3290 {
3291   if (n_switches_alloc == 0)
3292     {
3293       n_switches_alloc = 16;
3294       switches = XNEWVEC (struct switchstr, n_switches_alloc);
3295     }
3296   else if (n_switches_alloc == n_switches)
3297     {
3298       n_switches_alloc *= 2;
3299       switches = XRESIZEVEC (struct switchstr, switches, n_switches_alloc);
3300     }
3301 }
3302
3303 /* Save an option OPT with N_ARGS arguments in array ARGS, marking it
3304    as validated if VALIDATED and KNOWN if it is an internal switch.  */
3305
3306 static void
3307 save_switch (const char *opt, size_t n_args, const char *const *args,
3308              bool validated, bool known)
3309 {
3310   alloc_switch ();
3311   switches[n_switches].part1 = opt + 1;
3312   if (n_args == 0)
3313     switches[n_switches].args = 0;
3314   else
3315     {
3316       switches[n_switches].args = XNEWVEC (const char *, n_args + 1);
3317       memcpy (switches[n_switches].args, args, n_args * sizeof (const char *));
3318       switches[n_switches].args[n_args] = NULL;
3319     }
3320
3321   switches[n_switches].live_cond = 0;
3322   switches[n_switches].validated = validated;
3323   switches[n_switches].known = known;
3324   switches[n_switches].ordering = 0;
3325   n_switches++;
3326 }
3327
3328 /* Handle an option DECODED that is unknown to the option-processing
3329    machinery.  */
3330
3331 static bool
3332 driver_unknown_option_callback (const struct cl_decoded_option *decoded)
3333 {
3334   const char *opt = decoded->arg;
3335   if (opt[1] == 'W' && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-'
3336       && !(decoded->errors & CL_ERR_NEGATIVE))
3337     {
3338       /* Leave unknown -Wno-* options for the compiler proper, to be
3339          diagnosed only if there are warnings.  */
3340       save_switch (decoded->canonical_option[0],
3341                    decoded->canonical_option_num_elements - 1,
3342                    &decoded->canonical_option[1], false, true);
3343       return false;
3344     }
3345   if (decoded->opt_index == OPT_SPECIAL_unknown)
3346     {
3347       /* Give it a chance to define it a a spec file.  */
3348       save_switch (decoded->canonical_option[0],
3349                    decoded->canonical_option_num_elements - 1,
3350                    &decoded->canonical_option[1], false, false);
3351       return false;
3352     }
3353   else
3354     return true;
3355 }
3356
3357 /* Handle an option DECODED that is not marked as CL_DRIVER.
3358    LANG_MASK will always be CL_DRIVER.  */
3359
3360 static void
3361 driver_wrong_lang_callback (const struct cl_decoded_option *decoded,
3362                             unsigned int lang_mask ATTRIBUTE_UNUSED)
3363 {
3364   /* At this point, non-driver options are accepted (and expected to
3365      be passed down by specs) unless marked to be rejected by the
3366      driver.  Options to be rejected by the driver but accepted by the
3367      compilers proper are treated just like completely unknown
3368      options.  */
3369   const struct cl_option *option = &cl_options[decoded->opt_index];
3370
3371   if (option->cl_reject_driver)
3372     error ("unrecognized command line option %qs",
3373            decoded->orig_option_with_args_text);
3374   else
3375     save_switch (decoded->canonical_option[0],
3376                  decoded->canonical_option_num_elements - 1,
3377                  &decoded->canonical_option[1], false, true);
3378 }
3379
3380 static const char *spec_lang = 0;
3381 static int last_language_n_infiles;
3382
3383 /* Parse -foffload option argument.  */
3384
3385 static void
3386 handle_foffload_option (const char *arg)
3387 {
3388   const char *c, *cur, *n, *next, *end;
3389   char *target;
3390
3391   /* If option argument starts with '-' then no target is specified and we
3392      do not need to parse it.  */
3393   if (arg[0] == '-')
3394     return;
3395
3396   end = strchr (arg, '=');
3397   if (end == NULL)
3398     end = strchr (arg, '\0');
3399   cur = arg;
3400
3401   while (cur < end)
3402     {
3403       next = strchr (cur, ',');
3404       if (next == NULL)
3405         next = end;
3406       next = (next > end) ? end : next;
3407
3408       target = XNEWVEC (char, next - cur + 1);
3409       memcpy (target, cur, next - cur);
3410       target[next - cur] = '\0';
3411
3412       /* If 'disable' is passed to the option, stop parsing the option and clean
3413          the list of offload targets.  */
3414       if (strcmp (target, "disable") == 0)
3415         {
3416           free (offload_targets);
3417           offload_targets = xstrdup ("");
3418           break;
3419         }
3420
3421       /* Check that GCC is configured to support the offload target.  */
3422       c = OFFLOAD_TARGETS;
3423       while (c)
3424         {
3425           n = strchr (c, ',');
3426           if (n == NULL)
3427             n = strchr (c, '\0');
3428
3429           if (next - cur == n - c && strncmp (target, c, n - c) == 0)
3430             break;
3431
3432           c = *n ? n + 1 : NULL;
3433         }
3434
3435       if (!c)
3436         fatal_error (input_location,
3437                      "GCC is not configured to support %s as offload target",
3438                      target);
3439
3440       if (!offload_targets)
3441         {
3442           offload_targets = target;
3443           target = NULL;
3444         }
3445       else
3446         {
3447           /* Check that the target hasn't already presented in the list.  */
3448           c = offload_targets;
3449           do
3450             {
3451               n = strchr (c, ':');
3452               if (n == NULL)
3453                 n = strchr (c, '\0');
3454
3455               if (next - cur == n - c && strncmp (c, target, n - c) == 0)
3456                 break;
3457
3458               c = n + 1;
3459             }
3460           while (*n);
3461
3462           /* If duplicate is not found, append the target to the list.  */
3463           if (c > n)
3464             {
3465               size_t offload_targets_len = strlen (offload_targets);
3466               offload_targets
3467                 = XRESIZEVEC (char, offload_targets,
3468                               offload_targets_len + next - cur + 2);
3469               if (offload_targets_len)
3470                 offload_targets[offload_targets_len++] = ':';
3471               memcpy (offload_targets + offload_targets_len, target, next - cur);
3472             }
3473         }
3474
3475       cur = next + 1;
3476       XDELETEVEC (target);
3477     }
3478 }
3479
3480 /* Handle a driver option; arguments and return value as for
3481    handle_option.  */
3482
3483 static bool
3484 driver_handle_option (struct gcc_options *opts,
3485                       struct gcc_options *opts_set,
3486                       const struct cl_decoded_option *decoded,
3487                       unsigned int lang_mask ATTRIBUTE_UNUSED, int kind,
3488                       location_t loc,
3489                       const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED,
3490                       diagnostic_context *dc)
3491 {
3492   size_t opt_index = decoded->opt_index;
3493   const char *arg = decoded->arg;
3494   const char *compare_debug_replacement_opt;
3495   int value = decoded->value;
3496   bool validated = false;
3497   bool do_save = true;
3498
3499   gcc_assert (opts == &global_options);
3500   gcc_assert (opts_set == &global_options_set);
3501   gcc_assert (kind == DK_UNSPECIFIED);
3502   gcc_assert (loc == UNKNOWN_LOCATION);
3503   gcc_assert (dc == global_dc);
3504
3505   switch (opt_index)
3506     {
3507     case OPT_dumpspecs:
3508       {
3509         struct spec_list *sl;
3510         init_spec ();
3511         for (sl = specs; sl; sl = sl->next)
3512           printf ("*%s:\n%s\n\n", sl->name, *(sl->ptr_spec));
3513         if (link_command_spec)
3514           printf ("*link_command:\n%s\n\n", link_command_spec);
3515         exit (0);
3516       }
3517
3518     case OPT_dumpversion:
3519       printf ("%s\n", spec_version);
3520       exit (0);
3521
3522     case OPT_dumpmachine:
3523       printf ("%s\n", spec_machine);
3524       exit (0);
3525
3526     case OPT__version:
3527       print_version = 1;
3528
3529       /* CPP driver cannot obtain switch from cc1_options.  */
3530       if (is_cpp_driver)
3531         add_preprocessor_option ("--version", strlen ("--version"));
3532       add_assembler_option ("--version", strlen ("--version"));
3533       add_linker_option ("--version", strlen ("--version"));
3534       break;
3535
3536     case OPT__help:
3537       print_help_list = 1;
3538
3539       /* CPP driver cannot obtain switch from cc1_options.  */
3540       if (is_cpp_driver)
3541         add_preprocessor_option ("--help", 6);
3542       add_assembler_option ("--help", 6);
3543       add_linker_option ("--help", 6);
3544       break;
3545
3546     case OPT__help_:
3547       print_subprocess_help = 2;
3548       break;
3549
3550     case OPT__target_help:
3551       print_subprocess_help = 1;
3552
3553       /* CPP driver cannot obtain switch from cc1_options.  */
3554       if (is_cpp_driver)
3555         add_preprocessor_option ("--target-help", 13);
3556       add_assembler_option ("--target-help", 13);
3557       add_linker_option ("--target-help", 13);
3558       break;
3559
3560     case OPT__no_sysroot_suffix:
3561     case OPT_pass_exit_codes:
3562     case OPT_print_search_dirs:
3563     case OPT_print_file_name_:
3564     case OPT_print_prog_name_:
3565     case OPT_print_multi_lib:
3566     case OPT_print_multi_directory:
3567     case OPT_print_sysroot:
3568     case OPT_print_multi_os_directory:
3569     case OPT_print_multiarch:
3570     case OPT_print_sysroot_headers_suffix:
3571     case OPT_time:
3572     case OPT_wrapper:
3573       /* These options set the variables specified in common.opt
3574          automatically, and do not need to be saved for spec
3575          processing.  */
3576       do_save = false;
3577       break;
3578
3579     case OPT_print_libgcc_file_name:
3580       print_file_name = "libgcc.a";
3581       do_save = false;
3582       break;
3583
3584     case OPT_fuse_ld_bfd:
3585        use_ld = ".bfd";
3586        break;
3587
3588     case OPT_fuse_ld_gold:
3589        use_ld = ".gold";
3590        break;
3591
3592     case OPT_fcompare_debug_second:
3593       compare_debug_second = 1;
3594       break;
3595
3596     case OPT_fcompare_debug:
3597       switch (value)
3598         {
3599         case 0:
3600           compare_debug_replacement_opt = "-fcompare-debug=";
3601           arg = "";
3602           goto compare_debug_with_arg;
3603
3604         case 1:
3605           compare_debug_replacement_opt = "-fcompare-debug=-gtoggle";
3606           arg = "-gtoggle";
3607           goto compare_debug_with_arg;
3608
3609         default:
3610           gcc_unreachable ();
3611         }
3612       break;
3613
3614     case OPT_fcompare_debug_:
3615       compare_debug_replacement_opt = decoded->canonical_option[0];
3616     compare_debug_with_arg:
3617       gcc_assert (decoded->canonical_option_num_elements == 1);
3618       gcc_assert (arg != NULL);
3619       if (*arg)
3620         compare_debug = 1;
3621       else
3622         compare_debug = -1;
3623       if (compare_debug < 0)
3624         compare_debug_opt = NULL;
3625       else
3626         compare_debug_opt = arg;
3627       save_switch (compare_debug_replacement_opt, 0, NULL, validated, true);
3628       return true;
3629
3630     case OPT_fdiagnostics_color_:
3631       diagnostic_color_init (dc, value);
3632       break;
3633
3634     case OPT_Wa_:
3635       {
3636         int prev, j;
3637         /* Pass the rest of this option to the assembler.  */
3638
3639         /* Split the argument at commas.  */
3640         prev = 0;
3641         for (j = 0; arg[j]; j++)
3642           if (arg[j] == ',')
3643             {
3644               add_assembler_option (arg + prev, j - prev);
3645               prev = j + 1;
3646             }
3647
3648         /* Record the part after the last comma.  */
3649         add_assembler_option (arg + prev, j - prev);
3650       }
3651       do_save = false;
3652       break;
3653
3654     case OPT_Wp_:
3655       {
3656         int prev, j;
3657         /* Pass the rest of this option to the preprocessor.  */
3658
3659         /* Split the argument at commas.  */
3660         prev = 0;
3661         for (j = 0; arg[j]; j++)
3662           if (arg[j] == ',')
3663             {
3664               add_preprocessor_option (arg + prev, j - prev);
3665               prev = j + 1;
3666             }
3667
3668         /* Record the part after the last comma.  */
3669         add_preprocessor_option (arg + prev, j - prev);
3670       }
3671       do_save = false;
3672       break;
3673
3674     case OPT_Wl_:
3675       {
3676         int prev, j;
3677         /* Split the argument at commas.  */
3678         prev = 0;
3679         for (j = 0; arg[j]; j++)
3680           if (arg[j] == ',')
3681             {
3682               add_infile (save_string (arg + prev, j - prev), "*");
3683               prev = j + 1;
3684             }
3685         /* Record the part after the last comma.  */
3686         add_infile (arg + prev, "*");
3687       }
3688       do_save = false;
3689       break;
3690
3691     case OPT_Xlinker:
3692       add_infile (arg, "*");
3693       do_save = false;
3694       break;
3695
3696     case OPT_Xpreprocessor:
3697       add_preprocessor_option (arg, strlen (arg));
3698       do_save = false;
3699       break;
3700
3701     case OPT_Xassembler:
3702       add_assembler_option (arg, strlen (arg));
3703       do_save = false;
3704       break;
3705
3706     case OPT_l:
3707       /* POSIX allows separation of -l and the lib arg; canonicalize
3708          by concatenating -l with its arg */
3709       add_infile (concat ("-l", arg, NULL), "*");
3710       do_save = false;
3711       break;
3712
3713     case OPT_L:
3714       /* Similarly, canonicalize -L for linkers that may not accept
3715          separate arguments.  */
3716       save_switch (concat ("-L", arg, NULL), 0, NULL, validated, true);
3717       return true;
3718
3719     case OPT_F:
3720       /* Likewise -F.  */
3721       save_switch (concat ("-F", arg, NULL), 0, NULL, validated, true);
3722       return true;
3723
3724     case OPT_save_temps:
3725       save_temps_flag = SAVE_TEMPS_CWD;
3726       validated = true;
3727       break;
3728
3729     case OPT_save_temps_:
3730       if (strcmp (arg, "cwd") == 0)
3731         save_temps_flag = SAVE_TEMPS_CWD;
3732       else if (strcmp (arg, "obj") == 0
3733                || strcmp (arg, "object") == 0)
3734         save_temps_flag = SAVE_TEMPS_OBJ;
3735       else
3736         fatal_error (input_location, "%qs is an unknown -save-temps option",
3737                      decoded->orig_option_with_args_text);
3738       break;
3739
3740     case OPT_no_canonical_prefixes:
3741       /* Already handled as a special case, so ignored here.  */
3742       do_save = false;
3743       break;
3744
3745     case OPT_pipe:
3746       validated = true;
3747       /* These options set the variables specified in common.opt
3748          automatically, but do need to be saved for spec
3749          processing.  */
3750       break;
3751
3752     case OPT_specs_:
3753       {
3754         struct user_specs *user = XNEW (struct user_specs);
3755
3756         user->next = (struct user_specs *) 0;
3757         user->filename = arg;
3758         if (user_specs_tail)
3759           user_specs_tail->next = user;
3760         else
3761           user_specs_head = user;
3762         user_specs_tail = user;
3763       }
3764       validated = true;
3765       break;
3766
3767     case OPT__sysroot_:
3768       target_system_root = arg;
3769       target_system_root_changed = 1;
3770       do_save = false;
3771       break;
3772
3773     case OPT_time_:
3774       if (report_times_to_file)
3775         fclose (report_times_to_file);
3776       report_times_to_file = fopen (arg, "a");
3777       do_save = false;
3778       break;
3779
3780     case OPT____:
3781       /* "-###"
3782          This is similar to -v except that there is no execution
3783          of the commands and the echoed arguments are quoted.  It
3784          is intended for use in shell scripts to capture the
3785          driver-generated command line.  */
3786       verbose_only_flag++;
3787       verbose_flag = 1;
3788       do_save = false;
3789       break;
3790
3791     case OPT_B:
3792       {
3793         size_t len = strlen (arg);
3794
3795         /* Catch the case where the user has forgotten to append a
3796            directory separator to the path.  Note, they may be using
3797            -B to add an executable name prefix, eg "i386-elf-", in
3798            order to distinguish between multiple installations of
3799            GCC in the same directory.  Hence we must check to see
3800            if appending a directory separator actually makes a
3801            valid directory name.  */
3802         if (!IS_DIR_SEPARATOR (arg[len - 1])
3803             && is_directory (arg, false))
3804           {
3805             char *tmp = XNEWVEC (char, len + 2);
3806             strcpy (tmp, arg);
3807             tmp[len] = DIR_SEPARATOR;
3808             tmp[++len] = 0;
3809             arg = tmp;
3810           }
3811
3812         add_prefix (&exec_prefixes, arg, NULL,
3813                     PREFIX_PRIORITY_B_OPT, 0, 0);
3814         add_prefix (&startfile_prefixes, arg, NULL,
3815                     PREFIX_PRIORITY_B_OPT, 0, 0);
3816         add_prefix (&include_prefixes, arg, NULL,
3817                     PREFIX_PRIORITY_B_OPT, 0, 0);
3818       }
3819       validated = true;
3820       break;
3821
3822     case OPT_x:
3823       spec_lang = arg;
3824       if (!strcmp (spec_lang, "none"))
3825         /* Suppress the warning if -xnone comes after the last input
3826            file, because alternate command interfaces like g++ might
3827            find it useful to place -xnone after each input file.  */
3828         spec_lang = 0;
3829       else
3830         last_language_n_infiles = n_infiles;
3831       do_save = false;
3832       break;
3833
3834     case OPT_o:
3835       have_o = 1;
3836 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) || defined(HAVE_TARGET_OBJECT_SUFFIX)
3837       arg = convert_filename (arg, ! have_c, 0);
3838 #endif
3839       output_file = arg;
3840       /* Save the output name in case -save-temps=obj was used.  */
3841       save_temps_prefix = xstrdup (arg);
3842       /* On some systems, ld cannot handle "-o" without a space.  So
3843          split the option from its argument.  */
3844       save_switch ("-o", 1, &arg, validated, true);
3845       return true;
3846
3847     case OPT_static_libgcc:
3848     case OPT_shared_libgcc:
3849     case OPT_static_libgfortran:
3850     case OPT_static_libstdc__:
3851       /* These are always valid, since gcc.c itself understands the
3852          first two, gfortranspec.c understands -static-libgfortran and
3853          g++spec.c understands -static-libstdc++ */
3854       validated = true;
3855       break;
3856
3857     case OPT_fwpa:
3858       flag_wpa = "";
3859       break;
3860
3861     case OPT_foffload_:
3862       handle_foffload_option (arg);
3863       break;
3864
3865     default:
3866       /* Various driver options need no special processing at this
3867          point, having been handled in a prescan above or being
3868          handled by specs.  */
3869       break;
3870     }
3871
3872   if (do_save)
3873     save_switch (decoded->canonical_option[0],
3874                  decoded->canonical_option_num_elements - 1,
3875                  &decoded->canonical_option[1], validated, true);
3876   return true;
3877 }
3878
3879 /* Put the driver's standard set of option handlers in *HANDLERS.  */
3880
3881 static void
3882 set_option_handlers (struct cl_option_handlers *handlers)
3883 {
3884   handlers->unknown_option_callback = driver_unknown_option_callback;
3885   handlers->wrong_lang_callback = driver_wrong_lang_callback;
3886   handlers->num_handlers = 3;
3887   handlers->handlers[0].handler = driver_handle_option;
3888   handlers->handlers[0].mask = CL_DRIVER;
3889   handlers->handlers[1].handler = common_handle_option;
3890   handlers->handlers[1].mask = CL_COMMON;
3891   handlers->handlers[2].handler = target_handle_option;
3892   handlers->handlers[2].mask = CL_TARGET;
3893 }
3894
3895 /* Create the vector `switches' and its contents.
3896    Store its length in `n_switches'.  */
3897
3898 static void
3899 process_command (unsigned int decoded_options_count,
3900                  struct cl_decoded_option *decoded_options)
3901 {
3902   const char *temp;
3903   char *temp1;
3904   char *tooldir_prefix, *tooldir_prefix2;
3905   char *(*get_relative_prefix) (const char *, const char *,
3906                                 const char *) = NULL;
3907   struct cl_option_handlers handlers;
3908   unsigned int j;
3909
3910   gcc_exec_prefix = getenv ("GCC_EXEC_PREFIX");
3911
3912   n_switches = 0;
3913   n_infiles = 0;
3914   added_libraries = 0;
3915
3916   /* Figure compiler version from version string.  */
3917
3918   compiler_version = temp1 = xstrdup (version_string);
3919
3920   for (; *temp1; ++temp1)
3921     {
3922       if (*temp1 == ' ')
3923         {
3924           *temp1 = '\0';
3925           break;
3926         }
3927     }
3928
3929   /* Handle any -no-canonical-prefixes flag early, to assign the function
3930      that builds relative prefixes.  This function creates default search
3931      paths that are needed later in normal option handling.  */
3932
3933   for (j = 1; j < decoded_options_count; j++)
3934     {
3935       if (decoded_options[j].opt_index == OPT_no_canonical_prefixes)
3936         {
3937           get_relative_prefix = make_relative_prefix_ignore_links;
3938           break;
3939         }
3940     }
3941   if (! get_relative_prefix)
3942     get_relative_prefix = make_relative_prefix;
3943
3944   /* Set up the default search paths.  If there is no GCC_EXEC_PREFIX,
3945      see if we can create it from the pathname specified in
3946      decoded_options[0].arg.  */
3947
3948   gcc_libexec_prefix = standard_libexec_prefix;
3949 #ifndef VMS
3950   /* FIXME: make_relative_prefix doesn't yet work for VMS.  */
3951   if (!gcc_exec_prefix)
3952     {
3953 #if 0  /* Never use relative prefix (not bootstrapped) */
3954       gcc_exec_prefix = get_relative_prefix (decoded_options[0].arg,
3955                                              standard_bindir_prefix,
3956                                              standard_exec_prefix);
3957       gcc_libexec_prefix = get_relative_prefix (decoded_options[0].arg,
3958                                              standard_bindir_prefix,
3959                                              standard_libexec_prefix);
3960       if (gcc_exec_prefix)
3961         xputenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL));
3962 #endif
3963     }
3964   else
3965     {
3966       /* make_relative_prefix requires a program name, but
3967          GCC_EXEC_PREFIX is typically a directory name with a trailing
3968          / (which is ignored by make_relative_prefix), so append a
3969          program name.  */
3970       char *tmp_prefix = concat (gcc_exec_prefix, "gcc", NULL);
3971       gcc_libexec_prefix = get_relative_prefix (tmp_prefix,
3972                                                 standard_exec_prefix,
3973                                                 standard_libexec_prefix);
3974
3975       /* The path is unrelocated, so fallback to the original setting.  */
3976       if (!gcc_libexec_prefix)
3977         gcc_libexec_prefix = standard_libexec_prefix;
3978
3979       free (tmp_prefix);
3980     }
3981 #else
3982 #endif
3983   /* From this point onward, gcc_exec_prefix is non-null if the toolchain
3984      is relocated. The toolchain was either relocated using GCC_EXEC_PREFIX
3985      or an automatically created GCC_EXEC_PREFIX from
3986      decoded_options[0].arg.  */
3987
3988   /* Do language-specific adjustment/addition of flags.  */
3989   lang_specific_driver (&decoded_options, &decoded_options_count,
3990                         &added_libraries);
3991
3992   if (gcc_exec_prefix)
3993     {
3994       int len = strlen (gcc_exec_prefix);
3995
3996       if (len > (int) sizeof ("/lib/gcc/") - 1
3997           && (IS_DIR_SEPARATOR (gcc_exec_prefix[len-1])))
3998         {
3999           temp = gcc_exec_prefix + len - sizeof ("/lib/gcc/") + 1;
4000           if (IS_DIR_SEPARATOR (*temp)
4001               && filename_ncmp (temp + 1, "lib", 3) == 0
4002               && IS_DIR_SEPARATOR (temp[4])
4003               && filename_ncmp (temp + 5, "gcc", 3) == 0)
4004             len -= sizeof ("/lib/gcc/") - 1;
4005         }
4006
4007 #if 0  /* Bad Paths */
4008       set_std_prefix (gcc_exec_prefix, len);
4009       add_prefix (&exec_prefixes, gcc_libexec_prefix, "GCC",
4010                   PREFIX_PRIORITY_LAST, 0, 0);
4011       add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC",
4012                   PREFIX_PRIORITY_LAST, 0, 0);
4013 #endif
4014     }
4015
4016   /* COMPILER_PATH and LIBRARY_PATH have values
4017      that are lists of directory names with colons.  */
4018
4019   temp = getenv ("COMPILER_PATH");
4020   if (temp)
4021     {
4022       const char *startp, *endp;
4023       char *nstore = (char *) alloca (strlen (temp) + 3);
4024
4025       startp = endp = temp;
4026       while (1)
4027         {
4028           if (*endp == PATH_SEPARATOR || *endp == 0)
4029             {
4030               strncpy (nstore, startp, endp - startp);
4031               if (endp == startp)
4032                 strcpy (nstore, concat (".", dir_separator_str, NULL));
4033               else if (!IS_DIR_SEPARATOR (endp[-1]))
4034                 {
4035                   nstore[endp - startp] = DIR_SEPARATOR;
4036                   nstore[endp - startp + 1] = 0;
4037                 }
4038               else
4039                 nstore[endp - startp] = 0;
4040               add_prefix (&exec_prefixes, nstore, 0,
4041                           PREFIX_PRIORITY_LAST, 0, 0);
4042               add_prefix (&include_prefixes, nstore, 0,
4043                           PREFIX_PRIORITY_LAST, 0, 0);
4044               if (*endp == 0)
4045                 break;
4046               endp = startp = endp + 1;
4047             }
4048           else
4049             endp++;
4050         }
4051     }
4052
4053   temp = getenv (LIBRARY_PATH_ENV);
4054   if (temp && *cross_compile == '0')
4055     {
4056       const char *startp, *endp;
4057       char *nstore = (char *) alloca (strlen (temp) + 3);
4058
4059       startp = endp = temp;
4060       while (1)
4061         {
4062           if (*endp == PATH_SEPARATOR || *endp == 0)
4063             {
4064               strncpy (nstore, startp, endp - startp);
4065               if (endp == startp)
4066                 strcpy (nstore, concat (".", dir_separator_str, NULL));
4067               else if (!IS_DIR_SEPARATOR (endp[-1]))
4068                 {
4069                   nstore[endp - startp] = DIR_SEPARATOR;
4070                   nstore[endp - startp + 1] = 0;
4071                 }
4072               else
4073                 nstore[endp - startp] = 0;
4074               add_prefix (&startfile_prefixes, nstore, NULL,
4075                           PREFIX_PRIORITY_LAST, 0, 1);
4076               if (*endp == 0)
4077                 break;
4078               endp = startp = endp + 1;
4079             }
4080           else
4081             endp++;
4082         }
4083     }
4084
4085   /* Use LPATH like LIBRARY_PATH (for the CMU build program).  */
4086   temp = getenv ("LPATH");
4087   if (temp && *cross_compile == '0')
4088     {
4089       const char *startp, *endp;
4090       char *nstore = (char *) alloca (strlen (temp) + 3);
4091
4092       startp = endp = temp;
4093       while (1)
4094         {
4095           if (*endp == PATH_SEPARATOR || *endp == 0)
4096             {
4097               strncpy (nstore, startp, endp - startp);
4098               if (endp == startp)
4099                 strcpy (nstore, concat (".", dir_separator_str, NULL));
4100               else if (!IS_DIR_SEPARATOR (endp[-1]))
4101                 {
4102                   nstore[endp - startp] = DIR_SEPARATOR;
4103                   nstore[endp - startp + 1] = 0;
4104                 }
4105               else
4106                 nstore[endp - startp] = 0;
4107               add_prefix (&startfile_prefixes, nstore, NULL,
4108                           PREFIX_PRIORITY_LAST, 0, 1);
4109               if (*endp == 0)
4110                 break;
4111               endp = startp = endp + 1;
4112             }
4113           else
4114             endp++;
4115         }
4116     }
4117
4118   /* Process the options and store input files and switches in their
4119      vectors.  */
4120
4121   last_language_n_infiles = -1;
4122
4123   set_option_handlers (&handlers);
4124
4125   for (j = 1; j < decoded_options_count; j++)
4126     {
4127       switch (decoded_options[j].opt_index)
4128         {
4129         case OPT_S:
4130         case OPT_c:
4131         case OPT_E:
4132           have_c = 1;
4133           break;
4134         }
4135       if (have_c)
4136         break;
4137     }
4138
4139   for (j = 1; j < decoded_options_count; j++)
4140     {
4141       if (decoded_options[j].opt_index == OPT_SPECIAL_input_file)
4142         {
4143           const char *arg = decoded_options[j].arg;
4144           const char *p = strrchr (arg, '@');
4145           char *fname;
4146           long offset;
4147           int consumed;
4148 #ifdef HAVE_TARGET_OBJECT_SUFFIX
4149           arg = convert_filename (arg, 0, access (arg, F_OK));
4150 #endif
4151           /* For LTO static archive support we handle input file
4152              specifications that are composed of a filename and
4153              an offset like FNAME@OFFSET.  */
4154           if (p
4155               && p != arg
4156               && sscanf (p, "@%li%n", &offset, &consumed) >= 1
4157               && strlen (p) == (unsigned int)consumed)
4158             {
4159               fname = (char *)xmalloc (p - arg + 1);
4160               memcpy (fname, arg, p - arg);
4161               fname[p - arg] = '\0';
4162               /* Only accept non-stdin and existing FNAME parts, otherwise
4163                  try with the full name.  */
4164               if (strcmp (fname, "-") == 0 || access (fname, F_OK) < 0)
4165                 {
4166                   free (fname);
4167                   fname = xstrdup (arg);
4168                 }
4169             }
4170           else
4171             fname = xstrdup (arg);
4172
4173           if (strcmp (fname, "-") != 0 && access (fname, F_OK) < 0)
4174             perror_with_name (fname);
4175           else
4176             add_infile (arg, spec_lang);
4177
4178           free (fname);
4179           continue;
4180         }
4181
4182       read_cmdline_option (&global_options, &global_options_set,
4183                            decoded_options + j, UNKNOWN_LOCATION,
4184                            CL_DRIVER, &handlers, global_dc);
4185     }
4186
4187   if (output_file
4188       && strcmp (output_file, "-") != 0
4189       && strcmp (output_file, HOST_BIT_BUCKET) != 0)
4190     {
4191       int i;
4192       for (i = 0; i < n_infiles; i++)
4193         if ((!infiles[i].language || infiles[i].language[0] != '*')
4194             && canonical_filename_eq (infiles[i].name, output_file))
4195           fatal_error (input_location,
4196                        "input file %qs is the same as output file",
4197                        output_file);
4198     }
4199
4200   /* If -save-temps=obj and -o name, create the prefix to use for %b.
4201      Otherwise just make -save-temps=obj the same as -save-temps=cwd.  */
4202   if (save_temps_flag == SAVE_TEMPS_OBJ && save_temps_prefix != NULL)
4203     {
4204       save_temps_length = strlen (save_temps_prefix);
4205       temp = strrchr (lbasename (save_temps_prefix), '.');
4206       if (temp)
4207         {
4208           save_temps_length -= strlen (temp);
4209           save_temps_prefix[save_temps_length] = '\0';
4210         }
4211
4212     }
4213   else if (save_temps_prefix != NULL)
4214     {
4215       free (save_temps_prefix);
4216       save_temps_prefix = NULL;
4217     }
4218
4219   if (save_temps_flag && use_pipes)
4220     {
4221       /* -save-temps overrides -pipe, so that temp files are produced */
4222       if (save_temps_flag)
4223         warning (0, "-pipe ignored because -save-temps specified");
4224       use_pipes = 0;
4225     }
4226
4227   if (!compare_debug)
4228     {
4229       const char *gcd = getenv ("GCC_COMPARE_DEBUG");
4230
4231       if (gcd && gcd[0] == '-')
4232         {
4233           compare_debug = 2;
4234           compare_debug_opt = gcd;
4235         }
4236       else if (gcd && *gcd && strcmp (gcd, "0"))
4237         {
4238           compare_debug = 3;
4239           compare_debug_opt = "-gtoggle";
4240         }
4241     }
4242   else if (compare_debug < 0)
4243     {
4244       compare_debug = 0;
4245       gcc_assert (!compare_debug_opt);
4246     }
4247
4248   /* Set up the search paths.  We add directories that we expect to
4249      contain GNU Toolchain components before directories specified by
4250      the machine description so that we will find GNU components (like
4251      the GNU assembler) before those of the host system.  */
4252
4253   /* If we don't know where the toolchain has been installed, use the
4254      configured-in locations.  */
4255   if (!gcc_exec_prefix)
4256     {
4257 #ifndef OS2
4258       add_prefix (&exec_prefixes, standard_libexec_prefix, NULL,
4259                   PREFIX_PRIORITY_LAST, 0, 0);
4260 #  if 0  /* Bad paths */
4261       add_prefix (&exec_prefixes, standard_libexec_prefix, "GCC",
4262                   PREFIX_PRIORITY_LAST, 1, 0);
4263       add_prefix (&exec_prefixes, standard_libexec_prefix, "BINUTILS",
4264                   PREFIX_PRIORITY_LAST, 2, 0);
4265       add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS",
4266                   PREFIX_PRIORITY_LAST, 2, 0);
4267 #  endif
4268 #endif
4269 #if 0  /* Bad paths */
4270       add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS",
4271                   PREFIX_PRIORITY_LAST, 1, 0);
4272 #endif
4273     }
4274
4275   gcc_assert (!IS_ABSOLUTE_PATH (tooldir_base_prefix));
4276   tooldir_prefix2 = concat (tooldir_base_prefix, spec_host_machine,
4277                             dir_separator_str, NULL);
4278
4279   /* Look for tools relative to the location from which the driver is
4280      running, or, if that is not available, the configured prefix.  */
4281   tooldir_prefix
4282     = concat (gcc_exec_prefix ? gcc_exec_prefix : standard_exec_prefix,
4283               spec_host_machine, dir_separator_str, spec_version,
4284               accel_dir_suffix, dir_separator_str, tooldir_prefix2, NULL);
4285   free (tooldir_prefix2);
4286
4287 #if 0  /* Bad paths */
4288   add_prefix (&exec_prefixes,
4289               concat (tooldir_prefix, "bin", dir_separator_str, NULL),
4290               "BINUTILS", PREFIX_PRIORITY_LAST, 0, 0);
4291   add_prefix (&startfile_prefixes,
4292               concat (tooldir_prefix, "lib", dir_separator_str, NULL),
4293               "BINUTILS", PREFIX_PRIORITY_LAST, 0, 1);
4294 #endif
4295   free (tooldir_prefix);
4296
4297 #if defined(TARGET_SYSTEM_ROOT_RELOCATABLE) && !defined(VMS)
4298   /* If the normal TARGET_SYSTEM_ROOT is inside of $exec_prefix,
4299      then consider it to relocate with the rest of the GCC installation
4300      if GCC_EXEC_PREFIX is set.
4301      ``make_relative_prefix'' is not compiled for VMS, so don't call it.  */
4302   if (target_system_root && !target_system_root_changed && gcc_exec_prefix)
4303     {
4304       char *tmp_prefix = get_relative_prefix (decoded_options[0].arg,
4305                                               standard_bindir_prefix,
4306                                               target_system_root);
4307       if (tmp_prefix && access_check (tmp_prefix, F_OK) == 0)
4308         {
4309           target_system_root = tmp_prefix;
4310           target_system_root_changed = 1;
4311         }
4312     }
4313 #endif
4314
4315   /* More prefixes are enabled in main, after we read the specs file
4316      and determine whether this is cross-compilation or not.  */
4317
4318   if (n_infiles == last_language_n_infiles && spec_lang != 0)
4319     warning (0, "%<-x %s%> after last input file has no effect", spec_lang);
4320
4321   /* Synthesize -fcompare-debug flag from the GCC_COMPARE_DEBUG
4322      environment variable.  */
4323   if (compare_debug == 2 || compare_debug == 3)
4324     {
4325       const char *opt = concat ("-fcompare-debug=", compare_debug_opt, NULL);
4326       save_switch (opt, 0, NULL, false, true);
4327       compare_debug = 1;
4328     }
4329
4330   /* Ensure we only invoke each subprocess once.  */
4331   if (print_subprocess_help || print_help_list || print_version)
4332     {
4333       n_infiles = 0;
4334
4335       /* Create a dummy input file, so that we can pass
4336          the help option on to the various sub-processes.  */
4337       add_infile ("help-dummy", "c");
4338     }
4339
4340   alloc_switch ();
4341   switches[n_switches].part1 = 0;
4342   alloc_infile ();
4343   infiles[n_infiles].name = 0;
4344 }
4345
4346 /* Store switches not filtered out by %<S in spec in COLLECT_GCC_OPTIONS
4347    and place that in the environment.  */
4348
4349 static void
4350 set_collect_gcc_options (void)
4351 {
4352   int i;
4353   int first_time;
4354
4355   /* Build COLLECT_GCC_OPTIONS to have all of the options specified to
4356      the compiler.  */
4357   obstack_grow (&collect_obstack, "COLLECT_GCC_OPTIONS=",
4358                 sizeof ("COLLECT_GCC_OPTIONS=") - 1);
4359
4360   first_time = TRUE;
4361   for (i = 0; (int) i < n_switches; i++)
4362     {
4363       const char *const *args;
4364       const char *p, *q;
4365       if (!first_time)
4366         obstack_grow (&collect_obstack, " ", 1);
4367
4368       first_time = FALSE;
4369
4370       /* Ignore elided switches.  */
4371       if ((switches[i].live_cond
4372            & (SWITCH_IGNORE | SWITCH_KEEP_FOR_GCC))
4373           == SWITCH_IGNORE)
4374         continue;
4375
4376       obstack_grow (&collect_obstack, "'-", 2);
4377       q = switches[i].part1;
4378       while ((p = strchr (q, '\'')))
4379         {
4380           obstack_grow (&collect_obstack, q, p - q);
4381           obstack_grow (&collect_obstack, "'\\''", 4);
4382           q = ++p;
4383         }
4384       obstack_grow (&collect_obstack, q, strlen (q));
4385       obstack_grow (&collect_obstack, "'", 1);
4386
4387       for (args = switches[i].args; args && *args; args++)
4388         {
4389           obstack_grow (&collect_obstack, " '", 2);
4390           q = *args;
4391           while ((p = strchr (q, '\'')))
4392             {
4393               obstack_grow (&collect_obstack, q, p - q);
4394               obstack_grow (&collect_obstack, "'\\''", 4);
4395               q = ++p;
4396             }
4397           obstack_grow (&collect_obstack, q, strlen (q));
4398           obstack_grow (&collect_obstack, "'", 1);
4399         }
4400     }
4401   obstack_grow (&collect_obstack, "\0", 1);
4402   xputenv (XOBFINISH (&collect_obstack, char *));
4403 }
4404 \f
4405 /* Process a spec string, accumulating and running commands.  */
4406
4407 /* These variables describe the input file name.
4408    input_file_number is the index on outfiles of this file,
4409    so that the output file name can be stored for later use by %o.
4410    input_basename is the start of the part of the input file
4411    sans all directory names, and basename_length is the number
4412    of characters starting there excluding the suffix .c or whatever.  */
4413
4414 static const char *gcc_input_filename;
4415 static int input_file_number;
4416 size_t input_filename_length;
4417 static int basename_length;
4418 static int suffixed_basename_length;
4419 static const char *input_basename;
4420 static const char *input_suffix;
4421 #ifndef HOST_LACKS_INODE_NUMBERS
4422 static struct stat input_stat;
4423 #endif
4424 static int input_stat_set;
4425
4426 /* The compiler used to process the current input file.  */
4427 static struct compiler *input_file_compiler;
4428
4429 /* These are variables used within do_spec and do_spec_1.  */
4430
4431 /* Nonzero if an arg has been started and not yet terminated
4432    (with space, tab or newline).  */
4433 static int arg_going;
4434
4435 /* Nonzero means %d or %g has been seen; the next arg to be terminated
4436    is a temporary file name.  */
4437 static int delete_this_arg;
4438
4439 /* Nonzero means %w has been seen; the next arg to be terminated
4440    is the output file name of this compilation.  */
4441 static int this_is_output_file;
4442
4443 /* Nonzero means %s has been seen; the next arg to be terminated
4444    is the name of a library file and we should try the standard
4445    search dirs for it.  */
4446 static int this_is_library_file;
4447
4448 /* Nonzero means %T has been seen; the next arg to be terminated
4449    is the name of a linker script and we should try all of the
4450    standard search dirs for it.  If it is found insert a --script
4451    command line switch and then substitute the full path in place,
4452    otherwise generate an error message.  */
4453 static int this_is_linker_script;
4454
4455 /* Nonzero means that the input of this command is coming from a pipe.  */
4456 static int input_from_pipe;
4457
4458 /* Nonnull means substitute this for any suffix when outputting a switches
4459    arguments.  */
4460 static const char *suffix_subst;
4461
4462 /* If there is an argument being accumulated, terminate it and store it.  */
4463
4464 static void
4465 end_going_arg (void)
4466 {
4467   if (arg_going)
4468     {
4469       const char *string;
4470
4471       obstack_1grow (&obstack, 0);
4472       string = XOBFINISH (&obstack, const char *);
4473       if (this_is_library_file)
4474         string = find_file (string);
4475       if (this_is_linker_script)
4476         {
4477           char * full_script_path = find_a_file (&startfile_prefixes, string, R_OK, true);
4478
4479           if (full_script_path == NULL)
4480             {
4481               error ("unable to locate default linker script %qs in the library search paths", string);
4482               /* Script was not found on search path.  */
4483               return;
4484             }
4485           store_arg ("--script", false, false);
4486           string = full_script_path;
4487         }
4488       store_arg (string, delete_this_arg, this_is_output_file);
4489       if (this_is_output_file)
4490         outfiles[input_file_number] = string;
4491       arg_going = 0;
4492     }
4493 }
4494
4495
4496 /* Parse the WRAPPER string which is a comma separated list of the command line
4497    and insert them into the beginning of argbuf.  */
4498
4499 static void
4500 insert_wrapper (const char *wrapper)
4501 {
4502   int n = 0;
4503   int i;
4504   char *buf = xstrdup (wrapper);
4505   char *p = buf;
4506   unsigned int old_length = argbuf.length ();
4507
4508   do
4509     {
4510       n++;
4511       while (*p == ',')
4512         p++;
4513     }
4514   while ((p = strchr (p, ',')) != NULL);
4515
4516   argbuf.safe_grow (old_length + n);
4517   memmove (argbuf.address () + n,
4518            argbuf.address (),
4519            old_length * sizeof (const_char_p));
4520
4521   i = 0;
4522   p = buf;
4523   do
4524     {
4525       while (*p == ',')
4526         {
4527           *p = 0;
4528           p++;
4529         }
4530       argbuf[i] = p;
4531       i++;
4532     }
4533   while ((p = strchr (p, ',')) != NULL);
4534   gcc_assert (i == n);
4535 }
4536
4537 /* Process the spec SPEC and run the commands specified therein.
4538    Returns 0 if the spec is successfully processed; -1 if failed.  */
4539
4540 int
4541 do_spec (const char *spec)
4542 {
4543   int value;
4544
4545   value = do_spec_2 (spec);
4546
4547   /* Force out any unfinished command.
4548      If -pipe, this forces out the last command if it ended in `|'.  */
4549   if (value == 0)
4550     {
4551       if (argbuf.length () > 0
4552           && !strcmp (argbuf.last (), "|"))
4553         argbuf.pop ();
4554
4555       set_collect_gcc_options ();
4556
4557       if (argbuf.length () > 0)
4558         value = execute ();
4559     }
4560
4561   return value;
4562 }
4563
4564 static int
4565 do_spec_2 (const char *spec)
4566 {
4567   int result;
4568
4569   clear_args ();
4570   arg_going = 0;
4571   delete_this_arg = 0;
4572   this_is_output_file = 0;
4573   this_is_library_file = 0;
4574   this_is_linker_script = 0;
4575   input_from_pipe = 0;
4576   suffix_subst = NULL;
4577
4578   result = do_spec_1 (spec, 0, NULL);
4579
4580   end_going_arg ();
4581
4582   return result;
4583 }
4584
4585
4586 /* Process the given spec string and add any new options to the end
4587    of the switches/n_switches array.  */
4588
4589 static void
4590 do_option_spec (const char *name, const char *spec)
4591 {
4592   unsigned int i, value_count, value_len;
4593   const char *p, *q, *value;
4594   char *tmp_spec, *tmp_spec_p;
4595
4596   if (configure_default_options[0].name == NULL)
4597     return;
4598
4599   for (i = 0; i < ARRAY_SIZE (configure_default_options); i++)
4600     if (strcmp (configure_default_options[i].name, name) == 0)
4601       break;
4602   if (i == ARRAY_SIZE (configure_default_options))
4603     return;
4604
4605   value = configure_default_options[i].value;
4606   value_len = strlen (value);
4607
4608   /* Compute the size of the final spec.  */
4609   value_count = 0;
4610   p = spec;
4611   while ((p = strstr (p, "%(VALUE)")) != NULL)
4612     {
4613       p ++;
4614       value_count ++;
4615     }
4616
4617   /* Replace each %(VALUE) by the specified value.  */
4618   tmp_spec = (char *) alloca (strlen (spec) + 1
4619                      + value_count * (value_len - strlen ("%(VALUE)")));
4620   tmp_spec_p = tmp_spec;
4621   q = spec;
4622   while ((p = strstr (q, "%(VALUE)")) != NULL)
4623     {
4624       memcpy (tmp_spec_p, q, p - q);
4625       tmp_spec_p = tmp_spec_p + (p - q);
4626       memcpy (tmp_spec_p, value, value_len);
4627       tmp_spec_p += value_len;
4628       q = p + strlen ("%(VALUE)");
4629     }
4630   strcpy (tmp_spec_p, q);
4631
4632   do_self_spec (tmp_spec);
4633 }
4634
4635 /* Process the given spec string and add any new options to the end
4636    of the switches/n_switches array.  */
4637
4638 static void
4639 do_self_spec (const char *spec)
4640 {
4641   int i;
4642
4643   do_spec_2 (spec);
4644   do_spec_1 (" ", 0, NULL);
4645
4646   /* Mark %<S switches processed by do_self_spec to be ignored permanently.
4647      do_self_specs adds the replacements to switches array, so it shouldn't
4648      be processed afterwards.  */
4649   for (i = 0; i < n_switches; i++)
4650     if ((switches[i].live_cond & SWITCH_IGNORE))
4651       switches[i].live_cond |= SWITCH_IGNORE_PERMANENTLY;
4652
4653   if (argbuf.length () > 0)
4654     {
4655       const char **argbuf_copy;
4656       struct cl_decoded_option *decoded_options;
4657       struct cl_option_handlers handlers;
4658       unsigned int decoded_options_count;
4659       unsigned int j;
4660
4661       /* Create a copy of argbuf with a dummy argv[0] entry for
4662          decode_cmdline_options_to_array.  */
4663       argbuf_copy = XNEWVEC (const char *,
4664                              argbuf.length () + 1);
4665       argbuf_copy[0] = "";
4666       memcpy (argbuf_copy + 1, argbuf.address (),
4667               argbuf.length () * sizeof (const char *));
4668
4669       decode_cmdline_options_to_array (argbuf.length () + 1,
4670                                        argbuf_copy,
4671                                        CL_DRIVER, &decoded_options,
4672                                        &decoded_options_count);
4673       free (argbuf_copy);
4674
4675       set_option_handlers (&handlers);
4676
4677       for (j = 1; j < decoded_options_count; j++)
4678         {
4679           switch (decoded_options[j].opt_index)
4680             {
4681             case OPT_SPECIAL_input_file:
4682               /* Specs should only generate options, not input
4683                  files.  */
4684               if (strcmp (decoded_options[j].arg, "-") != 0)
4685                 fatal_error (input_location,
4686                              "switch %qs does not start with %<-%>",
4687                              decoded_options[j].arg);
4688               else
4689                 fatal_error (input_location,
4690                              "spec-generated switch is just %<-%>");
4691               break;
4692
4693             case OPT_fcompare_debug_second:
4694             case OPT_fcompare_debug:
4695             case OPT_fcompare_debug_:
4696             case OPT_o:
4697               /* Avoid duplicate processing of some options from
4698                  compare-debug specs; just save them here.  */
4699               save_switch (decoded_options[j].canonical_option[0],
4700                            (decoded_options[j].canonical_option_num_elements
4701                             - 1),
4702                            &decoded_options[j].canonical_option[1], false, true);
4703               break;
4704
4705             default:
4706               read_cmdline_option (&global_options, &global_options_set,
4707                                    decoded_options + j, UNKNOWN_LOCATION,
4708                                    CL_DRIVER, &handlers, global_dc);
4709               break;
4710             }
4711         }
4712
4713       alloc_switch ();
4714       switches[n_switches].part1 = 0;
4715     }
4716 }
4717
4718 /* Callback for processing %D and %I specs.  */
4719
4720 struct spec_path_info {
4721   const char *option;
4722   const char *append;
4723   size_t append_len;
4724   bool omit_relative;
4725   bool separate_options;
4726 };
4727
4728 static void *
4729 spec_path (char *path, void *data)
4730 {
4731   struct spec_path_info *info = (struct spec_path_info *) data;
4732   size_t len = 0;
4733   char save = 0;
4734
4735   if (info->omit_relative && !IS_ABSOLUTE_PATH (path))
4736     return NULL;
4737
4738   if (info->append_len != 0)
4739     {
4740       len = strlen (path);
4741       memcpy (path + len, info->append, info->append_len + 1);
4742     }
4743
4744   if (!is_directory (path, true))
4745     return NULL;
4746
4747   do_spec_1 (info->option, 1, NULL);
4748   if (info->separate_options)
4749     do_spec_1 (" ", 0, NULL);
4750
4751   if (info->append_len == 0)
4752     {
4753       len = strlen (path);
4754       save = path[len - 1];
4755       if (IS_DIR_SEPARATOR (path[len - 1]))
4756         path[len - 1] = '\0';
4757     }
4758
4759   do_spec_1 (path, 1, NULL);
4760   do_spec_1 (" ", 0, NULL);
4761
4762   /* Must not damage the original path.  */
4763   if (info->append_len == 0)
4764     path[len - 1] = save;
4765
4766   return NULL;
4767 }
4768
4769 /* Create a temporary FILE with the contents of ARGV. Add @FILE to the
4770    argument list. */
4771
4772 static void
4773 create_at_file (char **argv)
4774 {
4775   char *temp_file = make_temp_file ("");
4776   char *at_argument = concat ("@", temp_file, NULL);
4777   FILE *f = fopen (temp_file, "w");
4778   int status;
4779
4780   if (f == NULL)
4781     fatal_error (input_location, "could not open temporary response file %s",
4782                  temp_file);
4783
4784   status = writeargv (argv, f);
4785
4786   if (status)
4787     fatal_error (input_location,
4788                  "could not write to temporary response file %s",
4789                  temp_file);
4790
4791   status = fclose (f);
4792
4793   if (EOF == status)
4794     fatal_error (input_location, "could not close temporary response file %s",
4795                  temp_file);
4796
4797   store_arg (at_argument, 0, 0);
4798
4799   record_temp_file (temp_file, !save_temps_flag, !save_temps_flag);
4800 }
4801
4802 /* True if we should compile INFILE. */
4803
4804 static bool
4805 compile_input_file_p (struct infile *infile)
4806 {
4807   if ((!infile->language) || (infile->language[0] != '*'))
4808     if (infile->incompiler == input_file_compiler)
4809       return true;
4810   return false;
4811 }
4812
4813 /* Process each member of VEC as a spec.  */
4814
4815 static void
4816 do_specs_vec (vec<char_p> vec)
4817 {
4818   unsigned ix;
4819   char *opt;
4820
4821   FOR_EACH_VEC_ELT (vec, ix, opt)
4822     {
4823       do_spec_1 (opt, 1, NULL);
4824       /* Make each accumulated option a separate argument.  */
4825       do_spec_1 (" ", 0, NULL);
4826     }
4827 }
4828
4829 /* Process the sub-spec SPEC as a portion of a larger spec.
4830    This is like processing a whole spec except that we do
4831    not initialize at the beginning and we do not supply a
4832    newline by default at the end.
4833    INSWITCH nonzero means don't process %-sequences in SPEC;
4834    in this case, % is treated as an ordinary character.
4835    This is used while substituting switches.
4836    INSWITCH nonzero also causes SPC not to terminate an argument.
4837
4838    Value is zero unless a line was finished
4839    and the command on that line reported an error.  */
4840
4841 static int
4842 do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
4843 {
4844   const char *p = spec;
4845   int c;
4846   int i;
4847   int value;
4848
4849   /* If it's an empty string argument to a switch, keep it as is.  */
4850   if (inswitch && !*p)
4851     arg_going = 1;
4852
4853   while ((c = *p++))
4854     /* If substituting a switch, treat all chars like letters.
4855        Otherwise, NL, SPC, TAB and % are special.  */
4856     switch (inswitch ? 'a' : c)
4857       {
4858       case '\n':
4859         end_going_arg ();
4860
4861         if (argbuf.length () > 0
4862             && !strcmp (argbuf.last (), "|"))
4863           {
4864             /* A `|' before the newline means use a pipe here,
4865                but only if -pipe was specified.
4866                Otherwise, execute now and don't pass the `|' as an arg.  */
4867             if (use_pipes)
4868               {
4869                 input_from_pipe = 1;
4870                 break;
4871               }
4872             else
4873               argbuf.pop ();
4874           }
4875
4876         set_collect_gcc_options ();
4877
4878         if (argbuf.length () > 0)
4879           {
4880             value = execute ();
4881             if (value)
4882               return value;
4883           }
4884         /* Reinitialize for a new command, and for a new argument.  */
4885         clear_args ();
4886         arg_going = 0;
4887         delete_this_arg = 0;
4888         this_is_output_file = 0;
4889         this_is_library_file = 0;
4890         this_is_linker_script = 0;
4891         input_from_pipe = 0;
4892         break;
4893
4894       case '|':
4895         end_going_arg ();
4896
4897         /* Use pipe */
4898         obstack_1grow (&obstack, c);
4899         arg_going = 1;
4900         break;
4901
4902       case '\t':
4903       case ' ':
4904         end_going_arg ();
4905
4906         /* Reinitialize for a new argument.  */
4907         delete_this_arg = 0;
4908         this_is_output_file = 0;
4909         this_is_library_file = 0;
4910         this_is_linker_script = 0;
4911         break;
4912
4913       case '%':
4914         switch (c = *p++)
4915           {
4916           case 0:
4917             fatal_error (input_location, "spec %qs invalid", spec);
4918
4919           case 'b':
4920             if (save_temps_length)
4921               obstack_grow (&obstack, save_temps_prefix, save_temps_length);
4922             else
4923               obstack_grow (&obstack, input_basename, basename_length);
4924             if (compare_debug < 0)
4925               obstack_grow (&obstack, ".gk", 3);
4926             arg_going = 1;
4927             break;
4928
4929           case 'B':
4930             if (save_temps_length)
4931               obstack_grow (&obstack, save_temps_prefix, save_temps_length);
4932             else
4933               obstack_grow (&obstack, input_basename, suffixed_basename_length);
4934             if (compare_debug < 0)
4935               obstack_grow (&obstack, ".gk", 3);
4936             arg_going = 1;
4937             break;
4938
4939           case 'd':
4940             delete_this_arg = 2;
4941             break;
4942
4943           /* Dump out the directories specified with LIBRARY_PATH,
4944              followed by the absolute directories
4945              that we search for startfiles.  */
4946           case 'D':
4947             {
4948               struct spec_path_info info;
4949
4950               info.option = "-L";
4951               info.append_len = 0;
4952 #ifdef RELATIVE_PREFIX_NOT_LINKDIR
4953               /* Used on systems which record the specified -L dirs
4954                  and use them to search for dynamic linking.
4955                  Relative directories always come from -B,
4956                  and it is better not to use them for searching
4957                  at run time.  In particular, stage1 loses.  */
4958               info.omit_relative = true;
4959 #else
4960               info.omit_relative = false;
4961 #endif
4962               info.separate_options = false;
4963
4964               for_each_path (&startfile_prefixes, true, 0, spec_path, &info);
4965             }
4966             break;
4967
4968           case 'e':
4969             /* %efoo means report an error with `foo' as error message
4970                and don't execute any more commands for this file.  */
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               error ("%s", _(buf));
4980               return -1;
4981             }
4982             break;
4983           case 'n':
4984             /* %nfoo means report a notice with `foo' on stderr.  */
4985             {
4986               const char *q = p;
4987               char *buf;
4988               while (*p != 0 && *p != '\n')
4989                 p++;
4990               buf = (char *) alloca (p - q + 1);
4991               strncpy (buf, q, p - q);
4992               buf[p - q] = 0;
4993               inform (0, "%s", _(buf));
4994               if (*p)
4995                 p++;
4996             }
4997             break;
4998
4999           case 'j':
5000             {
5001               struct stat st;
5002
5003               /* If save_temps_flag is off, and the HOST_BIT_BUCKET is
5004                  defined, and it is not a directory, and it is
5005                  writable, use it.  Otherwise, treat this like any
5006                  other temporary file.  */
5007
5008               if ((!save_temps_flag)
5009                   && (stat (HOST_BIT_BUCKET, &st) == 0) && (!S_ISDIR (st.st_mode))
5010                   && (access (HOST_BIT_BUCKET, W_OK) == 0))
5011                 {
5012                   obstack_grow (&obstack, HOST_BIT_BUCKET,
5013                                 strlen (HOST_BIT_BUCKET));
5014                   delete_this_arg = 0;
5015                   arg_going = 1;
5016                   break;
5017                 }
5018             }
5019             goto create_temp_file;
5020           case '|':
5021             if (use_pipes)
5022               {
5023                 obstack_1grow (&obstack, '-');
5024                 delete_this_arg = 0;
5025                 arg_going = 1;
5026
5027                 /* consume suffix */
5028                 while (*p == '.' || ISALNUM ((unsigned char) *p))
5029                   p++;
5030                 if (p[0] == '%' && p[1] == 'O')
5031                   p += 2;
5032
5033                 break;
5034               }
5035             goto create_temp_file;
5036           case 'm':
5037             if (use_pipes)
5038               {
5039                 /* consume suffix */
5040                 while (*p == '.' || ISALNUM ((unsigned char) *p))
5041                   p++;
5042                 if (p[0] == '%' && p[1] == 'O')
5043                   p += 2;
5044
5045                 break;
5046               }
5047             goto create_temp_file;
5048           case 'g':
5049           case 'u':
5050           case 'U':
5051           create_temp_file:
5052               {
5053                 struct temp_name *t;
5054                 int suffix_length;
5055                 const char *suffix = p;
5056                 char *saved_suffix = NULL;
5057
5058                 while (*p == '.' || ISALNUM ((unsigned char) *p))
5059                   p++;
5060                 suffix_length = p - suffix;
5061                 if (p[0] == '%' && p[1] == 'O')
5062                   {
5063                     p += 2;
5064                     /* We don't support extra suffix characters after %O.  */
5065                     if (*p == '.' || ISALNUM ((unsigned char) *p))
5066                       fatal_error (input_location,
5067                                    "spec %qs has invalid %<%%0%c%>", spec, *p);
5068                     if (suffix_length == 0)
5069                       suffix = TARGET_OBJECT_SUFFIX;
5070                     else
5071                       {
5072                         saved_suffix
5073                           = XNEWVEC (char, suffix_length
5074                                      + strlen (TARGET_OBJECT_SUFFIX) + 1);
5075                         strncpy (saved_suffix, suffix, suffix_length);
5076                         strcpy (saved_suffix + suffix_length,
5077                                 TARGET_OBJECT_SUFFIX);
5078                       }
5079                     suffix_length += strlen (TARGET_OBJECT_SUFFIX);
5080                   }
5081
5082                 if (compare_debug < 0)
5083                   {
5084                     suffix = concat (".gk", suffix, NULL);
5085                     suffix_length += 3;
5086                   }
5087
5088                 /* If -save-temps=obj and -o were specified, use that for the
5089                    temp file.  */
5090                 if (save_temps_length)
5091                   {
5092                     char *tmp;
5093                     temp_filename_length
5094                       = save_temps_length + suffix_length + 1;
5095                     tmp = (char *) alloca (temp_filename_length);
5096                     memcpy (tmp, save_temps_prefix, save_temps_length);
5097                     memcpy (tmp + save_temps_length, suffix, suffix_length);
5098                     tmp[save_temps_length + suffix_length] = '\0';
5099                     temp_filename = save_string (tmp, save_temps_length
5100                                                       + suffix_length);
5101                     obstack_grow (&obstack, temp_filename,
5102                                   temp_filename_length);
5103                     arg_going = 1;
5104                     delete_this_arg = 0;
5105                     break;
5106                   }
5107
5108                 /* If the gcc_input_filename has the same suffix specified
5109                    for the %g, %u, or %U, and -save-temps is specified,
5110                    we could end up using that file as an intermediate
5111                    thus clobbering the user's source file (.e.g.,
5112                    gcc -save-temps foo.s would clobber foo.s with the
5113                    output of cpp0).  So check for this condition and
5114                    generate a temp file as the intermediate.  */
5115
5116                 if (save_temps_flag)
5117                   {
5118                     char *tmp;
5119                     temp_filename_length = basename_length + suffix_length + 1;
5120                     tmp = (char *) alloca (temp_filename_length);
5121                     memcpy (tmp, input_basename, basename_length);
5122                     memcpy (tmp + basename_length, suffix, suffix_length);
5123                     tmp[basename_length + suffix_length] = '\0';
5124                     temp_filename = tmp;
5125
5126                     if (filename_cmp (temp_filename, gcc_input_filename) != 0)
5127                       {
5128 #ifndef HOST_LACKS_INODE_NUMBERS
5129                         struct stat st_temp;
5130
5131                         /* Note, set_input() resets input_stat_set to 0.  */
5132                         if (input_stat_set == 0)
5133                           {
5134                             input_stat_set = stat (gcc_input_filename,
5135                                                    &input_stat);
5136                             if (input_stat_set >= 0)
5137                               input_stat_set = 1;
5138                           }
5139
5140                         /* If we have the stat for the gcc_input_filename
5141                            and we can do the stat for the temp_filename
5142                            then the they could still refer to the same
5143                            file if st_dev/st_ino's are the same.  */
5144                         if (input_stat_set != 1
5145                             || stat (temp_filename, &st_temp) < 0
5146                             || input_stat.st_dev != st_temp.st_dev
5147                             || input_stat.st_ino != st_temp.st_ino)
5148 #else
5149                         /* Just compare canonical pathnames.  */
5150                         char* input_realname = lrealpath (gcc_input_filename);
5151                         char* temp_realname = lrealpath (temp_filename);
5152                         bool files_differ = filename_cmp (input_realname, temp_realname);
5153                         free (input_realname);
5154                         free (temp_realname);
5155                         if (files_differ)
5156 #endif
5157                           {
5158                             temp_filename = save_string (temp_filename,
5159                                                          temp_filename_length + 1);
5160                             obstack_grow (&obstack, temp_filename,
5161                                                     temp_filename_length);
5162                             arg_going = 1;
5163                             delete_this_arg = 0;
5164                             break;
5165                           }
5166                       }
5167                   }
5168
5169                 /* See if we already have an association of %g/%u/%U and
5170                    suffix.  */
5171                 for (t = temp_names; t; t = t->next)
5172                   if (t->length == suffix_length
5173                       && strncmp (t->suffix, suffix, suffix_length) == 0
5174                       && t->unique == (c == 'u' || c == 'U' || c == 'j'))
5175                     break;
5176
5177                 /* Make a new association if needed.  %u and %j
5178                    require one.  */
5179                 if (t == 0 || c == 'u' || c == 'j')
5180                   {
5181                     if (t == 0)
5182                       {
5183                         t = XNEW (struct temp_name);
5184                         t->next = temp_names;
5185                         temp_names = t;
5186                       }
5187                     t->length = suffix_length;
5188                     if (saved_suffix)
5189                       {
5190                         t->suffix = saved_suffix;
5191                         saved_suffix = NULL;
5192                       }
5193                     else
5194                       t->suffix = save_string (suffix, suffix_length);
5195                     t->unique = (c == 'u' || c == 'U' || c == 'j');
5196                     temp_filename = make_temp_file (t->suffix);
5197                     temp_filename_length = strlen (temp_filename);
5198                     t->filename = temp_filename;
5199                     t->filename_length = temp_filename_length;
5200                   }
5201
5202                 free (saved_suffix);
5203
5204                 obstack_grow (&obstack, t->filename, t->filename_length);
5205                 delete_this_arg = 1;
5206               }
5207             arg_going = 1;
5208             break;
5209
5210           case 'i':
5211             if (combine_inputs)
5212               {
5213                 if (at_file_supplied)
5214                   {
5215                     /* We are going to expand `%i' to `@FILE', where FILE
5216                        is a newly-created temporary filename.  The filenames
5217                        that would usually be expanded in place of %o will be
5218                        written to the temporary file.  */
5219                     char **argv;
5220                     int n_files = 0;
5221                     int j;
5222
5223                     for (i = 0; i < n_infiles; i++)
5224                       if (compile_input_file_p (&infiles[i]))
5225                         n_files++;
5226
5227                     argv = (char **) alloca (sizeof (char *) * (n_files + 1));
5228
5229                     /* Copy the strings over.  */
5230                     for (i = 0, j = 0; i < n_infiles; i++)
5231                       if (compile_input_file_p (&infiles[i]))
5232                         {
5233                           argv[j] = CONST_CAST (char *, infiles[i].name);
5234                           infiles[i].compiled = true;
5235                           j++;
5236                         }
5237                     argv[j] = NULL;
5238
5239                     create_at_file (argv);
5240                   }
5241                 else
5242                   for (i = 0; (int) i < n_infiles; i++)
5243                     if (compile_input_file_p (&infiles[i]))
5244                       {
5245                         store_arg (infiles[i].name, 0, 0);
5246                         infiles[i].compiled = true;
5247                       }
5248               }
5249             else
5250               {
5251                 obstack_grow (&obstack, gcc_input_filename,
5252                               input_filename_length);
5253                 arg_going = 1;
5254               }
5255             break;
5256
5257           case 'I':
5258             {
5259               struct spec_path_info info;
5260
5261               if (multilib_dir)
5262                 {
5263                   do_spec_1 ("-imultilib", 1, NULL);
5264                   /* Make this a separate argument.  */
5265                   do_spec_1 (" ", 0, NULL);
5266                   do_spec_1 (multilib_dir, 1, NULL);
5267                   do_spec_1 (" ", 0, NULL);
5268                 }
5269
5270               if (multiarch_dir)
5271                 {
5272                   do_spec_1 ("-imultiarch", 1, NULL);
5273                   /* Make this a separate argument.  */
5274                   do_spec_1 (" ", 0, NULL);
5275                   do_spec_1 (multiarch_dir, 1, NULL);
5276                   do_spec_1 (" ", 0, NULL);
5277                 }
5278
5279               if (gcc_exec_prefix)
5280                 {
5281                   do_spec_1 ("-iprefix", 1, NULL);
5282                   /* Make this a separate argument.  */
5283                   do_spec_1 (" ", 0, NULL);
5284                   do_spec_1 (gcc_exec_prefix, 1, NULL);
5285                   do_spec_1 (" ", 0, NULL);
5286                 }
5287
5288               if (target_system_root_changed ||
5289                   (target_system_root && target_sysroot_hdrs_suffix))
5290                 {
5291                   do_spec_1 ("-isysroot", 1, NULL);
5292                   /* Make this a separate argument.  */
5293                   do_spec_1 (" ", 0, NULL);
5294                   do_spec_1 (target_system_root, 1, NULL);
5295                   if (target_sysroot_hdrs_suffix)
5296                     do_spec_1 (target_sysroot_hdrs_suffix, 1, NULL);
5297                   do_spec_1 (" ", 0, NULL);
5298                 }
5299
5300               info.option = "-isystem";
5301               info.append = "include";
5302               info.append_len = strlen (info.append);
5303               info.omit_relative = false;
5304               info.separate_options = true;
5305
5306               for_each_path (&include_prefixes, false, info.append_len,
5307                              spec_path, &info);
5308
5309               info.append = "include-fixed";
5310               if (*sysroot_hdrs_suffix_spec)
5311                 info.append = concat (info.append, dir_separator_str,
5312                                       multilib_dir, NULL);
5313               info.append_len = strlen (info.append);
5314               for_each_path (&include_prefixes, false, info.append_len,
5315                              spec_path, &info);
5316             }
5317             break;
5318
5319           case 'o':
5320             {
5321               int max = n_infiles;
5322               max += lang_specific_extra_outfiles;
5323
5324               if (HAVE_GNU_LD && at_file_supplied)
5325                 {
5326                   /* We are going to expand `%o' to `@FILE', where FILE
5327                      is a newly-created temporary filename.  The filenames
5328                      that would usually be expanded in place of %o will be
5329                      written to the temporary file.  */
5330
5331                   char **argv;
5332                   int n_files, j;
5333
5334                   /* Convert OUTFILES into a form suitable for writeargv.  */
5335
5336                   /* Determine how many are non-NULL.  */
5337                   for (n_files = 0, i = 0; i < max; i++)
5338                     n_files += outfiles[i] != NULL;
5339
5340                   argv = (char **) alloca (sizeof (char *) * (n_files + 1));
5341
5342                   /* Copy the strings over.  */
5343                   for (i = 0, j = 0; i < max; i++)
5344                     if (outfiles[i])
5345                       {
5346                         argv[j] = CONST_CAST (char *, outfiles[i]);
5347                         j++;
5348                       }
5349                   argv[j] = NULL;
5350
5351                   create_at_file (argv);
5352                 }
5353               else
5354                 for (i = 0; i < max; i++)
5355                   if (outfiles[i])
5356                     store_arg (outfiles[i], 0, 0);
5357               break;
5358             }
5359
5360           case 'O':
5361             obstack_grow (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX));
5362             arg_going = 1;
5363             break;
5364
5365           case 's':
5366             this_is_library_file = 1;
5367             break;
5368
5369           case 'T':
5370             this_is_linker_script = 1;
5371             break;
5372
5373           case 'V':
5374             outfiles[input_file_number] = NULL;
5375             break;
5376
5377           case 'w':
5378             this_is_output_file = 1;
5379             break;
5380
5381           case 'W':
5382             {
5383               unsigned int cur_index = argbuf.length ();
5384               /* Handle the {...} following the %W.  */
5385               if (*p != '{')
5386                 fatal_error (input_location,
5387                              "spec %qs has invalid %<%%W%c%>", spec, *p);
5388               p = handle_braces (p + 1);
5389               if (p == 0)
5390                 return -1;
5391               end_going_arg ();
5392               /* If any args were output, mark the last one for deletion
5393                  on failure.  */
5394               if (argbuf.length () != cur_index)
5395                 record_temp_file (argbuf.last (), 0, 1);
5396               break;
5397             }
5398
5399           /* %x{OPTION} records OPTION for %X to output.  */
5400           case 'x':
5401             {
5402               const char *p1 = p;
5403               char *string;
5404               char *opt;
5405               unsigned ix;
5406
5407               /* Skip past the option value and make a copy.  */
5408               if (*p != '{')
5409                 fatal_error (input_location,
5410                              "spec %qs has invalid %<%%x%c%>", spec, *p);
5411               while (*p++ != '}')
5412                 ;
5413               string = save_string (p1 + 1, p - p1 - 2);
5414
5415               /* See if we already recorded this option.  */
5416               FOR_EACH_VEC_ELT (linker_options, ix, opt)
5417                 if (! strcmp (string, opt))
5418                   {
5419                     free (string);
5420                     return 0;
5421                   }
5422
5423               /* This option is new; add it.  */
5424               add_linker_option (string, strlen (string));
5425               free (string);
5426             }
5427             break;
5428
5429           /* Dump out the options accumulated previously using %x.  */
5430           case 'X':
5431             do_specs_vec (linker_options);
5432             break;
5433
5434           /* Dump out the options accumulated previously using -Wa,.  */
5435           case 'Y':
5436             do_specs_vec (assembler_options);
5437             break;
5438
5439           /* Dump out the options accumulated previously using -Wp,.  */
5440           case 'Z':
5441             do_specs_vec (preprocessor_options);
5442             break;
5443
5444             /* Here are digits and numbers that just process
5445                a certain constant string as a spec.  */
5446
5447           case '1':
5448             value = do_spec_1 (cc1_spec, 0, NULL);
5449             if (value != 0)
5450               return value;
5451             break;
5452
5453           case '2':
5454             value = do_spec_1 (cc1plus_spec, 0, NULL);
5455             if (value != 0)
5456               return value;
5457             break;
5458
5459           case 'a':
5460             value = do_spec_1 (asm_spec, 0, NULL);
5461             if (value != 0)
5462               return value;
5463             break;
5464
5465           case 'A':
5466             value = do_spec_1 (asm_final_spec, 0, NULL);
5467             if (value != 0)
5468               return value;
5469             break;
5470
5471           case 'C':
5472             {
5473               const char *const spec
5474                 = (input_file_compiler->cpp_spec
5475                    ? input_file_compiler->cpp_spec
5476                    : cpp_spec);
5477               value = do_spec_1 (spec, 0, NULL);
5478               if (value != 0)
5479                 return value;
5480             }
5481             break;
5482
5483           case 'E':
5484             value = do_spec_1 (endfile_spec, 0, NULL);
5485             if (value != 0)
5486               return value;
5487             break;
5488
5489           case 'l':
5490             value = do_spec_1 (link_spec, 0, NULL);
5491             if (value != 0)
5492               return value;
5493             break;
5494
5495           case 'L':
5496             value = do_spec_1 (lib_spec, 0, NULL);
5497             if (value != 0)
5498               return value;
5499             break;
5500
5501           case 'M':
5502             if (multilib_os_dir == NULL)
5503               obstack_1grow (&obstack, '.');
5504             else
5505               obstack_grow (&obstack, multilib_os_dir,
5506                             strlen (multilib_os_dir));
5507             break;
5508
5509           case 'G':
5510             value = do_spec_1 (libgcc_spec, 0, NULL);
5511             if (value != 0)
5512               return value;
5513             break;
5514
5515           case 'R':
5516             /* We assume there is a directory
5517                separator at the end of this string.  */
5518             if (target_system_root)
5519               {
5520                 obstack_grow (&obstack, target_system_root,
5521                               strlen (target_system_root));
5522                 if (target_sysroot_suffix)
5523                   obstack_grow (&obstack, target_sysroot_suffix,
5524                                 strlen (target_sysroot_suffix));
5525               }
5526             break;
5527
5528           case 'S':
5529             value = do_spec_1 (startfile_spec, 0, NULL);
5530             if (value != 0)
5531               return value;
5532             break;
5533
5534             /* Here we define characters other than letters and digits.  */
5535
5536           case '{':
5537             p = handle_braces (p);
5538             if (p == 0)
5539               return -1;
5540             break;
5541
5542           case ':':
5543             p = handle_spec_function (p, NULL);
5544             if (p == 0)
5545               return -1;
5546             break;
5547
5548           case '%':
5549             obstack_1grow (&obstack, '%');
5550             break;
5551
5552           case '.':
5553             {
5554               unsigned len = 0;
5555
5556               while (p[len] && p[len] != ' ' && p[len] != '%')
5557                 len++;
5558               suffix_subst = save_string (p - 1, len + 1);
5559               p += len;
5560             }
5561            break;
5562
5563            /* Henceforth ignore the option(s) matching the pattern
5564               after the %<.  */
5565           case '<':
5566           case '>':
5567             {
5568               unsigned len = 0;
5569               int have_wildcard = 0;
5570               int i;
5571               int switch_option;
5572
5573               if (c == '>')
5574                 switch_option = SWITCH_IGNORE | SWITCH_KEEP_FOR_GCC;
5575               else
5576                 switch_option = SWITCH_IGNORE;
5577
5578               while (p[len] && p[len] != ' ' && p[len] != '\t')
5579                 len++;
5580
5581               if (p[len-1] == '*')
5582                 have_wildcard = 1;
5583
5584               for (i = 0; i < n_switches; i++)
5585                 if (!strncmp (switches[i].part1, p, len - have_wildcard)
5586                     && (have_wildcard || switches[i].part1[len] == '\0'))
5587                   {
5588                     switches[i].live_cond |= switch_option;
5589                     /* User switch be validated from validate_all_switches.
5590                        when the definition is seen from the spec file.
5591                        If not defined anywhere, will be rejected.  */
5592                     if (switches[i].known)
5593                       switches[i].validated = true;
5594                   }
5595
5596               p += len;
5597             }
5598             break;
5599
5600           case '*':
5601             if (soft_matched_part)
5602               {
5603                 if (soft_matched_part[0])
5604                   do_spec_1 (soft_matched_part, 1, NULL);
5605                 /* Only insert a space after the substitution if it is at the
5606                    end of the current sequence.  So if:
5607
5608                      "%{foo=*:bar%*}%{foo=*:one%*two}"
5609
5610                    matches -foo=hello then it will produce:
5611                    
5612                      barhello onehellotwo
5613                 */
5614                 if (*p == 0 || *p == '}')
5615                   do_spec_1 (" ", 0, NULL);
5616               }
5617             else
5618               /* Catch the case where a spec string contains something like
5619                  '%{foo:%*}'.  i.e. there is no * in the pattern on the left
5620                  hand side of the :.  */
5621               error ("spec failure: %<%%*%> has not been initialized by pattern match");
5622             break;
5623
5624             /* Process a string found as the value of a spec given by name.
5625                This feature allows individual machine descriptions
5626                to add and use their own specs.  */
5627           case '(':
5628             {
5629               const char *name = p;
5630               struct spec_list *sl;
5631               int len;
5632
5633               /* The string after the S/P is the name of a spec that is to be
5634                  processed.  */
5635               while (*p && *p != ')')
5636                 p++;
5637
5638               /* See if it's in the list.  */
5639               for (len = p - name, sl = specs; sl; sl = sl->next)
5640                 if (sl->name_len == len && !strncmp (sl->name, name, len))
5641                   {
5642                     name = *(sl->ptr_spec);
5643 #ifdef DEBUG_SPECS
5644                     fnotice (stderr, "Processing spec (%s), which is '%s'\n",
5645                              sl->name, name);
5646 #endif
5647                     break;
5648                   }
5649
5650               if (sl)
5651                 {
5652                   value = do_spec_1 (name, 0, NULL);
5653                   if (value != 0)
5654                     return value;
5655                 }
5656
5657               /* Discard the closing paren.  */
5658               if (*p)
5659                 p++;
5660             }
5661             break;
5662
5663           default:
5664             error ("spec failure: unrecognized spec option %qc", c);
5665             break;
5666           }
5667         break;
5668
5669       case '\\':
5670         /* Backslash: treat next character as ordinary.  */
5671         c = *p++;
5672
5673         /* Fall through.  */
5674       default:
5675         /* Ordinary character: put it into the current argument.  */
5676         obstack_1grow (&obstack, c);
5677         arg_going = 1;
5678       }
5679
5680   /* End of string.  If we are processing a spec function, we need to
5681      end any pending argument.  */
5682   if (processing_spec_function)
5683     end_going_arg ();
5684
5685   return 0;
5686 }
5687
5688 /* Look up a spec function.  */
5689
5690 static const struct spec_function *
5691 lookup_spec_function (const char *name)
5692 {
5693   const struct spec_function *sf;
5694
5695   for (sf = static_spec_functions; sf->name != NULL; sf++)
5696     if (strcmp (sf->name, name) == 0)
5697       return sf;
5698
5699   return NULL;
5700 }
5701
5702 /* Evaluate a spec function.  */
5703
5704 static const char *
5705 eval_spec_function (const char *func, const char *args)
5706 {
5707   const struct spec_function *sf;
5708   const char *funcval;
5709
5710   /* Saved spec processing context.  */
5711   vec<const_char_p> save_argbuf;
5712
5713   int save_arg_going;
5714   int save_delete_this_arg;
5715   int save_this_is_output_file;
5716   int save_this_is_library_file;
5717   int save_input_from_pipe;
5718   int save_this_is_linker_script;
5719   const char *save_suffix_subst;
5720
5721   int save_growing_size;
5722   void *save_growing_value = NULL;
5723
5724   sf = lookup_spec_function (func);
5725   if (sf == NULL)
5726     fatal_error (input_location, "unknown spec function %qs", func);
5727
5728   /* Push the spec processing context.  */
5729   save_argbuf = argbuf;
5730
5731   save_arg_going = arg_going;
5732   save_delete_this_arg = delete_this_arg;
5733   save_this_is_output_file = this_is_output_file;
5734   save_this_is_library_file = this_is_library_file;
5735   save_this_is_linker_script = this_is_linker_script;
5736   save_input_from_pipe = input_from_pipe;
5737   save_suffix_subst = suffix_subst;
5738
5739   /* If we have some object growing now, finalize it so the args and function
5740      eval proceed from a cleared context.  This is needed to prevent the first
5741      constructed arg from mistakenly including the growing value.  We'll push
5742      this value back on the obstack once the function evaluation is done, to
5743      restore a consistent processing context for our caller.  This is fine as
5744      the address of growing objects isn't guaranteed to remain stable until
5745      they are finalized, and we expect this situation to be rare enough for
5746      the extra copy not to be an issue.  */
5747   save_growing_size = obstack_object_size (&obstack);
5748   if (save_growing_size > 0)
5749     save_growing_value = obstack_finish (&obstack);
5750
5751   /* Create a new spec processing context, and build the function
5752      arguments.  */
5753
5754   alloc_args ();
5755   if (do_spec_2 (args) < 0)
5756     fatal_error (input_location, "error in args to spec function %qs", func);
5757
5758   /* argbuf_index is an index for the next argument to be inserted, and
5759      so contains the count of the args already inserted.  */
5760
5761   funcval = (*sf->func) (argbuf.length (),
5762                          argbuf.address ());
5763
5764   /* Pop the spec processing context.  */
5765   argbuf.release ();
5766   argbuf = save_argbuf;
5767
5768   arg_going = save_arg_going;
5769   delete_this_arg = save_delete_this_arg;
5770   this_is_output_file = save_this_is_output_file;
5771   this_is_library_file = save_this_is_library_file;
5772   this_is_linker_script = save_this_is_linker_script;
5773   input_from_pipe = save_input_from_pipe;
5774   suffix_subst = save_suffix_subst;
5775
5776   if (save_growing_size > 0)
5777     obstack_grow (&obstack, save_growing_value, save_growing_size);
5778
5779   return funcval;
5780 }
5781
5782 /* Handle a spec function call of the form:
5783
5784    %:function(args)
5785
5786    ARGS is processed as a spec in a separate context and split into an
5787    argument vector in the normal fashion.  The function returns a string
5788    containing a spec which we then process in the caller's context, or
5789    NULL if no processing is required.
5790
5791    If RETVAL_NONNULL is not NULL, then store a bool whether function
5792    returned non-NULL.  */
5793
5794 static const char *
5795 handle_spec_function (const char *p, bool *retval_nonnull)
5796 {
5797   char *func, *args;
5798   const char *endp, *funcval;
5799   int count;
5800
5801   processing_spec_function++;
5802
5803   /* Get the function name.  */
5804   for (endp = p; *endp != '\0'; endp++)
5805     {
5806       if (*endp == '(')         /* ) */
5807         break;
5808       /* Only allow [A-Za-z0-9], -, and _ in function names.  */
5809       if (!ISALNUM (*endp) && !(*endp == '-' || *endp == '_'))
5810         fatal_error (input_location, "malformed spec function name");
5811     }
5812   if (*endp != '(')             /* ) */
5813     fatal_error (input_location, "no arguments for spec function");
5814   func = save_string (p, endp - p);
5815   p = ++endp;
5816
5817   /* Get the arguments.  */
5818   for (count = 0; *endp != '\0'; endp++)
5819     {
5820       /* ( */
5821       if (*endp == ')')
5822         {
5823           if (count == 0)
5824             break;
5825           count--;
5826         }
5827       else if (*endp == '(')    /* ) */
5828         count++;
5829     }
5830   /* ( */
5831   if (*endp != ')')
5832     fatal_error (input_location, "malformed spec function arguments");
5833   args = save_string (p, endp - p);
5834   p = ++endp;
5835
5836   /* p now points to just past the end of the spec function expression.  */
5837
5838   funcval = eval_spec_function (func, args);
5839   if (funcval != NULL && do_spec_1 (funcval, 0, NULL) < 0)
5840     p = NULL;
5841   if (retval_nonnull)
5842     *retval_nonnull = funcval != NULL;
5843
5844   free (func);
5845   free (args);
5846
5847   processing_spec_function--;
5848
5849   return p;
5850 }
5851
5852 /* Inline subroutine of handle_braces.  Returns true if the current
5853    input suffix matches the atom bracketed by ATOM and END_ATOM.  */
5854 static inline bool
5855 input_suffix_matches (const char *atom, const char *end_atom)
5856 {
5857   return (input_suffix
5858           && !strncmp (input_suffix, atom, end_atom - atom)
5859           && input_suffix[end_atom - atom] == '\0');
5860 }
5861
5862 /* Subroutine of handle_braces.  Returns true if the current
5863    input file's spec name matches the atom bracketed by ATOM and END_ATOM.  */
5864 static bool
5865 input_spec_matches (const char *atom, const char *end_atom)
5866 {
5867   return (input_file_compiler
5868           && input_file_compiler->suffix
5869           && input_file_compiler->suffix[0] != '\0'
5870           && !strncmp (input_file_compiler->suffix + 1, atom,
5871                        end_atom - atom)
5872           && input_file_compiler->suffix[end_atom - atom + 1] == '\0');
5873 }
5874
5875 /* Subroutine of handle_braces.  Returns true if a switch
5876    matching the atom bracketed by ATOM and END_ATOM appeared on the
5877    command line.  */
5878 static bool
5879 switch_matches (const char *atom, const char *end_atom, int starred)
5880 {
5881   int i;
5882   int len = end_atom - atom;
5883   int plen = starred ? len : -1;
5884
5885   for (i = 0; i < n_switches; i++)
5886     if (!strncmp (switches[i].part1, atom, len)
5887         && (starred || switches[i].part1[len] == '\0')
5888         && check_live_switch (i, plen))
5889       return true;
5890
5891     /* Check if a switch with separated form matching the atom.
5892        We check -D and -U switches. */
5893     else if (switches[i].args != 0)
5894       {
5895         if ((*switches[i].part1 == 'D' || *switches[i].part1 == 'U')
5896             && *switches[i].part1 == atom[0])
5897           {
5898             if (!strncmp (switches[i].args[0], &atom[1], len - 1)
5899                 && (starred || (switches[i].part1[1] == '\0'
5900                                 && switches[i].args[0][len - 1] == '\0'))
5901                 && check_live_switch (i, (starred ? 1 : -1)))
5902               return true;
5903           }
5904       }
5905
5906   return false;
5907 }
5908
5909 /* Inline subroutine of handle_braces.  Mark all of the switches which
5910    match ATOM (extends to END_ATOM; STARRED indicates whether there
5911    was a star after the atom) for later processing.  */
5912 static inline void
5913 mark_matching_switches (const char *atom, const char *end_atom, int starred)
5914 {
5915   int i;
5916   int len = end_atom - atom;
5917   int plen = starred ? len : -1;
5918
5919   for (i = 0; i < n_switches; i++)
5920     if (!strncmp (switches[i].part1, atom, len)
5921         && (starred || switches[i].part1[len] == '\0')
5922         && check_live_switch (i, plen))
5923       switches[i].ordering = 1;
5924 }
5925
5926 /* Inline subroutine of handle_braces.  Process all the currently
5927    marked switches through give_switch, and clear the marks.  */
5928 static inline void
5929 process_marked_switches (void)
5930 {
5931   int i;
5932
5933   for (i = 0; i < n_switches; i++)
5934     if (switches[i].ordering == 1)
5935       {
5936         switches[i].ordering = 0;
5937         give_switch (i, 0);
5938       }
5939 }
5940
5941 /* Handle a %{ ... } construct.  P points just inside the leading {.
5942    Returns a pointer one past the end of the brace block, or 0
5943    if we call do_spec_1 and that returns -1.  */
5944
5945 static const char *
5946 handle_braces (const char *p)
5947 {
5948   const char *atom, *end_atom;
5949   const char *d_atom = NULL, *d_end_atom = NULL;
5950   const char *orig = p;
5951
5952   bool a_is_suffix;
5953   bool a_is_spectype;
5954   bool a_is_starred;
5955   bool a_is_negated;
5956   bool a_matched;
5957
5958   bool a_must_be_last = false;
5959   bool ordered_set    = false;
5960   bool disjunct_set   = false;
5961   bool disj_matched   = false;
5962   bool disj_starred   = true;
5963   bool n_way_choice   = false;
5964   bool n_way_matched  = false;
5965
5966 #define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0)
5967
5968   do
5969     {
5970       if (a_must_be_last)
5971         goto invalid;
5972
5973       /* Scan one "atom" (S in the description above of %{}, possibly
5974          with '!', '.', '@', ',', or '*' modifiers).  */
5975       a_matched = false;
5976       a_is_suffix = false;
5977       a_is_starred = false;
5978       a_is_negated = false;
5979       a_is_spectype = false;
5980
5981       SKIP_WHITE ();
5982       if (*p == '!')
5983         p++, a_is_negated = true;
5984
5985       SKIP_WHITE ();
5986       if (*p == '%' && p[1] == ':')
5987         {
5988           atom = NULL;
5989           end_atom = NULL;
5990           p = handle_spec_function (p + 2, &a_matched);
5991         }
5992       else
5993         {
5994           if (*p == '.')
5995             p++, a_is_suffix = true;
5996           else if (*p == ',')
5997             p++, a_is_spectype = true;
5998
5999           atom = p;
6000           while (ISIDNUM (*p) || *p == '-' || *p == '+' || *p == '='
6001                  || *p == ',' || *p == '.' || *p == '@')
6002             p++;
6003           end_atom = p;
6004
6005           if (*p == '*')
6006             p++, a_is_starred = 1;
6007         }
6008
6009       SKIP_WHITE ();
6010       switch (*p)
6011         {
6012         case '&': case '}':
6013           /* Substitute the switch(es) indicated by the current atom.  */
6014           ordered_set = true;
6015           if (disjunct_set || n_way_choice || a_is_negated || a_is_suffix
6016               || a_is_spectype || atom == end_atom)
6017             goto invalid;
6018
6019           mark_matching_switches (atom, end_atom, a_is_starred);
6020
6021           if (*p == '}')
6022             process_marked_switches ();
6023           break;
6024
6025         case '|': case ':':
6026           /* Substitute some text if the current atom appears as a switch
6027              or suffix.  */
6028           disjunct_set = true;
6029           if (ordered_set)
6030             goto invalid;
6031
6032           if (atom && atom == end_atom)
6033             {
6034               if (!n_way_choice || disj_matched || *p == '|'
6035                   || a_is_negated || a_is_suffix || a_is_spectype
6036                   || a_is_starred)
6037                 goto invalid;
6038
6039               /* An empty term may appear as the last choice of an
6040                  N-way choice set; it means "otherwise".  */
6041               a_must_be_last = true;
6042               disj_matched = !n_way_matched;
6043               disj_starred = false;
6044             }
6045           else
6046             {
6047               if ((a_is_suffix || a_is_spectype) && a_is_starred)
6048                 goto invalid;
6049
6050               if (!a_is_starred)
6051                 disj_starred = false;
6052
6053               /* Don't bother testing this atom if we already have a
6054                  match.  */
6055               if (!disj_matched && !n_way_matched)
6056                 {
6057                   if (atom == NULL)
6058                     /* a_matched is already set by handle_spec_function.  */;
6059                   else if (a_is_suffix)
6060                     a_matched = input_suffix_matches (atom, end_atom);
6061                   else if (a_is_spectype)
6062                     a_matched = input_spec_matches (atom, end_atom);
6063                   else
6064                     a_matched = switch_matches (atom, end_atom, a_is_starred);
6065
6066                   if (a_matched != a_is_negated)
6067                     {
6068                       disj_matched = true;
6069                       d_atom = atom;
6070                       d_end_atom = end_atom;
6071                     }
6072                 }
6073             }
6074
6075           if (*p == ':')
6076             {
6077               /* Found the body, that is, the text to substitute if the
6078                  current disjunction matches.  */
6079               p = process_brace_body (p + 1, d_atom, d_end_atom, disj_starred,
6080                                       disj_matched && !n_way_matched);
6081               if (p == 0)
6082                 return 0;
6083
6084               /* If we have an N-way choice, reset state for the next
6085                  disjunction.  */
6086               if (*p == ';')
6087                 {
6088                   n_way_choice = true;
6089                   n_way_matched |= disj_matched;
6090                   disj_matched = false;
6091                   disj_starred = true;
6092                   d_atom = d_end_atom = NULL;
6093                 }
6094             }
6095           break;
6096
6097         default:
6098           goto invalid;
6099         }
6100     }
6101   while (*p++ != '}');
6102
6103   return p;
6104
6105  invalid:
6106   fatal_error (input_location, "braced spec %qs is invalid at %qc", orig, *p);
6107
6108 #undef SKIP_WHITE
6109 }
6110
6111 /* Subroutine of handle_braces.  Scan and process a brace substitution body
6112    (X in the description of %{} syntax).  P points one past the colon;
6113    ATOM and END_ATOM bracket the first atom which was found to be true
6114    (present) in the current disjunction; STARRED indicates whether all
6115    the atoms in the current disjunction were starred (for syntax validation);
6116    MATCHED indicates whether the disjunction matched or not, and therefore
6117    whether or not the body is to be processed through do_spec_1 or just
6118    skipped.  Returns a pointer to the closing } or ;, or 0 if do_spec_1
6119    returns -1.  */
6120
6121 static const char *
6122 process_brace_body (const char *p, const char *atom, const char *end_atom,
6123                     int starred, int matched)
6124 {
6125   const char *body, *end_body;
6126   unsigned int nesting_level;
6127   bool have_subst     = false;
6128
6129   /* Locate the closing } or ;, honoring nested braces.
6130      Trim trailing whitespace.  */
6131   body = p;
6132   nesting_level = 1;
6133   for (;;)
6134     {
6135       if (*p == '{')
6136         nesting_level++;
6137       else if (*p == '}')
6138         {
6139           if (!--nesting_level)
6140             break;
6141         }
6142       else if (*p == ';' && nesting_level == 1)
6143         break;
6144       else if (*p == '%' && p[1] == '*' && nesting_level == 1)
6145         have_subst = true;
6146       else if (*p == '\0')
6147         goto invalid;
6148       p++;
6149     }
6150
6151   end_body = p;
6152   while (end_body[-1] == ' ' || end_body[-1] == '\t')
6153     end_body--;
6154
6155   if (have_subst && !starred)
6156     goto invalid;
6157
6158   if (matched)
6159     {
6160       /* Copy the substitution body to permanent storage and execute it.
6161          If have_subst is false, this is a simple matter of running the
6162          body through do_spec_1...  */
6163       char *string = save_string (body, end_body - body);
6164       if (!have_subst)
6165         {
6166           if (do_spec_1 (string, 0, NULL) < 0)
6167             return 0;
6168         }
6169       else
6170         {
6171           /* ... but if have_subst is true, we have to process the
6172              body once for each matching switch, with %* set to the
6173              variant part of the switch.  */
6174           unsigned int hard_match_len = end_atom - atom;
6175           int i;
6176
6177           for (i = 0; i < n_switches; i++)
6178             if (!strncmp (switches[i].part1, atom, hard_match_len)
6179                 && check_live_switch (i, hard_match_len))
6180               {
6181                 if (do_spec_1 (string, 0,
6182                                &switches[i].part1[hard_match_len]) < 0)
6183                   return 0;
6184                 /* Pass any arguments this switch has.  */
6185                 give_switch (i, 1);
6186                 suffix_subst = NULL;
6187               }
6188         }
6189     }
6190
6191   return p;
6192
6193  invalid:
6194   fatal_error (input_location, "braced spec body %qs is invalid", body);
6195 }
6196 \f
6197 /* Return 0 iff switch number SWITCHNUM is obsoleted by a later switch
6198    on the command line.  PREFIX_LENGTH is the length of XXX in an {XXX*}
6199    spec, or -1 if either exact match or %* is used.
6200
6201    A -O switch is obsoleted by a later -O switch.  A -f, -g, -m, or -W switch
6202    whose value does not begin with "no-" is obsoleted by the same value
6203    with the "no-", similarly for a switch with the "no-" prefix.  */
6204
6205 static int
6206 check_live_switch (int switchnum, int prefix_length)
6207 {
6208   const char *name = switches[switchnum].part1;
6209   int i;
6210
6211   /* If we already processed this switch and determined if it was
6212      live or not, return our past determination.  */
6213   if (switches[switchnum].live_cond != 0)
6214     return ((switches[switchnum].live_cond & SWITCH_LIVE) != 0
6215             && (switches[switchnum].live_cond & SWITCH_FALSE) == 0
6216             && (switches[switchnum].live_cond & SWITCH_IGNORE_PERMANENTLY)
6217                == 0);
6218
6219   /* In the common case of {<at-most-one-letter>*}, a negating
6220      switch would always match, so ignore that case.  We will just
6221      send the conflicting switches to the compiler phase.  */
6222   if (prefix_length >= 0 && prefix_length <= 1)
6223     return 1;
6224
6225   /* Now search for duplicate in a manner that depends on the name.  */
6226   switch (*name)
6227     {
6228     case 'O':
6229       for (i = switchnum + 1; i < n_switches; i++)
6230         if (switches[i].part1[0] == 'O')
6231           {
6232             switches[switchnum].validated = true;
6233             switches[switchnum].live_cond = SWITCH_FALSE;
6234             return 0;
6235           }
6236       break;
6237
6238     case 'W':  case 'f':  case 'm': case 'g':
6239       if (! strncmp (name + 1, "no-", 3))
6240         {
6241           /* We have Xno-YYY, search for XYYY.  */
6242           for (i = switchnum + 1; i < n_switches; i++)
6243             if (switches[i].part1[0] == name[0]
6244                 && ! strcmp (&switches[i].part1[1], &name[4]))
6245               {
6246                 /* --specs are validated with the validate_switches mechanism.  */
6247                 if (switches[switchnum].known)
6248                   switches[switchnum].validated = true;
6249                 switches[switchnum].live_cond = SWITCH_FALSE;
6250                 return 0;
6251               }
6252         }
6253       else
6254         {
6255           /* We have XYYY, search for Xno-YYY.  */
6256           for (i = switchnum + 1; i < n_switches; i++)
6257             if (switches[i].part1[0] == name[0]
6258                 && switches[i].part1[1] == 'n'
6259                 && switches[i].part1[2] == 'o'
6260                 && switches[i].part1[3] == '-'
6261                 && !strcmp (&switches[i].part1[4], &name[1]))
6262               {
6263                 /* --specs are validated with the validate_switches mechanism.  */
6264                 if (switches[switchnum].known)
6265                   switches[switchnum].validated = true;
6266                 switches[switchnum].live_cond = SWITCH_FALSE;
6267                 return 0;
6268               }
6269         }
6270       break;
6271     }
6272
6273   /* Otherwise the switch is live.  */
6274   switches[switchnum].live_cond |= SWITCH_LIVE;
6275   return 1;
6276 }
6277 \f
6278 /* Pass a switch to the current accumulating command
6279    in the same form that we received it.
6280    SWITCHNUM identifies the switch; it is an index into
6281    the vector of switches gcc received, which is `switches'.
6282    This cannot fail since it never finishes a command line.
6283
6284    If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument.  */
6285
6286 static void
6287 give_switch (int switchnum, int omit_first_word)
6288 {
6289   if ((switches[switchnum].live_cond & SWITCH_IGNORE) != 0)
6290     return;
6291
6292   if (!omit_first_word)
6293     {
6294       do_spec_1 ("-", 0, NULL);
6295       do_spec_1 (switches[switchnum].part1, 1, NULL);
6296     }
6297
6298   if (switches[switchnum].args != 0)
6299     {
6300       const char **p;
6301       for (p = switches[switchnum].args; *p; p++)
6302         {
6303           const char *arg = *p;
6304
6305           do_spec_1 (" ", 0, NULL);
6306           if (suffix_subst)
6307             {
6308               unsigned length = strlen (arg);
6309               int dot = 0;
6310
6311               while (length-- && !IS_DIR_SEPARATOR (arg[length]))
6312                 if (arg[length] == '.')
6313                   {
6314                     (CONST_CAST (char *, arg))[length] = 0;
6315                     dot = 1;
6316                     break;
6317                   }
6318               do_spec_1 (arg, 1, NULL);
6319               if (dot)
6320                 (CONST_CAST (char *, arg))[length] = '.';
6321               do_spec_1 (suffix_subst, 1, NULL);
6322             }
6323           else
6324             do_spec_1 (arg, 1, NULL);
6325         }
6326     }
6327
6328   do_spec_1 (" ", 0, NULL);
6329   switches[switchnum].validated = true;
6330 }
6331 \f
6332 /* Print GCC configuration (e.g. version, thread model, target,
6333    configuration_arguments) to a given FILE.  */
6334
6335 static void
6336 print_configuration (FILE *file)
6337 {
6338   int n;
6339   const char *thrmod;
6340
6341   fnotice (file, "Target: %s\n", spec_machine);
6342   fnotice (file, "Configured with: %s\n", configuration_arguments);
6343
6344 #ifdef THREAD_MODEL_SPEC
6345   /* We could have defined THREAD_MODEL_SPEC to "%*" by default,
6346   but there's no point in doing all this processing just to get
6347   thread_model back.  */
6348   obstack_init (&obstack);
6349   do_spec_1 (THREAD_MODEL_SPEC, 0, thread_model);
6350   obstack_1grow (&obstack, '\0');
6351   thrmod = XOBFINISH (&obstack, const char *);
6352 #else
6353   thrmod = thread_model;
6354 #endif
6355
6356   fnotice (file, "Thread model: %s\n", thrmod);
6357
6358   /* compiler_version is truncated at the first space when initialized
6359   from version string, so truncate version_string at the first space
6360   before comparing.  */
6361   for (n = 0; version_string[n]; n++)
6362     if (version_string[n] == ' ')
6363       break;
6364
6365   if (! strncmp (version_string, compiler_version, n)
6366       && compiler_version[n] == 0)
6367     fnotice (file, "gcc version %s %s\n", version_string,
6368              pkgversion_string);
6369   else
6370     fnotice (file, "gcc driver version %s %sexecuting gcc version %s\n",
6371              version_string, pkgversion_string, compiler_version);
6372
6373 }
6374
6375 #define RETRY_ICE_ATTEMPTS 3
6376
6377 /* Returns true if FILE1 and FILE2 contain equivalent data, 0 otherwise.  */
6378
6379 static bool
6380 files_equal_p (char *file1, char *file2)
6381 {
6382   struct stat st1, st2;
6383   off_t n, len;
6384   int fd1, fd2;
6385   const int bufsize = 8192;
6386   char *buf = XNEWVEC (char, bufsize);
6387
6388   fd1 = open (file1, O_RDONLY);
6389   fd2 = open (file2, O_RDONLY);
6390
6391   if (fd1 < 0 || fd2 < 0)
6392     goto error;
6393
6394   if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0)
6395     goto error;
6396
6397   if (st1.st_size != st2.st_size)
6398     goto error;
6399
6400   for (n = st1.st_size; n; n -= len)
6401     {
6402       len = n;
6403       if ((int) len > bufsize / 2)
6404         len = bufsize / 2;
6405
6406       if (read (fd1, buf, len) != (int) len
6407           || read (fd2, buf + bufsize / 2, len) != (int) len)
6408         {
6409           goto error;
6410         }
6411
6412       if (memcmp (buf, buf + bufsize / 2, len) != 0)
6413         goto error;
6414     }
6415
6416   free (buf);
6417   close (fd1);
6418   close (fd2);
6419
6420   return 1;
6421
6422 error:
6423   free (buf);
6424   close (fd1);
6425   close (fd2);
6426   return 0;
6427 }
6428
6429 /* Check that compiler's output doesn't differ across runs.
6430    TEMP_STDOUT_FILES and TEMP_STDERR_FILES are arrays of files, containing
6431    stdout and stderr for each compiler run.  Return true if all of
6432    TEMP_STDOUT_FILES and TEMP_STDERR_FILES are equivalent.  */
6433
6434 static bool
6435 check_repro (char **temp_stdout_files, char **temp_stderr_files)
6436 {
6437   int i;
6438   for (i = 0; i < RETRY_ICE_ATTEMPTS - 2; ++i)
6439     {
6440      if (!files_equal_p (temp_stdout_files[i], temp_stdout_files[i + 1])
6441          || !files_equal_p (temp_stderr_files[i], temp_stderr_files[i + 1]))
6442        {
6443          fnotice (stderr, "The bug is not reproducible, so it is"
6444                   " likely a hardware or OS problem.\n");
6445          break;
6446        }
6447     }
6448   return i == RETRY_ICE_ATTEMPTS - 2;
6449 }
6450
6451 enum attempt_status {
6452   ATTEMPT_STATUS_FAIL_TO_RUN,
6453   ATTEMPT_STATUS_SUCCESS,
6454   ATTEMPT_STATUS_ICE
6455 };
6456
6457
6458 /* Run compiler with arguments NEW_ARGV to reproduce the ICE, storing stdout
6459    to OUT_TEMP and stderr to ERR_TEMP.  If APPEND is TRUE, append to OUT_TEMP
6460    and ERR_TEMP instead of truncating.  If EMIT_SYSTEM_INFO is TRUE, also write
6461    GCC configuration into to ERR_TEMP.  Return ATTEMPT_STATUS_FAIL_TO_RUN if
6462    compiler failed to run, ATTEMPT_STATUS_ICE if compiled ICE-ed and
6463    ATTEMPT_STATUS_SUCCESS otherwise.  */
6464
6465 static enum attempt_status
6466 run_attempt (const char **new_argv, const char *out_temp,
6467              const char *err_temp, int emit_system_info, int append)
6468 {
6469
6470   if (emit_system_info)
6471     {
6472       FILE *file_out = fopen (err_temp, "a");
6473       print_configuration (file_out);
6474       fputs ("\n", file_out);
6475       fclose (file_out);
6476     }
6477
6478   int exit_status;
6479   const char *errmsg;
6480   struct pex_obj *pex;
6481   int err;
6482   int pex_flags = PEX_USE_PIPES | PEX_LAST;
6483   enum attempt_status status = ATTEMPT_STATUS_FAIL_TO_RUN;
6484
6485   if (append)
6486     pex_flags |= PEX_STDOUT_APPEND | PEX_STDERR_APPEND;
6487
6488   pex = pex_init (PEX_USE_PIPES, new_argv[0], NULL);
6489   if (!pex)
6490     fatal_error (input_location, "pex_init failed: %m");
6491
6492   errmsg = pex_run (pex, pex_flags, new_argv[0],
6493                     CONST_CAST2 (char *const *, const char **, &new_argv[1]), out_temp,
6494                     err_temp, &err);
6495   if (errmsg != NULL)
6496     {
6497       if (err == 0)
6498         fatal_error (input_location, errmsg);
6499       else
6500         {
6501           errno = err;
6502           pfatal_with_name (errmsg);
6503         }
6504     }
6505
6506   if (!pex_get_status (pex, 1, &exit_status))
6507     goto out;
6508
6509   switch (WEXITSTATUS (exit_status))
6510     {
6511       case ICE_EXIT_CODE:
6512         status = ATTEMPT_STATUS_ICE;
6513         break;
6514
6515       case SUCCESS_EXIT_CODE:
6516         status = ATTEMPT_STATUS_SUCCESS;
6517         break;
6518
6519       default:
6520         ;
6521     }
6522
6523 out:
6524   pex_free (pex);
6525   return status;
6526 }
6527
6528 /* This routine reads lines from IN file, adds C++ style comments
6529    at the begining of each line and writes result into OUT.  */
6530
6531 static void
6532 insert_comments (const char *file_in, const char *file_out)
6533 {
6534   FILE *in = fopen (file_in, "rb");
6535   FILE *out = fopen (file_out, "wb");
6536   char line[256];
6537
6538   bool add_comment = true;
6539   while (fgets (line, sizeof (line), in))
6540     {
6541       if (add_comment)
6542         fputs ("// ", out);
6543       fputs (line, out);
6544       add_comment = strchr (line, '\n') != NULL;
6545     }
6546
6547   fclose (in);
6548   fclose (out);
6549 }
6550
6551 /* This routine adds preprocessed source code into the given ERR_FILE.
6552    To do this, it adds "-E" to NEW_ARGV and execute RUN_ATTEMPT routine to
6553    add information in report file.  RUN_ATTEMPT should return
6554    ATTEMPT_STATUS_SUCCESS, in other case we cannot generate the report.  */
6555
6556 static void
6557 do_report_bug (const char **new_argv, const int nargs,
6558                char **out_file, char **err_file)
6559 {
6560   int i, status;
6561   int fd = open (*out_file, O_RDWR | O_APPEND);
6562   if (fd < 0)
6563     return;
6564   write (fd, "\n//", 3);
6565   for (i = 0; i < nargs; i++)
6566     {
6567       write (fd, " ", 1);
6568       write (fd, new_argv[i], strlen (new_argv[i]));
6569     }
6570   write (fd, "\n\n", 2);
6571   close (fd);
6572   new_argv[nargs] = "-E";
6573   new_argv[nargs + 1] = NULL;
6574
6575   status = run_attempt (new_argv, *out_file, *err_file, 0, 1);
6576
6577   if (status == ATTEMPT_STATUS_SUCCESS)
6578     {
6579       fnotice (stderr, "Preprocessed source stored into %s file,"
6580                " please attach this to your bugreport.\n", *out_file);
6581       /* Make sure it is not deleted.  */
6582       free (*out_file);
6583       *out_file = NULL;
6584     }
6585 }
6586
6587 /* Try to reproduce ICE.  If bug is reproducible, generate report .err file
6588    containing GCC configuration, backtrace, compiler's command line options
6589    and preprocessed source code.  */
6590
6591 static void
6592 try_generate_repro (const char **argv)
6593 {
6594   int i, nargs, out_arg = -1, quiet = 0, attempt;
6595   const char **new_argv;
6596   char *temp_files[RETRY_ICE_ATTEMPTS * 2];
6597   char **temp_stdout_files = &temp_files[0];
6598   char **temp_stderr_files = &temp_files[RETRY_ICE_ATTEMPTS];
6599
6600   if (gcc_input_filename == NULL || ! strcmp (gcc_input_filename, "-"))
6601     return;
6602
6603   for (nargs = 0; argv[nargs] != NULL; ++nargs)
6604     /* Only retry compiler ICEs, not preprocessor ones.  */
6605     if (! strcmp (argv[nargs], "-E"))
6606       return;
6607     else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o')
6608       {
6609         if (out_arg == -1)
6610           out_arg = nargs;
6611         else
6612           return;
6613       }
6614     /* If the compiler is going to output any time information,
6615        it might varry between invocations.  */
6616     else if (! strcmp (argv[nargs], "-quiet"))
6617       quiet = 1;
6618     else if (! strcmp (argv[nargs], "-ftime-report"))
6619       return;
6620
6621   if (out_arg == -1 || !quiet)
6622     return;
6623
6624   memset (temp_files, '\0', sizeof (temp_files));
6625   new_argv = XALLOCAVEC (const char *, nargs + 4);
6626   memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *));
6627   new_argv[nargs++] = "-frandom-seed=0";
6628   new_argv[nargs++] = "-fdump-noaddr";
6629   new_argv[nargs] = NULL;
6630   if (new_argv[out_arg][2] == '\0')
6631     new_argv[out_arg + 1] = "-";
6632   else
6633     new_argv[out_arg] = "-o-";
6634
6635   int status;
6636   for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS; ++attempt)
6637     {
6638       int emit_system_info = 0;
6639       int append = 0;
6640       temp_stdout_files[attempt] = make_temp_file (".out");
6641       temp_stderr_files[attempt] = make_temp_file (".err");
6642
6643       if (attempt == RETRY_ICE_ATTEMPTS - 1)
6644         {
6645           append = 1;
6646           emit_system_info = 1;
6647         }
6648
6649       status = run_attempt (new_argv, temp_stdout_files[attempt],
6650                             temp_stderr_files[attempt], emit_system_info,
6651                             append);
6652
6653       if (status != ATTEMPT_STATUS_ICE)
6654         {
6655           fnotice (stderr, "The bug is not reproducible, so it is"
6656                    " likely a hardware or OS problem.\n");
6657           goto out;
6658         }
6659     }
6660
6661   if (!check_repro (temp_stdout_files, temp_stderr_files))
6662     goto out;
6663
6664   {
6665     /* Insert commented out backtrace into report file.  */
6666     char **stderr_commented = &temp_stdout_files[RETRY_ICE_ATTEMPTS - 1];
6667     insert_comments (temp_stderr_files[RETRY_ICE_ATTEMPTS - 1],
6668                      *stderr_commented);
6669
6670     /* In final attempt we append compiler options and preprocesssed code to last
6671        generated .out file with configuration and backtrace.  */
6672     char **output = &temp_stdout_files[RETRY_ICE_ATTEMPTS - 1];
6673     do_report_bug (new_argv, nargs, stderr_commented, output);
6674   }
6675
6676 out:
6677   for (i = 0; i < RETRY_ICE_ATTEMPTS * 2; i++)
6678     if (temp_files[i])
6679       {
6680         unlink (temp_stdout_files[i]);
6681         free (temp_stdout_files[i]);
6682       }
6683 }
6684
6685 /* Search for a file named NAME trying various prefixes including the
6686    user's -B prefix and some standard ones.
6687    Return the absolute file name found.  If nothing is found, return NAME.  */
6688
6689 static const char *
6690 find_file (const char *name)
6691 {
6692   char *newname = find_a_file (&startfile_prefixes, name, R_OK, true);
6693   return newname ? newname : name;
6694 }
6695
6696 /* Determine whether a directory exists.  If LINKER, return 0 for
6697    certain fixed names not needed by the linker.  */
6698
6699 static int
6700 is_directory (const char *path1, bool linker)
6701 {
6702   int len1;
6703   char *path;
6704   char *cp;
6705   struct stat st;
6706
6707   /* Ensure the string ends with "/.".  The resulting path will be a
6708      directory even if the given path is a symbolic link.  */
6709   len1 = strlen (path1);
6710   path = (char *) alloca (3 + len1);
6711   memcpy (path, path1, len1);
6712   cp = path + len1;
6713   if (!IS_DIR_SEPARATOR (cp[-1]))
6714     *cp++ = DIR_SEPARATOR;
6715   *cp++ = '.';
6716   *cp = '\0';
6717
6718   /* Exclude directories that the linker is known to search.  */
6719   if (linker
6720       && IS_DIR_SEPARATOR (path[0])
6721       && ((cp - path == 6
6722            && filename_ncmp (path + 1, "lib", 3) == 0)
6723           || (cp - path == 10
6724               && filename_ncmp (path + 1, "usr", 3) == 0
6725               && IS_DIR_SEPARATOR (path[4])
6726               && filename_ncmp (path + 5, "lib", 3) == 0)))
6727     return 0;
6728
6729   return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode));
6730 }
6731
6732 /* Set up the various global variables to indicate that we're processing
6733    the input file named FILENAME.  */
6734
6735 void
6736 set_input (const char *filename)
6737 {
6738   const char *p;
6739
6740   gcc_input_filename = filename;
6741   input_filename_length = strlen (gcc_input_filename);
6742   input_basename = lbasename (gcc_input_filename);
6743
6744   /* Find a suffix starting with the last period,
6745      and set basename_length to exclude that suffix.  */
6746   basename_length = strlen (input_basename);
6747   suffixed_basename_length = basename_length;
6748   p = input_basename + basename_length;
6749   while (p != input_basename && *p != '.')
6750     --p;
6751   if (*p == '.' && p != input_basename)
6752     {
6753       basename_length = p - input_basename;
6754       input_suffix = p + 1;
6755     }
6756   else
6757     input_suffix = "";
6758
6759   /* If a spec for 'g', 'u', or 'U' is seen with -save-temps then
6760      we will need to do a stat on the gcc_input_filename.  The
6761      INPUT_STAT_SET signals that the stat is needed.  */
6762   input_stat_set = 0;
6763 }
6764 \f
6765 /* On fatal signals, delete all the temporary files.  */
6766
6767 static void
6768 fatal_signal (int signum)
6769 {
6770   signal (signum, SIG_DFL);
6771   delete_failure_queue ();
6772   delete_temp_files ();
6773   /* Get the same signal again, this time not handled,
6774      so its normal effect occurs.  */
6775   kill (getpid (), signum);
6776 }
6777
6778 /* Compare the contents of the two files named CMPFILE[0] and
6779    CMPFILE[1].  Return zero if they're identical, nonzero
6780    otherwise.  */
6781
6782 static int
6783 compare_files (char *cmpfile[])
6784 {
6785   int ret = 0;
6786   FILE *temp[2] = { NULL, NULL };
6787   int i;
6788
6789 #if HAVE_MMAP_FILE
6790   {
6791     size_t length[2];
6792     void *map[2] = { NULL, NULL };
6793
6794     for (i = 0; i < 2; i++)
6795       {
6796         struct stat st;
6797
6798         if (stat (cmpfile[i], &st) < 0 || !S_ISREG (st.st_mode))
6799           {
6800             error ("%s: could not determine length of compare-debug file %s",
6801                    gcc_input_filename, cmpfile[i]);
6802             ret = 1;
6803             break;
6804           }
6805
6806         length[i] = st.st_size;
6807       }
6808
6809     if (!ret && length[0] != length[1])
6810       {
6811         error ("%s: -fcompare-debug failure (length)", gcc_input_filename);
6812         ret = 1;
6813       }
6814
6815     if (!ret)
6816       for (i = 0; i < 2; i++)
6817         {
6818           int fd = open (cmpfile[i], O_RDONLY);
6819           if (fd < 0)
6820             {
6821               error ("%s: could not open compare-debug file %s",
6822                      gcc_input_filename, cmpfile[i]);
6823               ret = 1;
6824               break;
6825             }
6826
6827           map[i] = mmap (NULL, length[i], PROT_READ, MAP_PRIVATE, fd, 0);
6828           close (fd);
6829
6830           if (map[i] == (void *) MAP_FAILED)
6831             {
6832               ret = -1;
6833               break;
6834             }
6835         }
6836
6837     if (!ret)
6838       {
6839         if (memcmp (map[0], map[1], length[0]) != 0)
6840           {
6841             error ("%s: -fcompare-debug failure", gcc_input_filename);
6842             ret = 1;
6843           }
6844       }
6845
6846     for (i = 0; i < 2; i++)
6847       if (map[i])
6848         munmap ((caddr_t) map[i], length[i]);
6849
6850     if (ret >= 0)
6851       return ret;
6852
6853     ret = 0;
6854   }
6855 #endif
6856
6857   for (i = 0; i < 2; i++)
6858     {
6859       temp[i] = fopen (cmpfile[i], "r");
6860       if (!temp[i])
6861         {
6862           error ("%s: could not open compare-debug file %s",
6863                  gcc_input_filename, cmpfile[i]);
6864           ret = 1;
6865           break;
6866         }
6867     }
6868
6869   if (!ret && temp[0] && temp[1])
6870     for (;;)
6871       {
6872         int c0, c1;
6873         c0 = fgetc (temp[0]);
6874         c1 = fgetc (temp[1]);
6875
6876         if (c0 != c1)
6877           {
6878             error ("%s: -fcompare-debug failure",
6879                    gcc_input_filename);
6880             ret = 1;
6881             break;
6882           }
6883
6884         if (c0 == EOF)
6885           break;
6886       }
6887
6888   for (i = 1; i >= 0; i--)
6889     {
6890       if (temp[i])
6891         fclose (temp[i]);
6892     }
6893
6894   return ret;
6895 }
6896
6897 /* The top-level "main" within the driver would be ~1000 lines long.
6898    This class breaks it up into smaller functions and contains some
6899    state shared by them.  */
6900
6901 class driver
6902 {
6903  public:
6904   int main (int argc, char **argv);
6905
6906  private:
6907   void set_progname (const char *argv0) const;
6908   void expand_at_files (int *argc, char ***argv) const;
6909   void decode_argv (int argc, const char **argv);
6910   void global_initializations ();
6911   void build_multilib_strings () const;
6912   void set_up_specs () const;
6913   void putenv_COLLECT_GCC (const char *argv0) const;
6914   void maybe_putenv_COLLECT_LTO_WRAPPER () const;
6915   void maybe_putenv_OFFLOAD_TARGETS () const;
6916   void handle_unrecognized_options () const;
6917   int maybe_print_and_exit () const;
6918   bool prepare_infiles ();
6919   void do_spec_on_infiles () const;
6920   void maybe_run_linker (const char *argv0) const;
6921   void final_actions () const;
6922   int get_exit_code () const;
6923
6924  private:
6925   char *explicit_link_files;
6926   struct cl_decoded_option *decoded_options;
6927   unsigned int decoded_options_count;
6928 };
6929
6930 /* Implement the top-level "main" within the driver in terms of
6931    driver::main.  */
6932
6933 extern int main (int, char **);
6934
6935 int
6936 main (int argc, char **argv)
6937 {
6938   driver d;
6939
6940   return d.main (argc, argv);
6941 }
6942
6943 /* driver::main is implemented as a series of driver:: method calls.  */
6944
6945 int
6946 driver::main (int argc, char **argv)
6947 {
6948   bool early_exit;
6949
6950   set_progname (argv[0]);
6951   expand_at_files (&argc, &argv);
6952   decode_argv (argc, const_cast <const char **> (argv));
6953   global_initializations ();
6954   build_multilib_strings ();
6955   set_up_specs ();
6956   putenv_COLLECT_GCC (argv[0]);
6957   maybe_putenv_COLLECT_LTO_WRAPPER ();
6958   maybe_putenv_OFFLOAD_TARGETS ();
6959   handle_unrecognized_options ();
6960
6961   if (!maybe_print_and_exit ())
6962     return 0;
6963
6964   early_exit = prepare_infiles ();
6965   if (early_exit)
6966     return get_exit_code ();
6967
6968   do_spec_on_infiles ();
6969   maybe_run_linker (argv[0]);
6970   final_actions ();
6971   return get_exit_code ();
6972 }
6973
6974 /* Locate the final component of argv[0] after any leading path, and set
6975    the program name accordingly.  */
6976
6977 void
6978 driver::set_progname (const char *argv0) const
6979 {
6980   const char *p = argv0 + strlen (argv0);
6981   while (p != argv0 && !IS_DIR_SEPARATOR (p[-1]))
6982     --p;
6983   progname = p;
6984
6985   xmalloc_set_program_name (progname);
6986 }
6987
6988 /* Expand any @ files within the command-line args,
6989    setting at_file_supplied if any were expanded.  */
6990
6991 void
6992 driver::expand_at_files (int *argc, char ***argv) const
6993 {
6994   char **old_argv = *argv;
6995
6996   expandargv (argc, argv);
6997
6998   /* Determine if any expansions were made.  */
6999   if (*argv != old_argv)
7000     at_file_supplied = true;
7001 }
7002
7003 /* Decode the command-line arguments from argc/argv into the
7004    decoded_options array.  */
7005
7006 void
7007 driver::decode_argv (int argc, const char **argv)
7008 {
7009   /* Register the language-independent parameters.  */
7010   global_init_params ();
7011   finish_params ();
7012
7013   init_options_struct (&global_options, &global_options_set);
7014
7015   decode_cmdline_options_to_array (argc, argv,
7016                                    CL_DRIVER,
7017                                    &decoded_options, &decoded_options_count);
7018 }
7019
7020 /* Perform various initializations and setup.  */
7021
7022 void
7023 driver::global_initializations ()
7024 {
7025   /* Unlock the stdio streams.  */
7026   unlock_std_streams ();
7027
7028   gcc_init_libintl ();
7029
7030   diagnostic_initialize (global_dc, 0);
7031   diagnostic_color_init (global_dc);
7032
7033 #ifdef GCC_DRIVER_HOST_INITIALIZATION
7034   /* Perform host dependent initialization when needed.  */
7035   GCC_DRIVER_HOST_INITIALIZATION;
7036 #endif
7037
7038   if (atexit (delete_temp_files) != 0)
7039     fatal_error (input_location, "atexit failed");
7040
7041   if (signal (SIGINT, SIG_IGN) != SIG_IGN)
7042     signal (SIGINT, fatal_signal);
7043 #ifdef SIGHUP
7044   if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
7045     signal (SIGHUP, fatal_signal);
7046 #endif
7047   if (signal (SIGTERM, SIG_IGN) != SIG_IGN)
7048     signal (SIGTERM, fatal_signal);
7049 #ifdef SIGPIPE
7050   if (signal (SIGPIPE, SIG_IGN) != SIG_IGN)
7051     signal (SIGPIPE, fatal_signal);
7052 #endif
7053 #ifdef SIGCHLD
7054   /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will
7055      receive the signal.  A different setting is inheritable */
7056   signal (SIGCHLD, SIG_DFL);
7057 #endif
7058
7059   /* Parsing and gimplification sometimes need quite large stack.
7060      Increase stack size limits if possible.  */
7061   stack_limit_increase (64 * 1024 * 1024);
7062
7063   /* Allocate the argument vector.  */
7064   alloc_args ();
7065
7066   obstack_init (&obstack);
7067 }
7068
7069 /* Build multilib_select, et. al from the separate lines that make up each
7070    multilib selection.  */
7071
7072 void
7073 driver::build_multilib_strings () const
7074 {
7075   {
7076     const char *p;
7077     const char *const *q = multilib_raw;
7078     int need_space;
7079
7080     obstack_init (&multilib_obstack);
7081     while ((p = *q++) != (char *) 0)
7082       obstack_grow (&multilib_obstack, p, strlen (p));
7083
7084     obstack_1grow (&multilib_obstack, 0);
7085     multilib_select = XOBFINISH (&multilib_obstack, const char *);
7086
7087     q = multilib_matches_raw;
7088     while ((p = *q++) != (char *) 0)
7089       obstack_grow (&multilib_obstack, p, strlen (p));
7090
7091     obstack_1grow (&multilib_obstack, 0);
7092     multilib_matches = XOBFINISH (&multilib_obstack, const char *);
7093
7094     q = multilib_exclusions_raw;
7095     while ((p = *q++) != (char *) 0)
7096       obstack_grow (&multilib_obstack, p, strlen (p));
7097
7098     obstack_1grow (&multilib_obstack, 0);
7099     multilib_exclusions = XOBFINISH (&multilib_obstack, const char *);
7100
7101     q = multilib_reuse_raw;
7102     while ((p = *q++) != (char *) 0)
7103       obstack_grow (&multilib_obstack, p, strlen (p));
7104
7105     obstack_1grow (&multilib_obstack, 0);
7106     multilib_reuse = XOBFINISH (&multilib_obstack, const char *);
7107
7108     need_space = FALSE;
7109     for (size_t i = 0; i < ARRAY_SIZE (multilib_defaults_raw); i++)
7110       {
7111         if (need_space)
7112           obstack_1grow (&multilib_obstack, ' ');
7113         obstack_grow (&multilib_obstack,
7114                       multilib_defaults_raw[i],
7115                       strlen (multilib_defaults_raw[i]));
7116         need_space = TRUE;
7117       }
7118
7119     obstack_1grow (&multilib_obstack, 0);
7120     multilib_defaults = XOBFINISH (&multilib_obstack, const char *);
7121   }
7122 }
7123
7124 /* Set up the spec-handling machinery.  */
7125
7126 void
7127 driver::set_up_specs () const
7128 {
7129   const char *spec_machine_suffix;
7130   char *specs_file;
7131   size_t i;
7132
7133 #ifdef INIT_ENVIRONMENT
7134   /* Set up any other necessary machine specific environment variables.  */
7135   xputenv (INIT_ENVIRONMENT);
7136 #endif
7137
7138   /* Make a table of what switches there are (switches, n_switches).
7139      Make a table of specified input files (infiles, n_infiles).
7140      Decode switches that are handled locally.  */
7141
7142   process_command (decoded_options_count, decoded_options);
7143
7144   /* Initialize the vector of specs to just the default.
7145      This means one element containing 0s, as a terminator.  */
7146
7147   compilers = XNEWVAR (struct compiler, sizeof default_compilers);
7148   memcpy (compilers, default_compilers, sizeof default_compilers);
7149   n_compilers = n_default_compilers;
7150
7151   /* Read specs from a file if there is one.  */
7152
7153   machine_suffix = concat (spec_host_machine, dir_separator_str, spec_version,
7154                            accel_dir_suffix, dir_separator_str, NULL);
7155   just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
7156
7157   specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, true);
7158   /* Read the specs file unless it is a default one.  */
7159   if (specs_file != 0 && strcmp (specs_file, "specs"))
7160     read_specs (specs_file, true, false);
7161   else
7162     init_spec ();
7163
7164 #ifdef ACCEL_COMPILER
7165   spec_machine_suffix = machine_suffix;
7166 #else
7167   spec_machine_suffix = just_machine_suffix;
7168 #endif
7169
7170   /* We need to check standard_exec_prefix/spec_machine_suffix/specs
7171      for any override of as, ld and libraries.  */
7172   specs_file = (char *) alloca (strlen (standard_exec_prefix)
7173                        + strlen (spec_machine_suffix) + sizeof ("specs"));
7174   strcpy (specs_file, standard_exec_prefix);
7175   strcat (specs_file, spec_machine_suffix);
7176   strcat (specs_file, "specs");
7177   if (access (specs_file, R_OK) == 0)
7178     read_specs (specs_file, true, false);
7179
7180   /* Process any configure-time defaults specified for the command line
7181      options, via OPTION_DEFAULT_SPECS.  */
7182   for (i = 0; i < ARRAY_SIZE (option_default_specs); i++)
7183     do_option_spec (option_default_specs[i].name,
7184                     option_default_specs[i].spec);
7185
7186   /* Process DRIVER_SELF_SPECS, adding any new options to the end
7187      of the command line.  */
7188
7189   for (i = 0; i < ARRAY_SIZE (driver_self_specs); i++)
7190     do_self_spec (driver_self_specs[i]);
7191
7192   /* If not cross-compiling, look for executables in the standard
7193      places.  */
7194   if (*cross_compile == '0')
7195     {
7196       if (*md_exec_prefix)
7197         {
7198           add_prefix (&exec_prefixes, md_exec_prefix, "GCC",
7199                       PREFIX_PRIORITY_LAST, 0, 0);
7200         }
7201     }
7202
7203   /* Process sysroot_suffix_spec.  */
7204   if (*sysroot_suffix_spec != 0
7205       && !no_sysroot_suffix
7206       && do_spec_2 (sysroot_suffix_spec) == 0)
7207     {
7208       if (argbuf.length () > 1)
7209         error ("spec failure: more than one arg to SYSROOT_SUFFIX_SPEC");
7210       else if (argbuf.length () == 1)
7211         target_sysroot_suffix = xstrdup (argbuf.last ());
7212     }
7213
7214 #ifdef HAVE_LD_SYSROOT
7215   /* Pass the --sysroot option to the linker, if it supports that.  If
7216      there is a sysroot_suffix_spec, it has already been processed by
7217      this point, so target_system_root really is the system root we
7218      should be using.  */
7219   if (target_system_root)
7220     {
7221       obstack_grow (&obstack, "%(sysroot_spec) ", strlen ("%(sysroot_spec) "));
7222       obstack_grow0 (&obstack, link_spec, strlen (link_spec));
7223       set_spec ("link", XOBFINISH (&obstack, const char *), false);
7224     }
7225 #endif
7226
7227   /* Process sysroot_hdrs_suffix_spec.  */
7228   if (*sysroot_hdrs_suffix_spec != 0
7229       && !no_sysroot_suffix
7230       && do_spec_2 (sysroot_hdrs_suffix_spec) == 0)
7231     {
7232       if (argbuf.length () > 1)
7233         error ("spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC");
7234       else if (argbuf.length () == 1)
7235         target_sysroot_hdrs_suffix = xstrdup (argbuf.last ());
7236     }
7237
7238   /* Look for startfiles in the standard places.  */
7239   if (*startfile_prefix_spec != 0
7240       && do_spec_2 (startfile_prefix_spec) == 0
7241       && do_spec_1 (" ", 0, NULL) == 0)
7242     {
7243       const char *arg;
7244       int ndx;
7245       FOR_EACH_VEC_ELT (argbuf, ndx, arg)
7246         add_sysrooted_prefix (&startfile_prefixes, arg, "BINUTILS",
7247                               PREFIX_PRIORITY_LAST, 0, 1);
7248     }
7249   /* We should eventually get rid of all these and stick to
7250      startfile_prefix_spec exclusively.  */
7251   else if (*cross_compile == '0' || target_system_root)
7252     {
7253       if (*md_startfile_prefix)
7254         add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix,
7255                               "GCC", PREFIX_PRIORITY_LAST, 0, 1);
7256
7257       if (*md_startfile_prefix_1)
7258         add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix_1,
7259                               "GCC", PREFIX_PRIORITY_LAST, 0, 1);
7260
7261       /* If standard_startfile_prefix is relative, base it on
7262          standard_exec_prefix.  This lets us move the installed tree
7263          as a unit.  If GCC_EXEC_PREFIX is defined, base
7264          standard_startfile_prefix on that as well.
7265
7266          If the prefix is relative, only search it for native compilers;
7267          otherwise we will search a directory containing host libraries.  */
7268       if (IS_ABSOLUTE_PATH (standard_startfile_prefix))
7269         add_sysrooted_prefix (&startfile_prefixes,
7270                               standard_startfile_prefix, "BINUTILS",
7271                               PREFIX_PRIORITY_LAST, 0, 1);
7272       else if (*cross_compile == '0')
7273         {
7274           add_prefix (&startfile_prefixes,
7275                       concat (gcc_exec_prefix
7276                               ? gcc_exec_prefix : standard_exec_prefix,
7277                               machine_suffix,
7278                               standard_startfile_prefix, NULL),
7279                       NULL, PREFIX_PRIORITY_LAST, 0, 1);
7280         }
7281
7282       /* Sysrooted prefixes are relocated because target_system_root is
7283          also relocated by gcc_exec_prefix.  */
7284       if (*standard_startfile_prefix_1)
7285         add_sysrooted_prefix (&startfile_prefixes,
7286                               standard_startfile_prefix_1, "BINUTILS",
7287                               PREFIX_PRIORITY_LAST, 0, 1);
7288       if (*standard_startfile_prefix_2)
7289         add_sysrooted_prefix (&startfile_prefixes,
7290                               standard_startfile_prefix_2, "BINUTILS",
7291                               PREFIX_PRIORITY_LAST, 0, 1);
7292     }
7293
7294   /* Process any user specified specs in the order given on the command
7295      line.  */
7296   for (struct user_specs *uptr = user_specs_head; uptr; uptr = uptr->next)
7297     {
7298       char *filename = find_a_file (&startfile_prefixes, uptr->filename,
7299                                     R_OK, true);
7300       read_specs (filename ? filename : uptr->filename, false, true);
7301     }
7302
7303   /* Process any user self specs.  */
7304   {
7305     struct spec_list *sl;
7306     for (sl = specs; sl; sl = sl->next)
7307       if (sl->name_len == sizeof "self_spec" - 1
7308           && !strcmp (sl->name, "self_spec"))
7309         do_self_spec (*sl->ptr_spec);
7310   }
7311
7312   if (compare_debug)
7313     {
7314       enum save_temps save;
7315
7316       if (!compare_debug_second)
7317         {
7318           n_switches_debug_check[1] = n_switches;
7319           n_switches_alloc_debug_check[1] = n_switches_alloc;
7320           switches_debug_check[1] = XDUPVEC (struct switchstr, switches,
7321                                              n_switches_alloc);
7322
7323           do_self_spec ("%:compare-debug-self-opt()");
7324           n_switches_debug_check[0] = n_switches;
7325           n_switches_alloc_debug_check[0] = n_switches_alloc;
7326           switches_debug_check[0] = switches;
7327
7328           n_switches = n_switches_debug_check[1];
7329           n_switches_alloc = n_switches_alloc_debug_check[1];
7330           switches = switches_debug_check[1];
7331         }
7332
7333       /* Avoid crash when computing %j in this early.  */
7334       save = save_temps_flag;
7335       save_temps_flag = SAVE_TEMPS_NONE;
7336
7337       compare_debug = -compare_debug;
7338       do_self_spec ("%:compare-debug-self-opt()");
7339
7340       save_temps_flag = save;
7341
7342       if (!compare_debug_second)
7343         {
7344           n_switches_debug_check[1] = n_switches;
7345           n_switches_alloc_debug_check[1] = n_switches_alloc;
7346           switches_debug_check[1] = switches;
7347           compare_debug = -compare_debug;
7348           n_switches = n_switches_debug_check[0];
7349           n_switches_alloc = n_switches_debug_check[0];
7350           switches = switches_debug_check[0];
7351         }
7352     }
7353
7354
7355   /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake.  */
7356   if (gcc_exec_prefix)
7357     gcc_exec_prefix = concat (gcc_exec_prefix, spec_host_machine,
7358                               dir_separator_str, spec_version,
7359                               accel_dir_suffix, dir_separator_str, NULL);
7360
7361   /* Now we have the specs.
7362      Set the `valid' bits for switches that match anything in any spec.  */
7363
7364   validate_all_switches ();
7365
7366   /* Now that we have the switches and the specs, set
7367      the subdirectory based on the options.  */
7368   set_multilib_dir ();
7369 }
7370
7371 /* Set up to remember the pathname of gcc and any options
7372    needed for collect.  We use argv[0] instead of progname because
7373    we need the complete pathname.  */
7374
7375 void
7376 driver::putenv_COLLECT_GCC (const char *argv0) const
7377 {
7378   obstack_init (&collect_obstack);
7379   obstack_grow (&collect_obstack, "COLLECT_GCC=", sizeof ("COLLECT_GCC=") - 1);
7380   obstack_grow (&collect_obstack, argv0, strlen (argv0) + 1);
7381   xputenv (XOBFINISH (&collect_obstack, char *));
7382 }
7383
7384 /* Set up to remember the pathname of the lto wrapper. */
7385
7386 void
7387 driver::maybe_putenv_COLLECT_LTO_WRAPPER () const
7388 {
7389   char *lto_wrapper_file;
7390
7391   if (have_c)
7392     lto_wrapper_file = NULL;
7393   else
7394     lto_wrapper_file = find_a_file (&exec_prefixes, "lto-wrapper",
7395                                     X_OK, false);
7396   if (lto_wrapper_file)
7397     {
7398       lto_wrapper_file = convert_white_space (lto_wrapper_file);
7399       lto_wrapper_spec = lto_wrapper_file;
7400       obstack_init (&collect_obstack);
7401       obstack_grow (&collect_obstack, "COLLECT_LTO_WRAPPER=",
7402                     sizeof ("COLLECT_LTO_WRAPPER=") - 1);
7403       obstack_grow (&collect_obstack, lto_wrapper_spec,
7404                     strlen (lto_wrapper_spec) + 1);
7405       xputenv (XOBFINISH (&collect_obstack, char *));
7406     }
7407
7408 }
7409
7410 /* Set up to remember the names of offload targets.  */
7411
7412 void
7413 driver::maybe_putenv_OFFLOAD_TARGETS () const
7414 {
7415   const char *targets = offload_targets;
7416
7417   /* If no targets specified by -foffload, use all available targets.  */
7418   if (!targets)
7419     targets = OFFLOAD_TARGETS;
7420
7421   if (strlen (targets) > 0)
7422     {
7423       obstack_grow (&collect_obstack, "OFFLOAD_TARGET_NAMES=",
7424                     sizeof ("OFFLOAD_TARGET_NAMES=") - 1);
7425       obstack_grow (&collect_obstack, targets,
7426                     strlen (targets) + 1);
7427       xputenv (XOBFINISH (&collect_obstack, char *));
7428     }
7429
7430   free (offload_targets);
7431 }
7432
7433 /* Reject switches that no pass was interested in.  */
7434
7435 void
7436 driver::handle_unrecognized_options () const
7437 {
7438   for (size_t i = 0; (int) i < n_switches; i++)
7439     if (! switches[i].validated)
7440       error ("unrecognized command line option %<-%s%>", switches[i].part1);
7441 }
7442
7443 /* Handle the various -print-* options, returning 0 if the driver
7444    should exit, or nonzero if the driver should continue.  */
7445
7446 int
7447 driver::maybe_print_and_exit () const
7448 {
7449   if (print_search_dirs)
7450     {
7451       printf (_("install: %s\n"), STD_EXEC_PATH);
7452       printf (_("programs: %s\n"),
7453               build_search_list (&exec_prefixes, "", false, false));
7454       printf (_("libraries: %s\n"),
7455               build_search_list (&startfile_prefixes, "", false, true));
7456       return (0);
7457     }
7458
7459   if (print_file_name)
7460     {
7461       printf ("%s\n", find_file (print_file_name));
7462       return (0);
7463     }
7464
7465   if (print_prog_name)
7466     {
7467       if (use_ld != NULL && ! strcmp (print_prog_name, "ld"))
7468         {
7469           /* Append USE_LD to to the default linker.  */
7470 #ifdef DEFAULT_LINKER
7471           char *ld;
7472 # ifdef HAVE_HOST_EXECUTABLE_SUFFIX
7473           int len = (sizeof (DEFAULT_LINKER)
7474                      - sizeof (HOST_EXECUTABLE_SUFFIX));
7475           ld = NULL;
7476           if (len > 0)
7477             {
7478               char *default_linker = xstrdup (DEFAULT_LINKER);
7479               /* Strip HOST_EXECUTABLE_SUFFIX if DEFAULT_LINKER contains
7480                  HOST_EXECUTABLE_SUFFIX.  */
7481               if (! strcmp (&default_linker[len], HOST_EXECUTABLE_SUFFIX))
7482                 {
7483                   default_linker[len] = '\0';
7484                   ld = concat (default_linker, use_ld,
7485                                HOST_EXECUTABLE_SUFFIX, NULL);
7486                 }
7487             }
7488           if (ld == NULL)
7489 # endif
7490           ld = concat (DEFAULT_LINKER, use_ld, NULL);
7491           if (access (ld, X_OK) == 0)
7492             {
7493               printf ("%s\n", ld);
7494               return (0);
7495             }
7496 #endif
7497           print_prog_name = concat (print_prog_name, use_ld, NULL);
7498         }
7499       char *newname = find_a_file (&exec_prefixes, print_prog_name, X_OK, 0);
7500       printf ("%s\n", (newname ? newname : print_prog_name));
7501       return (0);
7502     }
7503
7504   if (print_multi_lib)
7505     {
7506       print_multilib_info ();
7507       return (0);
7508     }
7509
7510   if (print_multi_directory)
7511     {
7512       if (multilib_dir == NULL)
7513         printf (".\n");
7514       else
7515         printf ("%s\n", multilib_dir);
7516       return (0);
7517     }
7518
7519   if (print_multiarch)
7520     {
7521       if (multiarch_dir == NULL)
7522         printf ("\n");
7523       else
7524         printf ("%s\n", multiarch_dir);
7525       return (0);
7526     }
7527
7528   if (print_sysroot)
7529     {
7530       if (target_system_root)
7531         {
7532           if (target_sysroot_suffix)
7533             printf ("%s%s\n", target_system_root, target_sysroot_suffix);
7534           else
7535             printf ("%s\n", target_system_root);
7536         }
7537       return (0);
7538     }
7539
7540   if (print_multi_os_directory)
7541     {
7542       if (multilib_os_dir == NULL)
7543         printf (".\n");
7544       else
7545         printf ("%s\n", multilib_os_dir);
7546       return (0);
7547     }
7548
7549   if (print_sysroot_headers_suffix)
7550     {
7551       if (*sysroot_hdrs_suffix_spec)
7552         {
7553           printf("%s\n", (target_sysroot_hdrs_suffix
7554                           ? target_sysroot_hdrs_suffix
7555                           : ""));
7556           return (0);
7557         }
7558       else
7559         /* The error status indicates that only one set of fixed
7560            headers should be built.  */
7561         fatal_error (input_location,
7562                      "not configured with sysroot headers suffix");
7563     }
7564
7565   if (print_help_list)
7566     {
7567       display_help ();
7568
7569       if (! verbose_flag)
7570         {
7571           printf (_("\nFor bug reporting instructions, please see:\n"));
7572           printf ("%s.\n", bug_report_url);
7573
7574           return (0);
7575         }
7576
7577       /* We do not exit here.  Instead we have created a fake input file
7578          called 'help-dummy' which needs to be compiled, and we pass this
7579          on the various sub-processes, along with the --help switch.
7580          Ensure their output appears after ours.  */
7581       fputc ('\n', stdout);
7582       fflush (stdout);
7583     }
7584
7585   if (print_version)
7586     {
7587       printf (_("%s %s%s\n"), progname, pkgversion_string,
7588               version_string);
7589       printf ("Copyright %s 2015 Free Software Foundation, Inc.\n",
7590               _("(C)"));
7591       fputs (_("This is free software; see the source for copying conditions.  There is NO\n\
7592 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"),
7593              stdout);
7594       if (! verbose_flag)
7595         return 0;
7596
7597       /* We do not exit here. We use the same mechanism of --help to print
7598          the version of the sub-processes. */
7599       fputc ('\n', stdout);
7600       fflush (stdout);
7601     }
7602
7603   if (verbose_flag)
7604     {
7605       print_configuration (stderr);
7606       if (n_infiles == 0)
7607         return (0);
7608     }
7609
7610   return 1;
7611 }
7612
7613 /* Figure out what to do with each input file.
7614    Return true if we need to exit early from "main", false otherwise.  */
7615
7616 bool
7617 driver::prepare_infiles ()
7618 {
7619   size_t i;
7620   int lang_n_infiles = 0;
7621
7622   if (n_infiles == added_libraries)
7623     fatal_error (input_location, "no input files");
7624
7625   if (seen_error ())
7626     /* Early exit needed from main.  */
7627     return true;
7628
7629   /* Make a place to record the compiler output file names
7630      that correspond to the input files.  */
7631
7632   i = n_infiles;
7633   i += lang_specific_extra_outfiles;
7634   outfiles = XCNEWVEC (const char *, i);
7635
7636   /* Record which files were specified explicitly as link input.  */
7637
7638   explicit_link_files = XCNEWVEC (char, n_infiles);
7639
7640   combine_inputs = have_o || flag_wpa;
7641
7642   for (i = 0; (int) i < n_infiles; i++)
7643     {
7644       const char *name = infiles[i].name;
7645       struct compiler *compiler = lookup_compiler (name,
7646                                                    strlen (name),
7647                                                    infiles[i].language);
7648
7649       if (compiler && !(compiler->combinable))
7650         combine_inputs = false;
7651
7652       if (lang_n_infiles > 0 && compiler != input_file_compiler
7653           && infiles[i].language && infiles[i].language[0] != '*')
7654         infiles[i].incompiler = compiler;
7655       else if (compiler)
7656         {
7657           lang_n_infiles++;
7658           input_file_compiler = compiler;
7659           infiles[i].incompiler = compiler;
7660         }
7661       else
7662         {
7663           /* Since there is no compiler for this input file, assume it is a
7664              linker file.  */
7665           explicit_link_files[i] = 1;
7666           infiles[i].incompiler = NULL;
7667         }
7668       infiles[i].compiled = false;
7669       infiles[i].preprocessed = false;
7670     }
7671
7672   if (!combine_inputs && have_c && have_o && lang_n_infiles > 1)
7673     fatal_error (input_location,
7674                  "cannot specify -o with -c, -S or -E with multiple files");
7675
7676   /* No early exit needed from main; we can continue.  */
7677   return false;
7678 }
7679
7680 /* Run the spec machinery on each input file.  */
7681
7682 void
7683 driver::do_spec_on_infiles () const
7684 {
7685   size_t i;
7686
7687   for (i = 0; (int) i < n_infiles; i++)
7688     {
7689       int this_file_error = 0;
7690
7691       /* Tell do_spec what to substitute for %i.  */
7692
7693       input_file_number = i;
7694       set_input (infiles[i].name);
7695
7696       if (infiles[i].compiled)
7697         continue;
7698
7699       /* Use the same thing in %o, unless cp->spec says otherwise.  */
7700
7701       outfiles[i] = gcc_input_filename;
7702
7703       /* Figure out which compiler from the file's suffix.  */
7704
7705       input_file_compiler
7706         = lookup_compiler (infiles[i].name, input_filename_length,
7707                            infiles[i].language);
7708
7709       if (input_file_compiler)
7710         {
7711           /* Ok, we found an applicable compiler.  Run its spec.  */
7712
7713           if (input_file_compiler->spec[0] == '#')
7714             {
7715               error ("%s: %s compiler not installed on this system",
7716                      gcc_input_filename, &input_file_compiler->spec[1]);
7717               this_file_error = 1;
7718             }
7719           else
7720             {
7721               int value;
7722
7723               if (compare_debug)
7724                 {
7725                   free (debug_check_temp_file[0]);
7726                   debug_check_temp_file[0] = NULL;
7727
7728                   free (debug_check_temp_file[1]);
7729                   debug_check_temp_file[1] = NULL;
7730                 }
7731
7732               value = do_spec (input_file_compiler->spec);
7733               infiles[i].compiled = true;
7734               if (value < 0)
7735                 this_file_error = 1;
7736               else if (compare_debug && debug_check_temp_file[0])
7737                 {
7738                   if (verbose_flag)
7739                     inform (0, "recompiling with -fcompare-debug");
7740
7741                   compare_debug = -compare_debug;
7742                   n_switches = n_switches_debug_check[1];
7743                   n_switches_alloc = n_switches_alloc_debug_check[1];
7744                   switches = switches_debug_check[1];
7745
7746                   value = do_spec (input_file_compiler->spec);
7747
7748                   compare_debug = -compare_debug;
7749                   n_switches = n_switches_debug_check[0];
7750                   n_switches_alloc = n_switches_alloc_debug_check[0];
7751                   switches = switches_debug_check[0];
7752
7753                   if (value < 0)
7754                     {
7755                       error ("during -fcompare-debug recompilation");
7756                       this_file_error = 1;
7757                     }
7758
7759                   gcc_assert (debug_check_temp_file[1]
7760                               && filename_cmp (debug_check_temp_file[0],
7761                                                debug_check_temp_file[1]));
7762
7763                   if (verbose_flag)
7764                     inform (0, "comparing final insns dumps");
7765
7766                   if (compare_files (debug_check_temp_file))
7767                     this_file_error = 1;
7768                 }
7769
7770               if (compare_debug)
7771                 {
7772                   free (debug_check_temp_file[0]);
7773                   debug_check_temp_file[0] = NULL;
7774
7775                   free (debug_check_temp_file[1]);
7776                   debug_check_temp_file[1] = NULL;
7777                 }
7778             }
7779         }
7780
7781       /* If this file's name does not contain a recognized suffix,
7782          record it as explicit linker input.  */
7783
7784       else
7785         explicit_link_files[i] = 1;
7786
7787       /* Clear the delete-on-failure queue, deleting the files in it
7788          if this compilation failed.  */
7789
7790       if (this_file_error)
7791         {
7792           delete_failure_queue ();
7793           errorcount++;
7794         }
7795       /* If this compilation succeeded, don't delete those files later.  */
7796       clear_failure_queue ();
7797     }
7798
7799   /* Reset the input file name to the first compile/object file name, for use
7800      with %b in LINK_SPEC. We use the first input file that we can find
7801      a compiler to compile it instead of using infiles.language since for
7802      languages other than C we use aliases that we then lookup later.  */
7803   if (n_infiles > 0)
7804     {
7805       int i;
7806
7807       for (i = 0; i < n_infiles ; i++)
7808         if (infiles[i].incompiler
7809             || (infiles[i].language && infiles[i].language[0] != '*'))
7810           {
7811             set_input (infiles[i].name);
7812             break;
7813           }
7814     }
7815
7816   if (!seen_error ())
7817     {
7818       /* Make sure INPUT_FILE_NUMBER points to first available open
7819          slot.  */
7820       input_file_number = n_infiles;
7821       if (lang_specific_pre_link ())
7822         errorcount++;
7823     }
7824 }
7825
7826 /* If we have to run the linker, do it now.  */
7827
7828 void
7829 driver::maybe_run_linker (const char *argv0) const
7830 {
7831   size_t i;
7832   int linker_was_run = 0;
7833   int num_linker_inputs;
7834
7835   /* Determine if there are any linker input files.  */
7836   num_linker_inputs = 0;
7837   for (i = 0; (int) i < n_infiles; i++)
7838     if (explicit_link_files[i] || outfiles[i] != NULL)
7839       num_linker_inputs++;
7840
7841   /* Run ld to link all the compiler output files.  */
7842
7843   if (num_linker_inputs > 0 && !seen_error () && print_subprocess_help < 2)
7844     {
7845       int tmp = execution_count;
7846
7847       if (! have_c)
7848         {
7849 #if HAVE_LTO_PLUGIN > 0
7850 #if HAVE_LTO_PLUGIN == 2
7851           const char *fno_use_linker_plugin = "fno-use-linker-plugin";
7852 #else
7853           const char *fuse_linker_plugin = "fuse-linker-plugin";
7854 #endif
7855 #endif
7856
7857           /* We'll use ld if we can't find collect2.  */
7858           if (! strcmp (linker_name_spec, "collect2"))
7859             {
7860               char *s = find_a_file (&exec_prefixes, "collect2", X_OK, false);
7861               if (s == NULL)
7862                 linker_name_spec = "ld";
7863             }
7864
7865 #if HAVE_LTO_PLUGIN > 0
7866 #if HAVE_LTO_PLUGIN == 2
7867           if (!switch_matches (fno_use_linker_plugin,
7868                                fno_use_linker_plugin
7869                                + strlen (fno_use_linker_plugin), 0))
7870 #else
7871           if (switch_matches (fuse_linker_plugin,
7872                               fuse_linker_plugin
7873                               + strlen (fuse_linker_plugin), 0))
7874 #endif
7875             {
7876               char *temp_spec = find_a_file (&exec_prefixes,
7877                                              LTOPLUGINSONAME, R_OK,
7878                                              false);
7879               if (!temp_spec)
7880                 fatal_error (input_location,
7881                              "-fuse-linker-plugin, but %s not found",
7882                              LTOPLUGINSONAME);
7883               linker_plugin_file_spec = convert_white_space (temp_spec);
7884             }
7885 #endif
7886           lto_gcc_spec = argv0;
7887         }
7888
7889       /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
7890          for collect.  */
7891       putenv_from_prefixes (&exec_prefixes, "COMPILER_PATH", false);
7892       putenv_from_prefixes (&startfile_prefixes, LIBRARY_PATH_ENV, true);
7893
7894       if (print_subprocess_help == 1)
7895         {
7896           printf (_("\nLinker options\n==============\n\n"));
7897           printf (_("Use \"-Wl,OPTION\" to pass \"OPTION\""
7898                     " to the linker.\n\n"));
7899           fflush (stdout);
7900         }
7901       int value = do_spec (link_command_spec);
7902       if (value < 0)
7903         errorcount = 1;
7904       linker_was_run = (tmp != execution_count);
7905     }
7906
7907   /* If options said don't run linker,
7908      complain about input files to be given to the linker.  */
7909
7910   if (! linker_was_run && !seen_error ())
7911     for (i = 0; (int) i < n_infiles; i++)
7912       if (explicit_link_files[i]
7913           && !(infiles[i].language && infiles[i].language[0] == '*'))
7914         warning (0, "%s: linker input file unused because linking not done",
7915                  outfiles[i]);
7916 }
7917
7918 /* The end of "main".  */
7919
7920 void
7921 driver::final_actions () const
7922 {
7923   /* Delete some or all of the temporary files we made.  */
7924
7925   if (seen_error ())
7926     delete_failure_queue ();
7927   delete_temp_files ();
7928
7929   if (print_help_list)
7930     {
7931       printf (("\nFor bug reporting instructions, please see:\n"));
7932       printf ("%s\n", bug_report_url);
7933     }
7934 }
7935
7936 /* Determine what the exit code of the driver should be.  */
7937
7938 int
7939 driver::get_exit_code () const
7940 {
7941   return (signal_count != 0 ? 2
7942           : seen_error () ? (pass_exit_codes ? greatest_status : 1)
7943           : 0);
7944 }
7945
7946 /* Find the proper compilation spec for the file name NAME,
7947    whose length is LENGTH.  LANGUAGE is the specified language,
7948    or 0 if this file is to be passed to the linker.  */
7949
7950 static struct compiler *
7951 lookup_compiler (const char *name, size_t length, const char *language)
7952 {
7953   struct compiler *cp;
7954
7955   /* If this was specified by the user to be a linker input, indicate that.  */
7956   if (language != 0 && language[0] == '*')
7957     return 0;
7958
7959   /* Otherwise, look for the language, if one is spec'd.  */
7960   if (language != 0)
7961     {
7962       for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
7963         if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language))
7964           return cp;
7965
7966       error ("language %s not recognized", language);
7967       return 0;
7968     }
7969
7970   /* Look for a suffix.  */
7971   for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
7972     {
7973       if (/* The suffix `-' matches only the file name `-'.  */
7974           (!strcmp (cp->suffix, "-") && !strcmp (name, "-"))
7975           || (strlen (cp->suffix) < length
7976               /* See if the suffix matches the end of NAME.  */
7977               && !strcmp (cp->suffix,
7978                           name + length - strlen (cp->suffix))
7979          ))
7980         break;
7981     }
7982
7983 #if defined (OS2) ||defined (HAVE_DOS_BASED_FILE_SYSTEM)
7984   /* Look again, but case-insensitively this time.  */
7985   if (cp < compilers)
7986     for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
7987       {
7988         if (/* The suffix `-' matches only the file name `-'.  */
7989             (!strcmp (cp->suffix, "-") && !strcmp (name, "-"))
7990             || (strlen (cp->suffix) < length
7991                 /* See if the suffix matches the end of NAME.  */
7992                 && ((!strcmp (cp->suffix,
7993                              name + length - strlen (cp->suffix))
7994                      || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
7995                     && !strcasecmp (cp->suffix,
7996                                     name + length - strlen (cp->suffix)))
7997            ))
7998           break;
7999       }
8000 #endif
8001
8002   if (cp >= compilers)
8003     {
8004       if (cp->spec[0] != '@')
8005         /* A non-alias entry: return it.  */
8006         return cp;
8007
8008       /* An alias entry maps a suffix to a language.
8009          Search for the language; pass 0 for NAME and LENGTH
8010          to avoid infinite recursion if language not found.  */
8011       return lookup_compiler (NULL, 0, cp->spec + 1);
8012     }
8013   return 0;
8014 }
8015 \f
8016 static char *
8017 save_string (const char *s, int len)
8018 {
8019   char *result = XNEWVEC (char, len + 1);
8020
8021   memcpy (result, s, len);
8022   result[len] = 0;
8023   return result;
8024 }
8025
8026 void
8027 pfatal_with_name (const char *name)
8028 {
8029   perror_with_name (name);
8030   delete_temp_files ();
8031   exit (1);
8032 }
8033
8034 static void
8035 perror_with_name (const char *name)
8036 {
8037   error ("%s: %m", name);
8038 }
8039 \f
8040 static inline void
8041 validate_switches_from_spec (const char *spec, bool user)
8042 {
8043   const char *p = spec;
8044   char c;
8045   while ((c = *p++))
8046     if (c == '%' && (*p == '{' || *p == '<' || (*p == 'W' && *++p == '{')))
8047       /* We have a switch spec.  */
8048       p = validate_switches (p + 1, user);
8049 }
8050
8051 static void
8052 validate_all_switches (void)
8053 {
8054   struct compiler *comp;
8055   struct spec_list *spec;
8056
8057   for (comp = compilers; comp->spec; comp++)
8058     validate_switches_from_spec (comp->spec, false);
8059
8060   /* Look through the linked list of specs read from the specs file.  */
8061   for (spec = specs; spec; spec = spec->next)
8062     validate_switches_from_spec (*spec->ptr_spec, spec->user_p);
8063
8064   validate_switches_from_spec (link_command_spec, false);
8065 }
8066
8067 /* Look at the switch-name that comes after START
8068    and mark as valid all supplied switches that match it.  */
8069
8070 static const char *
8071 validate_switches (const char *start, bool user_spec)
8072 {
8073   const char *p = start;
8074   const char *atom;
8075   size_t len;
8076   int i;
8077   bool suffix = false;
8078   bool starred = false;
8079
8080 #define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0)
8081
8082 next_member:
8083   SKIP_WHITE ();
8084
8085   if (*p == '!')
8086     p++;
8087
8088   SKIP_WHITE ();
8089   if (*p == '.' || *p == ',')
8090     suffix = true, p++;
8091
8092   atom = p;
8093   while (ISIDNUM (*p) || *p == '-' || *p == '+' || *p == '='
8094          || *p == ',' || *p == '.' || *p == '@')
8095     p++;
8096   len = p - atom;
8097
8098   if (*p == '*')
8099     starred = true, p++;
8100
8101   SKIP_WHITE ();
8102
8103   if (!suffix)
8104     {
8105       /* Mark all matching switches as valid.  */
8106       for (i = 0; i < n_switches; i++)
8107         if (!strncmp (switches[i].part1, atom, len)
8108             && (starred || switches[i].part1[len] == '\0')
8109             && (switches[i].known || user_spec))
8110               switches[i].validated = true;
8111     }
8112
8113   if (*p) p++;
8114   if (*p && (p[-1] == '|' || p[-1] == '&'))
8115     goto next_member;
8116
8117   if (*p && p[-1] == ':')
8118     {
8119       while (*p && *p != ';' && *p != '}')
8120         {
8121           if (*p == '%')
8122             {
8123               p++;
8124               if (*p == '{' || *p == '<')
8125                 p = validate_switches (p+1, user_spec);
8126               else if (p[0] == 'W' && p[1] == '{')
8127                 p = validate_switches (p+2, user_spec);
8128             }
8129           else
8130             p++;
8131         }
8132
8133       if (*p) p++;
8134       if (*p && p[-1] == ';')
8135         goto next_member;
8136     }
8137
8138   return p;
8139 #undef SKIP_WHITE
8140 }
8141 \f
8142 struct mdswitchstr
8143 {
8144   const char *str;
8145   int len;
8146 };
8147
8148 static struct mdswitchstr *mdswitches;
8149 static int n_mdswitches;
8150
8151 /* Check whether a particular argument was used.  The first time we
8152    canonicalize the switches to keep only the ones we care about.  */
8153
8154 static int
8155 used_arg (const char *p, int len)
8156 {
8157   struct mswitchstr
8158   {
8159     const char *str;
8160     const char *replace;
8161     int len;
8162     int rep_len;
8163   };
8164
8165   static struct mswitchstr *mswitches;
8166   static int n_mswitches;
8167   int i, j;
8168
8169   if (!mswitches)
8170     {
8171       struct mswitchstr *matches;
8172       const char *q;
8173       int cnt = 0;
8174
8175       /* Break multilib_matches into the component strings of string
8176          and replacement string.  */
8177       for (q = multilib_matches; *q != '\0'; q++)
8178         if (*q == ';')
8179           cnt++;
8180
8181       matches
8182         = (struct mswitchstr *) alloca ((sizeof (struct mswitchstr)) * cnt);
8183       i = 0;
8184       q = multilib_matches;
8185       while (*q != '\0')
8186         {
8187           matches[i].str = q;
8188           while (*q != ' ')
8189             {
8190               if (*q == '\0')
8191                 {
8192                 invalid_matches:
8193                   fatal_error (input_location, "multilib spec %qs is invalid",
8194                                multilib_matches);
8195                 }
8196               q++;
8197             }
8198           matches[i].len = q - matches[i].str;
8199
8200           matches[i].replace = ++q;
8201           while (*q != ';' && *q != '\0')
8202             {
8203               if (*q == ' ')
8204                 goto invalid_matches;
8205               q++;
8206             }
8207           matches[i].rep_len = q - matches[i].replace;
8208           i++;
8209           if (*q == ';')
8210             q++;
8211         }
8212
8213       /* Now build a list of the replacement string for switches that we care
8214          about.  Make sure we allocate at least one entry.  This prevents
8215          xmalloc from calling fatal, and prevents us from re-executing this
8216          block of code.  */
8217       mswitches
8218         = XNEWVEC (struct mswitchstr, n_mdswitches + (n_switches ? n_switches : 1));
8219       for (i = 0; i < n_switches; i++)
8220         if ((switches[i].live_cond & SWITCH_IGNORE) == 0)
8221           {
8222             int xlen = strlen (switches[i].part1);
8223             for (j = 0; j < cnt; j++)
8224               if (xlen == matches[j].len
8225                   && ! strncmp (switches[i].part1, matches[j].str, xlen))
8226                 {
8227                   mswitches[n_mswitches].str = matches[j].replace;
8228                   mswitches[n_mswitches].len = matches[j].rep_len;
8229                   mswitches[n_mswitches].replace = (char *) 0;
8230                   mswitches[n_mswitches].rep_len = 0;
8231                   n_mswitches++;
8232                   break;
8233                 }
8234           }
8235
8236       /* Add MULTILIB_DEFAULTS switches too, as long as they were not present
8237          on the command line nor any options mutually incompatible with
8238          them.  */
8239       for (i = 0; i < n_mdswitches; i++)
8240         {
8241           const char *r;
8242
8243           for (q = multilib_options; *q != '\0'; *q && q++)
8244             {
8245               while (*q == ' ')
8246                 q++;
8247
8248               r = q;
8249               while (strncmp (q, mdswitches[i].str, mdswitches[i].len) != 0
8250                      || strchr (" /", q[mdswitches[i].len]) == NULL)
8251                 {
8252                   while (*q != ' ' && *q != '/' && *q != '\0')
8253                     q++;
8254                   if (*q != '/')
8255                     break;
8256                   q++;
8257                 }
8258
8259               if (*q != ' ' && *q != '\0')
8260                 {
8261                   while (*r != ' ' && *r != '\0')
8262                     {
8263                       q = r;
8264                       while (*q != ' ' && *q != '/' && *q != '\0')
8265                         q++;
8266
8267                       if (used_arg (r, q - r))
8268                         break;
8269
8270                       if (*q != '/')
8271                         {
8272                           mswitches[n_mswitches].str = mdswitches[i].str;
8273                           mswitches[n_mswitches].len = mdswitches[i].len;
8274                           mswitches[n_mswitches].replace = (char *) 0;
8275                           mswitches[n_mswitches].rep_len = 0;
8276                           n_mswitches++;
8277                           break;
8278                         }
8279
8280                       r = q + 1;
8281                     }
8282                   break;
8283                 }
8284             }
8285         }
8286     }
8287
8288   for (i = 0; i < n_mswitches; i++)
8289     if (len == mswitches[i].len && ! strncmp (p, mswitches[i].str, len))
8290       return 1;
8291
8292   return 0;
8293 }
8294
8295 static int
8296 default_arg (const char *p, int len)
8297 {
8298   int i;
8299
8300   for (i = 0; i < n_mdswitches; i++)
8301     if (len == mdswitches[i].len && ! strncmp (p, mdswitches[i].str, len))
8302       return 1;
8303
8304   return 0;
8305 }
8306
8307 /* Work out the subdirectory to use based on the options. The format of
8308    multilib_select is a list of elements. Each element is a subdirectory
8309    name followed by a list of options followed by a semicolon. The format
8310    of multilib_exclusions is the same, but without the preceding
8311    directory. First gcc will check the exclusions, if none of the options
8312    beginning with an exclamation point are present, and all of the other
8313    options are present, then we will ignore this completely. Passing
8314    that, gcc will consider each multilib_select in turn using the same
8315    rules for matching the options. If a match is found, that subdirectory
8316    will be used.
8317    A subdirectory name is optionally followed by a colon and the corresponding
8318    multiarch name.  */
8319
8320 static void
8321 set_multilib_dir (void)
8322 {
8323   const char *p;
8324   unsigned int this_path_len;
8325   const char *this_path, *this_arg;
8326   const char *start, *end;
8327   int not_arg;
8328   int ok, ndfltok, first;
8329
8330   n_mdswitches = 0;
8331   start = multilib_defaults;
8332   while (*start == ' ' || *start == '\t')
8333     start++;
8334   while (*start != '\0')
8335     {
8336       n_mdswitches++;
8337       while (*start != ' ' && *start != '\t' && *start != '\0')
8338         start++;
8339       while (*start == ' ' || *start == '\t')
8340         start++;
8341     }
8342
8343   if (n_mdswitches)
8344     {
8345       int i = 0;
8346
8347       mdswitches = XNEWVEC (struct mdswitchstr, n_mdswitches);
8348       for (start = multilib_defaults; *start != '\0'; start = end + 1)
8349         {
8350           while (*start == ' ' || *start == '\t')
8351             start++;
8352
8353           if (*start == '\0')
8354             break;
8355
8356           for (end = start + 1;
8357                *end != ' ' && *end != '\t' && *end != '\0'; end++)
8358             ;
8359
8360           obstack_grow (&multilib_obstack, start, end - start);
8361           obstack_1grow (&multilib_obstack, 0);
8362           mdswitches[i].str = XOBFINISH (&multilib_obstack, const char *);
8363           mdswitches[i++].len = end - start;
8364
8365           if (*end == '\0')
8366             break;
8367         }
8368     }
8369
8370   p = multilib_exclusions;
8371   while (*p != '\0')
8372     {
8373       /* Ignore newlines.  */
8374       if (*p == '\n')
8375         {
8376           ++p;
8377           continue;
8378         }
8379
8380       /* Check the arguments.  */
8381       ok = 1;
8382       while (*p != ';')
8383         {
8384           if (*p == '\0')
8385             {
8386             invalid_exclusions:
8387               fatal_error (input_location, "multilib exclusions %qs is invalid",
8388                            multilib_exclusions);
8389             }
8390
8391           if (! ok)
8392             {
8393               ++p;
8394               continue;
8395             }
8396
8397           this_arg = p;
8398           while (*p != ' ' && *p != ';')
8399             {
8400               if (*p == '\0')
8401                 goto invalid_exclusions;
8402               ++p;
8403             }
8404
8405           if (*this_arg != '!')
8406             not_arg = 0;
8407           else
8408             {
8409               not_arg = 1;
8410               ++this_arg;
8411             }
8412
8413           ok = used_arg (this_arg, p - this_arg);
8414           if (not_arg)
8415             ok = ! ok;
8416
8417           if (*p == ' ')
8418             ++p;
8419         }
8420
8421       if (ok)
8422         return;
8423
8424       ++p;
8425     }
8426
8427   first = 1;
8428   p = multilib_select;
8429
8430   /* Append multilib reuse rules if any.  With those rules, we can reuse
8431      one multilib for certain different options sets.  */
8432   if (strlen (multilib_reuse) > 0)
8433     p = concat (p, multilib_reuse, NULL);
8434
8435   while (*p != '\0')
8436     {
8437       /* Ignore newlines.  */
8438       if (*p == '\n')
8439         {
8440           ++p;
8441           continue;
8442         }
8443
8444       /* Get the initial path.  */
8445       this_path = p;
8446       while (*p != ' ')
8447         {
8448           if (*p == '\0')
8449             {
8450             invalid_select:
8451               fatal_error (input_location, "multilib select %qs %qs is invalid",
8452                            multilib_select, multilib_reuse);
8453             }
8454           ++p;
8455         }
8456       this_path_len = p - this_path;
8457
8458       /* Check the arguments.  */
8459       ok = 1;
8460       ndfltok = 1;
8461       ++p;
8462       while (*p != ';')
8463         {
8464           if (*p == '\0')
8465             goto invalid_select;
8466
8467           if (! ok)
8468             {
8469               ++p;
8470               continue;
8471             }
8472
8473           this_arg = p;
8474           while (*p != ' ' && *p != ';')
8475             {
8476               if (*p == '\0')
8477                 goto invalid_select;
8478               ++p;
8479             }
8480
8481           if (*this_arg != '!')
8482             not_arg = 0;
8483           else
8484             {
8485               not_arg = 1;
8486               ++this_arg;
8487             }
8488
8489           /* If this is a default argument, we can just ignore it.
8490              This is true even if this_arg begins with '!'.  Beginning
8491              with '!' does not mean that this argument is necessarily
8492              inappropriate for this library: it merely means that
8493              there is a more specific library which uses this
8494              argument.  If this argument is a default, we need not
8495              consider that more specific library.  */
8496           ok = used_arg (this_arg, p - this_arg);
8497           if (not_arg)
8498             ok = ! ok;
8499
8500           if (! ok)
8501             ndfltok = 0;
8502
8503           if (default_arg (this_arg, p - this_arg))
8504             ok = 1;
8505
8506           if (*p == ' ')
8507             ++p;
8508         }
8509
8510       if (ok && first)
8511         {
8512           if (this_path_len != 1
8513               || this_path[0] != '.')
8514             {
8515               char *new_multilib_dir = XNEWVEC (char, this_path_len + 1);
8516               char *q;
8517
8518               strncpy (new_multilib_dir, this_path, this_path_len);
8519               new_multilib_dir[this_path_len] = '\0';
8520               q = strchr (new_multilib_dir, ':');
8521               if (q != NULL)
8522                 *q = '\0';
8523               multilib_dir = new_multilib_dir;
8524             }
8525           first = 0;
8526         }
8527
8528       if (ndfltok)
8529         {
8530           const char *q = this_path, *end = this_path + this_path_len;
8531
8532           while (q < end && *q != ':')
8533             q++;
8534           if (q < end)
8535             {
8536               const char *q2 = q + 1, *ml_end = end;
8537               char *new_multilib_os_dir;
8538
8539               while (q2 < end && *q2 != ':')
8540                 q2++;
8541               if (*q2 == ':')
8542                 ml_end = q2;
8543               if (ml_end - q == 1)
8544                 multilib_os_dir = xstrdup (".");
8545               else
8546                 {
8547                   new_multilib_os_dir = XNEWVEC (char, ml_end - q);
8548                   memcpy (new_multilib_os_dir, q + 1, ml_end - q - 1);
8549                   new_multilib_os_dir[ml_end - q - 1] = '\0';
8550                   multilib_os_dir = new_multilib_os_dir;
8551                 }
8552
8553               if (q2 < end && *q2 == ':')
8554                 {
8555                   char *new_multiarch_dir = XNEWVEC (char, end - q2);
8556                   memcpy (new_multiarch_dir, q2 + 1, end - q2 - 1);
8557                   new_multiarch_dir[end - q2 - 1] = '\0';
8558                   multiarch_dir = new_multiarch_dir;
8559                 }
8560               break;
8561             }
8562         }
8563
8564       ++p;
8565     }
8566
8567   if (multilib_dir == NULL && multilib_os_dir != NULL
8568       && strcmp (multilib_os_dir, ".") == 0)
8569     {
8570       free (CONST_CAST (char *, multilib_os_dir));
8571       multilib_os_dir = NULL;
8572     }
8573   else if (multilib_dir != NULL && multilib_os_dir == NULL)
8574     multilib_os_dir = multilib_dir;
8575 }
8576
8577 /* Print out the multiple library subdirectory selection
8578    information.  This prints out a series of lines.  Each line looks
8579    like SUBDIRECTORY;@OPTION@OPTION, with as many options as is
8580    required.  Only the desired options are printed out, the negative
8581    matches.  The options are print without a leading dash.  There are
8582    no spaces to make it easy to use the information in the shell.
8583    Each subdirectory is printed only once.  This assumes the ordering
8584    generated by the genmultilib script. Also, we leave out ones that match
8585    the exclusions.  */
8586
8587 static void
8588 print_multilib_info (void)
8589 {
8590   const char *p = multilib_select;
8591   const char *last_path = 0, *this_path;
8592   int skip;
8593   unsigned int last_path_len = 0;
8594
8595   while (*p != '\0')
8596     {
8597       skip = 0;
8598       /* Ignore newlines.  */
8599       if (*p == '\n')
8600         {
8601           ++p;
8602           continue;
8603         }
8604
8605       /* Get the initial path.  */
8606       this_path = p;
8607       while (*p != ' ')
8608         {
8609           if (*p == '\0')
8610             {
8611             invalid_select:
8612               fatal_error (input_location,
8613                            "multilib select %qs is invalid", multilib_select);
8614             }
8615
8616           ++p;
8617         }
8618
8619       /* When --disable-multilib was used but target defines
8620          MULTILIB_OSDIRNAMES, entries starting with .: (and not starting
8621          with .:: for multiarch configurations) are there just to find
8622          multilib_os_dir, so skip them from output.  */
8623       if (this_path[0] == '.' && this_path[1] == ':' && this_path[2] != ':')
8624         skip = 1;
8625
8626       /* Check for matches with the multilib_exclusions. We don't bother
8627          with the '!' in either list. If any of the exclusion rules match
8628          all of its options with the select rule, we skip it.  */
8629       {
8630         const char *e = multilib_exclusions;
8631         const char *this_arg;
8632
8633         while (*e != '\0')
8634           {
8635             int m = 1;
8636             /* Ignore newlines.  */
8637             if (*e == '\n')
8638               {
8639                 ++e;
8640                 continue;
8641               }
8642
8643             /* Check the arguments.  */
8644             while (*e != ';')
8645               {
8646                 const char *q;
8647                 int mp = 0;
8648
8649                 if (*e == '\0')
8650                   {
8651                   invalid_exclusion:
8652                     fatal_error (input_location,
8653                                  "multilib exclusion %qs is invalid",
8654                                  multilib_exclusions);
8655                   }
8656
8657                 if (! m)
8658                   {
8659                     ++e;
8660                     continue;
8661                   }
8662
8663                 this_arg = e;
8664
8665                 while (*e != ' ' && *e != ';')
8666                   {
8667                     if (*e == '\0')
8668                       goto invalid_exclusion;
8669                     ++e;
8670                   }
8671
8672                 q = p + 1;
8673                 while (*q != ';')
8674                   {
8675                     const char *arg;
8676                     int len = e - this_arg;
8677
8678                     if (*q == '\0')
8679                       goto invalid_select;
8680
8681                     arg = q;
8682
8683                     while (*q != ' ' && *q != ';')
8684                       {
8685                         if (*q == '\0')
8686                           goto invalid_select;
8687                         ++q;
8688                       }
8689
8690                     if (! strncmp (arg, this_arg,
8691                                    (len < q - arg) ? q - arg : len)
8692                         || default_arg (this_arg, e - this_arg))
8693                       {
8694                         mp = 1;
8695                         break;
8696                       }
8697
8698                     if (*q == ' ')
8699                       ++q;
8700                   }
8701
8702                 if (! mp)
8703                   m = 0;
8704
8705                 if (*e == ' ')
8706                   ++e;
8707               }
8708
8709             if (m)
8710               {
8711                 skip = 1;
8712                 break;
8713               }
8714
8715             if (*e != '\0')
8716               ++e;
8717           }
8718       }
8719
8720       if (! skip)
8721         {
8722           /* If this is a duplicate, skip it.  */
8723           skip = (last_path != 0
8724                   && (unsigned int) (p - this_path) == last_path_len
8725                   && ! filename_ncmp (last_path, this_path, last_path_len));
8726
8727           last_path = this_path;
8728           last_path_len = p - this_path;
8729         }
8730
8731       /* If this directory requires any default arguments, we can skip
8732          it.  We will already have printed a directory identical to
8733          this one which does not require that default argument.  */
8734       if (! skip)
8735         {
8736           const char *q;
8737
8738           q = p + 1;
8739           while (*q != ';')
8740             {
8741               const char *arg;
8742
8743               if (*q == '\0')
8744                 goto invalid_select;
8745
8746               if (*q == '!')
8747                 arg = NULL;
8748               else
8749                 arg = q;
8750
8751               while (*q != ' ' && *q != ';')
8752                 {
8753                   if (*q == '\0')
8754                     goto invalid_select;
8755                   ++q;
8756                 }
8757
8758               if (arg != NULL
8759                   && default_arg (arg, q - arg))
8760                 {
8761                   skip = 1;
8762                   break;
8763                 }
8764
8765               if (*q == ' ')
8766                 ++q;
8767             }
8768         }
8769
8770       if (! skip)
8771         {
8772           const char *p1;
8773
8774           for (p1 = last_path; p1 < p && *p1 != ':'; p1++)
8775             putchar (*p1);
8776           putchar (';');
8777         }
8778
8779       ++p;
8780       while (*p != ';')
8781         {
8782           int use_arg;
8783
8784           if (*p == '\0')
8785             goto invalid_select;
8786
8787           if (skip)
8788             {
8789               ++p;
8790               continue;
8791             }
8792
8793           use_arg = *p != '!';
8794
8795           if (use_arg)
8796             putchar ('@');
8797
8798           while (*p != ' ' && *p != ';')
8799             {
8800               if (*p == '\0')
8801                 goto invalid_select;
8802               if (use_arg)
8803                 putchar (*p);
8804               ++p;
8805             }
8806
8807           if (*p == ' ')
8808             ++p;
8809         }
8810
8811       if (! skip)
8812         {
8813           /* If there are extra options, print them now.  */
8814           if (multilib_extra && *multilib_extra)
8815             {
8816               int print_at = TRUE;
8817               const char *q;
8818
8819               for (q = multilib_extra; *q != '\0'; q++)
8820                 {
8821                   if (*q == ' ')
8822                     print_at = TRUE;
8823                   else
8824                     {
8825                       if (print_at)
8826                         putchar ('@');
8827                       putchar (*q);
8828                       print_at = FALSE;
8829                     }
8830                 }
8831             }
8832
8833           putchar ('\n');
8834         }
8835
8836       ++p;
8837     }
8838 }
8839 \f
8840 /* getenv built-in spec function.
8841
8842    Returns the value of the environment variable given by its first
8843    argument, concatenated with the second argument.  If the
8844    environment variable is not defined, a fatal error is issued.  */
8845
8846 static const char *
8847 getenv_spec_function (int argc, const char **argv)
8848 {
8849   char *value;
8850   char *result;
8851   char *ptr;
8852   size_t len;
8853
8854   if (argc != 2)
8855     return NULL;
8856
8857   value = getenv (argv[0]);
8858   if (!value)
8859     fatal_error (input_location,
8860                  "environment variable %qs not defined", argv[0]);
8861
8862   /* We have to escape every character of the environment variable so
8863      they are not interpreted as active spec characters.  A
8864      particularly painful case is when we are reading a variable
8865      holding a windows path complete with \ separators.  */
8866   len = strlen (value) * 2 + strlen (argv[1]) + 1;
8867   result = XNEWVAR (char, len);
8868   for (ptr = result; *value; ptr += 2)
8869     {
8870       ptr[0] = '\\';
8871       ptr[1] = *value++;
8872     }
8873
8874   strcpy (ptr, argv[1]);
8875
8876   return result;
8877 }
8878
8879 /* if-exists built-in spec function.
8880
8881    Checks to see if the file specified by the absolute pathname in
8882    ARGS exists.  Returns that pathname if found.
8883
8884    The usual use for this function is to check for a library file
8885    (whose name has been expanded with %s).  */
8886
8887 static const char *
8888 if_exists_spec_function (int argc, const char **argv)
8889 {
8890   /* Must have only one argument.  */
8891   if (argc == 1 && IS_ABSOLUTE_PATH (argv[0]) && ! access (argv[0], R_OK))
8892     return argv[0];
8893
8894   return NULL;
8895 }
8896
8897 /* if-exists-else built-in spec function.
8898
8899    This is like if-exists, but takes an additional argument which
8900    is returned if the first argument does not exist.  */
8901
8902 static const char *
8903 if_exists_else_spec_function (int argc, const char **argv)
8904 {
8905   /* Must have exactly two arguments.  */
8906   if (argc != 2)
8907     return NULL;
8908
8909   if (IS_ABSOLUTE_PATH (argv[0]) && ! access (argv[0], R_OK))
8910     return argv[0];
8911
8912   return argv[1];
8913 }
8914
8915 /* sanitize built-in spec function.
8916
8917    This returns non-NULL, if sanitizing address, thread or
8918    any of the undefined behavior sanitizers.  */
8919
8920 static const char *
8921 sanitize_spec_function (int argc, const char **argv)
8922 {
8923   if (argc != 1)
8924     return NULL;
8925
8926   if (strcmp (argv[0], "address") == 0)
8927     return (flag_sanitize & SANITIZE_USER_ADDRESS) ? "" : NULL;
8928   if (strcmp (argv[0], "kernel-address") == 0)
8929     return (flag_sanitize & SANITIZE_KERNEL_ADDRESS) ? "" : NULL;
8930   if (strcmp (argv[0], "thread") == 0)
8931     return (flag_sanitize & SANITIZE_THREAD) ? "" : NULL;
8932   if (strcmp (argv[0], "undefined") == 0)
8933     return ((flag_sanitize & (SANITIZE_UNDEFINED | SANITIZE_NONDEFAULT))
8934             && !flag_sanitize_undefined_trap_on_error) ? "" : NULL;
8935   if (strcmp (argv[0], "leak") == 0)
8936     return ((flag_sanitize
8937              & (SANITIZE_ADDRESS | SANITIZE_LEAK | SANITIZE_THREAD))
8938             == SANITIZE_LEAK) ? "" : NULL;
8939   return NULL;
8940 }
8941
8942 /* replace-outfile built-in spec function.
8943
8944    This looks for the first argument in the outfiles array's name and
8945    replaces it with the second argument.  */
8946
8947 static const char *
8948 replace_outfile_spec_function (int argc, const char **argv)
8949 {
8950   int i;
8951   /* Must have exactly two arguments.  */
8952   if (argc != 2)
8953     abort ();
8954
8955   for (i = 0; i < n_infiles; i++)
8956     {
8957       if (outfiles[i] && !filename_cmp (outfiles[i], argv[0]))
8958         outfiles[i] = xstrdup (argv[1]);
8959     }
8960   return NULL;
8961 }
8962
8963 /* remove-outfile built-in spec function.
8964  *
8965  *    This looks for the first argument in the outfiles array's name and
8966  *       removes it.  */
8967
8968 static const char *
8969 remove_outfile_spec_function (int argc, const char **argv)
8970 {
8971   int i;
8972   /* Must have exactly one argument.  */
8973   if (argc != 1)
8974     abort ();
8975
8976   for (i = 0; i < n_infiles; i++)
8977     {
8978       if (outfiles[i] && !filename_cmp (outfiles[i], argv[0]))
8979         outfiles[i] = NULL;
8980     }
8981   return NULL;
8982 }
8983
8984 /* Given two version numbers, compares the two numbers.
8985    A version number must match the regular expression
8986    ([1-9][0-9]*|0)(\.([1-9][0-9]*|0))*
8987 */
8988 static int
8989 compare_version_strings (const char *v1, const char *v2)
8990 {
8991   int rresult;
8992   regex_t r;
8993
8994   if (regcomp (&r, "^([1-9][0-9]*|0)(\\.([1-9][0-9]*|0))*$",
8995                REG_EXTENDED | REG_NOSUB) != 0)
8996     abort ();
8997   rresult = regexec (&r, v1, 0, NULL, 0);
8998   if (rresult == REG_NOMATCH)
8999     fatal_error (input_location, "invalid version number %qs", v1);
9000   else if (rresult != 0)
9001     abort ();
9002   rresult = regexec (&r, v2, 0, NULL, 0);
9003   if (rresult == REG_NOMATCH)
9004     fatal_error (input_location, "invalid version number %qs", v2);
9005   else if (rresult != 0)
9006     abort ();
9007
9008   return strverscmp (v1, v2);
9009 }
9010
9011
9012 /* version_compare built-in spec function.
9013
9014    This takes an argument of the following form:
9015
9016    <comparison-op> <arg1> [<arg2>] <switch> <result>
9017
9018    and produces "result" if the comparison evaluates to true,
9019    and nothing if it doesn't.
9020
9021    The supported <comparison-op> values are:
9022
9023    >=  true if switch is a later (or same) version than arg1
9024    !>  opposite of >=
9025    <   true if switch is an earlier version than arg1
9026    !<  opposite of <
9027    ><  true if switch is arg1 or later, and earlier than arg2
9028    <>  true if switch is earlier than arg1 or is arg2 or later
9029
9030    If the switch is not present, the condition is false unless
9031    the first character of the <comparison-op> is '!'.
9032
9033    For example,
9034    %:version-compare(>= 10.3 mmacosx-version-min= -lmx)
9035    adds -lmx if -mmacosx-version-min=10.3.9 was passed.  */
9036
9037 static const char *
9038 version_compare_spec_function (int argc, const char **argv)
9039 {
9040   int comp1, comp2;
9041   size_t switch_len;
9042   const char *switch_value = NULL;
9043   int nargs = 1, i;
9044   bool result;
9045
9046   if (argc < 3)
9047     fatal_error (input_location, "too few arguments to %%:version-compare");
9048   if (argv[0][0] == '\0')
9049     abort ();
9050   if ((argv[0][1] == '<' || argv[0][1] == '>') && argv[0][0] != '!')
9051     nargs = 2;
9052   if (argc != nargs + 3)
9053     fatal_error (input_location, "too many arguments to %%:version-compare");
9054
9055   switch_len = strlen (argv[nargs + 1]);
9056   for (i = 0; i < n_switches; i++)
9057     if (!strncmp (switches[i].part1, argv[nargs + 1], switch_len)
9058         && check_live_switch (i, switch_len))
9059       switch_value = switches[i].part1 + switch_len;
9060
9061   if (switch_value == NULL)
9062     comp1 = comp2 = -1;
9063   else
9064     {
9065       comp1 = compare_version_strings (switch_value, argv[1]);
9066       if (nargs == 2)
9067         comp2 = compare_version_strings (switch_value, argv[2]);
9068       else
9069         comp2 = -1;  /* This value unused.  */
9070     }
9071
9072   switch (argv[0][0] << 8 | argv[0][1])
9073     {
9074     case '>' << 8 | '=':
9075       result = comp1 >= 0;
9076       break;
9077     case '!' << 8 | '<':
9078       result = comp1 >= 0 || switch_value == NULL;
9079       break;
9080     case '<' << 8:
9081       result = comp1 < 0;
9082       break;
9083     case '!' << 8 | '>':
9084       result = comp1 < 0 || switch_value == NULL;
9085       break;
9086     case '>' << 8 | '<':
9087       result = comp1 >= 0 && comp2 < 0;
9088       break;
9089     case '<' << 8 | '>':
9090       result = comp1 < 0 || comp2 >= 0;
9091       break;
9092
9093     default:
9094       fatal_error (input_location,
9095                    "unknown operator %qs in %%:version-compare", argv[0]);
9096     }
9097   if (! result)
9098     return NULL;
9099
9100   return argv[nargs + 2];
9101 }
9102
9103 /* %:include builtin spec function.  This differs from %include in that it
9104    can be nested inside a spec, and thus be conditionalized.  It takes
9105    one argument, the filename, and looks for it in the startfile path.
9106    The result is always NULL, i.e. an empty expansion.  */
9107
9108 static const char *
9109 include_spec_function (int argc, const char **argv)
9110 {
9111   char *file;
9112
9113   if (argc != 1)
9114     abort ();
9115
9116   file = find_a_file (&startfile_prefixes, argv[0], R_OK, true);
9117   read_specs (file ? file : argv[0], false, false);
9118
9119   return NULL;
9120 }
9121
9122 /* %:find-file spec function.  This function replaces its argument by
9123     the file found through find_file, that is the -print-file-name gcc
9124     program option. */
9125 static const char *
9126 find_file_spec_function (int argc, const char **argv)
9127 {
9128   const char *file;
9129
9130   if (argc != 1)
9131     abort ();
9132
9133   file = find_file (argv[0]);
9134   return file;
9135 }
9136
9137
9138 /* %:find-plugindir spec function.  This function replaces its argument
9139     by the -iplugindir=<dir> option.  `dir' is found through find_file, that
9140     is the -print-file-name gcc program option. */
9141 static const char *
9142 find_plugindir_spec_function (int argc, const char **argv ATTRIBUTE_UNUSED)
9143 {
9144   const char *option;
9145
9146   if (argc != 0)
9147     abort ();
9148
9149   option = concat ("-iplugindir=", find_file ("plugin"), NULL);
9150   return option;
9151 }
9152
9153
9154 /* %:print-asm-header spec function.  Print a banner to say that the
9155    following output is from the assembler.  */
9156
9157 static const char *
9158 print_asm_header_spec_function (int arg ATTRIBUTE_UNUSED,
9159                                 const char **argv ATTRIBUTE_UNUSED)
9160 {
9161   printf (_("Assembler options\n=================\n\n"));
9162   printf (_("Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n\n"));
9163   fflush (stdout);
9164   return NULL;
9165 }
9166
9167 /* Get a random number for -frandom-seed */
9168
9169 static unsigned HOST_WIDE_INT
9170 get_random_number (void)
9171 {
9172   unsigned HOST_WIDE_INT ret = 0;
9173   int fd; 
9174
9175   fd = open ("/dev/urandom", O_RDONLY); 
9176   if (fd >= 0)
9177     {
9178       read (fd, &ret, sizeof (HOST_WIDE_INT));
9179       close (fd);
9180       if (ret)
9181         return ret;
9182     }
9183
9184   /* Get some more or less random data.  */
9185 #ifdef HAVE_GETTIMEOFDAY
9186   {
9187     struct timeval tv;
9188
9189     gettimeofday (&tv, NULL);
9190     ret = tv.tv_sec * 1000 + tv.tv_usec / 1000;
9191   }
9192 #else
9193   {
9194     time_t now = time (NULL);
9195
9196     if (now != (time_t)-1)
9197       ret = (unsigned) now;
9198   }
9199 #endif
9200
9201   return ret ^ getpid ();
9202 }
9203
9204 /* %:compare-debug-dump-opt spec function.  Save the last argument,
9205    expected to be the last -fdump-final-insns option, or generate a
9206    temporary.  */
9207
9208 static const char *
9209 compare_debug_dump_opt_spec_function (int arg,
9210                                       const char **argv ATTRIBUTE_UNUSED)
9211 {
9212   char *ret;
9213   char *name;
9214   int which;
9215   static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
9216
9217   if (arg != 0)
9218     fatal_error (input_location,
9219                  "too many arguments to %%:compare-debug-dump-opt");
9220
9221   do_spec_2 ("%{fdump-final-insns=*:%*}");
9222   do_spec_1 (" ", 0, NULL);
9223
9224   if (argbuf.length () > 0
9225       && strcmp (argv[argbuf.length () - 1], "."))
9226     {
9227       if (!compare_debug)
9228         return NULL;
9229
9230       name = xstrdup (argv[argbuf.length () - 1]);
9231       ret = NULL;
9232     }
9233   else
9234     {
9235       const char *ext = NULL;
9236
9237       if (argbuf.length () > 0)
9238         {
9239           do_spec_2 ("%{o*:%*}%{!o:%{!S:%b%O}%{S:%b.s}}");
9240           ext = ".gkd";
9241         }
9242       else if (!compare_debug)
9243         return NULL;
9244       else
9245         do_spec_2 ("%g.gkd");
9246
9247       do_spec_1 (" ", 0, NULL);
9248
9249       gcc_assert (argbuf.length () > 0);
9250
9251       name = concat (argbuf.last (), ext, NULL);
9252
9253       ret = concat ("-fdump-final-insns=", name, NULL);
9254     }
9255
9256   which = compare_debug < 0;
9257   debug_check_temp_file[which] = name;
9258
9259   if (!which)
9260     {
9261       unsigned HOST_WIDE_INT value = get_random_number ();
9262
9263       sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
9264     }
9265
9266   if (*random_seed)
9267     {
9268       char *tmp = ret;
9269       ret = concat ("%{!frandom-seed=*:-frandom-seed=", random_seed, "} ",
9270                     ret, NULL);
9271       free (tmp);
9272     }
9273
9274   if (which)
9275     *random_seed = 0;
9276
9277   return ret;
9278 }
9279
9280 static const char *debug_auxbase_opt;
9281
9282 /* %:compare-debug-self-opt spec function.  Expands to the options
9283     that are to be passed in the second compilation of
9284     compare-debug.  */
9285
9286 static const char *
9287 compare_debug_self_opt_spec_function (int arg,
9288                                       const char **argv ATTRIBUTE_UNUSED)
9289 {
9290   if (arg != 0)
9291     fatal_error (input_location,
9292                  "too many arguments to %%:compare-debug-self-opt");
9293
9294   if (compare_debug >= 0)
9295     return NULL;
9296
9297   do_spec_2 ("%{c|S:%{o*:%*}}");
9298   do_spec_1 (" ", 0, NULL);
9299
9300   if (argbuf.length () > 0)
9301     debug_auxbase_opt = concat ("-auxbase-strip ",
9302                                 argbuf.last (),
9303                                 NULL);
9304   else
9305     debug_auxbase_opt = NULL;
9306
9307   return concat ("\
9308 %<o %<MD %<MMD %<MF* %<MG %<MP %<MQ* %<MT* \
9309 %<fdump-final-insns=* -w -S -o %j \
9310 %{!fcompare-debug-second:-fcompare-debug-second} \
9311 ", compare_debug_opt, NULL);
9312 }
9313
9314 /* %:compare-debug-auxbase-opt spec function.  Expands to the auxbase
9315     options that are to be passed in the second compilation of
9316     compare-debug.  It expects, as an argument, the basename of the
9317     current input file name, with the .gk suffix appended to it.  */
9318
9319 static const char *
9320 compare_debug_auxbase_opt_spec_function (int arg,
9321                                          const char **argv)
9322 {
9323   char *name;
9324   int len;
9325
9326   if (arg == 0)
9327     fatal_error (input_location,
9328                  "too few arguments to %%:compare-debug-auxbase-opt");
9329
9330   if (arg != 1)
9331     fatal_error (input_location,
9332                  "too many arguments to %%:compare-debug-auxbase-opt");
9333
9334   if (compare_debug >= 0)
9335     return NULL;
9336
9337   len = strlen (argv[0]);
9338   if (len < 3 || strcmp (argv[0] + len - 3, ".gk") != 0)
9339     fatal_error (input_location, "argument to %%:compare-debug-auxbase-opt "
9340                  "does not end in .gk");
9341
9342   if (debug_auxbase_opt)
9343     return debug_auxbase_opt;
9344
9345 #define OPT "-auxbase "
9346
9347   len -= 3;
9348   name = (char*) xmalloc (sizeof (OPT) + len);
9349   memcpy (name, OPT, sizeof (OPT) - 1);
9350   memcpy (name + sizeof (OPT) - 1, argv[0], len);
9351   name[sizeof (OPT) - 1 + len] = '\0';
9352
9353 #undef OPT
9354
9355   return name;
9356 }
9357
9358 /* %:pass-through-libs spec function.  Finds all -l options and input
9359    file names in the lib spec passed to it, and makes a list of them
9360    prepended with the plugin option to cause them to be passed through
9361    to the final link after all the new object files have been added.  */
9362
9363 const char *
9364 pass_through_libs_spec_func (int argc, const char **argv)
9365 {
9366   char *prepended = xstrdup (" ");
9367   int n;
9368   /* Shlemiel the painter's algorithm.  Innately horrible, but at least
9369      we know that there will never be more than a handful of strings to
9370      concat, and it's only once per run, so it's not worth optimising.  */
9371   for (n = 0; n < argc; n++)
9372     {
9373       char *old = prepended;
9374       /* Anything that isn't an option is a full path to an output
9375          file; pass it through if it ends in '.a'.  Among options,
9376          pass only -l.  */
9377       if (argv[n][0] == '-' && argv[n][1] == 'l')
9378         {
9379           const char *lopt = argv[n] + 2;
9380           /* Handle both joined and non-joined -l options.  If for any
9381              reason there's a trailing -l with no joined or following
9382              arg just discard it.  */
9383           if (!*lopt && ++n >= argc)
9384             break;
9385           else if (!*lopt)
9386             lopt = argv[n];
9387           prepended = concat (prepended, "-plugin-opt=-pass-through=-l",
9388                 lopt, " ", NULL);
9389         }
9390       else if (!strcmp (".a", argv[n] + strlen (argv[n]) - 2))
9391         {
9392           prepended = concat (prepended, "-plugin-opt=-pass-through=",
9393                 argv[n], " ", NULL);
9394         }
9395       if (prepended != old)
9396         free (old);
9397     }
9398   return prepended;
9399 }
9400
9401 /* %:replace-extension spec function.  Replaces the extension of the
9402    first argument with the second argument.  */
9403
9404 const char *
9405 replace_extension_spec_func (int argc, const char **argv)
9406 {
9407   char *name;
9408   char *p;
9409   char *result;
9410   int i;
9411
9412   if (argc != 2)
9413     fatal_error (input_location, "too few arguments to %%:replace-extension");
9414
9415   name = xstrdup (argv[0]);
9416
9417   for (i = strlen (name) - 1; i >= 0; i--)
9418     if (IS_DIR_SEPARATOR (name[i]))
9419       break;
9420
9421   p = strrchr (name + i + 1, '.');
9422   if (p != NULL)
9423       *p = '\0';
9424
9425   result = concat (name, argv[1], NULL);
9426
9427   free (name);
9428   return result;
9429 }
9430
9431 /* Insert backslash before spaces in ORIG (usually a file path), to 
9432    avoid being broken by spec parser.
9433
9434    This function is needed as do_spec_1 treats white space (' ' and '\t')
9435    as the end of an argument. But in case of -plugin /usr/gcc install/xxx.so,
9436    the file name should be treated as a single argument rather than being
9437    broken into multiple. Solution is to insert '\\' before the space in a 
9438    file name.
9439    
9440    This function converts and only converts all occurrence of ' ' 
9441    to '\\' + ' ' and '\t' to '\\' + '\t'.  For example:
9442    "a b"  -> "a\\ b"
9443    "a  b" -> "a\\ \\ b"
9444    "a\tb" -> "a\\\tb"
9445    "a\\ b" -> "a\\\\ b"
9446
9447    orig: input null-terminating string that was allocated by xalloc. The
9448    memory it points to might be freed in this function. Behavior undefined
9449    if ORIG wasn't xalloced or was freed already at entry.
9450
9451    Return: ORIG if no conversion needed. Otherwise a newly allocated string
9452    that was converted from ORIG.  */
9453
9454 static char *
9455 convert_white_space (char *orig)
9456 {
9457   int len, number_of_space = 0;
9458
9459   for (len = 0; orig[len]; len++)
9460     if (orig[len] == ' ' || orig[len] == '\t') number_of_space++;
9461
9462   if (number_of_space)
9463     {
9464       char *new_spec = (char *) xmalloc (len + number_of_space + 1);
9465       int j, k;
9466       for (j = 0, k = 0; j <= len; j++, k++)
9467         {
9468           if (orig[j] == ' ' || orig[j] == '\t')
9469             new_spec[k++] = '\\';
9470           new_spec[k] = orig[j];
9471         }
9472       free (orig);
9473       return new_spec;
9474   }
9475   else
9476     return orig;
9477 }