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