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