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