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