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