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