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