1 /* Compiler driver program that can handle many languages.
2 Copyright (C) 1987-2013 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 /* This program is the user interface to the C compiler and possibly to
21 other compilers. It is used because compilation is a complicated procedure
22 which involves running several programs and passing temporary files between
23 them, forwarding the users switches to those programs selectively,
24 and deleting the temporary files at the end.
26 CC recognizes how to compile each input file by suffixes in the file names.
27 Once it knows which kind of compilation to perform, the procedure for
28 compilation is specified by a string called a "spec". */
32 #include "coretypes.h"
33 #include "multilib.h" /* before tm.h */
40 #include "diagnostic.h"
45 #include "filenames.h"
47 /* By default there is no special suffix for target executables. */
48 /* FIXME: when autoconf is fixed, remove the host check - dj */
49 #if defined(TARGET_EXECUTABLE_SUFFIX) && defined(HOST_EXECUTABLE_SUFFIX)
50 #define HAVE_TARGET_EXECUTABLE_SUFFIX
53 /* By default there is no special suffix for host executables. */
54 #ifdef HOST_EXECUTABLE_SUFFIX
55 #define HAVE_HOST_EXECUTABLE_SUFFIX
57 #define HOST_EXECUTABLE_SUFFIX ""
60 /* By default, the suffix for target object files is ".o". */
61 #ifdef TARGET_OBJECT_SUFFIX
62 #define HAVE_TARGET_OBJECT_SUFFIX
64 #define TARGET_OBJECT_SUFFIX ".o"
67 static const char dir_separator_str
[] = { DIR_SEPARATOR
, 0 };
69 /* Most every one is fine with LIBRARY_PATH. For some, it conflicts. */
70 #ifndef LIBRARY_PATH_ENV
71 #define LIBRARY_PATH_ENV "LIBRARY_PATH"
74 /* If a stage of compilation returns an exit status >= 1,
75 compilation of that file ceases. */
77 #define MIN_FATAL_STATUS 1
79 /* Flag set by cppspec.c to 1. */
82 /* Flag set to nonzero if an @file argument has been supplied to gcc. */
83 static bool at_file_supplied
;
85 /* Definition of string containing the arguments given to configure. */
86 #include "configargs.h"
88 /* Flag saying to print the command line options understood by gcc and its
91 static int print_help_list
;
93 /* Flag saying to print the version of gcc and its sub-processes. */
95 static int print_version
;
97 /* Flag indicating whether we should ONLY print the command and
98 arguments (like verbose_flag) without executing the command.
99 Displayed arguments are quoted so that the generated command
100 line is suitable for execution. This is intended for use in
101 shell scripts to capture the driver-generated command line. */
102 static int verbose_only_flag
;
104 /* Flag indicating how to print command line options of sub-processes. */
106 static int print_subprocess_help
;
108 /* Whether we should report subprocess execution times to a file. */
110 FILE *report_times_to_file
= NULL
;
112 /* Nonzero means place this string before uses of /, so that include
113 and library files can be found in an alternate location. */
115 #ifdef TARGET_SYSTEM_ROOT
116 static const char *target_system_root
= TARGET_SYSTEM_ROOT
;
118 static const char *target_system_root
= 0;
121 /* Nonzero means pass the updated target_system_root to the compiler. */
123 static int target_system_root_changed
;
125 /* Nonzero means append this string to target_system_root. */
127 static const char *target_sysroot_suffix
= 0;
129 /* Nonzero means append this string to target_system_root for headers. */
131 static const char *target_sysroot_hdrs_suffix
= 0;
133 /* Nonzero means write "temp" files in source directory
134 and use the source file's name in them, and don't delete them. */
136 static enum save_temps
{
137 SAVE_TEMPS_NONE
, /* no -save-temps */
138 SAVE_TEMPS_CWD
, /* -save-temps in current directory */
139 SAVE_TEMPS_OBJ
/* -save-temps in object directory */
142 /* Output file to use to get the object directory for -save-temps=obj */
143 static char *save_temps_prefix
= 0;
144 static size_t save_temps_length
= 0;
146 /* The compiler version. */
148 static const char *compiler_version
;
150 /* The target version. */
152 static const char *const spec_version
= DEFAULT_TARGET_VERSION
;
154 /* The target machine. */
156 static const char *spec_machine
= DEFAULT_TARGET_MACHINE
;
158 /* Nonzero if cross-compiling.
159 When -b is used, the value comes from the `specs' file. */
161 #ifdef CROSS_DIRECTORY_STRUCTURE
162 static const char *cross_compile
= "1";
164 static const char *cross_compile
= "0";
167 /* Greatest exit code of sub-processes that has been encountered up to
169 static int greatest_status
= 1;
171 /* This is the obstack which we use to allocate many strings. */
173 static struct obstack obstack
;
175 /* This is the obstack to build an environment variable to pass to
176 collect2 that describes all of the relevant switches of what to
177 pass the compiler in building the list of pointers to constructors
180 static struct obstack collect_obstack
;
182 /* Forward declaration for prototypes. */
186 static void init_spec (void);
187 static void store_arg (const char *, int, int);
188 static void insert_wrapper (const char *);
189 static char *load_specs (const char *);
190 static void read_specs (const char *, bool, bool);
191 static void set_spec (const char *, const char *, bool);
192 static struct compiler
*lookup_compiler (const char *, size_t, const char *);
193 static char *build_search_list (const struct path_prefix
*, const char *,
195 static void xputenv (const char *);
196 static void putenv_from_prefixes (const struct path_prefix
*, const char *,
198 static int access_check (const char *, int);
199 static char *find_a_file (const struct path_prefix
*, const char *, int, bool);
200 static void add_prefix (struct path_prefix
*, const char *, const char *,
202 static void add_sysrooted_prefix (struct path_prefix
*, const char *,
203 const char *, int, int, int);
204 static char *skip_whitespace (char *);
205 static void delete_if_ordinary (const char *);
206 static void delete_temp_files (void);
207 static void delete_failure_queue (void);
208 static void clear_failure_queue (void);
209 static int check_live_switch (int, int);
210 static const char *handle_braces (const char *);
211 static inline bool input_suffix_matches (const char *, const char *);
212 static inline bool switch_matches (const char *, const char *, int);
213 static inline void mark_matching_switches (const char *, const char *, int);
214 static inline void process_marked_switches (void);
215 static const char *process_brace_body (const char *, const char *, const char *, int, int);
216 static const struct spec_function
*lookup_spec_function (const char *);
217 static const char *eval_spec_function (const char *, const char *);
218 static const char *handle_spec_function (const char *, bool *);
219 static char *save_string (const char *, int);
220 static void set_collect_gcc_options (void);
221 static int do_spec_1 (const char *, int, const char *);
222 static int do_spec_2 (const char *);
223 static void do_option_spec (const char *, const char *);
224 static void do_self_spec (const char *);
225 static const char *find_file (const char *);
226 static int is_directory (const char *, bool);
227 static const char *validate_switches (const char *, bool);
228 static void validate_all_switches (void);
229 static inline void validate_switches_from_spec (const char *, bool);
230 static void give_switch (int, int);
231 static int used_arg (const char *, int);
232 static int default_arg (const char *, int);
233 static void set_multilib_dir (void);
234 static void print_multilib_info (void);
235 static void perror_with_name (const char *);
236 static void display_help (void);
237 static void add_preprocessor_option (const char *, int);
238 static void add_assembler_option (const char *, int);
239 static void add_linker_option (const char *, int);
240 static void process_command (unsigned int, struct cl_decoded_option
*);
241 static int execute (void);
242 static void alloc_args (void);
243 static void clear_args (void);
244 static void fatal_signal (int);
245 #if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC)
246 static void init_gcc_specs (struct obstack
*, const char *, const char *,
249 #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
250 static const char *convert_filename (const char *, int, int);
253 static const char *getenv_spec_function (int, const char **);
254 static const char *if_exists_spec_function (int, const char **);
255 static const char *if_exists_else_spec_function (int, const char **);
256 static const char *sanitize_spec_function (int, const char **);
257 static const char *replace_outfile_spec_function (int, const char **);
258 static const char *remove_outfile_spec_function (int, const char **);
259 static const char *version_compare_spec_function (int, const char **);
260 static const char *include_spec_function (int, const char **);
261 static const char *find_file_spec_function (int, const char **);
262 static const char *find_plugindir_spec_function (int, const char **);
263 static const char *print_asm_header_spec_function (int, const char **);
264 static const char *compare_debug_dump_opt_spec_function (int, const char **);
265 static const char *compare_debug_self_opt_spec_function (int, const char **);
266 static const char *compare_debug_auxbase_opt_spec_function (int, const char **);
267 static const char *pass_through_libs_spec_func (int, const char **);
268 static const char *replace_extension_spec_func (int, const char **);
269 static char *convert_white_space (char *);
271 /* The Specs Language
273 Specs are strings containing lines, each of which (if not blank)
274 is made up of a program name, and arguments separated by spaces.
275 The program name must be exact and start from root, since no path
276 is searched and it is unreliable to depend on the current working directory.
277 Redirection of input or output is not supported; the subprograms must
278 accept filenames saying what files to read and write.
280 In addition, the specs can contain %-sequences to substitute variable text
281 or for conditional text. Here is a table of all defined %-sequences.
282 Note that spaces are not generated automatically around the results of
283 expanding these sequences; therefore, you can concatenate them together
284 or with constant text in a single argument.
286 %% substitute one % into the program name or argument.
287 %i substitute the name of the input file being processed.
288 %b substitute the basename of the input file being processed.
289 This is the substring up to (and not including) the last period
290 and not including the directory unless -save-temps was specified
291 to put temporaries in a different location.
292 %B same as %b, but include the file suffix (text after the last period).
294 substitute a file name that has suffix SUFFIX and is chosen
295 once per compilation, and mark the argument a la %d. To reduce
296 exposure to denial-of-service attacks, the file name is now
297 chosen in a way that is hard to predict even when previously
298 chosen file names are known. For example, `%g.s ... %g.o ... %g.s'
299 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX matches
300 the regexp "[.0-9A-Za-z]*%O"; "%O" is treated exactly as if it
301 had been pre-processed. Previously, %g was simply substituted
302 with a file name chosen once per compilation, without regard
303 to any appended suffix (which was therefore treated just like
304 ordinary text), making such attacks more likely to succeed.
306 like %g, but if -pipe is in effect, expands simply to "-".
308 like %g, but if -pipe is in effect, expands to nothing. (We have both
309 %| and %m to accommodate differences between system assemblers; see
310 the AS_NEEDS_DASH_FOR_PIPED_INPUT target macro.)
312 like %g, but generates a new temporary file name even if %uSUFFIX
315 substitutes the last file name generated with %uSUFFIX, generating a
316 new one if there is no such last file name. In the absence of any
317 %uSUFFIX, this is just like %gSUFFIX, except they don't share
318 the same suffix "space", so `%g.s ... %U.s ... %g.s ... %U.s'
319 would involve the generation of two distinct file names, one
320 for each `%g.s' and another for each `%U.s'. Previously, %U was
321 simply substituted with a file name chosen for the previous %u,
322 without regard to any appended suffix.
324 substitutes the name of the HOST_BIT_BUCKET, if any, and if it is
325 writable, and if save-temps is off; otherwise, substitute the name
326 of a temporary file, just like %u. This temporary file is not
327 meant for communication between processes, but rather as a junk
330 substitutes .SUFFIX for the suffixes of a matched switch's args when
331 it is subsequently output with %*. SUFFIX is terminated by the next
333 %d marks the argument containing or following the %d as a
334 temporary file name, so that that file will be deleted if GCC exits
335 successfully. Unlike %g, this contributes no text to the argument.
336 %w marks the argument containing or following the %w as the
337 "output file" of this compilation. This puts the argument
338 into the sequence of arguments that %o will substitute later.
339 %V indicates that this compilation produces no "output file".
341 like %{...} but mark last argument supplied within
342 as a file to be deleted on failure.
343 %o substitutes the names of all the output files, with spaces
344 automatically placed around them. You should write spaces
345 around the %o as well or the results are undefined.
346 %o is for use in the specs for running the linker.
347 Input files whose names have no recognized suffix are not compiled
348 at all, but they are included among the output files, so they will
350 %O substitutes the suffix for object files. Note that this is
351 handled specially when it immediately follows %g, %u, or %U
352 (with or without a suffix argument) because of the need for
353 those to form complete file names. The handling is such that
354 %O is treated exactly as if it had already been substituted,
355 except that %g, %u, and %U do not currently support additional
356 SUFFIX characters following %O as they would following, for
358 %I Substitute any of -iprefix (made from GCC_EXEC_PREFIX), -isysroot
359 (made from TARGET_SYSTEM_ROOT), -isystem (made from COMPILER_PATH
360 and -B options) and -imultilib as necessary.
361 %s current argument is the name of a library or startup file of some sort.
362 Search for that file in a standard list of directories
363 and substitute the full name found.
364 %eSTR Print STR as an error message. STR is terminated by a newline.
365 Use this when inconsistent options are detected.
366 %nSTR Print STR as a notice. STR is terminated by a newline.
367 %x{OPTION} Accumulate an option for %X.
368 %X Output the accumulated linker options specified by compilations.
369 %Y Output the accumulated assembler options specified by compilations.
370 %Z Output the accumulated preprocessor options specified by compilations.
371 %a process ASM_SPEC as a spec.
372 This allows config.h to specify part of the spec for running as.
373 %A process ASM_FINAL_SPEC as a spec. A capital A is actually
374 used here. This can be used to run a post-processor after the
375 assembler has done its job.
376 %D Dump out a -L option for each directory in startfile_prefixes.
377 If multilib_dir is set, extra entries are generated with it affixed.
378 %l process LINK_SPEC as a spec.
379 %L process LIB_SPEC as a spec.
380 %M Output multilib_os_dir.
381 %G process LIBGCC_SPEC as a spec.
382 %R Output the concatenation of target_system_root and
383 target_sysroot_suffix.
384 %S process STARTFILE_SPEC as a spec. A capital S is actually used here.
385 %E process ENDFILE_SPEC as a spec. A capital E is actually used here.
386 %C process CPP_SPEC as a spec.
387 %1 process CC1_SPEC as a spec.
388 %2 process CC1PLUS_SPEC as a spec.
389 %* substitute the variable part of a matched option. (See below.)
390 Note that each comma in the substituted string is replaced by
391 a single space. A space is appended after the last substition
392 unless there is more text in current sequence.
393 %<S remove all occurrences of -S from the command line.
394 Note - this command is position dependent. % commands in the
395 spec string before this one will see -S, % commands in the
396 spec string after this one will not.
397 %>S Similar to "%<S", but keep it in the GCC command line.
398 %<S* remove all occurrences of all switches beginning with -S from the
401 Call the named function FUNCTION, passing it ARGS. ARGS is
402 first processed as a nested spec string, then split into an
403 argument vector in the usual fashion. The function returns
404 a string which is processed as if it had appeared literally
405 as part of the current spec.
406 %{S} substitutes the -S switch, if that switch was given to GCC.
407 If that switch was not specified, this substitutes nothing.
408 Here S is a metasyntactic variable.
409 %{S*} substitutes all the switches specified to GCC whose names start
410 with -S. This is used for -o, -I, etc; switches that take
411 arguments. GCC considers `-o foo' as being one switch whose
412 name starts with `o'. %{o*} would substitute this text,
413 including the space; thus, two arguments would be generated.
414 %{S*&T*} likewise, but preserve order of S and T options (the order
415 of S and T in the spec is not significant). Can be any number
416 of ampersand-separated variables; for each the wild card is
417 optional. Useful for CPP as %{D*&U*&A*}.
419 %{S:X} substitutes X, if the -S switch was given to GCC.
420 %{!S:X} substitutes X, if the -S switch was NOT given to GCC.
421 %{S*:X} substitutes X if one or more switches whose names start
422 with -S was given to GCC. Normally X is substituted only
423 once, no matter how many such switches appeared. However,
424 if %* appears somewhere in X, then X will be substituted
425 once for each matching switch, with the %* replaced by the
426 part of that switch that matched the '*'. A space will be
427 appended after the last substition unless there is more
428 text in current sequence.
429 %{.S:X} substitutes X, if processing a file with suffix S.
430 %{!.S:X} substitutes X, if NOT processing a file with suffix S.
431 %{,S:X} substitutes X, if processing a file which will use spec S.
432 %{!,S:X} substitutes X, if NOT processing a file which will use spec S.
434 %{S|T:X} substitutes X if either -S or -T was given to GCC. This may be
435 combined with '!', '.', ',', and '*' as above binding stronger
437 If %* appears in X, all of the alternatives must be starred, and
438 only the first matching alternative is substituted.
439 %{%:function(args):X}
440 Call function named FUNCTION with args ARGS. If the function
441 returns non-NULL, then X is substituted, if it returns
442 NULL, it isn't substituted.
443 %{S:X; if S was given to GCC, substitutes X;
444 T:Y; else if T was given to GCC, substitutes Y;
445 :D} else substitutes D. There can be as many clauses as you need.
446 This may be combined with '.', '!', ',', '|', and '*' as above.
448 %(Spec) processes a specification defined in a specs file as *Spec:
450 The conditional text X in a %{S:X} or similar construct may contain
451 other nested % constructs or spaces, or even newlines. They are
452 processed as usual, as described above. Trailing white space in X is
453 ignored. White space may also appear anywhere on the left side of the
454 colon in these constructs, except between . or * and the corresponding
457 The -O, -f, -g, -m, and -W switches are handled specifically in these
458 constructs. If another value of -O or the negated form of a -f, -m, or
459 -W switch is found later in the command line, the earlier switch
460 value is ignored, except with {S*} where S is just one letter; this
461 passes all matching options.
463 The character | at the beginning of the predicate text is used to indicate
464 that a command should be piped to the following command, but only if -pipe
467 Note that it is built into GCC which switches take arguments and which
468 do not. You might think it would be useful to generalize this to
469 allow each compiler's spec to say which switches take arguments. But
470 this cannot be done in a consistent fashion. GCC cannot even decide
471 which input files have been specified without knowing which switches
472 take arguments, and it must know which input files to compile in order
473 to tell which compilers to run.
475 GCC also knows implicitly that arguments starting in `-l' are to be
476 treated as compiler output files, and passed to the linker in their
477 proper position among the other output files. */
479 /* Define the macros used for specs %a, %l, %L, %S, %C, %1. */
481 /* config.h can define ASM_SPEC to provide extra args to the assembler
482 or extra switch-translations. */
487 /* config.h can define ASM_FINAL_SPEC to run a post processor after
488 the assembler has run. */
489 #ifndef ASM_FINAL_SPEC
490 #define ASM_FINAL_SPEC \
492 objcopy --extract-dwo \
493 %{c:%{o*:%*}%{!o*:%b%O}}%{!c:%U%O} \
494 %{c:%{o*:%:replace-extension(%{o*:%*} .dwo)}%{!o*:%b.dwo}}%{!c:%b.dwo} \n\
495 objcopy --strip-dwo \
496 %{c:%{o*:%*}%{!o*:%b%O}}%{!c:%U%O} \
500 /* config.h can define CPP_SPEC to provide extra args to the C preprocessor
501 or extra switch-translations. */
506 /* config.h can define CC1_SPEC to provide extra args to cc1 and cc1plus
507 or extra switch-translations. */
512 /* config.h can define CC1PLUS_SPEC to provide extra args to cc1plus
513 or extra switch-translations. */
515 #define CC1PLUS_SPEC ""
518 /* config.h can define LINK_SPEC to provide extra args to the linker
519 or extra switch-translations. */
524 /* config.h can define LIB_SPEC to override the default libraries. */
526 #define LIB_SPEC "%{!shared:%{g*:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}"
529 /* When using -fsplit-stack we need to wrap pthread_create, in order
530 to initialize the stack guard. We always use wrapping, rather than
531 shared library ordering, and we keep the wrapper function in
532 libgcc. This is not yet a real spec, though it could become one;
533 it is currently just stuffed into LINK_SPEC. FIXME: This wrapping
534 only works with GNU ld and gold. */
535 #define STACK_SPLIT_SPEC " %{fsplit-stack: --wrap=pthread_create}"
538 #ifdef STATIC_LIBASAN_LIBS
539 #define ADD_STATIC_LIBASAN_LIBS \
540 " %{static-libasan:" STATIC_LIBASAN_LIBS "}"
542 #define ADD_STATIC_LIBASAN_LIBS
544 #ifdef LIBASAN_EARLY_SPEC
545 #define LIBASAN_SPEC ADD_STATIC_LIBASAN_LIBS
546 #elif defined(HAVE_LD_STATIC_DYNAMIC)
547 #define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION \
548 "} -lasan %{static-libasan:" LD_DYNAMIC_OPTION "}" \
549 ADD_STATIC_LIBASAN_LIBS
551 #define LIBASAN_SPEC "-lasan" ADD_STATIC_LIBASAN_LIBS
555 #ifndef LIBASAN_EARLY_SPEC
556 #define LIBASAN_EARLY_SPEC ""
560 #ifdef STATIC_LIBTSAN_LIBS
561 #define ADD_STATIC_LIBTSAN_LIBS \
562 " %{static-libtsan:" STATIC_LIBTSAN_LIBS "}"
564 #define ADD_STATIC_LIBTSAN_LIBS
566 #ifdef LIBTSAN_EARLY_SPEC
567 #define LIBTSAN_SPEC ADD_STATIC_LIBTSAN_LIBS
568 #elif defined(HAVE_LD_STATIC_DYNAMIC)
569 #define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \
570 "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \
571 ADD_STATIC_LIBTSAN_LIBS
573 #define LIBTSAN_SPEC "-ltsan" ADD_STATIC_LIBTSAN_LIBS
577 #ifndef LIBTSAN_EARLY_SPEC
578 #define LIBTSAN_EARLY_SPEC ""
581 #ifndef LIBUBSAN_SPEC
582 #ifdef STATIC_LIBUBSAN_LIBS
583 #define ADD_STATIC_LIBUBSAN_LIBS \
584 " %{static-libubsan:" STATIC_LIBUBSAN_LIBS "}"
586 #define ADD_STATIC_LIBUBSAN_LIBS
588 #ifdef LIBUBSAN_EARLY_SPEC
589 #define LIBUBSAN_SPEC ADD_STATIC_LIBUBSAN_LIBS
590 #elif defined(HAVE_LD_STATIC_DYNAMIC)
591 #define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION \
592 "} -lubsan %{static-libubsan:" LD_DYNAMIC_OPTION "}" \
593 ADD_STATIC_LIBUBSAN_LIBS
595 #define LIBUBSAN_SPEC "-lubsan" ADD_STATIC_LIBUBSAN_LIBS
599 #ifndef LIBUBSAN_EARLY_SPEC
600 #define LIBUBSAN_EARLY_SPEC ""
603 /* config.h can define LIBGCC_SPEC to override how and when libgcc.a is
606 #if defined(REAL_LIBGCC_SPEC)
607 #define LIBGCC_SPEC REAL_LIBGCC_SPEC
608 #elif defined(LINK_LIBGCC_SPECIAL_1)
609 /* Have gcc do the search for libgcc.a. */
610 #define LIBGCC_SPEC "libgcc.a%s"
612 #define LIBGCC_SPEC "-lgcc"
616 /* config.h can define STARTFILE_SPEC to override the default crt0 files. */
617 #ifndef STARTFILE_SPEC
618 #define STARTFILE_SPEC \
619 "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}}"
622 /* config.h can define ENDFILE_SPEC to override the default crtn files. */
624 #define ENDFILE_SPEC ""
628 #define LINKER_NAME "collect2"
631 #ifdef HAVE_AS_DEBUG_PREFIX_MAP
632 #define ASM_MAP " %{fdebug-prefix-map=*:--debug-prefix-map %*}"
637 /* Define ASM_DEBUG_SPEC to be a spec suitable for translating '-g'
639 #ifndef ASM_DEBUG_SPEC
640 # if defined(DBX_DEBUGGING_INFO) && defined(DWARF2_DEBUGGING_INFO) \
641 && defined(HAVE_AS_GDWARF2_DEBUG_FLAG) && defined(HAVE_AS_GSTABS_DEBUG_FLAG)
642 # define ASM_DEBUG_SPEC \
643 (PREFERRED_DEBUGGING_TYPE == DBX_DEBUG \
644 ? "%{!g0:%{gdwarf*:--gdwarf2}%{!gdwarf*:%{g*:--gstabs}}}" ASM_MAP \
645 : "%{!g0:%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}}" ASM_MAP)
647 # if defined(DBX_DEBUGGING_INFO) && defined(HAVE_AS_GSTABS_DEBUG_FLAG)
648 # define ASM_DEBUG_SPEC "%{g*:%{!g0:--gstabs}}" ASM_MAP
650 # if defined(DWARF2_DEBUGGING_INFO) && defined(HAVE_AS_GDWARF2_DEBUG_FLAG)
651 # define ASM_DEBUG_SPEC "%{g*:%{!g0:--gdwarf2}}" ASM_MAP
655 #ifndef ASM_DEBUG_SPEC
656 # define ASM_DEBUG_SPEC ""
659 /* Here is the spec for running the linker, after compiling all files. */
661 /* This is overridable by the target in case they need to specify the
662 -lgcc and -lc order specially, yet not require them to override all
663 of LINK_COMMAND_SPEC. */
664 #ifndef LINK_GCC_C_SEQUENCE_SPEC
665 #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G"
668 #ifndef LINK_SSP_SPEC
669 #ifdef TARGET_LIBC_PROVIDES_SSP
670 #define LINK_SSP_SPEC "%{fstack-protector:}"
672 #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-strong|fstack-protector-all:-lssp_nonshared -lssp}"
676 #ifndef LINK_PIE_SPEC
678 #define LINK_PIE_SPEC "%{pie:-pie} "
680 #define LINK_PIE_SPEC "%{pie:} "
684 #ifndef LINK_BUILDID_SPEC
685 # if defined(HAVE_LD_BUILDID) && defined(ENABLE_LD_BUILDID)
686 # define LINK_BUILDID_SPEC "%{!r:--build-id} "
690 /* Conditional to test whether the LTO plugin is used or not.
691 FIXME: For slim LTO we will need to enable plugin unconditionally. This
692 still cause problems with PLUGIN_LD != LD and when plugin is built but
693 not useable. For GCC 4.6 we don't support slim LTO and thus we can enable
694 plugin only when LTO is enabled. We still honor explicit
695 -fuse-linker-plugin if the linker used understands -plugin. */
697 /* The linker has some plugin support. */
698 #if HAVE_LTO_PLUGIN > 0
699 /* The linker used has full plugin support, use LTO plugin by default. */
700 #if HAVE_LTO_PLUGIN == 2
701 #define PLUGIN_COND "!fno-use-linker-plugin:%{flto|flto=*|fuse-linker-plugin"
702 #define PLUGIN_COND_CLOSE "}"
704 /* The linker used has limited plugin support, use LTO plugin with explicit
705 -fuse-linker-plugin. */
706 #define PLUGIN_COND "fuse-linker-plugin"
707 #define PLUGIN_COND_CLOSE ""
709 #define LINK_PLUGIN_SPEC \
711 -plugin %(linker_plugin_file) \
712 -plugin-opt=%(lto_wrapper) \
713 -plugin-opt=-fresolution=%u.res \
714 %{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}} \
717 /* The linker used doesn't support -plugin, reject -fuse-linker-plugin. */
718 #define LINK_PLUGIN_SPEC "%{fuse-linker-plugin:\
719 %e-fuse-linker-plugin is not supported in this configuration}"
722 /* Linker command line options for -fsanitize= early on the command line. */
723 #ifndef SANITIZER_EARLY_SPEC
724 #define SANITIZER_EARLY_SPEC "\
725 %{!nostdlib:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_EARLY_SPEC "} \
726 %{%:sanitize(thread):" LIBTSAN_EARLY_SPEC "} \
727 %{%:sanitize(undefined):" LIBUBSAN_EARLY_SPEC "}}}"
730 /* Linker command line options for -fsanitize= late on the command line. */
731 #ifndef SANITIZER_SPEC
732 #define SANITIZER_SPEC "\
733 %{!nostdlib:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_SPEC "\
734 %{static:%ecannot specify -static with -fsanitize=address}\
735 %{%:sanitize(thread):%e-fsanitize=address is incompatible with -fsanitize=thread}}\
736 %{%:sanitize(thread):" LIBTSAN_SPEC "\
737 %{!pie:%{!shared:%e-fsanitize=thread linking must be done with -pie or -shared}}}\
738 %{%:sanitize(undefined):" LIBUBSAN_SPEC "}}}"
741 /* This is the spec to use, once the code for creating the vtable
742 verification runtime library, libvtv.so, has been created. Currently
743 the vtable verification runtime functions are in libstdc++, so we use
744 the spec just below this one. */
745 #ifndef VTABLE_VERIFICATION_SPEC
746 #define VTABLE_VERIFICATION_SPEC "\
747 %{!nostdlib:%{fvtable-verify=std: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}\
748 %{fvtable-verify=preinit: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}}"
751 /* -u* was put back because both BSD and SysV seem to support it. */
752 /* %{static:} simply prevents an error message if the target machine
753 doesn't handle -static. */
754 /* We want %{T*} after %{L*} and %D so that it can be used to specify linker
755 scripts which exist in user specified directories, or in standard
757 /* We pass any -flto flags on to the linker, which is expected
758 to understand them. In practice, this means it had better be collect2. */
759 /* %{e*} includes -export-dynamic; see comment in common.opt. */
760 #ifndef LINK_COMMAND_SPEC
761 #define LINK_COMMAND_SPEC "\
762 %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
765 "%{flto|flto=*:%<fcompare-debug*} \
766 %{flto} %{flto=*} %l " LINK_PIE_SPEC \
767 "%{fuse-ld=*:-fuse-ld=%*}\
768 %X %{o*} %{e*} %{N} %{n} %{r}\
769 %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} " VTABLE_VERIFICATION_SPEC " \
770 %{static:} %{L*} %(mfwrap) %(link_libgcc) " SANITIZER_EARLY_SPEC " %o\
771 %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\
772 %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\
773 %(mflib) " STACK_SPLIT_SPEC "\
774 %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \
775 %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\
776 %{!nostdlib:%{!nostartfiles:%E}} %{T*} }}}}}}"
779 #ifndef LINK_LIBGCC_SPEC
780 /* Generate -L options for startfile prefix list. */
781 # define LINK_LIBGCC_SPEC "%D"
784 #ifndef STARTFILE_PREFIX_SPEC
785 # define STARTFILE_PREFIX_SPEC ""
789 # define SYSROOT_SPEC "--sysroot=%R"
792 #ifndef SYSROOT_SUFFIX_SPEC
793 # define SYSROOT_SUFFIX_SPEC ""
796 #ifndef SYSROOT_HEADERS_SUFFIX_SPEC
797 # define SYSROOT_HEADERS_SUFFIX_SPEC ""
800 static const char *asm_debug
= ASM_DEBUG_SPEC
;
801 static const char *cpp_spec
= CPP_SPEC
;
802 static const char *cc1_spec
= CC1_SPEC
;
803 static const char *cc1plus_spec
= CC1PLUS_SPEC
;
804 static const char *link_gcc_c_sequence_spec
= LINK_GCC_C_SEQUENCE_SPEC
;
805 static const char *link_ssp_spec
= LINK_SSP_SPEC
;
806 static const char *asm_spec
= ASM_SPEC
;
807 static const char *asm_final_spec
= ASM_FINAL_SPEC
;
808 static const char *link_spec
= LINK_SPEC
;
809 static const char *lib_spec
= LIB_SPEC
;
810 static const char *link_gomp_spec
= "";
811 static const char *libgcc_spec
= LIBGCC_SPEC
;
812 static const char *endfile_spec
= ENDFILE_SPEC
;
813 static const char *startfile_spec
= STARTFILE_SPEC
;
814 static const char *linker_name_spec
= LINKER_NAME
;
815 static const char *linker_plugin_file_spec
= "";
816 static const char *lto_wrapper_spec
= "";
817 static const char *lto_gcc_spec
= "";
818 static const char *link_command_spec
= LINK_COMMAND_SPEC
;
819 static const char *link_libgcc_spec
= LINK_LIBGCC_SPEC
;
820 static const char *startfile_prefix_spec
= STARTFILE_PREFIX_SPEC
;
821 static const char *sysroot_spec
= SYSROOT_SPEC
;
822 static const char *sysroot_suffix_spec
= SYSROOT_SUFFIX_SPEC
;
823 static const char *sysroot_hdrs_suffix_spec
= SYSROOT_HEADERS_SUFFIX_SPEC
;
824 static const char *self_spec
= "";
826 /* Standard options to cpp, cc1, and as, to reduce duplication in specs.
827 There should be no need to override these in target dependent files,
828 but we need to copy them to the specs file so that newer versions
829 of the GCC driver can correctly drive older tool chains with the
830 appropriate -B options. */
832 /* When cpplib handles traditional preprocessing, get rid of this, and
833 call cc1 (or cc1obj in objc/lang-specs.h) from the main specs so
834 that we default the front end language better. */
835 static const char *trad_capable_cpp
=
836 "cc1 -E %{traditional|traditional-cpp:-traditional-cpp}";
838 /* We don't wrap .d files in %W{} since a missing .d file, and
839 therefore no dependency entry, confuses make into thinking a .o
840 file that happens to exist is up-to-date. */
841 static const char *cpp_unique_options
=
842 "%{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*&F*} %{P} %I\
843 %{MD:-MD %{!o:%b.d}%{o*:%.d%*}}\
844 %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}}\
845 %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
846 %{!E:%{!M:%{!MM:%{!MT:%{!MQ:%{MD|MMD:%{o*:-MQ %*}}}}}}}\
847 %{remap} %{g3|ggdb3|gstabs3|gcoff3|gxcoff3|gvms3:-dD}\
848 %{!iplugindir*:%{fplugin*:%:find-plugindir()}}\
849 %{H} %C %{D*&U*&A*} %{i*} %Z %i\
852 /* This contains cpp options which are common with cc1_options and are passed
853 only when preprocessing only to avoid duplication. We pass the cc1 spec
854 options to the preprocessor so that it the cc1 spec may manipulate
855 options used to set target flags. Those special target flags settings may
856 in turn cause preprocessor symbols to be defined specially. */
857 static const char *cpp_options
=
858 "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
859 %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\
860 %{undef} %{save-temps*:-fpch-preprocess}";
862 /* This contains cpp options which are not passed when the preprocessor
863 output will be used by another program. */
864 static const char *cpp_debug_options
= "%{d*}";
866 /* NB: This is shared amongst all front-ends, except for Ada. */
867 static const char *cc1_options
=
868 "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
869 %{!iplugindir*:%{fplugin*:%:find-plugindir()}}\
870 %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{aux-info*}\
871 %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} \
872 %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \
873 %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
874 %{v:-version} %{pg:-p} %{p} %{f*} %{undef}\
875 %{Qn:-fno-ident} %{Qy:} %{-help:--help}\
876 %{-target-help:--target-help}\
877 %{-version:--version}\
878 %{-help=*:--help=%*}\
879 %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\
880 %{fsyntax-only:-o %j} %{-param*}\
881 %{coverage:-fprofile-arcs -ftest-coverage}";
883 static const char *asm_options
=
884 "%{-target-help:%:print-asm-header()} "
886 /* If GNU AS is used, then convert -w (no warnings), -I, and -v
887 to the assembler equivalents. */
888 "%{v} %{w:-W} %{I*} "
890 "%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}";
892 static const char *invoke_as
=
893 #ifdef AS_NEEDS_DASH_FOR_PIPED_INPUT
895 %{fcompare-debug=*|fdump-final-insns=*:%:compare-debug-dump-opt()}\
896 %{!S:-o %|.s |\n as %(asm_options) %|.s %A }\
900 %{fcompare-debug=*|fdump-final-insns=*:%:compare-debug-dump-opt()}\
901 %{!S:-o %|.s |\n as %(asm_options) %m.s %A }\
905 /* Some compilers have limits on line lengths, and the multilib_select
906 and/or multilib_matches strings can be very long, so we build them at
908 static struct obstack multilib_obstack
;
909 static const char *multilib_select
;
910 static const char *multilib_matches
;
911 static const char *multilib_defaults
;
912 static const char *multilib_exclusions
;
913 static const char *multilib_reuse
;
915 /* Check whether a particular argument is a default argument. */
917 #ifndef MULTILIB_DEFAULTS
918 #define MULTILIB_DEFAULTS { "" }
921 static const char *const multilib_defaults_raw
[] = MULTILIB_DEFAULTS
;
923 #ifndef DRIVER_SELF_SPECS
924 #define DRIVER_SELF_SPECS ""
927 /* Linking to libgomp implies pthreads. This is particularly important
928 for targets that use different start files and suchlike. */
929 #ifndef GOMP_SELF_SPECS
930 #define GOMP_SELF_SPECS "%{fopenmp|ftree-parallelize-loops=*: -pthread}"
933 /* Likewise for -fgnu-tm. */
934 #ifndef GTM_SELF_SPECS
935 #define GTM_SELF_SPECS "%{fgnu-tm: -pthread}"
938 static const char *const driver_self_specs
[] = {
939 "%{fdump-final-insns:-fdump-final-insns=.} %<fdump-final-insns",
940 DRIVER_SELF_SPECS
, CONFIGURE_SPECS
, GOMP_SELF_SPECS
, GTM_SELF_SPECS
943 #ifndef OPTION_DEFAULT_SPECS
944 #define OPTION_DEFAULT_SPECS { "", "" }
953 static const struct default_spec
954 option_default_specs
[] = { OPTION_DEFAULT_SPECS
};
958 struct user_specs
*next
;
959 const char *filename
;
962 static struct user_specs
*user_specs_head
, *user_specs_tail
;
965 /* Record the mapping from file suffixes for compilation specs. */
969 const char *suffix
; /* Use this compiler for input files
970 whose names end in this suffix. */
972 const char *spec
; /* To use this compiler, run this spec. */
974 const char *cpp_spec
; /* If non-NULL, substitute this spec
975 for `%C', rather than the usual
977 const int combinable
; /* If nonzero, compiler can deal with
978 multiple source files at once (IMA). */
979 const int needs_preprocessing
; /* If nonzero, source files need to
980 be run through a preprocessor. */
983 /* Pointer to a vector of `struct compiler' that gives the spec for
984 compiling a file, based on its suffix.
985 A file that does not end in any of these suffixes will be passed
986 unchanged to the loader and nothing else will be done to it.
988 An entry containing two 0s is used to terminate the vector.
990 If multiple entries match a file, the last matching one is used. */
992 static struct compiler
*compilers
;
994 /* Number of entries in `compilers', not counting the null terminator. */
996 static int n_compilers
;
998 /* The default list of file name suffixes and their compilation specs. */
1000 static const struct compiler default_compilers
[] =
1002 /* Add lists of suffixes of known languages here. If those languages
1003 were not present when we built the driver, we will hit these copies
1004 and be given a more meaningful error than "file not used since
1005 linking is not done". */
1006 {".m", "#Objective-C", 0, 0, 0}, {".mi", "#Objective-C", 0, 0, 0},
1007 {".mm", "#Objective-C++", 0, 0, 0}, {".M", "#Objective-C++", 0, 0, 0},
1008 {".mii", "#Objective-C++", 0, 0, 0},
1009 {".cc", "#C++", 0, 0, 0}, {".cxx", "#C++", 0, 0, 0},
1010 {".cpp", "#C++", 0, 0, 0}, {".cp", "#C++", 0, 0, 0},
1011 {".c++", "#C++", 0, 0, 0}, {".C", "#C++", 0, 0, 0},
1012 {".CPP", "#C++", 0, 0, 0}, {".ii", "#C++", 0, 0, 0},
1013 {".ads", "#Ada", 0, 0, 0}, {".adb", "#Ada", 0, 0, 0},
1014 {".f", "#Fortran", 0, 0, 0}, {".F", "#Fortran", 0, 0, 0},
1015 {".for", "#Fortran", 0, 0, 0}, {".FOR", "#Fortran", 0, 0, 0},
1016 {".ftn", "#Fortran", 0, 0, 0}, {".FTN", "#Fortran", 0, 0, 0},
1017 {".fpp", "#Fortran", 0, 0, 0}, {".FPP", "#Fortran", 0, 0, 0},
1018 {".f90", "#Fortran", 0, 0, 0}, {".F90", "#Fortran", 0, 0, 0},
1019 {".f95", "#Fortran", 0, 0, 0}, {".F95", "#Fortran", 0, 0, 0},
1020 {".f03", "#Fortran", 0, 0, 0}, {".F03", "#Fortran", 0, 0, 0},
1021 {".f08", "#Fortran", 0, 0, 0}, {".F08", "#Fortran", 0, 0, 0},
1022 {".r", "#Ratfor", 0, 0, 0},
1023 {".p", "#Pascal", 0, 0, 0}, {".pas", "#Pascal", 0, 0, 0},
1024 {".java", "#Java", 0, 0, 0}, {".class", "#Java", 0, 0, 0},
1025 {".zip", "#Java", 0, 0, 0}, {".jar", "#Java", 0, 0, 0},
1026 {".go", "#Go", 0, 1, 0},
1027 /* Next come the entries for C. */
1028 {".c", "@c", 0, 0, 1},
1030 /* cc1 has an integrated ISO C preprocessor. We should invoke the
1031 external preprocessor if -save-temps is given. */
1032 "%{E|M|MM:%(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)}\
1035 %eGNU C no longer supports -traditional without -E}\
1036 %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
1037 %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\
1038 cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
1040 %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
1041 cc1 %(cpp_unique_options) %(cc1_options)}}}\
1042 %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 1},
1044 "%{!E:%e-E or -x required when input is from standard input}\
1045 %(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)", 0, 0, 0},
1046 {".h", "@c-header", 0, 0, 0},
1048 /* cc1 has an integrated ISO C preprocessor. We should invoke the
1049 external preprocessor if -save-temps is given. */
1050 "%{E|M|MM:%(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)}\
1052 %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
1053 %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\
1054 cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
1056 %{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
1057 %W{o*:--output-pch=%*}}%V}\
1058 %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
1059 cc1 %(cpp_unique_options) %(cc1_options)\
1060 %{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
1061 %W{o*:--output-pch=%*}}%V}}}}}}", 0, 0, 0},
1062 {".i", "@cpp-output", 0, 0, 0},
1064 "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
1065 {".s", "@assembler", 0, 0, 0},
1067 "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
1068 {".sx", "@assembler-with-cpp", 0, 0, 0},
1069 {".S", "@assembler-with-cpp", 0, 0, 0},
1070 {"@assembler-with-cpp",
1071 #ifdef AS_NEEDS_DASH_FOR_PIPED_INPUT
1072 "%(trad_capable_cpp) -lang-asm %(cpp_options) -fno-directives-only\
1073 %{E|M|MM:%(cpp_debug_options)}\
1074 %{!M:%{!MM:%{!E:%{!S:-o %|.s |\n\
1075 as %(asm_debug) %(asm_options) %|.s %A }}}}"
1077 "%(trad_capable_cpp) -lang-asm %(cpp_options) -fno-directives-only\
1078 %{E|M|MM:%(cpp_debug_options)}\
1079 %{!M:%{!MM:%{!E:%{!S:-o %|.s |\n\
1080 as %(asm_debug) %(asm_options) %m.s %A }}}}"
1085 /* Mark end of table. */
1089 /* Number of elements in default_compilers, not counting the terminator. */
1091 static const int n_default_compilers
= ARRAY_SIZE (default_compilers
) - 1;
1093 typedef char *char_p
; /* For DEF_VEC_P. */
1095 /* A vector of options to give to the linker.
1096 These options are accumulated by %x,
1097 and substituted into the linker command with %X. */
1098 static vec
<char_p
> linker_options
;
1100 /* A vector of options to give to the assembler.
1101 These options are accumulated by -Wa,
1102 and substituted into the assembler command with %Y. */
1103 static vec
<char_p
> assembler_options
;
1105 /* A vector of options to give to the preprocessor.
1106 These options are accumulated by -Wp,
1107 and substituted into the preprocessor command with %Z. */
1108 static vec
<char_p
> preprocessor_options
;
1111 skip_whitespace (char *p
)
1115 /* A fully-blank line is a delimiter in the SPEC file and shouldn't
1116 be considered whitespace. */
1117 if (p
[0] == '\n' && p
[1] == '\n' && p
[2] == '\n')
1119 else if (*p
== '\n' || *p
== ' ' || *p
== '\t')
1133 /* Structures to keep track of prefixes to try when looking for files. */
1137 const char *prefix
; /* String to prepend to the path. */
1138 struct prefix_list
*next
; /* Next in linked list. */
1139 int require_machine_suffix
; /* Don't use without machine_suffix. */
1140 /* 2 means try both machine_suffix and just_machine_suffix. */
1141 int priority
; /* Sort key - priority within list. */
1142 int os_multilib
; /* 1 if OS multilib scheme should be used,
1143 0 for GCC multilib scheme. */
1148 struct prefix_list
*plist
; /* List of prefixes to try */
1149 int max_len
; /* Max length of a prefix in PLIST */
1150 const char *name
; /* Name of this list (used in config stuff) */
1153 /* List of prefixes to try when looking for executables. */
1155 static struct path_prefix exec_prefixes
= { 0, 0, "exec" };
1157 /* List of prefixes to try when looking for startup (crt0) files. */
1159 static struct path_prefix startfile_prefixes
= { 0, 0, "startfile" };
1161 /* List of prefixes to try when looking for include files. */
1163 static struct path_prefix include_prefixes
= { 0, 0, "include" };
1165 /* Suffix to attach to directories searched for commands.
1166 This looks like `MACHINE/VERSION/'. */
1168 static const char *machine_suffix
= 0;
1170 /* Suffix to attach to directories searched for commands.
1171 This is just `MACHINE/'. */
1173 static const char *just_machine_suffix
= 0;
1175 /* Adjusted value of GCC_EXEC_PREFIX envvar. */
1177 static const char *gcc_exec_prefix
;
1179 /* Adjusted value of standard_libexec_prefix. */
1181 static const char *gcc_libexec_prefix
;
1183 /* Default prefixes to attach to command names. */
1185 #ifndef STANDARD_STARTFILE_PREFIX_1
1186 #define STANDARD_STARTFILE_PREFIX_1 "/lib/"
1188 #ifndef STANDARD_STARTFILE_PREFIX_2
1189 #define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/"
1192 #ifdef CROSS_DIRECTORY_STRUCTURE /* Don't use these prefixes for a cross compiler. */
1193 #undef MD_EXEC_PREFIX
1194 #undef MD_STARTFILE_PREFIX
1195 #undef MD_STARTFILE_PREFIX_1
1198 /* If no prefixes defined, use the null string, which will disable them. */
1199 #ifndef MD_EXEC_PREFIX
1200 #define MD_EXEC_PREFIX ""
1202 #ifndef MD_STARTFILE_PREFIX
1203 #define MD_STARTFILE_PREFIX ""
1205 #ifndef MD_STARTFILE_PREFIX_1
1206 #define MD_STARTFILE_PREFIX_1 ""
1209 /* These directories are locations set at configure-time based on the
1210 --prefix option provided to configure. Their initializers are
1211 defined in Makefile.in. These paths are not *directly* used when
1212 gcc_exec_prefix is set because, in that case, we know where the
1213 compiler has been installed, and use paths relative to that
1214 location instead. */
1215 static const char *const standard_exec_prefix
= STANDARD_EXEC_PREFIX
;
1216 static const char *const standard_libexec_prefix
= STANDARD_LIBEXEC_PREFIX
;
1217 static const char *const standard_bindir_prefix
= STANDARD_BINDIR_PREFIX
;
1218 static const char *const standard_startfile_prefix
= STANDARD_STARTFILE_PREFIX
;
1220 /* For native compilers, these are well-known paths containing
1221 components that may be provided by the system. For cross
1222 compilers, these paths are not used. */
1223 static const char *md_exec_prefix
= MD_EXEC_PREFIX
;
1224 static const char *md_startfile_prefix
= MD_STARTFILE_PREFIX
;
1225 static const char *md_startfile_prefix_1
= MD_STARTFILE_PREFIX_1
;
1226 static const char *const standard_startfile_prefix_1
1227 = STANDARD_STARTFILE_PREFIX_1
;
1228 static const char *const standard_startfile_prefix_2
1229 = STANDARD_STARTFILE_PREFIX_2
;
1231 /* A relative path to be used in finding the location of tools
1232 relative to the driver. */
1233 static const char *const tooldir_base_prefix
= TOOLDIR_BASE_PREFIX
;
1235 /* Subdirectory to use for locating libraries. Set by
1236 set_multilib_dir based on the compilation options. */
1238 static const char *multilib_dir
;
1240 /* Subdirectory to use for locating libraries in OS conventions. Set by
1241 set_multilib_dir based on the compilation options. */
1243 static const char *multilib_os_dir
;
1245 /* Subdirectory to use for locating libraries in multiarch conventions. Set by
1246 set_multilib_dir based on the compilation options. */
1248 static const char *multiarch_dir
;
1250 /* Structure to keep track of the specs that have been defined so far.
1251 These are accessed using %(specname) in a compiler or link
1256 /* The following 2 fields must be first */
1257 /* to allow EXTRA_SPECS to be initialized */
1258 const char *name
; /* name of the spec. */
1259 const char *ptr
; /* available ptr if no static pointer */
1261 /* The following fields are not initialized */
1262 /* by EXTRA_SPECS */
1263 const char **ptr_spec
; /* pointer to the spec itself. */
1264 struct spec_list
*next
; /* Next spec in linked list. */
1265 int name_len
; /* length of the name */
1266 bool user_p
; /* whether string come from file spec. */
1267 bool alloc_p
; /* whether string was allocated */
1270 #define INIT_STATIC_SPEC(NAME,PTR) \
1271 { NAME, NULL, PTR, (struct spec_list *) 0, sizeof (NAME) - 1, false, false }
1273 /* List of statically defined specs. */
1274 static struct spec_list static_specs
[] =
1276 INIT_STATIC_SPEC ("asm", &asm_spec
),
1277 INIT_STATIC_SPEC ("asm_debug", &asm_debug
),
1278 INIT_STATIC_SPEC ("asm_final", &asm_final_spec
),
1279 INIT_STATIC_SPEC ("asm_options", &asm_options
),
1280 INIT_STATIC_SPEC ("invoke_as", &invoke_as
),
1281 INIT_STATIC_SPEC ("cpp", &cpp_spec
),
1282 INIT_STATIC_SPEC ("cpp_options", &cpp_options
),
1283 INIT_STATIC_SPEC ("cpp_debug_options", &cpp_debug_options
),
1284 INIT_STATIC_SPEC ("cpp_unique_options", &cpp_unique_options
),
1285 INIT_STATIC_SPEC ("trad_capable_cpp", &trad_capable_cpp
),
1286 INIT_STATIC_SPEC ("cc1", &cc1_spec
),
1287 INIT_STATIC_SPEC ("cc1_options", &cc1_options
),
1288 INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec
),
1289 INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec
),
1290 INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec
),
1291 INIT_STATIC_SPEC ("endfile", &endfile_spec
),
1292 INIT_STATIC_SPEC ("link", &link_spec
),
1293 INIT_STATIC_SPEC ("lib", &lib_spec
),
1294 INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec
),
1295 INIT_STATIC_SPEC ("libgcc", &libgcc_spec
),
1296 INIT_STATIC_SPEC ("startfile", &startfile_spec
),
1297 INIT_STATIC_SPEC ("cross_compile", &cross_compile
),
1298 INIT_STATIC_SPEC ("version", &compiler_version
),
1299 INIT_STATIC_SPEC ("multilib", &multilib_select
),
1300 INIT_STATIC_SPEC ("multilib_defaults", &multilib_defaults
),
1301 INIT_STATIC_SPEC ("multilib_extra", &multilib_extra
),
1302 INIT_STATIC_SPEC ("multilib_matches", &multilib_matches
),
1303 INIT_STATIC_SPEC ("multilib_exclusions", &multilib_exclusions
),
1304 INIT_STATIC_SPEC ("multilib_options", &multilib_options
),
1305 INIT_STATIC_SPEC ("multilib_reuse", &multilib_reuse
),
1306 INIT_STATIC_SPEC ("linker", &linker_name_spec
),
1307 INIT_STATIC_SPEC ("linker_plugin_file", &linker_plugin_file_spec
),
1308 INIT_STATIC_SPEC ("lto_wrapper", <o_wrapper_spec
),
1309 INIT_STATIC_SPEC ("lto_gcc", <o_gcc_spec
),
1310 INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec
),
1311 INIT_STATIC_SPEC ("md_exec_prefix", &md_exec_prefix
),
1312 INIT_STATIC_SPEC ("md_startfile_prefix", &md_startfile_prefix
),
1313 INIT_STATIC_SPEC ("md_startfile_prefix_1", &md_startfile_prefix_1
),
1314 INIT_STATIC_SPEC ("startfile_prefix_spec", &startfile_prefix_spec
),
1315 INIT_STATIC_SPEC ("sysroot_spec", &sysroot_spec
),
1316 INIT_STATIC_SPEC ("sysroot_suffix_spec", &sysroot_suffix_spec
),
1317 INIT_STATIC_SPEC ("sysroot_hdrs_suffix_spec", &sysroot_hdrs_suffix_spec
),
1318 INIT_STATIC_SPEC ("self_spec", &self_spec
),
1321 #ifdef EXTRA_SPECS /* additional specs needed */
1322 /* Structure to keep track of just the first two args of a spec_list.
1323 That is all that the EXTRA_SPECS macro gives us. */
1326 const char *const name
;
1327 const char *const ptr
;
1330 static const struct spec_list_1 extra_specs_1
[] = { EXTRA_SPECS
};
1331 static struct spec_list
*extra_specs
= (struct spec_list
*) 0;
1334 /* List of dynamically allocates specs that have been defined so far. */
1336 static struct spec_list
*specs
= (struct spec_list
*) 0;
1338 /* List of static spec functions. */
1340 static const struct spec_function static_spec_functions
[] =
1342 { "getenv", getenv_spec_function
},
1343 { "if-exists", if_exists_spec_function
},
1344 { "if-exists-else", if_exists_else_spec_function
},
1345 { "sanitize", sanitize_spec_function
},
1346 { "replace-outfile", replace_outfile_spec_function
},
1347 { "remove-outfile", remove_outfile_spec_function
},
1348 { "version-compare", version_compare_spec_function
},
1349 { "include", include_spec_function
},
1350 { "find-file", find_file_spec_function
},
1351 { "find-plugindir", find_plugindir_spec_function
},
1352 { "print-asm-header", print_asm_header_spec_function
},
1353 { "compare-debug-dump-opt", compare_debug_dump_opt_spec_function
},
1354 { "compare-debug-self-opt", compare_debug_self_opt_spec_function
},
1355 { "compare-debug-auxbase-opt", compare_debug_auxbase_opt_spec_function
},
1356 { "pass-through-libs", pass_through_libs_spec_func
},
1357 { "replace-extension", replace_extension_spec_func
},
1358 #ifdef EXTRA_SPEC_FUNCTIONS
1359 EXTRA_SPEC_FUNCTIONS
1364 static int processing_spec_function
;
1366 /* Add appropriate libgcc specs to OBSTACK, taking into account
1367 various permutations of -shared-libgcc, -shared, and such. */
1369 #if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC)
1371 #ifndef USE_LD_AS_NEEDED
1372 #define USE_LD_AS_NEEDED 0
1376 init_gcc_specs (struct obstack
*obstack
, const char *shared_name
,
1377 const char *static_name
, const char *eh_name
)
1381 buf
= concat ("%{static|static-libgcc:", static_name
, " ", eh_name
, "}"
1382 "%{!static:%{!static-libgcc:"
1383 #if USE_LD_AS_NEEDED
1384 "%{!shared-libgcc:",
1385 static_name
, " " LD_AS_NEEDED_OPTION
" ",
1386 shared_name
, " " LD_NO_AS_NEEDED_OPTION
1389 shared_name
, "%{!shared: ", static_name
, "}"
1393 "%{!shared-libgcc:", static_name
, " ", eh_name
, "}"
1394 "%{shared-libgcc:", shared_name
, " ", static_name
, "}"
1398 "%{shared-libgcc:", shared_name
, "}"
1399 "%{!shared-libgcc:", static_name
, "}"
1402 "%{shared:", shared_name
, "}"
1407 obstack_grow (obstack
, buf
, strlen (buf
));
1410 #endif /* ENABLE_SHARED_LIBGCC */
1412 /* Initialize the specs lookup routines. */
1417 struct spec_list
*next
= (struct spec_list
*) 0;
1418 struct spec_list
*sl
= (struct spec_list
*) 0;
1422 return; /* Already initialized. */
1425 fnotice (stderr
, "Using built-in specs.\n");
1428 extra_specs
= XCNEWVEC (struct spec_list
, ARRAY_SIZE (extra_specs_1
));
1430 for (i
= ARRAY_SIZE (extra_specs_1
) - 1; i
>= 0; i
--)
1432 sl
= &extra_specs
[i
];
1433 sl
->name
= extra_specs_1
[i
].name
;
1434 sl
->ptr
= extra_specs_1
[i
].ptr
;
1436 sl
->name_len
= strlen (sl
->name
);
1437 sl
->ptr_spec
= &sl
->ptr
;
1442 for (i
= ARRAY_SIZE (static_specs
) - 1; i
>= 0; i
--)
1444 sl
= &static_specs
[i
];
1449 #if defined(ENABLE_SHARED_LIBGCC) && !defined(REAL_LIBGCC_SPEC)
1450 /* ??? If neither -shared-libgcc nor --static-libgcc was
1451 seen, then we should be making an educated guess. Some proposed
1452 heuristics for ELF include:
1454 (1) If "-Wl,--export-dynamic", then it's a fair bet that the
1455 program will be doing dynamic loading, which will likely
1456 need the shared libgcc.
1458 (2) If "-ldl", then it's also a fair bet that we're doing
1461 (3) For each ET_DYN we're linking against (either through -lfoo
1462 or /some/path/foo.so), check to see whether it or one of
1463 its dependencies depends on a shared libgcc.
1467 If the runtime is fixed to look for program headers instead
1468 of calling __register_frame_info at all, for each object,
1469 use the shared libgcc if any EH symbol referenced.
1471 If crtstuff is fixed to not invoke __register_frame_info
1472 automatically, for each object, use the shared libgcc if
1473 any non-empty unwind section found.
1475 Doing any of this probably requires invoking an external program to
1476 do the actual object file scanning. */
1478 const char *p
= libgcc_spec
;
1481 /* Transform the extant libgcc_spec into one that uses the shared libgcc
1482 when given the proper command line arguments. */
1485 if (in_sep
&& *p
== '-' && strncmp (p
, "-lgcc", 5) == 0)
1487 init_gcc_specs (&obstack
,
1489 #ifdef USE_LIBUNWIND_EXCEPTIONS
1495 #ifdef USE_LIBUNWIND_EXCEPTIONS
1496 # ifdef HAVE_LD_STATIC_DYNAMIC
1497 " %{!static:" LD_STATIC_OPTION
"} -lunwind"
1498 " %{!static:" LD_DYNAMIC_OPTION
"}"
1508 else if (in_sep
&& *p
== 'l' && strncmp (p
, "libgcc.a%s", 10) == 0)
1510 /* Ug. We don't know shared library extensions. Hope that
1511 systems that use this form don't do shared libraries. */
1512 init_gcc_specs (&obstack
,
1516 #ifdef USE_LIBUNWIND_EXCEPTIONS
1525 obstack_1grow (&obstack
, *p
);
1526 in_sep
= (*p
== ' ');
1531 obstack_1grow (&obstack
, '\0');
1532 libgcc_spec
= XOBFINISH (&obstack
, const char *);
1535 #ifdef USE_AS_TRADITIONAL_FORMAT
1536 /* Prepend "--traditional-format" to whatever asm_spec we had before. */
1538 static const char tf
[] = "--traditional-format ";
1539 obstack_grow (&obstack
, tf
, sizeof (tf
) - 1);
1540 obstack_grow0 (&obstack
, asm_spec
, strlen (asm_spec
));
1541 asm_spec
= XOBFINISH (&obstack
, const char *);
1545 #if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC || \
1546 defined LINKER_HASH_STYLE
1547 # ifdef LINK_BUILDID_SPEC
1548 /* Prepend LINK_BUILDID_SPEC to whatever link_spec we had before. */
1549 obstack_grow (&obstack
, LINK_BUILDID_SPEC
, sizeof (LINK_BUILDID_SPEC
) - 1);
1551 # ifdef LINK_EH_SPEC
1552 /* Prepend LINK_EH_SPEC to whatever link_spec we had before. */
1553 obstack_grow (&obstack
, LINK_EH_SPEC
, sizeof (LINK_EH_SPEC
) - 1);
1555 # ifdef LINKER_HASH_STYLE
1556 /* Prepend --hash-style=LINKER_HASH_STYLE to whatever link_spec we had
1559 static const char hash_style
[] = "--hash-style=";
1560 obstack_grow (&obstack
, hash_style
, sizeof (hash_style
) - 1);
1561 obstack_grow (&obstack
, LINKER_HASH_STYLE
, sizeof (LINKER_HASH_STYLE
) - 1);
1562 obstack_1grow (&obstack
, ' ');
1565 obstack_grow0 (&obstack
, link_spec
, strlen (link_spec
));
1566 link_spec
= XOBFINISH (&obstack
, const char *);
1572 /* Change the value of spec NAME to SPEC. If SPEC is empty, then the spec is
1573 removed; If the spec starts with a + then SPEC is added to the end of the
1577 set_spec (const char *name
, const char *spec
, bool user_p
)
1579 struct spec_list
*sl
;
1580 const char *old_spec
;
1581 int name_len
= strlen (name
);
1584 /* If this is the first call, initialize the statically allocated specs. */
1587 struct spec_list
*next
= (struct spec_list
*) 0;
1588 for (i
= ARRAY_SIZE (static_specs
) - 1; i
>= 0; i
--)
1590 sl
= &static_specs
[i
];
1597 /* See if the spec already exists. */
1598 for (sl
= specs
; sl
; sl
= sl
->next
)
1599 if (name_len
== sl
->name_len
&& !strcmp (sl
->name
, name
))
1604 /* Not found - make it. */
1605 sl
= XNEW (struct spec_list
);
1606 sl
->name
= xstrdup (name
);
1607 sl
->name_len
= name_len
;
1608 sl
->ptr_spec
= &sl
->ptr
;
1610 *(sl
->ptr_spec
) = "";
1615 old_spec
= *(sl
->ptr_spec
);
1616 *(sl
->ptr_spec
) = ((spec
[0] == '+' && ISSPACE ((unsigned char)spec
[1]))
1617 ? concat (old_spec
, spec
+ 1, NULL
)
1622 fnotice (stderr
, "Setting spec %s to '%s'\n\n", name
, *(sl
->ptr_spec
));
1625 /* Free the old spec. */
1626 if (old_spec
&& sl
->alloc_p
)
1627 free (CONST_CAST (char *, old_spec
));
1629 sl
->user_p
= user_p
;
1633 /* Accumulate a command (program name and args), and run it. */
1635 typedef const char *const_char_p
; /* For DEF_VEC_P. */
1637 /* Vector of pointers to arguments in the current line of specifications. */
1639 static vec
<const_char_p
> argbuf
;
1641 /* Position in the argbuf vector containing the name of the output file
1642 (the value associated with the "-o" flag). */
1644 static int have_o_argbuf_index
= 0;
1646 /* Were the options -c, -S or -E passed. */
1647 static int have_c
= 0;
1649 /* Was the option -o passed. */
1650 static int have_o
= 0;
1652 /* This is the list of suffixes and codes (%g/%u/%U/%j) and the associated
1653 temp file. If the HOST_BIT_BUCKET is used for %j, no entry is made for
1656 static struct temp_name
{
1657 const char *suffix
; /* suffix associated with the code. */
1658 int length
; /* strlen (suffix). */
1659 int unique
; /* Indicates whether %g or %u/%U was used. */
1660 const char *filename
; /* associated filename. */
1661 int filename_length
; /* strlen (filename). */
1662 struct temp_name
*next
;
1665 /* Number of commands executed so far. */
1667 static int execution_count
;
1669 /* Number of commands that exited with a signal. */
1671 static int signal_count
;
1673 /* Allocate the argument vector. */
1681 /* Clear out the vector of arguments (after a command is executed). */
1686 argbuf
.truncate (0);
1689 /* Add one argument to the vector at the end.
1690 This is done when a space is seen or at the end of the line.
1691 If DELETE_ALWAYS is nonzero, the arg is a filename
1692 and the file should be deleted eventually.
1693 If DELETE_FAILURE is nonzero, the arg is a filename
1694 and the file should be deleted if this compilation fails. */
1697 store_arg (const char *arg
, int delete_always
, int delete_failure
)
1699 argbuf
.safe_push (arg
);
1701 if (strcmp (arg
, "-o") == 0)
1702 have_o_argbuf_index
= argbuf
.length ();
1703 if (delete_always
|| delete_failure
)
1706 /* If the temporary file we should delete is specified as
1707 part of a joined argument extract the filename. */
1709 && (p
= strrchr (arg
, '=')))
1711 record_temp_file (arg
, delete_always
, delete_failure
);
1715 /* Load specs from a file name named FILENAME, replacing occurrences of
1716 various different types of line-endings, \r\n, \n\r and just \r, with
1720 load_specs (const char *filename
)
1724 struct stat statbuf
;
1731 fnotice (stderr
, "Reading specs from %s\n", filename
);
1733 /* Open and stat the file. */
1734 desc
= open (filename
, O_RDONLY
, 0);
1736 pfatal_with_name (filename
);
1737 if (stat (filename
, &statbuf
) < 0)
1738 pfatal_with_name (filename
);
1740 /* Read contents of file into BUFFER. */
1741 buffer
= XNEWVEC (char, statbuf
.st_size
+ 1);
1742 readlen
= read (desc
, buffer
, (unsigned) statbuf
.st_size
);
1744 pfatal_with_name (filename
);
1745 buffer
[readlen
] = 0;
1748 specs
= XNEWVEC (char, readlen
+ 1);
1750 for (buffer_p
= buffer
; buffer_p
&& *buffer_p
; buffer_p
++)
1756 if (buffer_p
> buffer
&& *(buffer_p
- 1) == '\n') /* \n\r */
1758 else if (*(buffer_p
+ 1) == '\n') /* \r\n */
1772 /* Read compilation specs from a file named FILENAME,
1773 replacing the default ones.
1775 A suffix which starts with `*' is a definition for
1776 one of the machine-specific sub-specs. The "suffix" should be
1777 *asm, *cc1, *cpp, *link, *startfile, etc.
1778 The corresponding spec is stored in asm_spec, etc.,
1779 rather than in the `compilers' vector.
1781 Anything invalid in the file is a fatal error. */
1784 read_specs (const char *filename
, bool main_p
, bool user_p
)
1789 buffer
= load_specs (filename
);
1791 /* Scan BUFFER for specs, putting them in the vector. */
1797 char *in
, *out
, *p1
, *p2
, *p3
;
1799 /* Advance P in BUFFER to the next nonblank nocomment line. */
1800 p
= skip_whitespace (p
);
1804 /* Is this a special command that starts with '%'? */
1805 /* Don't allow this for the main specs file, since it would
1806 encourage people to overwrite it. */
1807 if (*p
== '%' && !main_p
)
1810 while (*p
&& *p
!= '\n')
1816 if (!strncmp (p1
, "%include", sizeof ("%include") - 1)
1817 && (p1
[sizeof "%include" - 1] == ' '
1818 || p1
[sizeof "%include" - 1] == '\t'))
1822 p1
+= sizeof ("%include");
1823 while (*p1
== ' ' || *p1
== '\t')
1826 if (*p1
++ != '<' || p
[-2] != '>')
1827 fatal_error ("specs %%include syntax malformed after "
1829 (long) (p1
- buffer
+ 1));
1832 new_filename
= find_a_file (&startfile_prefixes
, p1
, R_OK
, true);
1833 read_specs (new_filename
? new_filename
: p1
, false, user_p
);
1836 else if (!strncmp (p1
, "%include_noerr", sizeof "%include_noerr" - 1)
1837 && (p1
[sizeof "%include_noerr" - 1] == ' '
1838 || p1
[sizeof "%include_noerr" - 1] == '\t'))
1842 p1
+= sizeof "%include_noerr";
1843 while (*p1
== ' ' || *p1
== '\t')
1846 if (*p1
++ != '<' || p
[-2] != '>')
1847 fatal_error ("specs %%include syntax malformed after "
1849 (long) (p1
- buffer
+ 1));
1852 new_filename
= find_a_file (&startfile_prefixes
, p1
, R_OK
, true);
1854 read_specs (new_filename
, false, user_p
);
1855 else if (verbose_flag
)
1856 fnotice (stderr
, "could not find specs file %s\n", p1
);
1859 else if (!strncmp (p1
, "%rename", sizeof "%rename" - 1)
1860 && (p1
[sizeof "%rename" - 1] == ' '
1861 || p1
[sizeof "%rename" - 1] == '\t'))
1864 struct spec_list
*sl
;
1865 struct spec_list
*newsl
;
1867 /* Get original name. */
1868 p1
+= sizeof "%rename";
1869 while (*p1
== ' ' || *p1
== '\t')
1872 if (! ISALPHA ((unsigned char) *p1
))
1873 fatal_error ("specs %%rename syntax malformed after "
1875 (long) (p1
- buffer
));
1878 while (*p2
&& !ISSPACE ((unsigned char) *p2
))
1881 if (*p2
!= ' ' && *p2
!= '\t')
1882 fatal_error ("specs %%rename syntax malformed after "
1884 (long) (p2
- buffer
));
1888 while (*p2
== ' ' || *p2
== '\t')
1891 if (! ISALPHA ((unsigned char) *p2
))
1892 fatal_error ("specs %%rename syntax malformed after "
1894 (long) (p2
- buffer
));
1896 /* Get new spec name. */
1898 while (*p3
&& !ISSPACE ((unsigned char) *p3
))
1902 fatal_error ("specs %%rename syntax malformed after "
1904 (long) (p3
- buffer
));
1907 for (sl
= specs
; sl
; sl
= sl
->next
)
1908 if (name_len
== sl
->name_len
&& !strcmp (sl
->name
, p1
))
1912 fatal_error ("specs %s spec was not found to be renamed", p1
);
1914 if (strcmp (p1
, p2
) == 0)
1917 for (newsl
= specs
; newsl
; newsl
= newsl
->next
)
1918 if (strcmp (newsl
->name
, p2
) == 0)
1919 fatal_error ("%s: attempt to rename spec %qs to "
1920 "already defined spec %qs",
1925 fnotice (stderr
, "rename spec %s to %s\n", p1
, p2
);
1927 fnotice (stderr
, "spec is '%s'\n\n", *(sl
->ptr_spec
));
1931 set_spec (p2
, *(sl
->ptr_spec
), user_p
);
1933 free (CONST_CAST (char *, *(sl
->ptr_spec
)));
1935 *(sl
->ptr_spec
) = "";
1940 fatal_error ("specs unknown %% command after %ld characters",
1941 (long) (p1
- buffer
));
1944 /* Find the colon that should end the suffix. */
1946 while (*p1
&& *p1
!= ':' && *p1
!= '\n')
1949 /* The colon shouldn't be missing. */
1951 fatal_error ("specs file malformed after %ld characters",
1952 (long) (p1
- buffer
));
1954 /* Skip back over trailing whitespace. */
1956 while (p2
> buffer
&& (p2
[-1] == ' ' || p2
[-1] == '\t'))
1959 /* Copy the suffix to a string. */
1960 suffix
= save_string (p
, p2
- p
);
1961 /* Find the next line. */
1962 p
= skip_whitespace (p1
+ 1);
1964 fatal_error ("specs file malformed after %ld characters",
1965 (long) (p
- buffer
));
1968 /* Find next blank line or end of string. */
1969 while (*p1
&& !(*p1
== '\n' && (p1
[1] == '\n' || p1
[1] == '\0')))
1972 /* Specs end at the blank line and do not include the newline. */
1973 spec
= save_string (p
, p1
- p
);
1976 /* Delete backslash-newline sequences from the spec. */
1981 if (in
[0] == '\\' && in
[1] == '\n')
1983 else if (in
[0] == '#')
1984 while (*in
&& *in
!= '\n')
1992 if (suffix
[0] == '*')
1994 if (! strcmp (suffix
, "*link_command"))
1995 link_command_spec
= spec
;
1997 set_spec (suffix
+ 1, spec
, user_p
);
2001 /* Add this pair to the vector. */
2003 = XRESIZEVEC (struct compiler
, compilers
, n_compilers
+ 2);
2005 compilers
[n_compilers
].suffix
= suffix
;
2006 compilers
[n_compilers
].spec
= spec
;
2008 memset (&compilers
[n_compilers
], 0, sizeof compilers
[n_compilers
]);
2012 link_command_spec
= spec
;
2015 if (link_command_spec
== 0)
2016 fatal_error ("spec file has no spec for linking");
2019 /* Record the names of temporary files we tell compilers to write,
2020 and delete them at the end of the run. */
2022 /* This is the common prefix we use to make temp file names.
2023 It is chosen once for each run of this program.
2024 It is substituted into a spec by %g or %j.
2025 Thus, all temp file names contain this prefix.
2026 In practice, all temp file names start with this prefix.
2028 This prefix comes from the envvar TMPDIR if it is defined;
2029 otherwise, from the P_tmpdir macro if that is defined;
2030 otherwise, in /usr/tmp or /tmp;
2031 or finally the current directory if all else fails. */
2033 static const char *temp_filename
;
2035 /* Length of the prefix. */
2037 static int temp_filename_length
;
2039 /* Define the list of temporary files to delete. */
2044 struct temp_file
*next
;
2047 /* Queue of files to delete on success or failure of compilation. */
2048 static struct temp_file
*always_delete_queue
;
2049 /* Queue of files to delete on failure of compilation. */
2050 static struct temp_file
*failure_delete_queue
;
2052 /* Record FILENAME as a file to be deleted automatically.
2053 ALWAYS_DELETE nonzero means delete it if all compilation succeeds;
2054 otherwise delete it in any case.
2055 FAIL_DELETE nonzero means delete it if a compilation step fails;
2056 otherwise delete it in any case. */
2059 record_temp_file (const char *filename
, int always_delete
, int fail_delete
)
2061 char *const name
= xstrdup (filename
);
2065 struct temp_file
*temp
;
2066 for (temp
= always_delete_queue
; temp
; temp
= temp
->next
)
2067 if (! filename_cmp (name
, temp
->name
))
2070 temp
= XNEW (struct temp_file
);
2071 temp
->next
= always_delete_queue
;
2073 always_delete_queue
= temp
;
2080 struct temp_file
*temp
;
2081 for (temp
= failure_delete_queue
; temp
; temp
= temp
->next
)
2082 if (! filename_cmp (name
, temp
->name
))
2088 temp
= XNEW (struct temp_file
);
2089 temp
->next
= failure_delete_queue
;
2091 failure_delete_queue
= temp
;
2097 /* Delete all the temporary files whose names we previously recorded. */
2099 #ifndef DELETE_IF_ORDINARY
2100 #define DELETE_IF_ORDINARY(NAME,ST,VERBOSE_FLAG) \
2103 if (stat (NAME, &ST) >= 0 && S_ISREG (ST.st_mode)) \
2104 if (unlink (NAME) < 0) \
2106 perror_with_name (NAME); \
2111 delete_if_ordinary (const char *name
)
2117 printf ("Delete %s? (y or n) ", name
);
2121 while ((c
= getchar ()) != '\n' && c
!= EOF
)
2124 if (i
== 'y' || i
== 'Y')
2126 DELETE_IF_ORDINARY (name
, st
, verbose_flag
);
2130 delete_temp_files (void)
2132 struct temp_file
*temp
;
2134 for (temp
= always_delete_queue
; temp
; temp
= temp
->next
)
2135 delete_if_ordinary (temp
->name
);
2136 always_delete_queue
= 0;
2139 /* Delete all the files to be deleted on error. */
2142 delete_failure_queue (void)
2144 struct temp_file
*temp
;
2146 for (temp
= failure_delete_queue
; temp
; temp
= temp
->next
)
2147 delete_if_ordinary (temp
->name
);
2151 clear_failure_queue (void)
2153 failure_delete_queue
= 0;
2156 /* Call CALLBACK for each path in PATHS, breaking out early if CALLBACK
2158 If DO_MULTI is true iterate over the paths twice, first with multilib
2159 suffix then without, otherwise iterate over the paths once without
2160 adding a multilib suffix. When DO_MULTI is true, some attempt is made
2161 to avoid visiting the same path twice, but we could do better. For
2162 instance, /usr/lib/../lib is considered different from /usr/lib.
2163 At least EXTRA_SPACE chars past the end of the path passed to
2164 CALLBACK are available for use by the callback.
2165 CALLBACK_INFO allows extra parameters to be passed to CALLBACK.
2167 Returns the value returned by CALLBACK. */
2170 for_each_path (const struct path_prefix
*paths
,
2173 void *(*callback
) (char *, void *),
2174 void *callback_info
)
2176 struct prefix_list
*pl
;
2177 const char *multi_dir
= NULL
;
2178 const char *multi_os_dir
= NULL
;
2179 const char *multiarch_suffix
= NULL
;
2180 const char *multi_suffix
;
2181 const char *just_multi_suffix
;
2184 bool skip_multi_dir
= false;
2185 bool skip_multi_os_dir
= false;
2187 multi_suffix
= machine_suffix
;
2188 just_multi_suffix
= just_machine_suffix
;
2189 if (do_multi
&& multilib_dir
&& strcmp (multilib_dir
, ".") != 0)
2191 multi_dir
= concat (multilib_dir
, dir_separator_str
, NULL
);
2192 multi_suffix
= concat (multi_suffix
, multi_dir
, NULL
);
2193 just_multi_suffix
= concat (just_multi_suffix
, multi_dir
, NULL
);
2195 if (do_multi
&& multilib_os_dir
&& strcmp (multilib_os_dir
, ".") != 0)
2196 multi_os_dir
= concat (multilib_os_dir
, dir_separator_str
, NULL
);
2198 multiarch_suffix
= concat (multiarch_dir
, dir_separator_str
, NULL
);
2202 size_t multi_dir_len
= 0;
2203 size_t multi_os_dir_len
= 0;
2204 size_t multiarch_len
= 0;
2206 size_t just_suffix_len
;
2210 multi_dir_len
= strlen (multi_dir
);
2212 multi_os_dir_len
= strlen (multi_os_dir
);
2213 if (multiarch_suffix
)
2214 multiarch_len
= strlen (multiarch_suffix
);
2215 suffix_len
= strlen (multi_suffix
);
2216 just_suffix_len
= strlen (just_multi_suffix
);
2220 len
= paths
->max_len
+ extra_space
+ 1;
2221 len
+= MAX (MAX (suffix_len
, multi_os_dir_len
), multiarch_len
);
2222 path
= XNEWVEC (char, len
);
2225 for (pl
= paths
->plist
; pl
!= 0; pl
= pl
->next
)
2227 len
= strlen (pl
->prefix
);
2228 memcpy (path
, pl
->prefix
, len
);
2230 /* Look first in MACHINE/VERSION subdirectory. */
2231 if (!skip_multi_dir
)
2233 memcpy (path
+ len
, multi_suffix
, suffix_len
+ 1);
2234 ret
= callback (path
, callback_info
);
2239 /* Some paths are tried with just the machine (ie. target)
2240 subdir. This is used for finding as, ld, etc. */
2242 && pl
->require_machine_suffix
== 2)
2244 memcpy (path
+ len
, just_multi_suffix
, just_suffix_len
+ 1);
2245 ret
= callback (path
, callback_info
);
2250 /* Now try the multiarch path. */
2252 && !pl
->require_machine_suffix
&& multiarch_dir
)
2254 memcpy (path
+ len
, multiarch_suffix
, multiarch_len
+ 1);
2255 ret
= callback (path
, callback_info
);
2260 /* Now try the base path. */
2261 if (!pl
->require_machine_suffix
2262 && !(pl
->os_multilib
? skip_multi_os_dir
: skip_multi_dir
))
2264 const char *this_multi
;
2265 size_t this_multi_len
;
2267 if (pl
->os_multilib
)
2269 this_multi
= multi_os_dir
;
2270 this_multi_len
= multi_os_dir_len
;
2274 this_multi
= multi_dir
;
2275 this_multi_len
= multi_dir_len
;
2279 memcpy (path
+ len
, this_multi
, this_multi_len
+ 1);
2283 ret
= callback (path
, callback_info
);
2291 if (multi_dir
== NULL
&& multi_os_dir
== NULL
)
2294 /* Run through the paths again, this time without multilibs.
2295 Don't repeat any we have already seen. */
2298 free (CONST_CAST (char *, multi_dir
));
2300 free (CONST_CAST (char *, multi_suffix
));
2301 multi_suffix
= machine_suffix
;
2302 free (CONST_CAST (char *, just_multi_suffix
));
2303 just_multi_suffix
= just_machine_suffix
;
2306 skip_multi_dir
= true;
2309 free (CONST_CAST (char *, multi_os_dir
));
2310 multi_os_dir
= NULL
;
2313 skip_multi_os_dir
= true;
2318 free (CONST_CAST (char *, multi_dir
));
2319 free (CONST_CAST (char *, multi_suffix
));
2320 free (CONST_CAST (char *, just_multi_suffix
));
2323 free (CONST_CAST (char *, multi_os_dir
));
2329 /* Callback for build_search_list. Adds path to obstack being built. */
2331 struct add_to_obstack_info
{
2338 add_to_obstack (char *path
, void *data
)
2340 struct add_to_obstack_info
*info
= (struct add_to_obstack_info
*) data
;
2342 if (info
->check_dir
&& !is_directory (path
, false))
2345 if (!info
->first_time
)
2346 obstack_1grow (info
->ob
, PATH_SEPARATOR
);
2348 obstack_grow (info
->ob
, path
, strlen (path
));
2350 info
->first_time
= false;
2354 /* Add or change the value of an environment variable, outputting the
2355 change to standard error if in verbose mode. */
2357 xputenv (const char *string
)
2360 fnotice (stderr
, "%s\n", string
);
2361 putenv (CONST_CAST (char *, string
));
2364 /* Build a list of search directories from PATHS.
2365 PREFIX is a string to prepend to the list.
2366 If CHECK_DIR_P is true we ensure the directory exists.
2367 If DO_MULTI is true, multilib paths are output first, then
2369 This is used mostly by putenv_from_prefixes so we use `collect_obstack'.
2370 It is also used by the --print-search-dirs flag. */
2373 build_search_list (const struct path_prefix
*paths
, const char *prefix
,
2374 bool check_dir
, bool do_multi
)
2376 struct add_to_obstack_info info
;
2378 info
.ob
= &collect_obstack
;
2379 info
.check_dir
= check_dir
;
2380 info
.first_time
= true;
2382 obstack_grow (&collect_obstack
, prefix
, strlen (prefix
));
2383 obstack_1grow (&collect_obstack
, '=');
2385 for_each_path (paths
, do_multi
, 0, add_to_obstack
, &info
);
2387 obstack_1grow (&collect_obstack
, '\0');
2388 return XOBFINISH (&collect_obstack
, char *);
2391 /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
2395 putenv_from_prefixes (const struct path_prefix
*paths
, const char *env_var
,
2398 xputenv (build_search_list (paths
, env_var
, true, do_multi
));
2401 /* Check whether NAME can be accessed in MODE. This is like access,
2402 except that it never considers directories to be executable. */
2405 access_check (const char *name
, int mode
)
2411 if (stat (name
, &st
) < 0
2412 || S_ISDIR (st
.st_mode
))
2416 return access (name
, mode
);
2419 /* Callback for find_a_file. Appends the file name to the directory
2420 path. If the resulting file exists in the right mode, return the
2421 full pathname to the file. */
2423 struct file_at_path_info
{
2432 file_at_path (char *path
, void *data
)
2434 struct file_at_path_info
*info
= (struct file_at_path_info
*) data
;
2435 size_t len
= strlen (path
);
2437 memcpy (path
+ len
, info
->name
, info
->name_len
);
2438 len
+= info
->name_len
;
2440 /* Some systems have a suffix for executable files.
2441 So try appending that first. */
2442 if (info
->suffix_len
)
2444 memcpy (path
+ len
, info
->suffix
, info
->suffix_len
+ 1);
2445 if (access_check (path
, info
->mode
) == 0)
2450 if (access_check (path
, info
->mode
) == 0)
2456 /* Search for NAME using the prefix list PREFIXES. MODE is passed to
2457 access to check permissions. If DO_MULTI is true, search multilib
2458 paths then non-multilib paths, otherwise do not search multilib paths.
2459 Return 0 if not found, otherwise return its name, allocated with malloc. */
2462 find_a_file (const struct path_prefix
*pprefix
, const char *name
, int mode
,
2465 struct file_at_path_info info
;
2467 #ifdef DEFAULT_ASSEMBLER
2468 if (! strcmp (name
, "as") && access (DEFAULT_ASSEMBLER
, mode
) == 0)
2469 return xstrdup (DEFAULT_ASSEMBLER
);
2472 #ifdef DEFAULT_LINKER
2473 if (! strcmp (name
, "ld") && access (DEFAULT_LINKER
, mode
) == 0)
2474 return xstrdup (DEFAULT_LINKER
);
2477 /* Determine the filename to execute (special case for absolute paths). */
2479 if (IS_ABSOLUTE_PATH (name
))
2481 if (access (name
, mode
) == 0)
2482 return xstrdup (name
);
2488 info
.suffix
= (mode
& X_OK
) != 0 ? HOST_EXECUTABLE_SUFFIX
: "";
2489 info
.name_len
= strlen (info
.name
);
2490 info
.suffix_len
= strlen (info
.suffix
);
2493 return (char*) for_each_path (pprefix
, do_multi
,
2494 info
.name_len
+ info
.suffix_len
,
2495 file_at_path
, &info
);
2498 /* Ranking of prefixes in the sort list. -B prefixes are put before
2501 enum path_prefix_priority
2503 PREFIX_PRIORITY_B_OPT
,
2504 PREFIX_PRIORITY_LAST
2507 /* Add an entry for PREFIX in PLIST. The PLIST is kept in ascending
2508 order according to PRIORITY. Within each PRIORITY, new entries are
2511 If WARN is nonzero, we will warn if no file is found
2512 through this prefix. WARN should point to an int
2513 which will be set to 1 if this entry is used.
2515 COMPONENT is the value to be passed to update_path.
2517 REQUIRE_MACHINE_SUFFIX is 1 if this prefix can't be used without
2518 the complete value of machine_suffix.
2519 2 means try both machine_suffix and just_machine_suffix. */
2522 add_prefix (struct path_prefix
*pprefix
, const char *prefix
,
2523 const char *component
, /* enum prefix_priority */ int priority
,
2524 int require_machine_suffix
, int os_multilib
)
2526 struct prefix_list
*pl
, **prev
;
2529 for (prev
= &pprefix
->plist
;
2530 (*prev
) != NULL
&& (*prev
)->priority
<= priority
;
2531 prev
= &(*prev
)->next
)
2534 /* Keep track of the longest prefix. */
2536 prefix
= update_path (prefix
, component
);
2537 len
= strlen (prefix
);
2538 if (len
> pprefix
->max_len
)
2539 pprefix
->max_len
= len
;
2541 pl
= XNEW (struct prefix_list
);
2542 pl
->prefix
= prefix
;
2543 pl
->require_machine_suffix
= require_machine_suffix
;
2544 pl
->priority
= priority
;
2545 pl
->os_multilib
= os_multilib
;
2547 /* Insert after PREV. */
2552 /* Same as add_prefix, but prepending target_system_root to prefix. */
2553 /* The target_system_root prefix has been relocated by gcc_exec_prefix. */
2555 add_sysrooted_prefix (struct path_prefix
*pprefix
, const char *prefix
,
2556 const char *component
,
2557 /* enum prefix_priority */ int priority
,
2558 int require_machine_suffix
, int os_multilib
)
2560 if (!IS_ABSOLUTE_PATH (prefix
))
2561 fatal_error ("system path %qs is not absolute", prefix
);
2563 if (target_system_root
)
2565 char *sysroot_no_trailing_dir_separator
= xstrdup (target_system_root
);
2566 size_t sysroot_len
= strlen (target_system_root
);
2569 && target_system_root
[sysroot_len
- 1] == DIR_SEPARATOR
)
2570 sysroot_no_trailing_dir_separator
[sysroot_len
- 1] = '\0';
2572 if (target_sysroot_suffix
)
2573 prefix
= concat (sysroot_no_trailing_dir_separator
,
2574 target_sysroot_suffix
, prefix
, NULL
);
2576 prefix
= concat (sysroot_no_trailing_dir_separator
, prefix
, NULL
);
2578 free (sysroot_no_trailing_dir_separator
);
2580 /* We have to override this because GCC's notion of sysroot
2581 moves along with GCC. */
2585 add_prefix (pprefix
, prefix
, component
, priority
,
2586 require_machine_suffix
, os_multilib
);
2589 /* Execute the command specified by the arguments on the current line of spec.
2590 When using pipes, this includes several piped-together commands
2591 with `|' between them.
2593 Return 0 if successful, -1 if failed. */
2599 int n_commands
; /* # of command. */
2601 struct pex_obj
*pex
;
2604 const char *prog
; /* program name. */
2605 const char **argv
; /* vector of args. */
2609 struct command
*commands
; /* each command buffer with above info. */
2611 gcc_assert (!processing_spec_function
);
2615 string
= find_a_file (&exec_prefixes
,
2616 argbuf
[0], X_OK
, false);
2619 insert_wrapper (wrapper_string
);
2622 /* Count # of piped commands. */
2623 for (n_commands
= 1, i
= 0; argbuf
.iterate (i
, &arg
); i
++)
2624 if (strcmp (arg
, "|") == 0)
2627 /* Get storage for each command. */
2628 commands
= (struct command
*) alloca (n_commands
* sizeof (struct command
));
2630 /* Split argbuf into its separate piped processes,
2631 and record info about each one.
2632 Also search for the programs that are to be run. */
2634 argbuf
.safe_push (0);
2636 commands
[0].prog
= argbuf
[0]; /* first command. */
2637 commands
[0].argv
= argbuf
.address ();
2639 if (!wrapper_string
)
2641 string
= find_a_file (&exec_prefixes
, commands
[0].prog
, X_OK
, false);
2642 commands
[0].argv
[0] = (string
) ? string
: commands
[0].argv
[0];
2645 for (n_commands
= 1, i
= 0; argbuf
.iterate (i
, &arg
); i
++)
2646 if (arg
&& strcmp (arg
, "|") == 0)
2647 { /* each command. */
2648 #if defined (__MSDOS__) || defined (OS2) || defined (VMS)
2649 fatal_error ("-pipe not supported");
2651 argbuf
[i
] = 0; /* Termination of
2653 commands
[n_commands
].prog
= argbuf
[i
+ 1];
2654 commands
[n_commands
].argv
2655 = &(argbuf
.address ())[i
+ 1];
2656 string
= find_a_file (&exec_prefixes
, commands
[n_commands
].prog
,
2659 commands
[n_commands
].argv
[0] = string
;
2663 /* If -v, print what we are about to do, and maybe query. */
2667 /* For help listings, put a blank line between sub-processes. */
2668 if (print_help_list
)
2669 fputc ('\n', stderr
);
2671 /* Print each piped command as a separate line. */
2672 for (i
= 0; i
< n_commands
; i
++)
2674 const char *const *j
;
2676 if (verbose_only_flag
)
2678 for (j
= commands
[i
].argv
; *j
; j
++)
2681 for (p
= *j
; *p
; ++p
)
2682 if (!ISALNUM ((unsigned char) *p
)
2683 && *p
!= '_' && *p
!= '/' && *p
!= '-' && *p
!= '.')
2687 fprintf (stderr
, " \"");
2688 for (p
= *j
; *p
; ++p
)
2690 if (*p
== '"' || *p
== '\\' || *p
== '$')
2691 fputc ('\\', stderr
);
2694 fputc ('"', stderr
);
2696 /* If it's empty, print "". */
2698 fprintf (stderr
, " \"\"");
2700 fprintf (stderr
, " %s", *j
);
2704 for (j
= commands
[i
].argv
; *j
; j
++)
2705 /* If it's empty, print "". */
2707 fprintf (stderr
, " \"\"");
2709 fprintf (stderr
, " %s", *j
);
2711 /* Print a pipe symbol after all but the last command. */
2712 if (i
+ 1 != n_commands
)
2713 fprintf (stderr
, " |");
2714 fprintf (stderr
, "\n");
2717 if (verbose_only_flag
!= 0)
2719 /* verbose_only_flag should act as if the spec was
2720 executed, so increment execution_count before
2721 returning. This prevents spurious warnings about
2722 unused linker input files, etc. */
2727 fnotice (stderr
, "\nGo ahead? (y or n) ");
2731 while (getchar () != '\n')
2734 if (i
!= 'y' && i
!= 'Y')
2739 #ifdef ENABLE_VALGRIND_CHECKING
2740 /* Run the each command through valgrind. To simplify prepending the
2741 path to valgrind and the option "-q" (for quiet operation unless
2742 something triggers), we allocate a separate argv array. */
2744 for (i
= 0; i
< n_commands
; i
++)
2750 for (argc
= 0; commands
[i
].argv
[argc
] != NULL
; argc
++)
2753 argv
= XALLOCAVEC (const char *, argc
+ 3);
2755 argv
[0] = VALGRIND_PATH
;
2757 for (j
= 2; j
< argc
+ 2; j
++)
2758 argv
[j
] = commands
[i
].argv
[j
- 2];
2761 commands
[i
].argv
= argv
;
2762 commands
[i
].prog
= argv
[0];
2766 /* Run each piped subprocess. */
2768 pex
= pex_init (PEX_USE_PIPES
| ((report_times
|| report_times_to_file
)
2769 ? PEX_RECORD_TIMES
: 0),
2770 progname
, temp_filename
);
2772 fatal_error ("pex_init failed: %m");
2774 for (i
= 0; i
< n_commands
; i
++)
2778 const char *string
= commands
[i
].argv
[0];
2780 errmsg
= pex_run (pex
,
2781 ((i
+ 1 == n_commands
? PEX_LAST
: 0)
2782 | (string
== commands
[i
].prog
? PEX_SEARCH
: 0)),
2783 string
, CONST_CAST (char **, commands
[i
].argv
),
2788 fatal_error (errmsg
);
2792 pfatal_with_name (errmsg
);
2796 if (string
!= commands
[i
].prog
)
2797 free (CONST_CAST (char *, string
));
2802 /* Wait for all the subprocesses to finish. */
2806 struct pex_time
*times
= NULL
;
2809 statuses
= (int *) alloca (n_commands
* sizeof (int));
2810 if (!pex_get_status (pex
, n_commands
, statuses
))
2811 fatal_error ("failed to get exit status: %m");
2813 if (report_times
|| report_times_to_file
)
2815 times
= (struct pex_time
*) alloca (n_commands
* sizeof (struct pex_time
));
2816 if (!pex_get_times (pex
, n_commands
, times
))
2817 fatal_error ("failed to get process times: %m");
2822 for (i
= 0; i
< n_commands
; ++i
)
2824 int status
= statuses
[i
];
2826 if (WIFSIGNALED (status
))
2829 /* SIGPIPE is a special case. It happens in -pipe mode
2830 when the compiler dies before the preprocessor is done,
2831 or the assembler dies before the compiler is done.
2832 There's generally been an error already, and this is
2833 just fallout. So don't generate another error unless
2834 we would otherwise have succeeded. */
2835 if (WTERMSIG (status
) == SIGPIPE
2836 && (signal_count
|| greatest_status
>= MIN_FATAL_STATUS
))
2843 internal_error ("%s (program %s)",
2844 strsignal (WTERMSIG (status
)), commands
[i
].prog
);
2846 else if (WIFEXITED (status
)
2847 && WEXITSTATUS (status
) >= MIN_FATAL_STATUS
)
2849 if (WEXITSTATUS (status
) > greatest_status
)
2850 greatest_status
= WEXITSTATUS (status
);
2854 if (report_times
|| report_times_to_file
)
2856 struct pex_time
*pt
= ×
[i
];
2859 ut
= ((double) pt
->user_seconds
2860 + (double) pt
->user_microseconds
/ 1.0e6
);
2861 st
= ((double) pt
->system_seconds
2862 + (double) pt
->system_microseconds
/ 1.0e6
);
2867 fnotice (stderr
, "# %s %.2f %.2f\n",
2868 commands
[i
].prog
, ut
, st
);
2870 if (report_times_to_file
)
2873 const char *const *j
;
2875 fprintf (report_times_to_file
, "%g %g", ut
, st
);
2877 for (j
= &commands
[i
].prog
; *j
; j
= &commands
[i
].argv
[++c
])
2880 for (p
= *j
; *p
; ++p
)
2881 if (*p
== '"' || *p
== '\\' || *p
== '$'
2887 fprintf (report_times_to_file
, " \"");
2888 for (p
= *j
; *p
; ++p
)
2890 if (*p
== '"' || *p
== '\\' || *p
== '$')
2891 fputc ('\\', report_times_to_file
);
2892 fputc (*p
, report_times_to_file
);
2894 fputc ('"', report_times_to_file
);
2897 fprintf (report_times_to_file
, " %s", *j
);
2900 fputc ('\n', report_times_to_file
);
2910 /* Find all the switches given to us
2911 and make a vector describing them.
2912 The elements of the vector are strings, one per switch given.
2913 If a switch uses following arguments, then the `part1' field
2914 is the switch itself and the `args' field
2915 is a null-terminated vector containing the following arguments.
2916 Bits in the `live_cond' field are:
2917 SWITCH_LIVE to indicate this switch is true in a conditional spec.
2918 SWITCH_FALSE to indicate this switch is overridden by a later switch.
2919 SWITCH_IGNORE to indicate this switch should be ignored (used in %<S).
2920 SWITCH_IGNORE_PERMANENTLY to indicate this switch should be ignored
2921 in all do_spec calls afterwards. Used for %<S from self specs.
2922 The `validated' field is nonzero if any spec has looked at this switch;
2923 if it remains zero at the end of the run, it must be meaningless. */
2925 #define SWITCH_LIVE (1 << 0)
2926 #define SWITCH_FALSE (1 << 1)
2927 #define SWITCH_IGNORE (1 << 2)
2928 #define SWITCH_IGNORE_PERMANENTLY (1 << 3)
2929 #define SWITCH_KEEP_FOR_GCC (1 << 4)
2935 unsigned int live_cond
;
2941 static struct switchstr
*switches
;
2943 static int n_switches
;
2945 static int n_switches_alloc
;
2947 /* Set to zero if -fcompare-debug is disabled, positive if it's
2948 enabled and we're running the first compilation, negative if it's
2949 enabled and we're running the second compilation. For most of the
2950 time, it's in the range -1..1, but it can be temporarily set to 2
2951 or 3 to indicate that the -fcompare-debug flags didn't come from
2952 the command-line, but rather from the GCC_COMPARE_DEBUG environment
2953 variable, until a synthesized -fcompare-debug flag is added to the
2957 /* Set to nonzero if we've seen the -fcompare-debug-second flag. */
2958 int compare_debug_second
;
2960 /* Set to the flags that should be passed to the second compilation in
2961 a -fcompare-debug compilation. */
2962 const char *compare_debug_opt
;
2964 static struct switchstr
*switches_debug_check
[2];
2966 static int n_switches_debug_check
[2];
2968 static int n_switches_alloc_debug_check
[2];
2970 static char *debug_check_temp_file
[2];
2972 /* Language is one of three things:
2974 1) The name of a real programming language.
2975 2) NULL, indicating that no one has figured out
2977 3) '*', indicating that the file should be passed
2982 const char *language
;
2983 struct compiler
*incompiler
;
2988 /* Also a vector of input files specified. */
2990 static struct infile
*infiles
;
2994 static int n_infiles_alloc
;
2996 /* True if multiple input files are being compiled to a single
2999 static bool combine_inputs
;
3001 /* This counts the number of libraries added by lang_specific_driver, so that
3002 we can tell if there were any user supplied any files or libraries. */
3004 static int added_libraries
;
3006 /* And a vector of corresponding output files is made up later. */
3008 const char **outfiles
;
3010 #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
3012 /* Convert NAME to a new name if it is the standard suffix. DO_EXE
3013 is true if we should look for an executable suffix. DO_OBJ
3014 is true if we should look for an object suffix. */
3017 convert_filename (const char *name
, int do_exe ATTRIBUTE_UNUSED
,
3018 int do_obj ATTRIBUTE_UNUSED
)
3020 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
3028 len
= strlen (name
);
3030 #ifdef HAVE_TARGET_OBJECT_SUFFIX
3031 /* Convert x.o to x.obj if TARGET_OBJECT_SUFFIX is ".obj". */
3032 if (do_obj
&& len
> 2
3033 && name
[len
- 2] == '.'
3034 && name
[len
- 1] == 'o')
3036 obstack_grow (&obstack
, name
, len
- 2);
3037 obstack_grow0 (&obstack
, TARGET_OBJECT_SUFFIX
, strlen (TARGET_OBJECT_SUFFIX
));
3038 name
= XOBFINISH (&obstack
, const char *);
3042 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
3043 /* If there is no filetype, make it the executable suffix (which includes
3044 the "."). But don't get confused if we have just "-o". */
3045 if (! do_exe
|| TARGET_EXECUTABLE_SUFFIX
[0] == 0 || (len
== 2 && name
[0] == '-'))
3048 for (i
= len
- 1; i
>= 0; i
--)
3049 if (IS_DIR_SEPARATOR (name
[i
]))
3052 for (i
++; i
< len
; i
++)
3056 obstack_grow (&obstack
, name
, len
);
3057 obstack_grow0 (&obstack
, TARGET_EXECUTABLE_SUFFIX
,
3058 strlen (TARGET_EXECUTABLE_SUFFIX
));
3059 name
= XOBFINISH (&obstack
, const char *);
3066 /* Display the command line switches accepted by gcc. */
3070 printf (_("Usage: %s [options] file...\n"), progname
);
3071 fputs (_("Options:\n"), stdout
);
3073 fputs (_(" -pass-exit-codes Exit with highest error code from a phase\n"), stdout
);
3074 fputs (_(" --help Display this information\n"), stdout
);
3075 fputs (_(" --target-help Display target specific command line options\n"), stdout
);
3076 fputs (_(" --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]\n"), stdout
);
3077 fputs (_(" Display specific types of command line options\n"), stdout
);
3079 fputs (_(" (Use '-v --help' to display command line options of sub-processes)\n"), stdout
);
3080 fputs (_(" --version Display compiler version information\n"), stdout
);
3081 fputs (_(" -dumpspecs Display all of the built in spec strings\n"), stdout
);
3082 fputs (_(" -dumpversion Display the version of the compiler\n"), stdout
);
3083 fputs (_(" -dumpmachine Display the compiler's target processor\n"), stdout
);
3084 fputs (_(" -print-search-dirs Display the directories in the compiler's search path\n"), stdout
);
3085 fputs (_(" -print-libgcc-file-name Display the name of the compiler's companion library\n"), stdout
);
3086 fputs (_(" -print-file-name=<lib> Display the full path to library <lib>\n"), stdout
);
3087 fputs (_(" -print-prog-name=<prog> Display the full path to compiler component <prog>\n"), stdout
);
3089 -print-multiarch Display the target's normalized GNU triplet, used as\n\
3090 a component in the library path\n"), stdout
);
3091 fputs (_(" -print-multi-directory Display the root directory for versions of libgcc\n"), stdout
);
3093 -print-multi-lib Display the mapping between command line options and\n\
3094 multiple library search directories\n"), stdout
);
3095 fputs (_(" -print-multi-os-directory Display the relative path to OS libraries\n"), stdout
);
3096 fputs (_(" -print-sysroot Display the target libraries directory\n"), stdout
);
3097 fputs (_(" -print-sysroot-headers-suffix Display the sysroot suffix used to find headers\n"), stdout
);
3098 fputs (_(" -Wa,<options> Pass comma-separated <options> on to the assembler\n"), stdout
);
3099 fputs (_(" -Wp,<options> Pass comma-separated <options> on to the preprocessor\n"), stdout
);
3100 fputs (_(" -Wl,<options> Pass comma-separated <options> on to the linker\n"), stdout
);
3101 fputs (_(" -Xassembler <arg> Pass <arg> on to the assembler\n"), stdout
);
3102 fputs (_(" -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n"), stdout
);
3103 fputs (_(" -Xlinker <arg> Pass <arg> on to the linker\n"), stdout
);
3104 fputs (_(" -save-temps Do not delete intermediate files\n"), stdout
);
3105 fputs (_(" -save-temps=<arg> Do not delete intermediate files\n"), stdout
);
3107 -no-canonical-prefixes Do not canonicalize paths when building relative\n\
3108 prefixes to other gcc components\n"), stdout
);
3109 fputs (_(" -pipe Use pipes rather than intermediate files\n"), stdout
);
3110 fputs (_(" -time Time the execution of each subprocess\n"), stdout
);
3111 fputs (_(" -specs=<file> Override built-in specs with the contents of <file>\n"), stdout
);
3112 fputs (_(" -std=<standard> Assume that the input sources are for <standard>\n"), stdout
);
3114 --sysroot=<directory> Use <directory> as the root directory for headers\n\
3115 and libraries\n"), stdout
);
3116 fputs (_(" -B <directory> Add <directory> to the compiler's search paths\n"), stdout
);
3117 fputs (_(" -v Display the programs invoked by the compiler\n"), stdout
);
3118 fputs (_(" -### Like -v but options quoted and commands not executed\n"), stdout
);
3119 fputs (_(" -E Preprocess only; do not compile, assemble or link\n"), stdout
);
3120 fputs (_(" -S Compile only; do not assemble or link\n"), stdout
);
3121 fputs (_(" -c Compile and assemble, but do not link\n"), stdout
);
3122 fputs (_(" -o <file> Place the output into <file>\n"), stdout
);
3123 fputs (_(" -pie Create a position independent executable\n"), stdout
);
3124 fputs (_(" -shared Create a shared library\n"), stdout
);
3126 -x <language> Specify the language of the following input files\n\
3127 Permissible languages include: c c++ assembler none\n\
3128 'none' means revert to the default behavior of\n\
3129 guessing the language based on the file's extension\n\
3133 \nOptions starting with -g, -f, -m, -O, -W, or --param are automatically\n\
3134 passed on to the various sub-processes invoked by %s. In order to pass\n\
3135 other options on to these processes the -W<letter> options must be used.\n\
3138 /* The rest of the options are displayed by invocations of the various
3143 add_preprocessor_option (const char *option
, int len
)
3145 preprocessor_options
.safe_push (save_string (option
, len
));
3149 add_assembler_option (const char *option
, int len
)
3151 assembler_options
.safe_push (save_string (option
, len
));
3155 add_linker_option (const char *option
, int len
)
3157 linker_options
.safe_push (save_string (option
, len
));
3160 /* Allocate space for an input file in infiles. */
3165 if (n_infiles_alloc
== 0)
3167 n_infiles_alloc
= 16;
3168 infiles
= XNEWVEC (struct infile
, n_infiles_alloc
);
3170 else if (n_infiles_alloc
== n_infiles
)
3172 n_infiles_alloc
*= 2;
3173 infiles
= XRESIZEVEC (struct infile
, infiles
, n_infiles_alloc
);
3177 /* Store an input file with the given NAME and LANGUAGE in
3181 add_infile (const char *name
, const char *language
)
3184 infiles
[n_infiles
].name
= name
;
3185 infiles
[n_infiles
++].language
= language
;
3188 /* Allocate space for a switch in switches. */
3193 if (n_switches_alloc
== 0)
3195 n_switches_alloc
= 16;
3196 switches
= XNEWVEC (struct switchstr
, n_switches_alloc
);
3198 else if (n_switches_alloc
== n_switches
)
3200 n_switches_alloc
*= 2;
3201 switches
= XRESIZEVEC (struct switchstr
, switches
, n_switches_alloc
);
3205 /* Save an option OPT with N_ARGS arguments in array ARGS, marking it
3206 as validated if VALIDATED and KNOWN if it is an internal switch. */
3209 save_switch (const char *opt
, size_t n_args
, const char *const *args
,
3210 bool validated
, bool known
)
3213 switches
[n_switches
].part1
= opt
+ 1;
3215 switches
[n_switches
].args
= 0;
3218 switches
[n_switches
].args
= XNEWVEC (const char *, n_args
+ 1);
3219 memcpy (switches
[n_switches
].args
, args
, n_args
* sizeof (const char *));
3220 switches
[n_switches
].args
[n_args
] = NULL
;
3223 switches
[n_switches
].live_cond
= 0;
3224 switches
[n_switches
].validated
= validated
;
3225 switches
[n_switches
].known
= known
;
3226 switches
[n_switches
].ordering
= 0;
3230 /* Handle an option DECODED that is unknown to the option-processing
3234 driver_unknown_option_callback (const struct cl_decoded_option
*decoded
)
3236 const char *opt
= decoded
->arg
;
3237 if (opt
[1] == 'W' && opt
[2] == 'n' && opt
[3] == 'o' && opt
[4] == '-'
3238 && !(decoded
->errors
& CL_ERR_NEGATIVE
))
3240 /* Leave unknown -Wno-* options for the compiler proper, to be
3241 diagnosed only if there are warnings. */
3242 save_switch (decoded
->canonical_option
[0],
3243 decoded
->canonical_option_num_elements
- 1,
3244 &decoded
->canonical_option
[1], false, true);
3247 if (decoded
->opt_index
== OPT_SPECIAL_unknown
)
3249 /* Give it a chance to define it a a spec file. */
3250 save_switch (decoded
->canonical_option
[0],
3251 decoded
->canonical_option_num_elements
- 1,
3252 &decoded
->canonical_option
[1], false, false);
3259 /* Handle an option DECODED that is not marked as CL_DRIVER.
3260 LANG_MASK will always be CL_DRIVER. */
3263 driver_wrong_lang_callback (const struct cl_decoded_option
*decoded
,
3264 unsigned int lang_mask ATTRIBUTE_UNUSED
)
3266 /* At this point, non-driver options are accepted (and expected to
3267 be passed down by specs) unless marked to be rejected by the
3268 driver. Options to be rejected by the driver but accepted by the
3269 compilers proper are treated just like completely unknown
3271 const struct cl_option
*option
= &cl_options
[decoded
->opt_index
];
3273 if (option
->cl_reject_driver
)
3274 error ("unrecognized command line option %qs",
3275 decoded
->orig_option_with_args_text
);
3277 save_switch (decoded
->canonical_option
[0],
3278 decoded
->canonical_option_num_elements
- 1,
3279 &decoded
->canonical_option
[1], false, true);
3282 static const char *spec_lang
= 0;
3283 static int last_language_n_infiles
;
3285 /* Handle a driver option; arguments and return value as for
3289 driver_handle_option (struct gcc_options
*opts
,
3290 struct gcc_options
*opts_set
,
3291 const struct cl_decoded_option
*decoded
,
3292 unsigned int lang_mask ATTRIBUTE_UNUSED
, int kind
,
3294 const struct cl_option_handlers
*handlers ATTRIBUTE_UNUSED
,
3295 diagnostic_context
*dc
)
3297 size_t opt_index
= decoded
->opt_index
;
3298 const char *arg
= decoded
->arg
;
3299 const char *compare_debug_replacement_opt
;
3300 int value
= decoded
->value
;
3301 bool validated
= false;
3302 bool do_save
= true;
3304 gcc_assert (opts
== &global_options
);
3305 gcc_assert (opts_set
== &global_options_set
);
3306 gcc_assert (kind
== DK_UNSPECIFIED
);
3307 gcc_assert (loc
== UNKNOWN_LOCATION
);
3308 gcc_assert (dc
== global_dc
);
3314 struct spec_list
*sl
;
3316 for (sl
= specs
; sl
; sl
= sl
->next
)
3317 printf ("*%s:\n%s\n\n", sl
->name
, *(sl
->ptr_spec
));
3318 if (link_command_spec
)
3319 printf ("*link_command:\n%s\n\n", link_command_spec
);
3323 case OPT_dumpversion
:
3324 printf ("%s\n", spec_version
);
3327 case OPT_dumpmachine
:
3328 printf ("%s\n", spec_machine
);
3334 /* CPP driver cannot obtain switch from cc1_options. */
3336 add_preprocessor_option ("--version", strlen ("--version"));
3337 add_assembler_option ("--version", strlen ("--version"));
3338 add_linker_option ("--version", strlen ("--version"));
3342 print_help_list
= 1;
3344 /* CPP driver cannot obtain switch from cc1_options. */
3346 add_preprocessor_option ("--help", 6);
3347 add_assembler_option ("--help", 6);
3348 add_linker_option ("--help", 6);
3352 print_subprocess_help
= 2;
3355 case OPT__target_help
:
3356 print_subprocess_help
= 1;
3358 /* CPP driver cannot obtain switch from cc1_options. */
3360 add_preprocessor_option ("--target-help", 13);
3361 add_assembler_option ("--target-help", 13);
3362 add_linker_option ("--target-help", 13);
3365 case OPT__no_sysroot_suffix
:
3366 case OPT_pass_exit_codes
:
3367 case OPT_print_search_dirs
:
3368 case OPT_print_file_name_
:
3369 case OPT_print_prog_name_
:
3370 case OPT_print_multi_lib
:
3371 case OPT_print_multi_directory
:
3372 case OPT_print_sysroot
:
3373 case OPT_print_multi_os_directory
:
3374 case OPT_print_multiarch
:
3375 case OPT_print_sysroot_headers_suffix
:
3378 /* These options set the variables specified in common.opt
3379 automatically, and do not need to be saved for spec
3384 case OPT_print_libgcc_file_name
:
3385 print_file_name
= "libgcc.a";
3389 case OPT_fcompare_debug_second
:
3390 compare_debug_second
= 1;
3393 case OPT_fcompare_debug
:
3397 compare_debug_replacement_opt
= "-fcompare-debug=";
3399 goto compare_debug_with_arg
;
3402 compare_debug_replacement_opt
= "-fcompare-debug=-gtoggle";
3404 goto compare_debug_with_arg
;
3411 case OPT_fcompare_debug_
:
3412 compare_debug_replacement_opt
= decoded
->canonical_option
[0];
3413 compare_debug_with_arg
:
3414 gcc_assert (decoded
->canonical_option_num_elements
== 1);
3415 gcc_assert (arg
!= NULL
);
3420 if (compare_debug
< 0)
3421 compare_debug_opt
= NULL
;
3423 compare_debug_opt
= arg
;
3424 save_switch (compare_debug_replacement_opt
, 0, NULL
, validated
, true);
3430 /* Pass the rest of this option to the assembler. */
3432 /* Split the argument at commas. */
3434 for (j
= 0; arg
[j
]; j
++)
3437 add_assembler_option (arg
+ prev
, j
- prev
);
3441 /* Record the part after the last comma. */
3442 add_assembler_option (arg
+ prev
, j
- prev
);
3450 /* Pass the rest of this option to the preprocessor. */
3452 /* Split the argument at commas. */
3454 for (j
= 0; arg
[j
]; j
++)
3457 add_preprocessor_option (arg
+ prev
, j
- prev
);
3461 /* Record the part after the last comma. */
3462 add_preprocessor_option (arg
+ prev
, j
- prev
);
3470 /* Split the argument at commas. */
3472 for (j
= 0; arg
[j
]; j
++)
3475 add_infile (save_string (arg
+ prev
, j
- prev
), "*");
3478 /* Record the part after the last comma. */
3479 add_infile (arg
+ prev
, "*");
3485 add_infile (arg
, "*");
3489 case OPT_Xpreprocessor
:
3490 add_preprocessor_option (arg
, strlen (arg
));
3494 case OPT_Xassembler
:
3495 add_assembler_option (arg
, strlen (arg
));
3500 /* POSIX allows separation of -l and the lib arg; canonicalize
3501 by concatenating -l with its arg */
3502 add_infile (concat ("-l", arg
, NULL
), "*");
3507 /* Similarly, canonicalize -L for linkers that may not accept
3508 separate arguments. */
3509 save_switch (concat ("-L", arg
, NULL
), 0, NULL
, validated
, true);
3514 save_switch (concat ("-F", arg
, NULL
), 0, NULL
, validated
, true);
3517 case OPT_save_temps
:
3518 save_temps_flag
= SAVE_TEMPS_CWD
;
3522 case OPT_save_temps_
:
3523 if (strcmp (arg
, "cwd") == 0)
3524 save_temps_flag
= SAVE_TEMPS_CWD
;
3525 else if (strcmp (arg
, "obj") == 0
3526 || strcmp (arg
, "object") == 0)
3527 save_temps_flag
= SAVE_TEMPS_OBJ
;
3529 fatal_error ("%qs is an unknown -save-temps option",
3530 decoded
->orig_option_with_args_text
);
3533 case OPT_no_canonical_prefixes
:
3534 /* Already handled as a special case, so ignored here. */
3540 /* These options set the variables specified in common.opt
3541 automatically, but do need to be saved for spec
3547 struct user_specs
*user
= XNEW (struct user_specs
);
3549 user
->next
= (struct user_specs
*) 0;
3550 user
->filename
= arg
;
3551 if (user_specs_tail
)
3552 user_specs_tail
->next
= user
;
3554 user_specs_head
= user
;
3555 user_specs_tail
= user
;
3561 target_system_root
= arg
;
3562 target_system_root_changed
= 1;
3567 if (report_times_to_file
)
3568 fclose (report_times_to_file
);
3569 report_times_to_file
= fopen (arg
, "a");
3575 This is similar to -v except that there is no execution
3576 of the commands and the echoed arguments are quoted. It
3577 is intended for use in shell scripts to capture the
3578 driver-generated command line. */
3579 verbose_only_flag
++;
3586 size_t len
= strlen (arg
);
3588 /* Catch the case where the user has forgotten to append a
3589 directory separator to the path. Note, they may be using
3590 -B to add an executable name prefix, eg "i386-elf-", in
3591 order to distinguish between multiple installations of
3592 GCC in the same directory. Hence we must check to see
3593 if appending a directory separator actually makes a
3594 valid directory name. */
3595 if (!IS_DIR_SEPARATOR (arg
[len
- 1])
3596 && is_directory (arg
, false))
3598 char *tmp
= XNEWVEC (char, len
+ 2);
3600 tmp
[len
] = DIR_SEPARATOR
;
3605 add_prefix (&exec_prefixes
, arg
, NULL
,
3606 PREFIX_PRIORITY_B_OPT
, 0, 0);
3607 add_prefix (&startfile_prefixes
, arg
, NULL
,
3608 PREFIX_PRIORITY_B_OPT
, 0, 0);
3609 add_prefix (&include_prefixes
, arg
, NULL
,
3610 PREFIX_PRIORITY_B_OPT
, 0, 0);
3617 if (!strcmp (spec_lang
, "none"))
3618 /* Suppress the warning if -xnone comes after the last input
3619 file, because alternate command interfaces like g++ might
3620 find it useful to place -xnone after each input file. */
3623 last_language_n_infiles
= n_infiles
;
3629 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) || defined(HAVE_TARGET_OBJECT_SUFFIX)
3630 arg
= convert_filename (arg
, ! have_c
, 0);
3632 /* Save the output name in case -save-temps=obj was used. */
3633 save_temps_prefix
= xstrdup (arg
);
3634 /* On some systems, ld cannot handle "-o" without a space. So
3635 split the option from its argument. */
3636 save_switch ("-o", 1, &arg
, validated
, true);
3639 case OPT_static_libgcc
:
3640 case OPT_shared_libgcc
:
3641 case OPT_static_libgfortran
:
3642 case OPT_static_libstdc__
:
3643 /* These are always valid, since gcc.c itself understands the
3644 first two, gfortranspec.c understands -static-libgfortran and
3645 g++spec.c understands -static-libstdc++ */
3650 /* Various driver options need no special processing at this
3651 point, having been handled in a prescan above or being
3652 handled by specs. */
3657 save_switch (decoded
->canonical_option
[0],
3658 decoded
->canonical_option_num_elements
- 1,
3659 &decoded
->canonical_option
[1], validated
, true);
3663 /* Put the driver's standard set of option handlers in *HANDLERS. */
3666 set_option_handlers (struct cl_option_handlers
*handlers
)
3668 handlers
->unknown_option_callback
= driver_unknown_option_callback
;
3669 handlers
->wrong_lang_callback
= driver_wrong_lang_callback
;
3670 handlers
->num_handlers
= 3;
3671 handlers
->handlers
[0].handler
= driver_handle_option
;
3672 handlers
->handlers
[0].mask
= CL_DRIVER
;
3673 handlers
->handlers
[1].handler
= common_handle_option
;
3674 handlers
->handlers
[1].mask
= CL_COMMON
;
3675 handlers
->handlers
[2].handler
= target_handle_option
;
3676 handlers
->handlers
[2].mask
= CL_TARGET
;
3679 /* Create the vector `switches' and its contents.
3680 Store its length in `n_switches'. */
3683 process_command (unsigned int decoded_options_count
,
3684 struct cl_decoded_option
*decoded_options
)
3688 char *tooldir_prefix
, *tooldir_prefix2
;
3689 char *(*get_relative_prefix
) (const char *, const char *,
3690 const char *) = NULL
;
3691 struct cl_option_handlers handlers
;
3694 gcc_exec_prefix
= getenv ("GCC_EXEC_PREFIX");
3698 added_libraries
= 0;
3700 /* Figure compiler version from version string. */
3702 compiler_version
= temp1
= xstrdup (version_string
);
3704 for (; *temp1
; ++temp1
)
3713 /* Handle any -no-canonical-prefixes flag early, to assign the function
3714 that builds relative prefixes. This function creates default search
3715 paths that are needed later in normal option handling. */
3717 for (j
= 1; j
< decoded_options_count
; j
++)
3719 if (decoded_options
[j
].opt_index
== OPT_no_canonical_prefixes
)
3721 get_relative_prefix
= make_relative_prefix_ignore_links
;
3725 if (! get_relative_prefix
)
3726 get_relative_prefix
= make_relative_prefix
;
3728 /* Set up the default search paths. If there is no GCC_EXEC_PREFIX,
3729 see if we can create it from the pathname specified in
3730 decoded_options[0].arg. */
3732 gcc_libexec_prefix
= standard_libexec_prefix
;
3734 /* FIXME: make_relative_prefix doesn't yet work for VMS. */
3735 if (!gcc_exec_prefix
)
3737 gcc_exec_prefix
= get_relative_prefix (decoded_options
[0].arg
,
3738 standard_bindir_prefix
,
3739 standard_exec_prefix
);
3740 gcc_libexec_prefix
= get_relative_prefix (decoded_options
[0].arg
,
3741 standard_bindir_prefix
,
3742 standard_libexec_prefix
);
3743 if (gcc_exec_prefix
)
3744 xputenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix
, NULL
));
3748 /* make_relative_prefix requires a program name, but
3749 GCC_EXEC_PREFIX is typically a directory name with a trailing
3750 / (which is ignored by make_relative_prefix), so append a
3752 char *tmp_prefix
= concat (gcc_exec_prefix
, "gcc", NULL
);
3753 gcc_libexec_prefix
= get_relative_prefix (tmp_prefix
,
3754 standard_exec_prefix
,
3755 standard_libexec_prefix
);
3757 /* The path is unrelocated, so fallback to the original setting. */
3758 if (!gcc_libexec_prefix
)
3759 gcc_libexec_prefix
= standard_libexec_prefix
;
3765 /* From this point onward, gcc_exec_prefix is non-null if the toolchain
3766 is relocated. The toolchain was either relocated using GCC_EXEC_PREFIX
3767 or an automatically created GCC_EXEC_PREFIX from
3768 decoded_options[0].arg. */
3770 /* Do language-specific adjustment/addition of flags. */
3771 lang_specific_driver (&decoded_options
, &decoded_options_count
,
3774 if (gcc_exec_prefix
)
3776 int len
= strlen (gcc_exec_prefix
);
3778 if (len
> (int) sizeof ("/lib/gcc/") - 1
3779 && (IS_DIR_SEPARATOR (gcc_exec_prefix
[len
-1])))
3781 temp
= gcc_exec_prefix
+ len
- sizeof ("/lib/gcc/") + 1;
3782 if (IS_DIR_SEPARATOR (*temp
)
3783 && filename_ncmp (temp
+ 1, "lib", 3) == 0
3784 && IS_DIR_SEPARATOR (temp
[4])
3785 && filename_ncmp (temp
+ 5, "gcc", 3) == 0)
3786 len
-= sizeof ("/lib/gcc/") - 1;
3789 set_std_prefix (gcc_exec_prefix
, len
);
3790 add_prefix (&exec_prefixes
, gcc_libexec_prefix
, "GCC",
3791 PREFIX_PRIORITY_LAST
, 0, 0);
3792 add_prefix (&startfile_prefixes
, gcc_exec_prefix
, "GCC",
3793 PREFIX_PRIORITY_LAST
, 0, 0);
3796 /* COMPILER_PATH and LIBRARY_PATH have values
3797 that are lists of directory names with colons. */
3799 temp
= getenv ("COMPILER_PATH");
3802 const char *startp
, *endp
;
3803 char *nstore
= (char *) alloca (strlen (temp
) + 3);
3805 startp
= endp
= temp
;
3808 if (*endp
== PATH_SEPARATOR
|| *endp
== 0)
3810 strncpy (nstore
, startp
, endp
- startp
);
3812 strcpy (nstore
, concat (".", dir_separator_str
, NULL
));
3813 else if (!IS_DIR_SEPARATOR (endp
[-1]))
3815 nstore
[endp
- startp
] = DIR_SEPARATOR
;
3816 nstore
[endp
- startp
+ 1] = 0;
3819 nstore
[endp
- startp
] = 0;
3820 add_prefix (&exec_prefixes
, nstore
, 0,
3821 PREFIX_PRIORITY_LAST
, 0, 0);
3822 add_prefix (&include_prefixes
, nstore
, 0,
3823 PREFIX_PRIORITY_LAST
, 0, 0);
3826 endp
= startp
= endp
+ 1;
3833 temp
= getenv (LIBRARY_PATH_ENV
);
3834 if (temp
&& *cross_compile
== '0')
3836 const char *startp
, *endp
;
3837 char *nstore
= (char *) alloca (strlen (temp
) + 3);
3839 startp
= endp
= temp
;
3842 if (*endp
== PATH_SEPARATOR
|| *endp
== 0)
3844 strncpy (nstore
, startp
, endp
- startp
);
3846 strcpy (nstore
, concat (".", dir_separator_str
, NULL
));
3847 else if (!IS_DIR_SEPARATOR (endp
[-1]))
3849 nstore
[endp
- startp
] = DIR_SEPARATOR
;
3850 nstore
[endp
- startp
+ 1] = 0;
3853 nstore
[endp
- startp
] = 0;
3854 add_prefix (&startfile_prefixes
, nstore
, NULL
,
3855 PREFIX_PRIORITY_LAST
, 0, 1);
3858 endp
= startp
= endp
+ 1;
3865 /* Use LPATH like LIBRARY_PATH (for the CMU build program). */
3866 temp
= getenv ("LPATH");
3867 if (temp
&& *cross_compile
== '0')
3869 const char *startp
, *endp
;
3870 char *nstore
= (char *) alloca (strlen (temp
) + 3);
3872 startp
= endp
= temp
;
3875 if (*endp
== PATH_SEPARATOR
|| *endp
== 0)
3877 strncpy (nstore
, startp
, endp
- startp
);
3879 strcpy (nstore
, concat (".", dir_separator_str
, NULL
));
3880 else if (!IS_DIR_SEPARATOR (endp
[-1]))
3882 nstore
[endp
- startp
] = DIR_SEPARATOR
;
3883 nstore
[endp
- startp
+ 1] = 0;
3886 nstore
[endp
- startp
] = 0;
3887 add_prefix (&startfile_prefixes
, nstore
, NULL
,
3888 PREFIX_PRIORITY_LAST
, 0, 1);
3891 endp
= startp
= endp
+ 1;
3898 /* Process the options and store input files and switches in their
3901 last_language_n_infiles
= -1;
3903 set_option_handlers (&handlers
);
3905 for (j
= 1; j
< decoded_options_count
; j
++)
3907 switch (decoded_options
[j
].opt_index
)
3919 for (j
= 1; j
< decoded_options_count
; j
++)
3921 if (decoded_options
[j
].opt_index
== OPT_SPECIAL_input_file
)
3923 const char *arg
= decoded_options
[j
].arg
;
3924 const char *p
= strrchr (arg
, '@');
3928 #ifdef HAVE_TARGET_OBJECT_SUFFIX
3929 arg
= convert_filename (arg
, 0, access (arg
, F_OK
));
3931 /* For LTO static archive support we handle input file
3932 specifications that are composed of a filename and
3933 an offset like FNAME@OFFSET. */
3936 && sscanf (p
, "@%li%n", &offset
, &consumed
) >= 1
3937 && strlen (p
) == (unsigned int)consumed
)
3939 fname
= (char *)xmalloc (p
- arg
+ 1);
3940 memcpy (fname
, arg
, p
- arg
);
3941 fname
[p
- arg
] = '\0';
3942 /* Only accept non-stdin and existing FNAME parts, otherwise
3943 try with the full name. */
3944 if (strcmp (fname
, "-") == 0 || access (fname
, F_OK
) < 0)
3947 fname
= xstrdup (arg
);
3951 fname
= xstrdup (arg
);
3953 if (strcmp (fname
, "-") != 0 && access (fname
, F_OK
) < 0)
3954 perror_with_name (fname
);
3956 add_infile (arg
, spec_lang
);
3962 read_cmdline_option (&global_options
, &global_options_set
,
3963 decoded_options
+ j
, UNKNOWN_LOCATION
,
3964 CL_DRIVER
, &handlers
, global_dc
);
3967 /* If -save-temps=obj and -o name, create the prefix to use for %b.
3968 Otherwise just make -save-temps=obj the same as -save-temps=cwd. */
3969 if (save_temps_flag
== SAVE_TEMPS_OBJ
&& save_temps_prefix
!= NULL
)
3971 save_temps_length
= strlen (save_temps_prefix
);
3972 temp
= strrchr (lbasename (save_temps_prefix
), '.');
3975 save_temps_length
-= strlen (temp
);
3976 save_temps_prefix
[save_temps_length
] = '\0';
3980 else if (save_temps_prefix
!= NULL
)
3982 free (save_temps_prefix
);
3983 save_temps_prefix
= NULL
;
3986 if (save_temps_flag
&& use_pipes
)
3988 /* -save-temps overrides -pipe, so that temp files are produced */
3989 if (save_temps_flag
)
3990 warning (0, "-pipe ignored because -save-temps specified");
3996 const char *gcd
= getenv ("GCC_COMPARE_DEBUG");
3998 if (gcd
&& gcd
[0] == '-')
4001 compare_debug_opt
= gcd
;
4003 else if (gcd
&& *gcd
&& strcmp (gcd
, "0"))
4006 compare_debug_opt
= "-gtoggle";
4009 else if (compare_debug
< 0)
4012 gcc_assert (!compare_debug_opt
);
4015 /* Set up the search paths. We add directories that we expect to
4016 contain GNU Toolchain components before directories specified by
4017 the machine description so that we will find GNU components (like
4018 the GNU assembler) before those of the host system. */
4020 /* If we don't know where the toolchain has been installed, use the
4021 configured-in locations. */
4022 if (!gcc_exec_prefix
)
4025 add_prefix (&exec_prefixes
, standard_libexec_prefix
, "GCC",
4026 PREFIX_PRIORITY_LAST
, 1, 0);
4027 add_prefix (&exec_prefixes
, standard_libexec_prefix
, "BINUTILS",
4028 PREFIX_PRIORITY_LAST
, 2, 0);
4029 add_prefix (&exec_prefixes
, standard_exec_prefix
, "BINUTILS",
4030 PREFIX_PRIORITY_LAST
, 2, 0);
4032 add_prefix (&startfile_prefixes
, standard_exec_prefix
, "BINUTILS",
4033 PREFIX_PRIORITY_LAST
, 1, 0);
4036 gcc_assert (!IS_ABSOLUTE_PATH (tooldir_base_prefix
));
4037 tooldir_prefix2
= concat (tooldir_base_prefix
, spec_machine
,
4038 dir_separator_str
, NULL
);
4040 /* Look for tools relative to the location from which the driver is
4041 running, or, if that is not available, the configured prefix. */
4043 = concat (gcc_exec_prefix
? gcc_exec_prefix
: standard_exec_prefix
,
4044 spec_machine
, dir_separator_str
,
4045 spec_version
, dir_separator_str
, tooldir_prefix2
, NULL
);
4046 free (tooldir_prefix2
);
4048 add_prefix (&exec_prefixes
,
4049 concat (tooldir_prefix
, "bin", dir_separator_str
, NULL
),
4050 "BINUTILS", PREFIX_PRIORITY_LAST
, 0, 0);
4051 add_prefix (&startfile_prefixes
,
4052 concat (tooldir_prefix
, "lib", dir_separator_str
, NULL
),
4053 "BINUTILS", PREFIX_PRIORITY_LAST
, 0, 1);
4054 free (tooldir_prefix
);
4056 #if defined(TARGET_SYSTEM_ROOT_RELOCATABLE) && !defined(VMS)
4057 /* If the normal TARGET_SYSTEM_ROOT is inside of $exec_prefix,
4058 then consider it to relocate with the rest of the GCC installation
4059 if GCC_EXEC_PREFIX is set.
4060 ``make_relative_prefix'' is not compiled for VMS, so don't call it. */
4061 if (target_system_root
&& !target_system_root_changed
&& gcc_exec_prefix
)
4063 char *tmp_prefix
= get_relative_prefix (decoded_options
[0].arg
,
4064 standard_bindir_prefix
,
4065 target_system_root
);
4066 if (tmp_prefix
&& access_check (tmp_prefix
, F_OK
) == 0)
4068 target_system_root
= tmp_prefix
;
4069 target_system_root_changed
= 1;
4074 /* More prefixes are enabled in main, after we read the specs file
4075 and determine whether this is cross-compilation or not. */
4077 if (n_infiles
== last_language_n_infiles
&& spec_lang
!= 0)
4078 warning (0, "%<-x %s%> after last input file has no effect", spec_lang
);
4080 /* Synthesize -fcompare-debug flag from the GCC_COMPARE_DEBUG
4081 environment variable. */
4082 if (compare_debug
== 2 || compare_debug
== 3)
4084 const char *opt
= concat ("-fcompare-debug=", compare_debug_opt
, NULL
);
4085 save_switch (opt
, 0, NULL
, false, true);
4089 /* Ensure we only invoke each subprocess once. */
4090 if (print_subprocess_help
|| print_help_list
|| print_version
)
4094 /* Create a dummy input file, so that we can pass
4095 the help option on to the various sub-processes. */
4096 add_infile ("help-dummy", "c");
4100 switches
[n_switches
].part1
= 0;
4102 infiles
[n_infiles
].name
= 0;
4105 /* Store switches not filtered out by %<S in spec in COLLECT_GCC_OPTIONS
4106 and place that in the environment. */
4109 set_collect_gcc_options (void)
4114 /* Build COLLECT_GCC_OPTIONS to have all of the options specified to
4116 obstack_grow (&collect_obstack
, "COLLECT_GCC_OPTIONS=",
4117 sizeof ("COLLECT_GCC_OPTIONS=") - 1);
4120 for (i
= 0; (int) i
< n_switches
; i
++)
4122 const char *const *args
;
4125 obstack_grow (&collect_obstack
, " ", 1);
4129 /* Ignore elided switches. */
4130 if ((switches
[i
].live_cond
4131 & (SWITCH_IGNORE
| SWITCH_KEEP_FOR_GCC
))
4135 obstack_grow (&collect_obstack
, "'-", 2);
4136 q
= switches
[i
].part1
;
4137 while ((p
= strchr (q
, '\'')))
4139 obstack_grow (&collect_obstack
, q
, p
- q
);
4140 obstack_grow (&collect_obstack
, "'\\''", 4);
4143 obstack_grow (&collect_obstack
, q
, strlen (q
));
4144 obstack_grow (&collect_obstack
, "'", 1);
4146 for (args
= switches
[i
].args
; args
&& *args
; args
++)
4148 obstack_grow (&collect_obstack
, " '", 2);
4150 while ((p
= strchr (q
, '\'')))
4152 obstack_grow (&collect_obstack
, q
, p
- q
);
4153 obstack_grow (&collect_obstack
, "'\\''", 4);
4156 obstack_grow (&collect_obstack
, q
, strlen (q
));
4157 obstack_grow (&collect_obstack
, "'", 1);
4160 obstack_grow (&collect_obstack
, "\0", 1);
4161 xputenv (XOBFINISH (&collect_obstack
, char *));
4164 /* Process a spec string, accumulating and running commands. */
4166 /* These variables describe the input file name.
4167 input_file_number is the index on outfiles of this file,
4168 so that the output file name can be stored for later use by %o.
4169 input_basename is the start of the part of the input file
4170 sans all directory names, and basename_length is the number
4171 of characters starting there excluding the suffix .c or whatever. */
4173 static const char *gcc_input_filename
;
4174 static int input_file_number
;
4175 size_t input_filename_length
;
4176 static int basename_length
;
4177 static int suffixed_basename_length
;
4178 static const char *input_basename
;
4179 static const char *input_suffix
;
4180 #ifndef HOST_LACKS_INODE_NUMBERS
4181 static struct stat input_stat
;
4183 static int input_stat_set
;
4185 /* The compiler used to process the current input file. */
4186 static struct compiler
*input_file_compiler
;
4188 /* These are variables used within do_spec and do_spec_1. */
4190 /* Nonzero if an arg has been started and not yet terminated
4191 (with space, tab or newline). */
4192 static int arg_going
;
4194 /* Nonzero means %d or %g has been seen; the next arg to be terminated
4195 is a temporary file name. */
4196 static int delete_this_arg
;
4198 /* Nonzero means %w has been seen; the next arg to be terminated
4199 is the output file name of this compilation. */
4200 static int this_is_output_file
;
4202 /* Nonzero means %s has been seen; the next arg to be terminated
4203 is the name of a library file and we should try the standard
4204 search dirs for it. */
4205 static int this_is_library_file
;
4207 /* Nonzero means %T has been seen; the next arg to be terminated
4208 is the name of a linker script and we should try all of the
4209 standard search dirs for it. If it is found insert a --script
4210 command line switch and then substitute the full path in place,
4211 otherwise generate an error message. */
4212 static int this_is_linker_script
;
4214 /* Nonzero means that the input of this command is coming from a pipe. */
4215 static int input_from_pipe
;
4217 /* Nonnull means substitute this for any suffix when outputting a switches
4219 static const char *suffix_subst
;
4221 /* If there is an argument being accumulated, terminate it and store it. */
4224 end_going_arg (void)
4230 obstack_1grow (&obstack
, 0);
4231 string
= XOBFINISH (&obstack
, const char *);
4232 if (this_is_library_file
)
4233 string
= find_file (string
);
4234 if (this_is_linker_script
)
4236 char * full_script_path
= find_a_file (&startfile_prefixes
, string
, R_OK
, true);
4238 if (full_script_path
== NULL
)
4240 error ("unable to locate default linker script %qs in the library search paths", string
);
4241 /* Script was not found on search path. */
4244 store_arg ("--script", false, false);
4245 string
= full_script_path
;
4247 store_arg (string
, delete_this_arg
, this_is_output_file
);
4248 if (this_is_output_file
)
4249 outfiles
[input_file_number
] = string
;
4255 /* Parse the WRAPPER string which is a comma separated list of the command line
4256 and insert them into the beginning of argbuf. */
4259 insert_wrapper (const char *wrapper
)
4263 char *buf
= xstrdup (wrapper
);
4265 unsigned int old_length
= argbuf
.length ();
4273 while ((p
= strchr (p
, ',')) != NULL
);
4275 argbuf
.safe_grow (old_length
+ n
);
4276 memmove (argbuf
.address () + n
,
4278 old_length
* sizeof (const_char_p
));
4292 while ((p
= strchr (p
, ',')) != NULL
);
4293 gcc_assert (i
== n
);
4296 /* Process the spec SPEC and run the commands specified therein.
4297 Returns 0 if the spec is successfully processed; -1 if failed. */
4300 do_spec (const char *spec
)
4304 value
= do_spec_2 (spec
);
4306 /* Force out any unfinished command.
4307 If -pipe, this forces out the last command if it ended in `|'. */
4310 if (argbuf
.length () > 0
4311 && !strcmp (argbuf
.last (), "|"))
4314 set_collect_gcc_options ();
4316 if (argbuf
.length () > 0)
4324 do_spec_2 (const char *spec
)
4330 delete_this_arg
= 0;
4331 this_is_output_file
= 0;
4332 this_is_library_file
= 0;
4333 this_is_linker_script
= 0;
4334 input_from_pipe
= 0;
4335 suffix_subst
= NULL
;
4337 result
= do_spec_1 (spec
, 0, NULL
);
4345 /* Process the given spec string and add any new options to the end
4346 of the switches/n_switches array. */
4349 do_option_spec (const char *name
, const char *spec
)
4351 unsigned int i
, value_count
, value_len
;
4352 const char *p
, *q
, *value
;
4353 char *tmp_spec
, *tmp_spec_p
;
4355 if (configure_default_options
[0].name
== NULL
)
4358 for (i
= 0; i
< ARRAY_SIZE (configure_default_options
); i
++)
4359 if (strcmp (configure_default_options
[i
].name
, name
) == 0)
4361 if (i
== ARRAY_SIZE (configure_default_options
))
4364 value
= configure_default_options
[i
].value
;
4365 value_len
= strlen (value
);
4367 /* Compute the size of the final spec. */
4370 while ((p
= strstr (p
, "%(VALUE)")) != NULL
)
4376 /* Replace each %(VALUE) by the specified value. */
4377 tmp_spec
= (char *) alloca (strlen (spec
) + 1
4378 + value_count
* (value_len
- strlen ("%(VALUE)")));
4379 tmp_spec_p
= tmp_spec
;
4381 while ((p
= strstr (q
, "%(VALUE)")) != NULL
)
4383 memcpy (tmp_spec_p
, q
, p
- q
);
4384 tmp_spec_p
= tmp_spec_p
+ (p
- q
);
4385 memcpy (tmp_spec_p
, value
, value_len
);
4386 tmp_spec_p
+= value_len
;
4387 q
= p
+ strlen ("%(VALUE)");
4389 strcpy (tmp_spec_p
, q
);
4391 do_self_spec (tmp_spec
);
4394 /* Process the given spec string and add any new options to the end
4395 of the switches/n_switches array. */
4398 do_self_spec (const char *spec
)
4403 do_spec_1 (" ", 0, NULL
);
4405 /* Mark %<S switches processed by do_self_spec to be ignored permanently.
4406 do_self_specs adds the replacements to switches array, so it shouldn't
4407 be processed afterwards. */
4408 for (i
= 0; i
< n_switches
; i
++)
4409 if ((switches
[i
].live_cond
& SWITCH_IGNORE
))
4410 switches
[i
].live_cond
|= SWITCH_IGNORE_PERMANENTLY
;
4412 if (argbuf
.length () > 0)
4414 const char **argbuf_copy
;
4415 struct cl_decoded_option
*decoded_options
;
4416 struct cl_option_handlers handlers
;
4417 unsigned int decoded_options_count
;
4420 /* Create a copy of argbuf with a dummy argv[0] entry for
4421 decode_cmdline_options_to_array. */
4422 argbuf_copy
= XNEWVEC (const char *,
4423 argbuf
.length () + 1);
4424 argbuf_copy
[0] = "";
4425 memcpy (argbuf_copy
+ 1, argbuf
.address (),
4426 argbuf
.length () * sizeof (const char *));
4428 decode_cmdline_options_to_array (argbuf
.length () + 1,
4430 CL_DRIVER
, &decoded_options
,
4431 &decoded_options_count
);
4434 set_option_handlers (&handlers
);
4436 for (j
= 1; j
< decoded_options_count
; j
++)
4438 switch (decoded_options
[j
].opt_index
)
4440 case OPT_SPECIAL_input_file
:
4441 /* Specs should only generate options, not input
4443 if (strcmp (decoded_options
[j
].arg
, "-") != 0)
4444 fatal_error ("switch %qs does not start with %<-%>",
4445 decoded_options
[j
].arg
);
4447 fatal_error ("spec-generated switch is just %<-%>");
4450 case OPT_fcompare_debug_second
:
4451 case OPT_fcompare_debug
:
4452 case OPT_fcompare_debug_
:
4454 /* Avoid duplicate processing of some options from
4455 compare-debug specs; just save them here. */
4456 save_switch (decoded_options
[j
].canonical_option
[0],
4457 (decoded_options
[j
].canonical_option_num_elements
4459 &decoded_options
[j
].canonical_option
[1], false, true);
4463 read_cmdline_option (&global_options
, &global_options_set
,
4464 decoded_options
+ j
, UNKNOWN_LOCATION
,
4465 CL_DRIVER
, &handlers
, global_dc
);
4471 switches
[n_switches
].part1
= 0;
4475 /* Callback for processing %D and %I specs. */
4477 struct spec_path_info
{
4482 bool separate_options
;
4486 spec_path (char *path
, void *data
)
4488 struct spec_path_info
*info
= (struct spec_path_info
*) data
;
4492 if (info
->omit_relative
&& !IS_ABSOLUTE_PATH (path
))
4495 if (info
->append_len
!= 0)
4497 len
= strlen (path
);
4498 memcpy (path
+ len
, info
->append
, info
->append_len
+ 1);
4501 if (!is_directory (path
, true))
4504 do_spec_1 (info
->option
, 1, NULL
);
4505 if (info
->separate_options
)
4506 do_spec_1 (" ", 0, NULL
);
4508 if (info
->append_len
== 0)
4510 len
= strlen (path
);
4511 save
= path
[len
- 1];
4512 if (IS_DIR_SEPARATOR (path
[len
- 1]))
4513 path
[len
- 1] = '\0';
4516 do_spec_1 (path
, 1, NULL
);
4517 do_spec_1 (" ", 0, NULL
);
4519 /* Must not damage the original path. */
4520 if (info
->append_len
== 0)
4521 path
[len
- 1] = save
;
4526 /* Create a temporary FILE with the contents of ARGV. Add @FILE to the
4530 create_at_file (char **argv
)
4532 char *temp_file
= make_temp_file ("");
4533 char *at_argument
= concat ("@", temp_file
, NULL
);
4534 FILE *f
= fopen (temp_file
, "w");
4538 fatal_error ("could not open temporary response file %s",
4541 status
= writeargv (argv
, f
);
4544 fatal_error ("could not write to temporary response file %s",
4547 status
= fclose (f
);
4550 fatal_error ("could not close temporary response file %s",
4553 store_arg (at_argument
, 0, 0);
4555 record_temp_file (temp_file
, !save_temps_flag
, !save_temps_flag
);
4558 /* True if we should compile INFILE. */
4561 compile_input_file_p (struct infile
*infile
)
4563 if ((!infile
->language
) || (infile
->language
[0] != '*'))
4564 if (infile
->incompiler
== input_file_compiler
)
4569 /* Process each member of VEC as a spec. */
4572 do_specs_vec (vec
<char_p
> vec
)
4577 FOR_EACH_VEC_ELT (vec
, ix
, opt
)
4579 do_spec_1 (opt
, 1, NULL
);
4580 /* Make each accumulated option a separate argument. */
4581 do_spec_1 (" ", 0, NULL
);
4585 /* Process the sub-spec SPEC as a portion of a larger spec.
4586 This is like processing a whole spec except that we do
4587 not initialize at the beginning and we do not supply a
4588 newline by default at the end.
4589 INSWITCH nonzero means don't process %-sequences in SPEC;
4590 in this case, % is treated as an ordinary character.
4591 This is used while substituting switches.
4592 INSWITCH nonzero also causes SPC not to terminate an argument.
4594 Value is zero unless a line was finished
4595 and the command on that line reported an error. */
4598 do_spec_1 (const char *spec
, int inswitch
, const char *soft_matched_part
)
4600 const char *p
= spec
;
4605 /* If it's an empty string argument to a switch, keep it as is. */
4606 if (inswitch
&& !*p
)
4610 /* If substituting a switch, treat all chars like letters.
4611 Otherwise, NL, SPC, TAB and % are special. */
4612 switch (inswitch
? 'a' : c
)
4617 if (argbuf
.length () > 0
4618 && !strcmp (argbuf
.last (), "|"))
4620 /* A `|' before the newline means use a pipe here,
4621 but only if -pipe was specified.
4622 Otherwise, execute now and don't pass the `|' as an arg. */
4625 input_from_pipe
= 1;
4632 set_collect_gcc_options ();
4634 if (argbuf
.length () > 0)
4640 /* Reinitialize for a new command, and for a new argument. */
4643 delete_this_arg
= 0;
4644 this_is_output_file
= 0;
4645 this_is_library_file
= 0;
4646 this_is_linker_script
= 0;
4647 input_from_pipe
= 0;
4654 obstack_1grow (&obstack
, c
);
4662 /* Reinitialize for a new argument. */
4663 delete_this_arg
= 0;
4664 this_is_output_file
= 0;
4665 this_is_library_file
= 0;
4666 this_is_linker_script
= 0;
4673 fatal_error ("spec %qs invalid", spec
);
4676 if (save_temps_length
)
4677 obstack_grow (&obstack
, save_temps_prefix
, save_temps_length
);
4679 obstack_grow (&obstack
, input_basename
, basename_length
);
4680 if (compare_debug
< 0)
4681 obstack_grow (&obstack
, ".gk", 3);
4686 if (save_temps_length
)
4687 obstack_grow (&obstack
, save_temps_prefix
, save_temps_length
);
4689 obstack_grow (&obstack
, input_basename
, suffixed_basename_length
);
4690 if (compare_debug
< 0)
4691 obstack_grow (&obstack
, ".gk", 3);
4696 delete_this_arg
= 2;
4699 /* Dump out the directories specified with LIBRARY_PATH,
4700 followed by the absolute directories
4701 that we search for startfiles. */
4704 struct spec_path_info info
;
4707 info
.append_len
= 0;
4708 #ifdef RELATIVE_PREFIX_NOT_LINKDIR
4709 /* Used on systems which record the specified -L dirs
4710 and use them to search for dynamic linking.
4711 Relative directories always come from -B,
4712 and it is better not to use them for searching
4713 at run time. In particular, stage1 loses. */
4714 info
.omit_relative
= true;
4716 info
.omit_relative
= false;
4718 info
.separate_options
= false;
4720 for_each_path (&startfile_prefixes
, true, 0, spec_path
, &info
);
4725 /* %efoo means report an error with `foo' as error message
4726 and don't execute any more commands for this file. */
4730 while (*p
!= 0 && *p
!= '\n')
4732 buf
= (char *) alloca (p
- q
+ 1);
4733 strncpy (buf
, q
, p
- q
);
4735 error ("%s", _(buf
));
4740 /* %nfoo means report a notice with `foo' on stderr. */
4744 while (*p
!= 0 && *p
!= '\n')
4746 buf
= (char *) alloca (p
- q
+ 1);
4747 strncpy (buf
, q
, p
- q
);
4749 inform (0, "%s", _(buf
));
4759 /* If save_temps_flag is off, and the HOST_BIT_BUCKET is
4760 defined, and it is not a directory, and it is
4761 writable, use it. Otherwise, treat this like any
4762 other temporary file. */
4764 if ((!save_temps_flag
)
4765 && (stat (HOST_BIT_BUCKET
, &st
) == 0) && (!S_ISDIR (st
.st_mode
))
4766 && (access (HOST_BIT_BUCKET
, W_OK
) == 0))
4768 obstack_grow (&obstack
, HOST_BIT_BUCKET
,
4769 strlen (HOST_BIT_BUCKET
));
4770 delete_this_arg
= 0;
4775 goto create_temp_file
;
4779 obstack_1grow (&obstack
, '-');
4780 delete_this_arg
= 0;
4783 /* consume suffix */
4784 while (*p
== '.' || ISALNUM ((unsigned char) *p
))
4786 if (p
[0] == '%' && p
[1] == 'O')
4791 goto create_temp_file
;
4795 /* consume suffix */
4796 while (*p
== '.' || ISALNUM ((unsigned char) *p
))
4798 if (p
[0] == '%' && p
[1] == 'O')
4803 goto create_temp_file
;
4809 struct temp_name
*t
;
4811 const char *suffix
= p
;
4812 char *saved_suffix
= NULL
;
4814 while (*p
== '.' || ISALNUM ((unsigned char) *p
))
4816 suffix_length
= p
- suffix
;
4817 if (p
[0] == '%' && p
[1] == 'O')
4820 /* We don't support extra suffix characters after %O. */
4821 if (*p
== '.' || ISALNUM ((unsigned char) *p
))
4822 fatal_error ("spec %qs has invalid %<%%0%c%>", spec
, *p
);
4823 if (suffix_length
== 0)
4824 suffix
= TARGET_OBJECT_SUFFIX
;
4828 = XNEWVEC (char, suffix_length
4829 + strlen (TARGET_OBJECT_SUFFIX
));
4830 strncpy (saved_suffix
, suffix
, suffix_length
);
4831 strcpy (saved_suffix
+ suffix_length
,
4832 TARGET_OBJECT_SUFFIX
);
4834 suffix_length
+= strlen (TARGET_OBJECT_SUFFIX
);
4837 if (compare_debug
< 0)
4839 suffix
= concat (".gk", suffix
, NULL
);
4843 /* If -save-temps=obj and -o were specified, use that for the
4845 if (save_temps_length
)
4848 temp_filename_length
4849 = save_temps_length
+ suffix_length
+ 1;
4850 tmp
= (char *) alloca (temp_filename_length
);
4851 memcpy (tmp
, save_temps_prefix
, save_temps_length
);
4852 memcpy (tmp
+ save_temps_length
, suffix
, suffix_length
);
4853 tmp
[save_temps_length
+ suffix_length
] = '\0';
4854 temp_filename
= save_string (tmp
, save_temps_length
4856 obstack_grow (&obstack
, temp_filename
,
4857 temp_filename_length
);
4859 delete_this_arg
= 0;
4863 /* If the gcc_input_filename has the same suffix specified
4864 for the %g, %u, or %U, and -save-temps is specified,
4865 we could end up using that file as an intermediate
4866 thus clobbering the user's source file (.e.g.,
4867 gcc -save-temps foo.s would clobber foo.s with the
4868 output of cpp0). So check for this condition and
4869 generate a temp file as the intermediate. */
4871 if (save_temps_flag
)
4874 temp_filename_length
= basename_length
+ suffix_length
+ 1;
4875 tmp
= (char *) alloca (temp_filename_length
);
4876 memcpy (tmp
, input_basename
, basename_length
);
4877 memcpy (tmp
+ basename_length
, suffix
, suffix_length
);
4878 tmp
[basename_length
+ suffix_length
] = '\0';
4879 temp_filename
= tmp
;
4881 if (filename_cmp (temp_filename
, gcc_input_filename
) != 0)
4883 #ifndef HOST_LACKS_INODE_NUMBERS
4884 struct stat st_temp
;
4886 /* Note, set_input() resets input_stat_set to 0. */
4887 if (input_stat_set
== 0)
4889 input_stat_set
= stat (gcc_input_filename
,
4891 if (input_stat_set
>= 0)
4895 /* If we have the stat for the gcc_input_filename
4896 and we can do the stat for the temp_filename
4897 then the they could still refer to the same
4898 file if st_dev/st_ino's are the same. */
4899 if (input_stat_set
!= 1
4900 || stat (temp_filename
, &st_temp
) < 0
4901 || input_stat
.st_dev
!= st_temp
.st_dev
4902 || input_stat
.st_ino
!= st_temp
.st_ino
)
4904 /* Just compare canonical pathnames. */
4905 char* input_realname
= lrealpath (gcc_input_filename
);
4906 char* temp_realname
= lrealpath (temp_filename
);
4907 bool files_differ
= filename_cmp (input_realname
, temp_realname
);
4908 free (input_realname
);
4909 free (temp_realname
);
4913 temp_filename
= save_string (temp_filename
,
4914 temp_filename_length
+ 1);
4915 obstack_grow (&obstack
, temp_filename
,
4916 temp_filename_length
);
4918 delete_this_arg
= 0;
4924 /* See if we already have an association of %g/%u/%U and
4926 for (t
= temp_names
; t
; t
= t
->next
)
4927 if (t
->length
== suffix_length
4928 && strncmp (t
->suffix
, suffix
, suffix_length
) == 0
4929 && t
->unique
== (c
== 'u' || c
== 'U' || c
== 'j'))
4932 /* Make a new association if needed. %u and %j
4934 if (t
== 0 || c
== 'u' || c
== 'j')
4938 t
= XNEW (struct temp_name
);
4939 t
->next
= temp_names
;
4942 t
->length
= suffix_length
;
4945 t
->suffix
= saved_suffix
;
4946 saved_suffix
= NULL
;
4949 t
->suffix
= save_string (suffix
, suffix_length
);
4950 t
->unique
= (c
== 'u' || c
== 'U' || c
== 'j');
4951 temp_filename
= make_temp_file (t
->suffix
);
4952 temp_filename_length
= strlen (temp_filename
);
4953 t
->filename
= temp_filename
;
4954 t
->filename_length
= temp_filename_length
;
4957 free (saved_suffix
);
4959 obstack_grow (&obstack
, t
->filename
, t
->filename_length
);
4960 delete_this_arg
= 1;
4968 if (at_file_supplied
)
4970 /* We are going to expand `%i' to `@FILE', where FILE
4971 is a newly-created temporary filename. The filenames
4972 that would usually be expanded in place of %o will be
4973 written to the temporary file. */
4978 for (i
= 0; i
< n_infiles
; i
++)
4979 if (compile_input_file_p (&infiles
[i
]))
4982 argv
= (char **) alloca (sizeof (char *) * (n_files
+ 1));
4984 /* Copy the strings over. */
4985 for (i
= 0, j
= 0; i
< n_infiles
; i
++)
4986 if (compile_input_file_p (&infiles
[i
]))
4988 argv
[j
] = CONST_CAST (char *, infiles
[i
].name
);
4989 infiles
[i
].compiled
= true;
4994 create_at_file (argv
);
4997 for (i
= 0; (int) i
< n_infiles
; i
++)
4998 if (compile_input_file_p (&infiles
[i
]))
5000 store_arg (infiles
[i
].name
, 0, 0);
5001 infiles
[i
].compiled
= true;
5006 obstack_grow (&obstack
, gcc_input_filename
,
5007 input_filename_length
);
5014 struct spec_path_info info
;
5018 do_spec_1 ("-imultilib", 1, NULL
);
5019 /* Make this a separate argument. */
5020 do_spec_1 (" ", 0, NULL
);
5021 do_spec_1 (multilib_dir
, 1, NULL
);
5022 do_spec_1 (" ", 0, NULL
);
5027 do_spec_1 ("-imultiarch", 1, NULL
);
5028 /* Make this a separate argument. */
5029 do_spec_1 (" ", 0, NULL
);
5030 do_spec_1 (multiarch_dir
, 1, NULL
);
5031 do_spec_1 (" ", 0, NULL
);
5034 if (gcc_exec_prefix
)
5036 do_spec_1 ("-iprefix", 1, NULL
);
5037 /* Make this a separate argument. */
5038 do_spec_1 (" ", 0, NULL
);
5039 do_spec_1 (gcc_exec_prefix
, 1, NULL
);
5040 do_spec_1 (" ", 0, NULL
);
5043 if (target_system_root_changed
||
5044 (target_system_root
&& target_sysroot_hdrs_suffix
))
5046 do_spec_1 ("-isysroot", 1, NULL
);
5047 /* Make this a separate argument. */
5048 do_spec_1 (" ", 0, NULL
);
5049 do_spec_1 (target_system_root
, 1, NULL
);
5050 if (target_sysroot_hdrs_suffix
)
5051 do_spec_1 (target_sysroot_hdrs_suffix
, 1, NULL
);
5052 do_spec_1 (" ", 0, NULL
);
5055 info
.option
= "-isystem";
5056 info
.append
= "include";
5057 info
.append_len
= strlen (info
.append
);
5058 info
.omit_relative
= false;
5059 info
.separate_options
= true;
5061 for_each_path (&include_prefixes
, false, info
.append_len
,
5064 info
.append
= "include-fixed";
5065 if (*sysroot_hdrs_suffix_spec
)
5066 info
.append
= concat (info
.append
, dir_separator_str
,
5067 multilib_dir
, NULL
);
5068 info
.append_len
= strlen (info
.append
);
5069 for_each_path (&include_prefixes
, false, info
.append_len
,
5076 int max
= n_infiles
;
5077 max
+= lang_specific_extra_outfiles
;
5079 if (HAVE_GNU_LD
&& at_file_supplied
)
5081 /* We are going to expand `%o' to `@FILE', where FILE
5082 is a newly-created temporary filename. The filenames
5083 that would usually be expanded in place of %o will be
5084 written to the temporary file. */
5089 /* Convert OUTFILES into a form suitable for writeargv. */
5091 /* Determine how many are non-NULL. */
5092 for (n_files
= 0, i
= 0; i
< max
; i
++)
5093 n_files
+= outfiles
[i
] != NULL
;
5095 argv
= (char **) alloca (sizeof (char *) * (n_files
+ 1));
5097 /* Copy the strings over. */
5098 for (i
= 0, j
= 0; i
< max
; i
++)
5101 argv
[j
] = CONST_CAST (char *, outfiles
[i
]);
5106 create_at_file (argv
);
5109 for (i
= 0; i
< max
; i
++)
5111 store_arg (outfiles
[i
], 0, 0);
5116 obstack_grow (&obstack
, TARGET_OBJECT_SUFFIX
, strlen (TARGET_OBJECT_SUFFIX
));
5121 this_is_library_file
= 1;
5125 this_is_linker_script
= 1;
5129 outfiles
[input_file_number
] = NULL
;
5133 this_is_output_file
= 1;
5138 unsigned int cur_index
= argbuf
.length ();
5139 /* Handle the {...} following the %W. */
5141 fatal_error ("spec %qs has invalid %<%%W%c%>", spec
, *p
);
5142 p
= handle_braces (p
+ 1);
5146 /* If any args were output, mark the last one for deletion
5148 if (argbuf
.length () != cur_index
)
5149 record_temp_file (argbuf
.last (), 0, 1);
5153 /* %x{OPTION} records OPTION for %X to output. */
5161 /* Skip past the option value and make a copy. */
5163 fatal_error ("spec %qs has invalid %<%%x%c%>", spec
, *p
);
5166 string
= save_string (p1
+ 1, p
- p1
- 2);
5168 /* See if we already recorded this option. */
5169 FOR_EACH_VEC_ELT (linker_options
, ix
, opt
)
5170 if (! strcmp (string
, opt
))
5176 /* This option is new; add it. */
5177 add_linker_option (string
, strlen (string
));
5182 /* Dump out the options accumulated previously using %x. */
5184 do_specs_vec (linker_options
);
5187 /* Dump out the options accumulated previously using -Wa,. */
5189 do_specs_vec (assembler_options
);
5192 /* Dump out the options accumulated previously using -Wp,. */
5194 do_specs_vec (preprocessor_options
);
5197 /* Here are digits and numbers that just process
5198 a certain constant string as a spec. */
5201 value
= do_spec_1 (cc1_spec
, 0, NULL
);
5207 value
= do_spec_1 (cc1plus_spec
, 0, NULL
);
5213 value
= do_spec_1 (asm_spec
, 0, NULL
);
5219 value
= do_spec_1 (asm_final_spec
, 0, NULL
);
5226 const char *const spec
5227 = (input_file_compiler
->cpp_spec
5228 ? input_file_compiler
->cpp_spec
5230 value
= do_spec_1 (spec
, 0, NULL
);
5237 value
= do_spec_1 (endfile_spec
, 0, NULL
);
5243 value
= do_spec_1 (link_spec
, 0, NULL
);
5249 value
= do_spec_1 (lib_spec
, 0, NULL
);
5255 if (multilib_os_dir
== NULL
)
5256 obstack_1grow (&obstack
, '.');
5258 obstack_grow (&obstack
, multilib_os_dir
,
5259 strlen (multilib_os_dir
));
5263 value
= do_spec_1 (libgcc_spec
, 0, NULL
);
5269 /* We assume there is a directory
5270 separator at the end of this string. */
5271 if (target_system_root
)
5273 obstack_grow (&obstack
, target_system_root
,
5274 strlen (target_system_root
));
5275 if (target_sysroot_suffix
)
5276 obstack_grow (&obstack
, target_sysroot_suffix
,
5277 strlen (target_sysroot_suffix
));
5282 value
= do_spec_1 (startfile_spec
, 0, NULL
);
5287 /* Here we define characters other than letters and digits. */
5290 p
= handle_braces (p
);
5296 p
= handle_spec_function (p
, NULL
);
5302 obstack_1grow (&obstack
, '%');
5309 while (p
[len
] && p
[len
] != ' ' && p
[len
] != '%')
5311 suffix_subst
= save_string (p
- 1, len
+ 1);
5316 /* Henceforth ignore the option(s) matching the pattern
5322 int have_wildcard
= 0;
5327 switch_option
= SWITCH_IGNORE
| SWITCH_KEEP_FOR_GCC
;
5329 switch_option
= SWITCH_IGNORE
;
5331 while (p
[len
] && p
[len
] != ' ' && p
[len
] != '\t')
5334 if (p
[len
-1] == '*')
5337 for (i
= 0; i
< n_switches
; i
++)
5338 if (!strncmp (switches
[i
].part1
, p
, len
- have_wildcard
)
5339 && (have_wildcard
|| switches
[i
].part1
[len
] == '\0'))
5341 switches
[i
].live_cond
|= switch_option
;
5342 /* User switch be validated from validate_all_switches.
5343 when the definition is seen from the spec file.
5344 If not defined anywhere, will be rejected. */
5345 if (switches
[i
].known
)
5346 switches
[i
].validated
= true;
5354 if (soft_matched_part
)
5356 if (soft_matched_part
[0])
5357 do_spec_1 (soft_matched_part
, 1, NULL
);
5358 /* Only insert a space after the substitution if it is at the
5359 end of the current sequence. So if:
5361 "%{foo=*:bar%*}%{foo=*:one%*two}"
5363 matches -foo=hello then it will produce:
5365 barhello onehellotwo
5367 if (*p
== 0 || *p
== '}')
5368 do_spec_1 (" ", 0, NULL
);
5371 /* Catch the case where a spec string contains something like
5372 '%{foo:%*}'. i.e. there is no * in the pattern on the left
5373 hand side of the :. */
5374 error ("spec failure: %<%%*%> has not been initialized by pattern match");
5377 /* Process a string found as the value of a spec given by name.
5378 This feature allows individual machine descriptions
5379 to add and use their own specs. */
5382 const char *name
= p
;
5383 struct spec_list
*sl
;
5386 /* The string after the S/P is the name of a spec that is to be
5388 while (*p
&& *p
!= ')')
5391 /* See if it's in the list. */
5392 for (len
= p
- name
, sl
= specs
; sl
; sl
= sl
->next
)
5393 if (sl
->name_len
== len
&& !strncmp (sl
->name
, name
, len
))
5395 name
= *(sl
->ptr_spec
);
5397 fnotice (stderr
, "Processing spec (%s), which is '%s'\n",
5405 value
= do_spec_1 (name
, 0, NULL
);
5410 /* Discard the closing paren. */
5417 error ("spec failure: unrecognized spec option %qc", c
);
5423 /* Backslash: treat next character as ordinary. */
5428 /* Ordinary character: put it into the current argument. */
5429 obstack_1grow (&obstack
, c
);
5433 /* End of string. If we are processing a spec function, we need to
5434 end any pending argument. */
5435 if (processing_spec_function
)
5441 /* Look up a spec function. */
5443 static const struct spec_function
*
5444 lookup_spec_function (const char *name
)
5446 const struct spec_function
*sf
;
5448 for (sf
= static_spec_functions
; sf
->name
!= NULL
; sf
++)
5449 if (strcmp (sf
->name
, name
) == 0)
5455 /* Evaluate a spec function. */
5458 eval_spec_function (const char *func
, const char *args
)
5460 const struct spec_function
*sf
;
5461 const char *funcval
;
5463 /* Saved spec processing context. */
5464 vec
<const_char_p
> save_argbuf
;
5467 int save_delete_this_arg
;
5468 int save_this_is_output_file
;
5469 int save_this_is_library_file
;
5470 int save_input_from_pipe
;
5471 int save_this_is_linker_script
;
5472 const char *save_suffix_subst
;
5474 int save_growing_size
;
5475 void *save_growing_value
;
5477 sf
= lookup_spec_function (func
);
5479 fatal_error ("unknown spec function %qs", func
);
5481 /* Push the spec processing context. */
5482 save_argbuf
= argbuf
;
5484 save_arg_going
= arg_going
;
5485 save_delete_this_arg
= delete_this_arg
;
5486 save_this_is_output_file
= this_is_output_file
;
5487 save_this_is_library_file
= this_is_library_file
;
5488 save_this_is_linker_script
= this_is_linker_script
;
5489 save_input_from_pipe
= input_from_pipe
;
5490 save_suffix_subst
= suffix_subst
;
5492 /* If we have some object growing now, finalize it so the args and function
5493 eval proceed from a cleared context. This is needed to prevent the first
5494 constructed arg from mistakenly including the growing value. We'll push
5495 this value back on the obstack once the function evaluation is done, to
5496 restore a consistent processing context for our caller. This is fine as
5497 the address of growing objects isn't guaranteed to remain stable until
5498 they are finalized, and we expect this situation to be rare enough for
5499 the extra copy not to be an issue. */
5500 save_growing_size
= obstack_object_size (&obstack
);
5501 if (save_growing_size
> 0)
5502 save_growing_value
= obstack_finish (&obstack
);
5504 /* Create a new spec processing context, and build the function
5508 if (do_spec_2 (args
) < 0)
5509 fatal_error ("error in args to spec function %qs", func
);
5511 /* argbuf_index is an index for the next argument to be inserted, and
5512 so contains the count of the args already inserted. */
5514 funcval
= (*sf
->func
) (argbuf
.length (),
5517 /* Pop the spec processing context. */
5519 argbuf
= save_argbuf
;
5521 arg_going
= save_arg_going
;
5522 delete_this_arg
= save_delete_this_arg
;
5523 this_is_output_file
= save_this_is_output_file
;
5524 this_is_library_file
= save_this_is_library_file
;
5525 this_is_linker_script
= save_this_is_linker_script
;
5526 input_from_pipe
= save_input_from_pipe
;
5527 suffix_subst
= save_suffix_subst
;
5529 if (save_growing_size
> 0)
5530 obstack_grow (&obstack
, save_growing_value
, save_growing_size
);
5535 /* Handle a spec function call of the form:
5539 ARGS is processed as a spec in a separate context and split into an
5540 argument vector in the normal fashion. The function returns a string
5541 containing a spec which we then process in the caller's context, or
5542 NULL if no processing is required.
5544 If RETVAL_NONNULL is not NULL, then store a bool whether function
5545 returned non-NULL. */
5548 handle_spec_function (const char *p
, bool *retval_nonnull
)
5551 const char *endp
, *funcval
;
5554 processing_spec_function
++;
5556 /* Get the function name. */
5557 for (endp
= p
; *endp
!= '\0'; endp
++)
5559 if (*endp
== '(') /* ) */
5561 /* Only allow [A-Za-z0-9], -, and _ in function names. */
5562 if (!ISALNUM (*endp
) && !(*endp
== '-' || *endp
== '_'))
5563 fatal_error ("malformed spec function name");
5565 if (*endp
!= '(') /* ) */
5566 fatal_error ("no arguments for spec function");
5567 func
= save_string (p
, endp
- p
);
5570 /* Get the arguments. */
5571 for (count
= 0; *endp
!= '\0'; endp
++)
5580 else if (*endp
== '(') /* ) */
5585 fatal_error ("malformed spec function arguments");
5586 args
= save_string (p
, endp
- p
);
5589 /* p now points to just past the end of the spec function expression. */
5591 funcval
= eval_spec_function (func
, args
);
5592 if (funcval
!= NULL
&& do_spec_1 (funcval
, 0, NULL
) < 0)
5595 *retval_nonnull
= funcval
!= NULL
;
5600 processing_spec_function
--;
5605 /* Inline subroutine of handle_braces. Returns true if the current
5606 input suffix matches the atom bracketed by ATOM and END_ATOM. */
5608 input_suffix_matches (const char *atom
, const char *end_atom
)
5610 return (input_suffix
5611 && !strncmp (input_suffix
, atom
, end_atom
- atom
)
5612 && input_suffix
[end_atom
- atom
] == '\0');
5615 /* Subroutine of handle_braces. Returns true if the current
5616 input file's spec name matches the atom bracketed by ATOM and END_ATOM. */
5618 input_spec_matches (const char *atom
, const char *end_atom
)
5620 return (input_file_compiler
5621 && input_file_compiler
->suffix
5622 && input_file_compiler
->suffix
[0] != '\0'
5623 && !strncmp (input_file_compiler
->suffix
+ 1, atom
,
5625 && input_file_compiler
->suffix
[end_atom
- atom
+ 1] == '\0');
5628 /* Subroutine of handle_braces. Returns true if a switch
5629 matching the atom bracketed by ATOM and END_ATOM appeared on the
5632 switch_matches (const char *atom
, const char *end_atom
, int starred
)
5635 int len
= end_atom
- atom
;
5636 int plen
= starred
? len
: -1;
5638 for (i
= 0; i
< n_switches
; i
++)
5639 if (!strncmp (switches
[i
].part1
, atom
, len
)
5640 && (starred
|| switches
[i
].part1
[len
] == '\0')
5641 && check_live_switch (i
, plen
))
5644 /* Check if a switch with separated form matching the atom.
5645 We check -D and -U switches. */
5646 else if (switches
[i
].args
!= 0)
5648 if ((*switches
[i
].part1
== 'D' || *switches
[i
].part1
== 'U')
5649 && *switches
[i
].part1
== atom
[0])
5651 if (!strncmp (switches
[i
].args
[0], &atom
[1], len
- 1)
5652 && (starred
|| (switches
[i
].part1
[1] == '\0'
5653 && switches
[i
].args
[0][len
- 1] == '\0'))
5654 && check_live_switch (i
, (starred
? 1 : -1)))
5662 /* Inline subroutine of handle_braces. Mark all of the switches which
5663 match ATOM (extends to END_ATOM; STARRED indicates whether there
5664 was a star after the atom) for later processing. */
5666 mark_matching_switches (const char *atom
, const char *end_atom
, int starred
)
5669 int len
= end_atom
- atom
;
5670 int plen
= starred
? len
: -1;
5672 for (i
= 0; i
< n_switches
; i
++)
5673 if (!strncmp (switches
[i
].part1
, atom
, len
)
5674 && (starred
|| switches
[i
].part1
[len
] == '\0')
5675 && check_live_switch (i
, plen
))
5676 switches
[i
].ordering
= 1;
5679 /* Inline subroutine of handle_braces. Process all the currently
5680 marked switches through give_switch, and clear the marks. */
5682 process_marked_switches (void)
5686 for (i
= 0; i
< n_switches
; i
++)
5687 if (switches
[i
].ordering
== 1)
5689 switches
[i
].ordering
= 0;
5694 /* Handle a %{ ... } construct. P points just inside the leading {.
5695 Returns a pointer one past the end of the brace block, or 0
5696 if we call do_spec_1 and that returns -1. */
5699 handle_braces (const char *p
)
5701 const char *atom
, *end_atom
;
5702 const char *d_atom
= NULL
, *d_end_atom
= NULL
;
5703 const char *orig
= p
;
5711 bool a_must_be_last
= false;
5712 bool ordered_set
= false;
5713 bool disjunct_set
= false;
5714 bool disj_matched
= false;
5715 bool disj_starred
= true;
5716 bool n_way_choice
= false;
5717 bool n_way_matched
= false;
5719 #define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0)
5726 /* Scan one "atom" (S in the description above of %{}, possibly
5727 with '!', '.', '@', ',', or '*' modifiers). */
5729 a_is_suffix
= false;
5730 a_is_starred
= false;
5731 a_is_negated
= false;
5732 a_is_spectype
= false;
5736 p
++, a_is_negated
= true;
5739 if (*p
== '%' && p
[1] == ':')
5743 p
= handle_spec_function (p
+ 2, &a_matched
);
5748 p
++, a_is_suffix
= true;
5750 p
++, a_is_spectype
= true;
5753 while (ISIDNUM (*p
) || *p
== '-' || *p
== '+' || *p
== '='
5754 || *p
== ',' || *p
== '.' || *p
== '@')
5759 p
++, a_is_starred
= 1;
5766 /* Substitute the switch(es) indicated by the current atom. */
5768 if (disjunct_set
|| n_way_choice
|| a_is_negated
|| a_is_suffix
5769 || a_is_spectype
|| atom
== end_atom
)
5772 mark_matching_switches (atom
, end_atom
, a_is_starred
);
5775 process_marked_switches ();
5779 /* Substitute some text if the current atom appears as a switch
5781 disjunct_set
= true;
5785 if (atom
&& atom
== end_atom
)
5787 if (!n_way_choice
|| disj_matched
|| *p
== '|'
5788 || a_is_negated
|| a_is_suffix
|| a_is_spectype
5792 /* An empty term may appear as the last choice of an
5793 N-way choice set; it means "otherwise". */
5794 a_must_be_last
= true;
5795 disj_matched
= !n_way_matched
;
5796 disj_starred
= false;
5800 if ((a_is_suffix
|| a_is_spectype
) && a_is_starred
)
5804 disj_starred
= false;
5806 /* Don't bother testing this atom if we already have a
5808 if (!disj_matched
&& !n_way_matched
)
5811 /* a_matched is already set by handle_spec_function. */;
5812 else if (a_is_suffix
)
5813 a_matched
= input_suffix_matches (atom
, end_atom
);
5814 else if (a_is_spectype
)
5815 a_matched
= input_spec_matches (atom
, end_atom
);
5817 a_matched
= switch_matches (atom
, end_atom
, a_is_starred
);
5819 if (a_matched
!= a_is_negated
)
5821 disj_matched
= true;
5823 d_end_atom
= end_atom
;
5830 /* Found the body, that is, the text to substitute if the
5831 current disjunction matches. */
5832 p
= process_brace_body (p
+ 1, d_atom
, d_end_atom
, disj_starred
,
5833 disj_matched
&& !n_way_matched
);
5837 /* If we have an N-way choice, reset state for the next
5841 n_way_choice
= true;
5842 n_way_matched
|= disj_matched
;
5843 disj_matched
= false;
5844 disj_starred
= true;
5845 d_atom
= d_end_atom
= NULL
;
5854 while (*p
++ != '}');
5859 fatal_error ("braced spec %qs is invalid at %qc", orig
, *p
);
5864 /* Subroutine of handle_braces. Scan and process a brace substitution body
5865 (X in the description of %{} syntax). P points one past the colon;
5866 ATOM and END_ATOM bracket the first atom which was found to be true
5867 (present) in the current disjunction; STARRED indicates whether all
5868 the atoms in the current disjunction were starred (for syntax validation);
5869 MATCHED indicates whether the disjunction matched or not, and therefore
5870 whether or not the body is to be processed through do_spec_1 or just
5871 skipped. Returns a pointer to the closing } or ;, or 0 if do_spec_1
5875 process_brace_body (const char *p
, const char *atom
, const char *end_atom
,
5876 int starred
, int matched
)
5878 const char *body
, *end_body
;
5879 unsigned int nesting_level
;
5880 bool have_subst
= false;
5882 /* Locate the closing } or ;, honoring nested braces.
5883 Trim trailing whitespace. */
5892 if (!--nesting_level
)
5895 else if (*p
== ';' && nesting_level
== 1)
5897 else if (*p
== '%' && p
[1] == '*' && nesting_level
== 1)
5899 else if (*p
== '\0')
5905 while (end_body
[-1] == ' ' || end_body
[-1] == '\t')
5908 if (have_subst
&& !starred
)
5913 /* Copy the substitution body to permanent storage and execute it.
5914 If have_subst is false, this is a simple matter of running the
5915 body through do_spec_1... */
5916 char *string
= save_string (body
, end_body
- body
);
5919 if (do_spec_1 (string
, 0, NULL
) < 0)
5924 /* ... but if have_subst is true, we have to process the
5925 body once for each matching switch, with %* set to the
5926 variant part of the switch. */
5927 unsigned int hard_match_len
= end_atom
- atom
;
5930 for (i
= 0; i
< n_switches
; i
++)
5931 if (!strncmp (switches
[i
].part1
, atom
, hard_match_len
)
5932 && check_live_switch (i
, hard_match_len
))
5934 if (do_spec_1 (string
, 0,
5935 &switches
[i
].part1
[hard_match_len
]) < 0)
5937 /* Pass any arguments this switch has. */
5939 suffix_subst
= NULL
;
5947 fatal_error ("braced spec body %qs is invalid", body
);
5950 /* Return 0 iff switch number SWITCHNUM is obsoleted by a later switch
5951 on the command line. PREFIX_LENGTH is the length of XXX in an {XXX*}
5952 spec, or -1 if either exact match or %* is used.
5954 A -O switch is obsoleted by a later -O switch. A -f, -g, -m, or -W switch
5955 whose value does not begin with "no-" is obsoleted by the same value
5956 with the "no-", similarly for a switch with the "no-" prefix. */
5959 check_live_switch (int switchnum
, int prefix_length
)
5961 const char *name
= switches
[switchnum
].part1
;
5964 /* If we already processed this switch and determined if it was
5965 live or not, return our past determination. */
5966 if (switches
[switchnum
].live_cond
!= 0)
5967 return ((switches
[switchnum
].live_cond
& SWITCH_LIVE
) != 0
5968 && (switches
[switchnum
].live_cond
& SWITCH_FALSE
) == 0
5969 && (switches
[switchnum
].live_cond
& SWITCH_IGNORE_PERMANENTLY
)
5972 /* In the common case of {<at-most-one-letter>*}, a negating
5973 switch would always match, so ignore that case. We will just
5974 send the conflicting switches to the compiler phase. */
5975 if (prefix_length
>= 0 && prefix_length
<= 1)
5978 /* Now search for duplicate in a manner that depends on the name. */
5982 for (i
= switchnum
+ 1; i
< n_switches
; i
++)
5983 if (switches
[i
].part1
[0] == 'O')
5985 switches
[switchnum
].validated
= true;
5986 switches
[switchnum
].live_cond
= SWITCH_FALSE
;
5991 case 'W': case 'f': case 'm': case 'g':
5992 if (! strncmp (name
+ 1, "no-", 3))
5994 /* We have Xno-YYY, search for XYYY. */
5995 for (i
= switchnum
+ 1; i
< n_switches
; i
++)
5996 if (switches
[i
].part1
[0] == name
[0]
5997 && ! strcmp (&switches
[i
].part1
[1], &name
[4]))
5999 /* --specs are validated with the validate_switches mechanism. */
6000 if (switches
[switchnum
].known
)
6001 switches
[switchnum
].validated
= true;
6002 switches
[switchnum
].live_cond
= SWITCH_FALSE
;
6008 /* We have XYYY, search for Xno-YYY. */
6009 for (i
= switchnum
+ 1; i
< n_switches
; i
++)
6010 if (switches
[i
].part1
[0] == name
[0]
6011 && switches
[i
].part1
[1] == 'n'
6012 && switches
[i
].part1
[2] == 'o'
6013 && switches
[i
].part1
[3] == '-'
6014 && !strcmp (&switches
[i
].part1
[4], &name
[1]))
6016 /* --specs are validated with the validate_switches mechanism. */
6017 if (switches
[switchnum
].known
)
6018 switches
[switchnum
].validated
= true;
6019 switches
[switchnum
].live_cond
= SWITCH_FALSE
;
6026 /* Otherwise the switch is live. */
6027 switches
[switchnum
].live_cond
|= SWITCH_LIVE
;
6031 /* Pass a switch to the current accumulating command
6032 in the same form that we received it.
6033 SWITCHNUM identifies the switch; it is an index into
6034 the vector of switches gcc received, which is `switches'.
6035 This cannot fail since it never finishes a command line.
6037 If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument. */
6040 give_switch (int switchnum
, int omit_first_word
)
6042 if ((switches
[switchnum
].live_cond
& SWITCH_IGNORE
) != 0)
6045 if (!omit_first_word
)
6047 do_spec_1 ("-", 0, NULL
);
6048 do_spec_1 (switches
[switchnum
].part1
, 1, NULL
);
6051 if (switches
[switchnum
].args
!= 0)
6054 for (p
= switches
[switchnum
].args
; *p
; p
++)
6056 const char *arg
= *p
;
6058 do_spec_1 (" ", 0, NULL
);
6061 unsigned length
= strlen (arg
);
6064 while (length
-- && !IS_DIR_SEPARATOR (arg
[length
]))
6065 if (arg
[length
] == '.')
6067 (CONST_CAST (char *, arg
))[length
] = 0;
6071 do_spec_1 (arg
, 1, NULL
);
6073 (CONST_CAST (char *, arg
))[length
] = '.';
6074 do_spec_1 (suffix_subst
, 1, NULL
);
6077 do_spec_1 (arg
, 1, NULL
);
6081 do_spec_1 (" ", 0, NULL
);
6082 switches
[switchnum
].validated
= true;
6085 /* Search for a file named NAME trying various prefixes including the
6086 user's -B prefix and some standard ones.
6087 Return the absolute file name found. If nothing is found, return NAME. */
6090 find_file (const char *name
)
6092 char *newname
= find_a_file (&startfile_prefixes
, name
, R_OK
, true);
6093 return newname
? newname
: name
;
6096 /* Determine whether a directory exists. If LINKER, return 0 for
6097 certain fixed names not needed by the linker. */
6100 is_directory (const char *path1
, bool linker
)
6107 /* Ensure the string ends with "/.". The resulting path will be a
6108 directory even if the given path is a symbolic link. */
6109 len1
= strlen (path1
);
6110 path
= (char *) alloca (3 + len1
);
6111 memcpy (path
, path1
, len1
);
6113 if (!IS_DIR_SEPARATOR (cp
[-1]))
6114 *cp
++ = DIR_SEPARATOR
;
6118 /* Exclude directories that the linker is known to search. */
6120 && IS_DIR_SEPARATOR (path
[0])
6122 && filename_ncmp (path
+ 1, "lib", 3) == 0)
6124 && filename_ncmp (path
+ 1, "usr", 3) == 0
6125 && IS_DIR_SEPARATOR (path
[4])
6126 && filename_ncmp (path
+ 5, "lib", 3) == 0)))
6129 return (stat (path
, &st
) >= 0 && S_ISDIR (st
.st_mode
));
6132 /* Set up the various global variables to indicate that we're processing
6133 the input file named FILENAME. */
6136 set_input (const char *filename
)
6140 gcc_input_filename
= filename
;
6141 input_filename_length
= strlen (gcc_input_filename
);
6142 input_basename
= lbasename (gcc_input_filename
);
6144 /* Find a suffix starting with the last period,
6145 and set basename_length to exclude that suffix. */
6146 basename_length
= strlen (input_basename
);
6147 suffixed_basename_length
= basename_length
;
6148 p
= input_basename
+ basename_length
;
6149 while (p
!= input_basename
&& *p
!= '.')
6151 if (*p
== '.' && p
!= input_basename
)
6153 basename_length
= p
- input_basename
;
6154 input_suffix
= p
+ 1;
6159 /* If a spec for 'g', 'u', or 'U' is seen with -save-temps then
6160 we will need to do a stat on the gcc_input_filename. The
6161 INPUT_STAT_SET signals that the stat is needed. */
6165 /* On fatal signals, delete all the temporary files. */
6168 fatal_signal (int signum
)
6170 signal (signum
, SIG_DFL
);
6171 delete_failure_queue ();
6172 delete_temp_files ();
6173 /* Get the same signal again, this time not handled,
6174 so its normal effect occurs. */
6175 kill (getpid (), signum
);
6178 /* Compare the contents of the two files named CMPFILE[0] and
6179 CMPFILE[1]. Return zero if they're identical, nonzero
6183 compare_files (char *cmpfile
[])
6186 FILE *temp
[2] = { NULL
, NULL
};
6192 void *map
[2] = { NULL
, NULL
};
6194 for (i
= 0; i
< 2; i
++)
6198 if (stat (cmpfile
[i
], &st
) < 0 || !S_ISREG (st
.st_mode
))
6200 error ("%s: could not determine length of compare-debug file %s",
6201 gcc_input_filename
, cmpfile
[i
]);
6206 length
[i
] = st
.st_size
;
6209 if (!ret
&& length
[0] != length
[1])
6211 error ("%s: -fcompare-debug failure (length)", gcc_input_filename
);
6216 for (i
= 0; i
< 2; i
++)
6218 int fd
= open (cmpfile
[i
], O_RDONLY
);
6221 error ("%s: could not open compare-debug file %s",
6222 gcc_input_filename
, cmpfile
[i
]);
6227 map
[i
] = mmap (NULL
, length
[i
], PROT_READ
, MAP_PRIVATE
, fd
, 0);
6230 if (map
[i
] == (void *) MAP_FAILED
)
6239 if (memcmp (map
[0], map
[1], length
[0]) != 0)
6241 error ("%s: -fcompare-debug failure", gcc_input_filename
);
6246 for (i
= 0; i
< 2; i
++)
6248 munmap ((caddr_t
) map
[i
], length
[i
]);
6257 for (i
= 0; i
< 2; i
++)
6259 temp
[i
] = fopen (cmpfile
[i
], "r");
6262 error ("%s: could not open compare-debug file %s",
6263 gcc_input_filename
, cmpfile
[i
]);
6269 if (!ret
&& temp
[0] && temp
[1])
6273 c0
= fgetc (temp
[0]);
6274 c1
= fgetc (temp
[1]);
6278 error ("%s: -fcompare-debug failure",
6279 gcc_input_filename
);
6288 for (i
= 1; i
>= 0; i
--)
6297 extern int main (int, char **);
6300 main (int argc
, char **argv
)
6304 int linker_was_run
= 0;
6305 int lang_n_infiles
= 0;
6306 int num_linker_inputs
= 0;
6307 char *explicit_link_files
;
6309 char *lto_wrapper_file
;
6311 struct user_specs
*uptr
;
6312 char **old_argv
= argv
;
6313 struct cl_decoded_option
*decoded_options
;
6314 unsigned int decoded_options_count
;
6316 p
= argv
[0] + strlen (argv
[0]);
6317 while (p
!= argv
[0] && !IS_DIR_SEPARATOR (p
[-1]))
6321 xmalloc_set_program_name (progname
);
6323 expandargv (&argc
, &argv
);
6325 /* Determine if any expansions were made. */
6326 if (argv
!= old_argv
)
6327 at_file_supplied
= true;
6329 /* Register the language-independent parameters. */
6330 global_init_params ();
6333 init_options_struct (&global_options
, &global_options_set
);
6335 decode_cmdline_options_to_array (argc
, CONST_CAST2 (const char **, char **,
6338 &decoded_options
, &decoded_options_count
);
6340 /* Unlock the stdio streams. */
6341 unlock_std_streams ();
6343 gcc_init_libintl ();
6345 diagnostic_initialize (global_dc
, 0);
6347 #ifdef GCC_DRIVER_HOST_INITIALIZATION
6348 /* Perform host dependent initialization when needed. */
6349 GCC_DRIVER_HOST_INITIALIZATION
;
6352 if (atexit (delete_temp_files
) != 0)
6353 fatal_error ("atexit failed");
6355 if (signal (SIGINT
, SIG_IGN
) != SIG_IGN
)
6356 signal (SIGINT
, fatal_signal
);
6358 if (signal (SIGHUP
, SIG_IGN
) != SIG_IGN
)
6359 signal (SIGHUP
, fatal_signal
);
6361 if (signal (SIGTERM
, SIG_IGN
) != SIG_IGN
)
6362 signal (SIGTERM
, fatal_signal
);
6364 if (signal (SIGPIPE
, SIG_IGN
) != SIG_IGN
)
6365 signal (SIGPIPE
, fatal_signal
);
6368 /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will
6369 receive the signal. A different setting is inheritable */
6370 signal (SIGCHLD
, SIG_DFL
);
6373 /* Parsing and gimplification sometimes need quite large stack.
6374 Increase stack size limits if possible. */
6375 stack_limit_increase (64 * 1024 * 1024);
6377 /* Allocate the argument vector. */
6380 obstack_init (&obstack
);
6382 /* Build multilib_select, et. al from the separate lines that make up each
6383 multilib selection. */
6385 const char *const *q
= multilib_raw
;
6388 obstack_init (&multilib_obstack
);
6389 while ((p
= *q
++) != (char *) 0)
6390 obstack_grow (&multilib_obstack
, p
, strlen (p
));
6392 obstack_1grow (&multilib_obstack
, 0);
6393 multilib_select
= XOBFINISH (&multilib_obstack
, const char *);
6395 q
= multilib_matches_raw
;
6396 while ((p
= *q
++) != (char *) 0)
6397 obstack_grow (&multilib_obstack
, p
, strlen (p
));
6399 obstack_1grow (&multilib_obstack
, 0);
6400 multilib_matches
= XOBFINISH (&multilib_obstack
, const char *);
6402 q
= multilib_exclusions_raw
;
6403 while ((p
= *q
++) != (char *) 0)
6404 obstack_grow (&multilib_obstack
, p
, strlen (p
));
6406 obstack_1grow (&multilib_obstack
, 0);
6407 multilib_exclusions
= XOBFINISH (&multilib_obstack
, const char *);
6409 q
= multilib_reuse_raw
;
6410 while ((p
= *q
++) != (char *) 0)
6411 obstack_grow (&multilib_obstack
, p
, strlen (p
));
6413 obstack_1grow (&multilib_obstack
, 0);
6414 multilib_reuse
= XOBFINISH (&multilib_obstack
, const char *);
6417 for (i
= 0; i
< ARRAY_SIZE (multilib_defaults_raw
); i
++)
6420 obstack_1grow (&multilib_obstack
, ' ');
6421 obstack_grow (&multilib_obstack
,
6422 multilib_defaults_raw
[i
],
6423 strlen (multilib_defaults_raw
[i
]));
6427 obstack_1grow (&multilib_obstack
, 0);
6428 multilib_defaults
= XOBFINISH (&multilib_obstack
, const char *);
6431 #ifdef INIT_ENVIRONMENT
6432 /* Set up any other necessary machine specific environment variables. */
6433 xputenv (INIT_ENVIRONMENT
);
6436 /* Make a table of what switches there are (switches, n_switches).
6437 Make a table of specified input files (infiles, n_infiles).
6438 Decode switches that are handled locally. */
6440 process_command (decoded_options_count
, decoded_options
);
6442 /* Initialize the vector of specs to just the default.
6443 This means one element containing 0s, as a terminator. */
6445 compilers
= XNEWVAR (struct compiler
, sizeof default_compilers
);
6446 memcpy (compilers
, default_compilers
, sizeof default_compilers
);
6447 n_compilers
= n_default_compilers
;
6449 /* Read specs from a file if there is one. */
6451 machine_suffix
= concat (spec_machine
, dir_separator_str
,
6452 spec_version
, dir_separator_str
, NULL
);
6453 just_machine_suffix
= concat (spec_machine
, dir_separator_str
, NULL
);
6455 specs_file
= find_a_file (&startfile_prefixes
, "specs", R_OK
, true);
6456 /* Read the specs file unless it is a default one. */
6457 if (specs_file
!= 0 && strcmp (specs_file
, "specs"))
6458 read_specs (specs_file
, true, false);
6462 /* We need to check standard_exec_prefix/just_machine_suffix/specs
6463 for any override of as, ld and libraries. */
6464 specs_file
= (char *) alloca (strlen (standard_exec_prefix
)
6465 + strlen (just_machine_suffix
) + sizeof ("specs"));
6467 strcpy (specs_file
, standard_exec_prefix
);
6468 strcat (specs_file
, just_machine_suffix
);
6469 strcat (specs_file
, "specs");
6470 if (access (specs_file
, R_OK
) == 0)
6471 read_specs (specs_file
, true, false);
6473 /* Process any configure-time defaults specified for the command line
6474 options, via OPTION_DEFAULT_SPECS. */
6475 for (i
= 0; i
< ARRAY_SIZE (option_default_specs
); i
++)
6476 do_option_spec (option_default_specs
[i
].name
,
6477 option_default_specs
[i
].spec
);
6479 /* Process DRIVER_SELF_SPECS, adding any new options to the end
6480 of the command line. */
6482 for (i
= 0; i
< ARRAY_SIZE (driver_self_specs
); i
++)
6483 do_self_spec (driver_self_specs
[i
]);
6485 /* If not cross-compiling, look for executables in the standard
6487 if (*cross_compile
== '0')
6489 if (*md_exec_prefix
)
6491 add_prefix (&exec_prefixes
, md_exec_prefix
, "GCC",
6492 PREFIX_PRIORITY_LAST
, 0, 0);
6496 /* Process sysroot_suffix_spec. */
6497 if (*sysroot_suffix_spec
!= 0
6498 && !no_sysroot_suffix
6499 && do_spec_2 (sysroot_suffix_spec
) == 0)
6501 if (argbuf
.length () > 1)
6502 error ("spec failure: more than one arg to SYSROOT_SUFFIX_SPEC");
6503 else if (argbuf
.length () == 1)
6504 target_sysroot_suffix
= xstrdup (argbuf
.last ());
6507 #ifdef HAVE_LD_SYSROOT
6508 /* Pass the --sysroot option to the linker, if it supports that. If
6509 there is a sysroot_suffix_spec, it has already been processed by
6510 this point, so target_system_root really is the system root we
6512 if (target_system_root
)
6514 obstack_grow (&obstack
, "%(sysroot_spec) ", strlen ("%(sysroot_spec) "));
6515 obstack_grow0 (&obstack
, link_spec
, strlen (link_spec
));
6516 set_spec ("link", XOBFINISH (&obstack
, const char *), false);
6520 /* Process sysroot_hdrs_suffix_spec. */
6521 if (*sysroot_hdrs_suffix_spec
!= 0
6522 && !no_sysroot_suffix
6523 && do_spec_2 (sysroot_hdrs_suffix_spec
) == 0)
6525 if (argbuf
.length () > 1)
6526 error ("spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC");
6527 else if (argbuf
.length () == 1)
6528 target_sysroot_hdrs_suffix
= xstrdup (argbuf
.last ());
6531 /* Look for startfiles in the standard places. */
6532 if (*startfile_prefix_spec
!= 0
6533 && do_spec_2 (startfile_prefix_spec
) == 0
6534 && do_spec_1 (" ", 0, NULL
) == 0)
6538 FOR_EACH_VEC_ELT (argbuf
, ndx
, arg
)
6539 add_sysrooted_prefix (&startfile_prefixes
, arg
, "BINUTILS",
6540 PREFIX_PRIORITY_LAST
, 0, 1);
6542 /* We should eventually get rid of all these and stick to
6543 startfile_prefix_spec exclusively. */
6544 else if (*cross_compile
== '0' || target_system_root
)
6546 if (*md_startfile_prefix
)
6547 add_sysrooted_prefix (&startfile_prefixes
, md_startfile_prefix
,
6548 "GCC", PREFIX_PRIORITY_LAST
, 0, 1);
6550 if (*md_startfile_prefix_1
)
6551 add_sysrooted_prefix (&startfile_prefixes
, md_startfile_prefix_1
,
6552 "GCC", PREFIX_PRIORITY_LAST
, 0, 1);
6554 /* If standard_startfile_prefix is relative, base it on
6555 standard_exec_prefix. This lets us move the installed tree
6556 as a unit. If GCC_EXEC_PREFIX is defined, base
6557 standard_startfile_prefix on that as well.
6559 If the prefix is relative, only search it for native compilers;
6560 otherwise we will search a directory containing host libraries. */
6561 if (IS_ABSOLUTE_PATH (standard_startfile_prefix
))
6562 add_sysrooted_prefix (&startfile_prefixes
,
6563 standard_startfile_prefix
, "BINUTILS",
6564 PREFIX_PRIORITY_LAST
, 0, 1);
6565 else if (*cross_compile
== '0')
6567 add_prefix (&startfile_prefixes
,
6568 concat (gcc_exec_prefix
6569 ? gcc_exec_prefix
: standard_exec_prefix
,
6571 standard_startfile_prefix
, NULL
),
6572 NULL
, PREFIX_PRIORITY_LAST
, 0, 1);
6575 /* Sysrooted prefixes are relocated because target_system_root is
6576 also relocated by gcc_exec_prefix. */
6577 if (*standard_startfile_prefix_1
)
6578 add_sysrooted_prefix (&startfile_prefixes
,
6579 standard_startfile_prefix_1
, "BINUTILS",
6580 PREFIX_PRIORITY_LAST
, 0, 1);
6581 if (*standard_startfile_prefix_2
)
6582 add_sysrooted_prefix (&startfile_prefixes
,
6583 standard_startfile_prefix_2
, "BINUTILS",
6584 PREFIX_PRIORITY_LAST
, 0, 1);
6587 /* Process any user specified specs in the order given on the command
6589 for (uptr
= user_specs_head
; uptr
; uptr
= uptr
->next
)
6591 char *filename
= find_a_file (&startfile_prefixes
, uptr
->filename
,
6593 read_specs (filename
? filename
: uptr
->filename
, false, true);
6596 /* Process any user self specs. */
6598 struct spec_list
*sl
;
6599 for (sl
= specs
; sl
; sl
= sl
->next
)
6600 if (sl
->name_len
== sizeof "self_spec" - 1
6601 && !strcmp (sl
->name
, "self_spec"))
6602 do_self_spec (*sl
->ptr_spec
);
6607 enum save_temps save
;
6609 if (!compare_debug_second
)
6611 n_switches_debug_check
[1] = n_switches
;
6612 n_switches_alloc_debug_check
[1] = n_switches_alloc
;
6613 switches_debug_check
[1] = XDUPVEC (struct switchstr
, switches
,
6616 do_self_spec ("%:compare-debug-self-opt()");
6617 n_switches_debug_check
[0] = n_switches
;
6618 n_switches_alloc_debug_check
[0] = n_switches_alloc
;
6619 switches_debug_check
[0] = switches
;
6621 n_switches
= n_switches_debug_check
[1];
6622 n_switches_alloc
= n_switches_alloc_debug_check
[1];
6623 switches
= switches_debug_check
[1];
6626 /* Avoid crash when computing %j in this early. */
6627 save
= save_temps_flag
;
6628 save_temps_flag
= SAVE_TEMPS_NONE
;
6630 compare_debug
= -compare_debug
;
6631 do_self_spec ("%:compare-debug-self-opt()");
6633 save_temps_flag
= save
;
6635 if (!compare_debug_second
)
6637 n_switches_debug_check
[1] = n_switches
;
6638 n_switches_alloc_debug_check
[1] = n_switches_alloc
;
6639 switches_debug_check
[1] = switches
;
6640 compare_debug
= -compare_debug
;
6641 n_switches
= n_switches_debug_check
[0];
6642 n_switches_alloc
= n_switches_debug_check
[0];
6643 switches
= switches_debug_check
[0];
6648 /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake. */
6649 if (gcc_exec_prefix
)
6650 gcc_exec_prefix
= concat (gcc_exec_prefix
, spec_machine
, dir_separator_str
,
6651 spec_version
, dir_separator_str
, NULL
);
6653 /* Now we have the specs.
6654 Set the `valid' bits for switches that match anything in any spec. */
6656 validate_all_switches ();
6658 /* Now that we have the switches and the specs, set
6659 the subdirectory based on the options. */
6660 set_multilib_dir ();
6662 /* Set up to remember the pathname of gcc and any options
6663 needed for collect. We use argv[0] instead of progname because
6664 we need the complete pathname. */
6665 obstack_init (&collect_obstack
);
6666 obstack_grow (&collect_obstack
, "COLLECT_GCC=", sizeof ("COLLECT_GCC=") - 1);
6667 obstack_grow (&collect_obstack
, argv
[0], strlen (argv
[0]) + 1);
6668 xputenv (XOBFINISH (&collect_obstack
, char *));
6670 /* Set up to remember the pathname of the lto wrapper. */
6673 lto_wrapper_file
= NULL
;
6675 lto_wrapper_file
= find_a_file (&exec_prefixes
, "lto-wrapper",
6677 if (lto_wrapper_file
)
6679 lto_wrapper_file
= convert_white_space (lto_wrapper_file
);
6680 lto_wrapper_spec
= lto_wrapper_file
;
6681 obstack_init (&collect_obstack
);
6682 obstack_grow (&collect_obstack
, "COLLECT_LTO_WRAPPER=",
6683 sizeof ("COLLECT_LTO_WRAPPER=") - 1);
6684 obstack_grow (&collect_obstack
, lto_wrapper_spec
,
6685 strlen (lto_wrapper_spec
) + 1);
6686 xputenv (XOBFINISH (&collect_obstack
, char *));
6689 /* Reject switches that no pass was interested in. */
6691 for (i
= 0; (int) i
< n_switches
; i
++)
6692 if (! switches
[i
].validated
)
6693 error ("unrecognized command line option %<-%s%>", switches
[i
].part1
);
6695 /* Obey some of the options. */
6697 if (print_search_dirs
)
6699 printf (_("install: %s%s\n"),
6700 gcc_exec_prefix
? gcc_exec_prefix
: standard_exec_prefix
,
6701 gcc_exec_prefix
? "" : machine_suffix
);
6702 printf (_("programs: %s\n"),
6703 build_search_list (&exec_prefixes
, "", false, false));
6704 printf (_("libraries: %s\n"),
6705 build_search_list (&startfile_prefixes
, "", false, true));
6709 if (print_file_name
)
6711 printf ("%s\n", find_file (print_file_name
));
6715 if (print_prog_name
)
6717 char *newname
= find_a_file (&exec_prefixes
, print_prog_name
, X_OK
, 0);
6718 printf ("%s\n", (newname
? newname
: print_prog_name
));
6722 if (print_multi_lib
)
6724 print_multilib_info ();
6728 if (print_multi_directory
)
6730 if (multilib_dir
== NULL
)
6733 printf ("%s\n", multilib_dir
);
6737 if (print_multiarch
)
6739 if (multiarch_dir
== NULL
)
6742 printf ("%s\n", multiarch_dir
);
6748 if (target_system_root
)
6750 if (target_sysroot_suffix
)
6751 printf ("%s%s\n", target_system_root
, target_sysroot_suffix
);
6753 printf ("%s\n", target_system_root
);
6758 if (print_multi_os_directory
)
6760 if (multilib_os_dir
== NULL
)
6763 printf ("%s\n", multilib_os_dir
);
6767 if (print_sysroot_headers_suffix
)
6769 if (*sysroot_hdrs_suffix_spec
)
6771 printf("%s\n", (target_sysroot_hdrs_suffix
6772 ? target_sysroot_hdrs_suffix
6777 /* The error status indicates that only one set of fixed
6778 headers should be built. */
6779 fatal_error ("not configured with sysroot headers suffix");
6782 if (print_help_list
)
6788 printf (_("\nFor bug reporting instructions, please see:\n"));
6789 printf ("%s.\n", bug_report_url
);
6794 /* We do not exit here. Instead we have created a fake input file
6795 called 'help-dummy' which needs to be compiled, and we pass this
6796 on the various sub-processes, along with the --help switch.
6797 Ensure their output appears after ours. */
6798 fputc ('\n', stdout
);
6804 printf (_("%s %s%s\n"), progname
, pkgversion_string
,
6806 printf ("Copyright %s 2013 Free Software Foundation, Inc.\n",
6808 fputs (_("This is free software; see the source for copying conditions. There is NO\n\
6809 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"),
6814 /* We do not exit here. We use the same mechanism of --help to print
6815 the version of the sub-processes. */
6816 fputc ('\n', stdout
);
6825 fnotice (stderr
, "Target: %s\n", spec_machine
);
6826 fnotice (stderr
, "Configured with: %s\n", configuration_arguments
);
6828 #ifdef THREAD_MODEL_SPEC
6829 /* We could have defined THREAD_MODEL_SPEC to "%*" by default,
6830 but there's no point in doing all this processing just to get
6831 thread_model back. */
6832 obstack_init (&obstack
);
6833 do_spec_1 (THREAD_MODEL_SPEC
, 0, thread_model
);
6834 obstack_1grow (&obstack
, '\0');
6835 thrmod
= XOBFINISH (&obstack
, const char *);
6837 thrmod
= thread_model
;
6840 fnotice (stderr
, "Thread model: %s\n", thrmod
);
6842 /* compiler_version is truncated at the first space when initialized
6843 from version string, so truncate version_string at the first space
6844 before comparing. */
6845 for (n
= 0; version_string
[n
]; n
++)
6846 if (version_string
[n
] == ' ')
6849 if (! strncmp (version_string
, compiler_version
, n
)
6850 && compiler_version
[n
] == 0)
6851 fnotice (stderr
, "gcc version %s %s\n", version_string
,
6854 fnotice (stderr
, "gcc driver version %s %sexecuting gcc version %s\n",
6855 version_string
, pkgversion_string
, compiler_version
);
6861 if (n_infiles
== added_libraries
)
6862 fatal_error ("no input files");
6867 /* Make a place to record the compiler output file names
6868 that correspond to the input files. */
6871 i
+= lang_specific_extra_outfiles
;
6872 outfiles
= XCNEWVEC (const char *, i
);
6874 /* Record which files were specified explicitly as link input. */
6876 explicit_link_files
= XCNEWVEC (char, n_infiles
);
6878 combine_inputs
= have_o
|| flag_wpa
;
6880 for (i
= 0; (int) i
< n_infiles
; i
++)
6882 const char *name
= infiles
[i
].name
;
6883 struct compiler
*compiler
= lookup_compiler (name
,
6885 infiles
[i
].language
);
6887 if (compiler
&& !(compiler
->combinable
))
6888 combine_inputs
= false;
6890 if (lang_n_infiles
> 0 && compiler
!= input_file_compiler
6891 && infiles
[i
].language
&& infiles
[i
].language
[0] != '*')
6892 infiles
[i
].incompiler
= compiler
;
6896 input_file_compiler
= compiler
;
6897 infiles
[i
].incompiler
= compiler
;
6901 /* Since there is no compiler for this input file, assume it is a
6903 explicit_link_files
[i
] = 1;
6904 infiles
[i
].incompiler
= NULL
;
6906 infiles
[i
].compiled
= false;
6907 infiles
[i
].preprocessed
= false;
6910 if (!combine_inputs
&& have_c
&& have_o
&& lang_n_infiles
> 1)
6911 fatal_error ("cannot specify -o with -c, -S or -E with multiple files");
6913 for (i
= 0; (int) i
< n_infiles
; i
++)
6915 int this_file_error
= 0;
6917 /* Tell do_spec what to substitute for %i. */
6919 input_file_number
= i
;
6920 set_input (infiles
[i
].name
);
6922 if (infiles
[i
].compiled
)
6925 /* Use the same thing in %o, unless cp->spec says otherwise. */
6927 outfiles
[i
] = gcc_input_filename
;
6929 /* Figure out which compiler from the file's suffix. */
6932 = lookup_compiler (infiles
[i
].name
, input_filename_length
,
6933 infiles
[i
].language
);
6935 if (input_file_compiler
)
6937 /* Ok, we found an applicable compiler. Run its spec. */
6939 if (input_file_compiler
->spec
[0] == '#')
6941 error ("%s: %s compiler not installed on this system",
6942 gcc_input_filename
, &input_file_compiler
->spec
[1]);
6943 this_file_error
= 1;
6949 free (debug_check_temp_file
[0]);
6950 debug_check_temp_file
[0] = NULL
;
6952 free (debug_check_temp_file
[1]);
6953 debug_check_temp_file
[1] = NULL
;
6956 value
= do_spec (input_file_compiler
->spec
);
6957 infiles
[i
].compiled
= true;
6959 this_file_error
= 1;
6960 else if (compare_debug
&& debug_check_temp_file
[0])
6963 inform (0, "recompiling with -fcompare-debug");
6965 compare_debug
= -compare_debug
;
6966 n_switches
= n_switches_debug_check
[1];
6967 n_switches_alloc
= n_switches_alloc_debug_check
[1];
6968 switches
= switches_debug_check
[1];
6970 value
= do_spec (input_file_compiler
->spec
);
6972 compare_debug
= -compare_debug
;
6973 n_switches
= n_switches_debug_check
[0];
6974 n_switches_alloc
= n_switches_alloc_debug_check
[0];
6975 switches
= switches_debug_check
[0];
6979 error ("during -fcompare-debug recompilation");
6980 this_file_error
= 1;
6983 gcc_assert (debug_check_temp_file
[1]
6984 && filename_cmp (debug_check_temp_file
[0],
6985 debug_check_temp_file
[1]));
6988 inform (0, "comparing final insns dumps");
6990 if (compare_files (debug_check_temp_file
))
6991 this_file_error
= 1;
6996 free (debug_check_temp_file
[0]);
6997 debug_check_temp_file
[0] = NULL
;
6999 free (debug_check_temp_file
[1]);
7000 debug_check_temp_file
[1] = NULL
;
7005 /* If this file's name does not contain a recognized suffix,
7006 record it as explicit linker input. */
7009 explicit_link_files
[i
] = 1;
7011 /* Clear the delete-on-failure queue, deleting the files in it
7012 if this compilation failed. */
7014 if (this_file_error
)
7016 delete_failure_queue ();
7019 /* If this compilation succeeded, don't delete those files later. */
7020 clear_failure_queue ();
7023 /* Reset the input file name to the first compile/object file name, for use
7024 with %b in LINK_SPEC. We use the first input file that we can find
7025 a compiler to compile it instead of using infiles.language since for
7026 languages other than C we use aliases that we then lookup later. */
7031 for (i
= 0; i
< n_infiles
; i
++)
7032 if (infiles
[i
].incompiler
7033 || (infiles
[i
].language
&& infiles
[i
].language
[0] != '*'))
7035 set_input (infiles
[i
].name
);
7042 /* Make sure INPUT_FILE_NUMBER points to first available open
7044 input_file_number
= n_infiles
;
7045 if (lang_specific_pre_link ())
7049 /* Determine if there are any linker input files. */
7050 num_linker_inputs
= 0;
7051 for (i
= 0; (int) i
< n_infiles
; i
++)
7052 if (explicit_link_files
[i
] || outfiles
[i
] != NULL
)
7053 num_linker_inputs
++;
7055 /* Run ld to link all the compiler output files. */
7057 if (num_linker_inputs
> 0 && !seen_error () && print_subprocess_help
< 2)
7059 int tmp
= execution_count
;
7063 #if HAVE_LTO_PLUGIN > 0
7064 #if HAVE_LTO_PLUGIN == 2
7065 const char *fno_use_linker_plugin
= "fno-use-linker-plugin";
7067 const char *fuse_linker_plugin
= "fuse-linker-plugin";
7071 /* We'll use ld if we can't find collect2. */
7072 if (! strcmp (linker_name_spec
, "collect2"))
7074 char *s
= find_a_file (&exec_prefixes
, "collect2", X_OK
, false);
7076 linker_name_spec
= "ld";
7079 #if HAVE_LTO_PLUGIN > 0
7080 #if HAVE_LTO_PLUGIN == 2
7081 if (!switch_matches (fno_use_linker_plugin
,
7082 fno_use_linker_plugin
7083 + strlen (fno_use_linker_plugin
), 0))
7085 if (switch_matches (fuse_linker_plugin
,
7087 + strlen (fuse_linker_plugin
), 0))
7090 char *temp_spec
= find_a_file (&exec_prefixes
,
7091 LTOPLUGINSONAME
, R_OK
,
7094 fatal_error ("-fuse-linker-plugin, but %s not found",
7096 linker_plugin_file_spec
= convert_white_space (temp_spec
);
7099 lto_gcc_spec
= argv
[0];
7102 /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
7104 putenv_from_prefixes (&exec_prefixes
, "COMPILER_PATH", false);
7105 putenv_from_prefixes (&startfile_prefixes
, LIBRARY_PATH_ENV
, true);
7107 if (print_subprocess_help
== 1)
7109 printf (_("\nLinker options\n==============\n\n"));
7110 printf (_("Use \"-Wl,OPTION\" to pass \"OPTION\""
7111 " to the linker.\n\n"));
7114 value
= do_spec (link_command_spec
);
7117 linker_was_run
= (tmp
!= execution_count
);
7120 /* If options said don't run linker,
7121 complain about input files to be given to the linker. */
7123 if (! linker_was_run
&& !seen_error ())
7124 for (i
= 0; (int) i
< n_infiles
; i
++)
7125 if (explicit_link_files
[i
]
7126 && !(infiles
[i
].language
&& infiles
[i
].language
[0] == '*'))
7127 warning (0, "%s: linker input file unused because linking not done",
7130 /* Delete some or all of the temporary files we made. */
7133 delete_failure_queue ();
7134 delete_temp_files ();
7136 if (print_help_list
)
7138 printf (("\nFor bug reporting instructions, please see:\n"));
7139 printf ("%s\n", bug_report_url
);
7143 return (signal_count
!= 0 ? 2
7144 : seen_error () ? (pass_exit_codes
? greatest_status
: 1)
7148 /* Find the proper compilation spec for the file name NAME,
7149 whose length is LENGTH. LANGUAGE is the specified language,
7150 or 0 if this file is to be passed to the linker. */
7152 static struct compiler
*
7153 lookup_compiler (const char *name
, size_t length
, const char *language
)
7155 struct compiler
*cp
;
7157 /* If this was specified by the user to be a linker input, indicate that. */
7158 if (language
!= 0 && language
[0] == '*')
7161 /* Otherwise, look for the language, if one is spec'd. */
7164 for (cp
= compilers
+ n_compilers
- 1; cp
>= compilers
; cp
--)
7165 if (cp
->suffix
[0] == '@' && !strcmp (cp
->suffix
+ 1, language
))
7168 error ("language %s not recognized", language
);
7172 /* Look for a suffix. */
7173 for (cp
= compilers
+ n_compilers
- 1; cp
>= compilers
; cp
--)
7175 if (/* The suffix `-' matches only the file name `-'. */
7176 (!strcmp (cp
->suffix
, "-") && !strcmp (name
, "-"))
7177 || (strlen (cp
->suffix
) < length
7178 /* See if the suffix matches the end of NAME. */
7179 && !strcmp (cp
->suffix
,
7180 name
+ length
- strlen (cp
->suffix
))
7185 #if defined (OS2) ||defined (HAVE_DOS_BASED_FILE_SYSTEM)
7186 /* Look again, but case-insensitively this time. */
7188 for (cp
= compilers
+ n_compilers
- 1; cp
>= compilers
; cp
--)
7190 if (/* The suffix `-' matches only the file name `-'. */
7191 (!strcmp (cp
->suffix
, "-") && !strcmp (name
, "-"))
7192 || (strlen (cp
->suffix
) < length
7193 /* See if the suffix matches the end of NAME. */
7194 && ((!strcmp (cp
->suffix
,
7195 name
+ length
- strlen (cp
->suffix
))
7196 || !strpbrk (cp
->suffix
, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
7197 && !strcasecmp (cp
->suffix
,
7198 name
+ length
- strlen (cp
->suffix
)))
7204 if (cp
>= compilers
)
7206 if (cp
->spec
[0] != '@')
7207 /* A non-alias entry: return it. */
7210 /* An alias entry maps a suffix to a language.
7211 Search for the language; pass 0 for NAME and LENGTH
7212 to avoid infinite recursion if language not found. */
7213 return lookup_compiler (NULL
, 0, cp
->spec
+ 1);
7219 save_string (const char *s
, int len
)
7221 char *result
= XNEWVEC (char, len
+ 1);
7223 memcpy (result
, s
, len
);
7229 pfatal_with_name (const char *name
)
7231 perror_with_name (name
);
7232 delete_temp_files ();
7237 perror_with_name (const char *name
)
7239 error ("%s: %m", name
);
7243 validate_switches_from_spec (const char *spec
, bool user
)
7245 const char *p
= spec
;
7248 if (c
== '%' && (*p
== '{' || *p
== '<' || (*p
== 'W' && *++p
== '{')))
7249 /* We have a switch spec. */
7250 p
= validate_switches (p
+ 1, user
);
7254 validate_all_switches (void)
7256 struct compiler
*comp
;
7257 struct spec_list
*spec
;
7259 for (comp
= compilers
; comp
->spec
; comp
++)
7260 validate_switches_from_spec (comp
->spec
, false);
7262 /* Look through the linked list of specs read from the specs file. */
7263 for (spec
= specs
; spec
; spec
= spec
->next
)
7264 validate_switches_from_spec (*spec
->ptr_spec
, spec
->user_p
);
7266 validate_switches_from_spec (link_command_spec
, false);
7269 /* Look at the switch-name that comes after START
7270 and mark as valid all supplied switches that match it. */
7273 validate_switches (const char *start
, bool user_spec
)
7275 const char *p
= start
;
7279 bool suffix
= false;
7280 bool starred
= false;
7282 #define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0)
7291 if (*p
== '.' || *p
== ',')
7295 while (ISIDNUM (*p
) || *p
== '-' || *p
== '+' || *p
== '='
7296 || *p
== ',' || *p
== '.' || *p
== '@')
7301 starred
= true, p
++;
7307 /* Mark all matching switches as valid. */
7308 for (i
= 0; i
< n_switches
; i
++)
7309 if (!strncmp (switches
[i
].part1
, atom
, len
)
7310 && (starred
|| switches
[i
].part1
[len
] == '\0')
7311 && (switches
[i
].known
|| user_spec
))
7312 switches
[i
].validated
= true;
7316 if (*p
&& (p
[-1] == '|' || p
[-1] == '&'))
7319 if (*p
&& p
[-1] == ':')
7321 while (*p
&& *p
!= ';' && *p
!= '}')
7326 if (*p
== '{' || *p
== '<')
7327 p
= validate_switches (p
+1, user_spec
);
7328 else if (p
[0] == 'W' && p
[1] == '{')
7329 p
= validate_switches (p
+2, user_spec
);
7336 if (*p
&& p
[-1] == ';')
7350 static struct mdswitchstr
*mdswitches
;
7351 static int n_mdswitches
;
7353 /* Check whether a particular argument was used. The first time we
7354 canonicalize the switches to keep only the ones we care about. */
7357 used_arg (const char *p
, int len
)
7362 const char *replace
;
7367 static struct mswitchstr
*mswitches
;
7368 static int n_mswitches
;
7373 struct mswitchstr
*matches
;
7377 /* Break multilib_matches into the component strings of string
7378 and replacement string. */
7379 for (q
= multilib_matches
; *q
!= '\0'; q
++)
7384 = (struct mswitchstr
*) alloca ((sizeof (struct mswitchstr
)) * cnt
);
7386 q
= multilib_matches
;
7395 fatal_error ("multilib spec %qs is invalid",
7400 matches
[i
].len
= q
- matches
[i
].str
;
7402 matches
[i
].replace
= ++q
;
7403 while (*q
!= ';' && *q
!= '\0')
7406 goto invalid_matches
;
7409 matches
[i
].rep_len
= q
- matches
[i
].replace
;
7415 /* Now build a list of the replacement string for switches that we care
7416 about. Make sure we allocate at least one entry. This prevents
7417 xmalloc from calling fatal, and prevents us from re-executing this
7420 = XNEWVEC (struct mswitchstr
, n_mdswitches
+ (n_switches
? n_switches
: 1));
7421 for (i
= 0; i
< n_switches
; i
++)
7422 if ((switches
[i
].live_cond
& SWITCH_IGNORE
) == 0)
7424 int xlen
= strlen (switches
[i
].part1
);
7425 for (j
= 0; j
< cnt
; j
++)
7426 if (xlen
== matches
[j
].len
7427 && ! strncmp (switches
[i
].part1
, matches
[j
].str
, xlen
))
7429 mswitches
[n_mswitches
].str
= matches
[j
].replace
;
7430 mswitches
[n_mswitches
].len
= matches
[j
].rep_len
;
7431 mswitches
[n_mswitches
].replace
= (char *) 0;
7432 mswitches
[n_mswitches
].rep_len
= 0;
7438 /* Add MULTILIB_DEFAULTS switches too, as long as they were not present
7439 on the command line nor any options mutually incompatible with
7441 for (i
= 0; i
< n_mdswitches
; i
++)
7445 for (q
= multilib_options
; *q
!= '\0'; q
++)
7451 while (strncmp (q
, mdswitches
[i
].str
, mdswitches
[i
].len
) != 0
7452 || strchr (" /", q
[mdswitches
[i
].len
]) == NULL
)
7454 while (*q
!= ' ' && *q
!= '/' && *q
!= '\0')
7461 if (*q
!= ' ' && *q
!= '\0')
7463 while (*r
!= ' ' && *r
!= '\0')
7466 while (*q
!= ' ' && *q
!= '/' && *q
!= '\0')
7469 if (used_arg (r
, q
- r
))
7474 mswitches
[n_mswitches
].str
= mdswitches
[i
].str
;
7475 mswitches
[n_mswitches
].len
= mdswitches
[i
].len
;
7476 mswitches
[n_mswitches
].replace
= (char *) 0;
7477 mswitches
[n_mswitches
].rep_len
= 0;
7490 for (i
= 0; i
< n_mswitches
; i
++)
7491 if (len
== mswitches
[i
].len
&& ! strncmp (p
, mswitches
[i
].str
, len
))
7498 default_arg (const char *p
, int len
)
7502 for (i
= 0; i
< n_mdswitches
; i
++)
7503 if (len
== mdswitches
[i
].len
&& ! strncmp (p
, mdswitches
[i
].str
, len
))
7509 /* Work out the subdirectory to use based on the options. The format of
7510 multilib_select is a list of elements. Each element is a subdirectory
7511 name followed by a list of options followed by a semicolon. The format
7512 of multilib_exclusions is the same, but without the preceding
7513 directory. First gcc will check the exclusions, if none of the options
7514 beginning with an exclamation point are present, and all of the other
7515 options are present, then we will ignore this completely. Passing
7516 that, gcc will consider each multilib_select in turn using the same
7517 rules for matching the options. If a match is found, that subdirectory
7519 A subdirectory name is optionally followed by a colon and the corresponding
7523 set_multilib_dir (void)
7526 unsigned int this_path_len
;
7527 const char *this_path
, *this_arg
;
7528 const char *start
, *end
;
7530 int ok
, ndfltok
, first
;
7533 start
= multilib_defaults
;
7534 while (*start
== ' ' || *start
== '\t')
7536 while (*start
!= '\0')
7539 while (*start
!= ' ' && *start
!= '\t' && *start
!= '\0')
7541 while (*start
== ' ' || *start
== '\t')
7549 mdswitches
= XNEWVEC (struct mdswitchstr
, n_mdswitches
);
7550 for (start
= multilib_defaults
; *start
!= '\0'; start
= end
+ 1)
7552 while (*start
== ' ' || *start
== '\t')
7558 for (end
= start
+ 1;
7559 *end
!= ' ' && *end
!= '\t' && *end
!= '\0'; end
++)
7562 obstack_grow (&multilib_obstack
, start
, end
- start
);
7563 obstack_1grow (&multilib_obstack
, 0);
7564 mdswitches
[i
].str
= XOBFINISH (&multilib_obstack
, const char *);
7565 mdswitches
[i
++].len
= end
- start
;
7572 p
= multilib_exclusions
;
7575 /* Ignore newlines. */
7582 /* Check the arguments. */
7589 fatal_error ("multilib exclusions %qs is invalid",
7590 multilib_exclusions
);
7600 while (*p
!= ' ' && *p
!= ';')
7603 goto invalid_exclusions
;
7607 if (*this_arg
!= '!')
7615 ok
= used_arg (this_arg
, p
- this_arg
);
7630 p
= multilib_select
;
7632 /* Append multilib reuse rules if any. With those rules, we can reuse
7633 one multilib for certain different options sets. */
7634 if (strlen (multilib_reuse
) > 0)
7635 p
= concat (p
, multilib_reuse
, NULL
);
7639 /* Ignore newlines. */
7646 /* Get the initial path. */
7653 fatal_error ("multilib select %qs %qs is invalid",
7654 multilib_select
, multilib_reuse
);
7658 this_path_len
= p
- this_path
;
7660 /* Check the arguments. */
7667 goto invalid_select
;
7676 while (*p
!= ' ' && *p
!= ';')
7679 goto invalid_select
;
7683 if (*this_arg
!= '!')
7691 /* If this is a default argument, we can just ignore it.
7692 This is true even if this_arg begins with '!'. Beginning
7693 with '!' does not mean that this argument is necessarily
7694 inappropriate for this library: it merely means that
7695 there is a more specific library which uses this
7696 argument. If this argument is a default, we need not
7697 consider that more specific library. */
7698 ok
= used_arg (this_arg
, p
- this_arg
);
7705 if (default_arg (this_arg
, p
- this_arg
))
7714 if (this_path_len
!= 1
7715 || this_path
[0] != '.')
7717 char *new_multilib_dir
= XNEWVEC (char, this_path_len
+ 1);
7720 strncpy (new_multilib_dir
, this_path
, this_path_len
);
7721 new_multilib_dir
[this_path_len
] = '\0';
7722 q
= strchr (new_multilib_dir
, ':');
7725 multilib_dir
= new_multilib_dir
;
7732 const char *q
= this_path
, *end
= this_path
+ this_path_len
;
7734 while (q
< end
&& *q
!= ':')
7738 const char *q2
= q
+ 1, *ml_end
= end
;
7739 char *new_multilib_os_dir
;
7741 while (q2
< end
&& *q2
!= ':')
7745 new_multilib_os_dir
= XNEWVEC (char, ml_end
- q
);
7746 memcpy (new_multilib_os_dir
, q
+ 1, ml_end
- q
- 1);
7747 new_multilib_os_dir
[ml_end
- q
- 1] = '\0';
7748 multilib_os_dir
= *new_multilib_os_dir
? new_multilib_os_dir
: ".";
7750 if (q2
< end
&& *q2
== ':')
7752 char *new_multiarch_dir
= XNEWVEC (char, end
- q2
);
7753 memcpy (new_multiarch_dir
, q2
+ 1, end
- q2
- 1);
7754 new_multiarch_dir
[end
- q2
- 1] = '\0';
7755 multiarch_dir
= new_multiarch_dir
;
7764 if (multilib_dir
== NULL
&& multilib_os_dir
!= NULL
7765 && strcmp (multilib_os_dir
, ".") == 0)
7767 free (CONST_CAST (char *, multilib_os_dir
));
7768 multilib_os_dir
= NULL
;
7770 else if (multilib_dir
!= NULL
&& multilib_os_dir
== NULL
)
7771 multilib_os_dir
= multilib_dir
;
7774 /* Print out the multiple library subdirectory selection
7775 information. This prints out a series of lines. Each line looks
7776 like SUBDIRECTORY;@OPTION@OPTION, with as many options as is
7777 required. Only the desired options are printed out, the negative
7778 matches. The options are print without a leading dash. There are
7779 no spaces to make it easy to use the information in the shell.
7780 Each subdirectory is printed only once. This assumes the ordering
7781 generated by the genmultilib script. Also, we leave out ones that match
7785 print_multilib_info (void)
7787 const char *p
= multilib_select
;
7788 const char *last_path
= 0, *this_path
;
7790 unsigned int last_path_len
= 0;
7795 /* Ignore newlines. */
7802 /* Get the initial path. */
7809 fatal_error ("multilib select %qs is invalid", multilib_select
);
7815 /* When --disable-multilib was used but target defines
7816 MULTILIB_OSDIRNAMES, entries starting with .: (and not starting
7817 with .:: for multiarch configurations) are there just to find
7818 multilib_os_dir, so skip them from output. */
7819 if (this_path
[0] == '.' && this_path
[1] == ':' && this_path
[2] != ':')
7822 /* Check for matches with the multilib_exclusions. We don't bother
7823 with the '!' in either list. If any of the exclusion rules match
7824 all of its options with the select rule, we skip it. */
7826 const char *e
= multilib_exclusions
;
7827 const char *this_arg
;
7832 /* Ignore newlines. */
7839 /* Check the arguments. */
7848 fatal_error ("multilib exclusion %qs is invalid",
7849 multilib_exclusions
);
7860 while (*e
!= ' ' && *e
!= ';')
7863 goto invalid_exclusion
;
7871 int len
= e
- this_arg
;
7874 goto invalid_select
;
7878 while (*q
!= ' ' && *q
!= ';')
7881 goto invalid_select
;
7885 if (! strncmp (arg
, this_arg
,
7886 (len
< q
- arg
) ? q
- arg
: len
)
7887 || default_arg (this_arg
, e
- this_arg
))
7917 /* If this is a duplicate, skip it. */
7918 skip
= (last_path
!= 0
7919 && (unsigned int) (p
- this_path
) == last_path_len
7920 && ! filename_ncmp (last_path
, this_path
, last_path_len
));
7922 last_path
= this_path
;
7923 last_path_len
= p
- this_path
;
7926 /* If this directory requires any default arguments, we can skip
7927 it. We will already have printed a directory identical to
7928 this one which does not require that default argument. */
7939 goto invalid_select
;
7946 while (*q
!= ' ' && *q
!= ';')
7949 goto invalid_select
;
7954 && default_arg (arg
, q
- arg
))
7969 for (p1
= last_path
; p1
< p
&& *p1
!= ':'; p1
++)
7980 goto invalid_select
;
7988 use_arg
= *p
!= '!';
7993 while (*p
!= ' ' && *p
!= ';')
7996 goto invalid_select
;
8008 /* If there are extra options, print them now. */
8009 if (multilib_extra
&& *multilib_extra
)
8011 int print_at
= TRUE
;
8014 for (q
= multilib_extra
; *q
!= '\0'; q
++)
8035 /* getenv built-in spec function.
8037 Returns the value of the environment variable given by its first
8038 argument, concatenated with the second argument. If the
8039 environment variable is not defined, a fatal error is issued. */
8042 getenv_spec_function (int argc
, const char **argv
)
8052 value
= getenv (argv
[0]);
8054 fatal_error ("environment variable %qs not defined", argv
[0]);
8056 /* We have to escape every character of the environment variable so
8057 they are not interpreted as active spec characters. A
8058 particularly painful case is when we are reading a variable
8059 holding a windows path complete with \ separators. */
8060 len
= strlen (value
) * 2 + strlen (argv
[1]) + 1;
8061 result
= XNEWVAR (char, len
);
8062 for (ptr
= result
; *value
; ptr
+= 2)
8068 strcpy (ptr
, argv
[1]);
8073 /* if-exists built-in spec function.
8075 Checks to see if the file specified by the absolute pathname in
8076 ARGS exists. Returns that pathname if found.
8078 The usual use for this function is to check for a library file
8079 (whose name has been expanded with %s). */
8082 if_exists_spec_function (int argc
, const char **argv
)
8084 /* Must have only one argument. */
8085 if (argc
== 1 && IS_ABSOLUTE_PATH (argv
[0]) && ! access (argv
[0], R_OK
))
8091 /* if-exists-else built-in spec function.
8093 This is like if-exists, but takes an additional argument which
8094 is returned if the first argument does not exist. */
8097 if_exists_else_spec_function (int argc
, const char **argv
)
8099 /* Must have exactly two arguments. */
8103 if (IS_ABSOLUTE_PATH (argv
[0]) && ! access (argv
[0], R_OK
))
8109 /* sanitize built-in spec function.
8111 This returns non-NULL, if sanitizing address, thread or
8112 any of the undefined behavior sanitizers. */
8115 sanitize_spec_function (int argc
, const char **argv
)
8120 if (strcmp (argv
[0], "address") == 0)
8121 return (flag_sanitize
& SANITIZE_ADDRESS
) ? "" : NULL
;
8122 if (strcmp (argv
[0], "thread") == 0)
8123 return (flag_sanitize
& SANITIZE_THREAD
) ? "" : NULL
;
8124 if (strcmp (argv
[0], "undefined") == 0)
8125 return (flag_sanitize
& SANITIZE_UNDEFINED
) ? "" : NULL
;
8130 /* replace-outfile built-in spec function.
8132 This looks for the first argument in the outfiles array's name and
8133 replaces it with the second argument. */
8136 replace_outfile_spec_function (int argc
, const char **argv
)
8139 /* Must have exactly two arguments. */
8143 for (i
= 0; i
< n_infiles
; i
++)
8145 if (outfiles
[i
] && !filename_cmp (outfiles
[i
], argv
[0]))
8146 outfiles
[i
] = xstrdup (argv
[1]);
8151 /* remove-outfile built-in spec function.
8153 * This looks for the first argument in the outfiles array's name and
8157 remove_outfile_spec_function (int argc
, const char **argv
)
8160 /* Must have exactly one argument. */
8164 for (i
= 0; i
< n_infiles
; i
++)
8166 if (outfiles
[i
] && !filename_cmp (outfiles
[i
], argv
[0]))
8172 /* Given two version numbers, compares the two numbers.
8173 A version number must match the regular expression
8174 ([1-9][0-9]*|0)(\.([1-9][0-9]*|0))*
8177 compare_version_strings (const char *v1
, const char *v2
)
8182 if (regcomp (&r
, "^([1-9][0-9]*|0)(\\.([1-9][0-9]*|0))*$",
8183 REG_EXTENDED
| REG_NOSUB
) != 0)
8185 rresult
= regexec (&r
, v1
, 0, NULL
, 0);
8186 if (rresult
== REG_NOMATCH
)
8187 fatal_error ("invalid version number %qs", v1
);
8188 else if (rresult
!= 0)
8190 rresult
= regexec (&r
, v2
, 0, NULL
, 0);
8191 if (rresult
== REG_NOMATCH
)
8192 fatal_error ("invalid version number %qs", v2
);
8193 else if (rresult
!= 0)
8196 return strverscmp (v1
, v2
);
8200 /* version_compare built-in spec function.
8202 This takes an argument of the following form:
8204 <comparison-op> <arg1> [<arg2>] <switch> <result>
8206 and produces "result" if the comparison evaluates to true,
8207 and nothing if it doesn't.
8209 The supported <comparison-op> values are:
8211 >= true if switch is a later (or same) version than arg1
8213 < true if switch is an earlier version than arg1
8215 >< true if switch is arg1 or later, and earlier than arg2
8216 <> true if switch is earlier than arg1 or is arg2 or later
8218 If the switch is not present, the condition is false unless
8219 the first character of the <comparison-op> is '!'.
8222 %:version-compare(>= 10.3 mmacosx-version-min= -lmx)
8223 adds -lmx if -mmacosx-version-min=10.3.9 was passed. */
8226 version_compare_spec_function (int argc
, const char **argv
)
8230 const char *switch_value
= NULL
;
8235 fatal_error ("too few arguments to %%:version-compare");
8236 if (argv
[0][0] == '\0')
8238 if ((argv
[0][1] == '<' || argv
[0][1] == '>') && argv
[0][0] != '!')
8240 if (argc
!= nargs
+ 3)
8241 fatal_error ("too many arguments to %%:version-compare");
8243 switch_len
= strlen (argv
[nargs
+ 1]);
8244 for (i
= 0; i
< n_switches
; i
++)
8245 if (!strncmp (switches
[i
].part1
, argv
[nargs
+ 1], switch_len
)
8246 && check_live_switch (i
, switch_len
))
8247 switch_value
= switches
[i
].part1
+ switch_len
;
8249 if (switch_value
== NULL
)
8253 comp1
= compare_version_strings (switch_value
, argv
[1]);
8255 comp2
= compare_version_strings (switch_value
, argv
[2]);
8257 comp2
= -1; /* This value unused. */
8260 switch (argv
[0][0] << 8 | argv
[0][1])
8262 case '>' << 8 | '=':
8263 result
= comp1
>= 0;
8265 case '!' << 8 | '<':
8266 result
= comp1
>= 0 || switch_value
== NULL
;
8271 case '!' << 8 | '>':
8272 result
= comp1
< 0 || switch_value
== NULL
;
8274 case '>' << 8 | '<':
8275 result
= comp1
>= 0 && comp2
< 0;
8277 case '<' << 8 | '>':
8278 result
= comp1
< 0 || comp2
>= 0;
8282 fatal_error ("unknown operator %qs in %%:version-compare", argv
[0]);
8287 return argv
[nargs
+ 2];
8290 /* %:include builtin spec function. This differs from %include in that it
8291 can be nested inside a spec, and thus be conditionalized. It takes
8292 one argument, the filename, and looks for it in the startfile path.
8293 The result is always NULL, i.e. an empty expansion. */
8296 include_spec_function (int argc
, const char **argv
)
8303 file
= find_a_file (&startfile_prefixes
, argv
[0], R_OK
, true);
8304 read_specs (file
? file
: argv
[0], false, false);
8309 /* %:find-file spec function. This function replaces its argument by
8310 the file found through find_file, that is the -print-file-name gcc
8313 find_file_spec_function (int argc
, const char **argv
)
8320 file
= find_file (argv
[0]);
8325 /* %:find-plugindir spec function. This function replaces its argument
8326 by the -iplugindir=<dir> option. `dir' is found through find_file, that
8327 is the -print-file-name gcc program option. */
8329 find_plugindir_spec_function (int argc
, const char **argv ATTRIBUTE_UNUSED
)
8336 option
= concat ("-iplugindir=", find_file ("plugin"), NULL
);
8341 /* %:print-asm-header spec function. Print a banner to say that the
8342 following output is from the assembler. */
8345 print_asm_header_spec_function (int arg ATTRIBUTE_UNUSED
,
8346 const char **argv ATTRIBUTE_UNUSED
)
8348 printf (_("Assembler options\n=================\n\n"));
8349 printf (_("Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n\n"));
8354 /* Get a random number for -frandom-seed */
8356 static unsigned HOST_WIDE_INT
8357 get_random_number (void)
8359 unsigned HOST_WIDE_INT ret
= 0;
8362 fd
= open ("/dev/urandom", O_RDONLY
);
8365 read (fd
, &ret
, sizeof (HOST_WIDE_INT
));
8371 /* Get some more or less random data. */
8372 #ifdef HAVE_GETTIMEOFDAY
8376 gettimeofday (&tv
, NULL
);
8377 ret
= tv
.tv_sec
* 1000 + tv
.tv_usec
/ 1000;
8381 time_t now
= time (NULL
);
8383 if (now
!= (time_t)-1)
8384 ret
= (unsigned) now
;
8388 return ret
^ getpid ();
8391 /* %:compare-debug-dump-opt spec function. Save the last argument,
8392 expected to be the last -fdump-final-insns option, or generate a
8396 compare_debug_dump_opt_spec_function (int arg
,
8397 const char **argv ATTRIBUTE_UNUSED
)
8402 static char random_seed
[HOST_BITS_PER_WIDE_INT
/ 4 + 3];
8405 fatal_error ("too many arguments to %%:compare-debug-dump-opt");
8407 do_spec_2 ("%{fdump-final-insns=*:%*}");
8408 do_spec_1 (" ", 0, NULL
);
8410 if (argbuf
.length () > 0
8411 && strcmp (argv
[argbuf
.length () - 1], "."))
8416 name
= xstrdup (argv
[argbuf
.length () - 1]);
8421 const char *ext
= NULL
;
8423 if (argbuf
.length () > 0)
8425 do_spec_2 ("%{o*:%*}%{!o:%{!S:%b%O}%{S:%b.s}}");
8428 else if (!compare_debug
)
8431 do_spec_2 ("%g.gkd");
8433 do_spec_1 (" ", 0, NULL
);
8435 gcc_assert (argbuf
.length () > 0);
8437 name
= concat (argbuf
.last (), ext
, NULL
);
8439 ret
= concat ("-fdump-final-insns=", name
, NULL
);
8442 which
= compare_debug
< 0;
8443 debug_check_temp_file
[which
] = name
;
8447 unsigned HOST_WIDE_INT value
= get_random_number ();
8449 sprintf (random_seed
, HOST_WIDE_INT_PRINT_HEX
, value
);
8455 ret
= concat ("%{!frandom-seed=*:-frandom-seed=", random_seed
, "} ",
8466 static const char *debug_auxbase_opt
;
8468 /* %:compare-debug-self-opt spec function. Expands to the options
8469 that are to be passed in the second compilation of
8473 compare_debug_self_opt_spec_function (int arg
,
8474 const char **argv ATTRIBUTE_UNUSED
)
8477 fatal_error ("too many arguments to %%:compare-debug-self-opt");
8479 if (compare_debug
>= 0)
8482 do_spec_2 ("%{c|S:%{o*:%*}}");
8483 do_spec_1 (" ", 0, NULL
);
8485 if (argbuf
.length () > 0)
8486 debug_auxbase_opt
= concat ("-auxbase-strip ",
8490 debug_auxbase_opt
= NULL
;
8493 %<o %<MD %<MMD %<MF* %<MG %<MP %<MQ* %<MT* \
8494 %<fdump-final-insns=* -w -S -o %j \
8495 %{!fcompare-debug-second:-fcompare-debug-second} \
8496 ", compare_debug_opt
, NULL
);
8499 /* %:compare-debug-auxbase-opt spec function. Expands to the auxbase
8500 options that are to be passed in the second compilation of
8501 compare-debug. It expects, as an argument, the basename of the
8502 current input file name, with the .gk suffix appended to it. */
8505 compare_debug_auxbase_opt_spec_function (int arg
,
8512 fatal_error ("too few arguments to %%:compare-debug-auxbase-opt");
8515 fatal_error ("too many arguments to %%:compare-debug-auxbase-opt");
8517 if (compare_debug
>= 0)
8520 len
= strlen (argv
[0]);
8521 if (len
< 3 || strcmp (argv
[0] + len
- 3, ".gk") != 0)
8522 fatal_error ("argument to %%:compare-debug-auxbase-opt "
8523 "does not end in .gk");
8525 if (debug_auxbase_opt
)
8526 return debug_auxbase_opt
;
8528 #define OPT "-auxbase "
8531 name
= (char*) xmalloc (sizeof (OPT
) + len
);
8532 memcpy (name
, OPT
, sizeof (OPT
) - 1);
8533 memcpy (name
+ sizeof (OPT
) - 1, argv
[0], len
);
8534 name
[sizeof (OPT
) - 1 + len
] = '\0';
8541 /* %:pass-through-libs spec function. Finds all -l options and input
8542 file names in the lib spec passed to it, and makes a list of them
8543 prepended with the plugin option to cause them to be passed through
8544 to the final link after all the new object files have been added. */
8547 pass_through_libs_spec_func (int argc
, const char **argv
)
8549 char *prepended
= xstrdup (" ");
8551 /* Shlemiel the painter's algorithm. Innately horrible, but at least
8552 we know that there will never be more than a handful of strings to
8553 concat, and it's only once per run, so it's not worth optimising. */
8554 for (n
= 0; n
< argc
; n
++)
8556 char *old
= prepended
;
8557 /* Anything that isn't an option is a full path to an output
8558 file; pass it through if it ends in '.a'. Among options,
8560 if (argv
[n
][0] == '-' && argv
[n
][1] == 'l')
8562 const char *lopt
= argv
[n
] + 2;
8563 /* Handle both joined and non-joined -l options. If for any
8564 reason there's a trailing -l with no joined or following
8565 arg just discard it. */
8566 if (!*lopt
&& ++n
>= argc
)
8570 prepended
= concat (prepended
, "-plugin-opt=-pass-through=-l",
8573 else if (!strcmp (".a", argv
[n
] + strlen (argv
[n
]) - 2))
8575 prepended
= concat (prepended
, "-plugin-opt=-pass-through=",
8576 argv
[n
], " ", NULL
);
8578 if (prepended
!= old
)
8584 /* %:replace-extension spec function. Replaces the extension of the
8585 first argument with the second argument. */
8588 replace_extension_spec_func (int argc
, const char **argv
)
8596 fatal_error ("too few arguments to %%:replace-extension");
8598 name
= xstrdup (argv
[0]);
8600 for (i
= strlen (name
) - 1; i
>= 0; i
--)
8601 if (IS_DIR_SEPARATOR (name
[i
]))
8604 p
= strrchr (name
+ i
+ 1, '.');
8608 result
= concat (name
, argv
[1], NULL
);
8614 /* Insert backslash before spaces in ORIG (usually a file path), to
8615 avoid being broken by spec parser.
8617 This function is needed as do_spec_1 treats white space (' ' and '\t')
8618 as the end of an argument. But in case of -plugin /usr/gcc install/xxx.so,
8619 the file name should be treated as a single argument rather than being
8620 broken into multiple. Solution is to insert '\\' before the space in a
8623 This function converts and only converts all occurrence of ' '
8624 to '\\' + ' ' and '\t' to '\\' + '\t'. For example:
8628 "a\\ b" -> "a\\\\ b"
8630 orig: input null-terminating string that was allocated by xalloc. The
8631 memory it points to might be freed in this function. Behavior undefined
8632 if ORIG wasn't xalloced or was freed already at entry.
8634 Return: ORIG if no conversion needed. Otherwise a newly allocated string
8635 that was converted from ORIG. */
8638 convert_white_space (char *orig
)
8640 int len
, number_of_space
= 0;
8642 for (len
= 0; orig
[len
]; len
++)
8643 if (orig
[len
] == ' ' || orig
[len
] == '\t') number_of_space
++;
8645 if (number_of_space
)
8647 char *new_spec
= (char *) xmalloc (len
+ number_of_space
+ 1);
8649 for (j
= 0, k
= 0; j
<= len
; j
++, k
++)
8651 if (orig
[j
] == ' ' || orig
[j
] == '\t')
8652 new_spec
[k
++] = '\\';
8653 new_spec
[k
] = orig
[j
];