1 /* Compiler driver program that can handle many languages.
2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 This paragraph is here to try to keep Sun CC from dying.
23 The number of chars here seems crucial!!!! */
25 /* This program is the user interface to the C compiler and possibly to
26 other compilers. It is used because compilation is a complicated procedure
27 which involves running several programs and passing temporary files between
28 them, forwarding the users switches to those programs selectively,
29 and deleting the temporary files at the end.
31 CC recognizes how to compile each input file by suffixes in the file names.
32 Once it knows which kind of compilation to perform, the procedure for
33 compilation is specified by a string called a "spec". */
35 /* A Short Introduction to Adding a Command-Line Option.
37 Before adding a command-line option, consider if it is really
38 necessary. Each additional command-line option adds complexity and
39 is difficult to remove in subsequent versions.
41 In the following, consider adding the command-line argument
44 1. Each command-line option is specified in the specs file. The
45 notation is described below in the comment entitled "The Specs
48 2. In this file, add an entry to "option_map" equating the long
49 `--' argument version and any shorter, single letter version. Read
50 the comments in the declaration of "struct option_map" for an
51 explanation. Do not omit the first `-'.
53 3. Look in the "specs" file to determine which program or option
54 list should be given the argument, e.g., "cc1_options". Add the
55 appropriate syntax for the shorter option version to the
56 corresponding "const char *" entry in this file. Omit the first
57 `-' from the option. For example, use `-bar', rather than `--bar'.
59 4. If the argument takes an argument, e.g., `--baz argument1',
60 modify either DEFAULT_SWITCH_TAKES_ARG or
61 DEFAULT_WORD_SWITCH_TAKES_ARG in this file. Omit the first `-'
64 5. Document the option in this file's display_help(). If the
65 option is passed to a subprogram, modify its corresponding
66 function, e.g., cppinit.c:print_help() or toplev.c:display_help(),
69 6. Compile and test. Make sure that your new specs file is being
70 read. For example, use a debugger to investigate the value of
71 "specs_file" in main(). */
75 #include "coretypes.h"
78 #if ! defined( SIGCHLD ) && defined( SIGCLD )
79 # define SIGCHLD SIGCLD
87 #ifdef HAVE_SYS_RESOURCE_H
88 #include <sys/resource.h>
90 #if defined (HAVE_DECL_GETRUSAGE) && !HAVE_DECL_GETRUSAGE
91 extern int getrusage PARAMS ((int, struct rusage *));
94 /* By default there is no special suffix for target executables. */
95 /* FIXME: when autoconf is fixed, remove the host check - dj */
96 #if defined(TARGET_EXECUTABLE_SUFFIX) && defined(HOST_EXECUTABLE_SUFFIX)
97 #define HAVE_TARGET_EXECUTABLE_SUFFIX
100 /* By default there is no special suffix for host executables. */
101 #ifdef HOST_EXECUTABLE_SUFFIX
102 #define HAVE_HOST_EXECUTABLE_SUFFIX
104 #define HOST_EXECUTABLE_SUFFIX ""
107 /* By default, the suffix for target object files is ".o". */
108 #ifdef TARGET_OBJECT_SUFFIX
109 #define HAVE_TARGET_OBJECT_SUFFIX
111 #define TARGET_OBJECT_SUFFIX ".o"
115 /* FIXME: the location independence code for VMS is hairier than this,
116 and hasn't been written. */
122 static const char dir_separator_str[] = { DIR_SEPARATOR, 0 };
124 /* Most every one is fine with LIBRARY_PATH. For some, it conflicts. */
125 #ifndef LIBRARY_PATH_ENV
126 #define LIBRARY_PATH_ENV "LIBRARY_PATH"
130 #define kill(p,s) raise(s)
133 /* If a stage of compilation returns an exit status >= 1,
134 compilation of that file ceases. */
136 #define MIN_FATAL_STATUS 1
138 /* Flag set by cppspec.c to 1. */
141 /* Flag saying to pass the greatest exit code returned by a sub-process
142 to the calling program. */
143 static int pass_exit_codes;
145 /* Definition of string containing the arguments given to configure. */
146 #include "configargs.h"
148 /* Flag saying to print the directories gcc will search through looking for
149 programs, libraries, etc. */
151 static int print_search_dirs;
153 /* Flag saying to print the full filename of this file
154 as found through our usual search mechanism. */
156 static const char *print_file_name = NULL;
158 /* As print_file_name, but search for executable file. */
160 static const char *print_prog_name = NULL;
162 /* Flag saying to print the relative path we'd use to
163 find libgcc.a given the current compiler flags. */
165 static int print_multi_directory;
167 /* Flag saying to print the relative path we'd use to
168 find OS libraries given the current compiler flags. */
170 static int print_multi_os_directory;
172 /* Flag saying to print the list of subdirectories and
173 compiler flags used to select them in a standard form. */
175 static int print_multi_lib;
177 /* Flag saying to print the command line options understood by gcc and its
180 static int print_help_list;
182 /* Flag indicating whether we should print the command and arguments */
184 static int verbose_flag;
186 /* Flag indicating whether we should ONLY print the command and
187 arguments (like verbose_flag) without executing the command.
188 Displayed arguments are quoted so that the generated command
189 line is suitable for execution. This is intended for use in
190 shell scripts to capture the driver-generated command line. */
191 static int verbose_only_flag;
193 /* Flag indicating to print target specific command line options. */
195 static int target_help_flag;
197 /* Flag indicating whether we should report subprocess execution times
198 (if this is supported by the system - see pexecute.c). */
200 static int report_times;
202 /* Nonzero means place this string before uses of /, so that include
203 and library files can be found in an alternate location. */
205 #ifdef TARGET_SYSTEM_ROOT
206 static const char *target_system_root = TARGET_SYSTEM_ROOT;
208 static const char *target_system_root = 0;
211 /* Nonzero means pass the updated target_system_root to the compiler. */
213 static int target_system_root_changed;
215 /* Nonzero means write "temp" files in source directory
216 and use the source file's name in them, and don't delete them. */
218 static int save_temps_flag;
220 /* Nonzero means use pipes to communicate between subprocesses.
221 Overridden by either of the above two flags. */
223 static int use_pipes;
225 /* The compiler version. */
227 static const char *compiler_version;
229 /* The target version specified with -V */
231 static const char *const spec_version = DEFAULT_TARGET_VERSION;
233 /* The target machine specified with -b. */
235 static const char *spec_machine = DEFAULT_TARGET_MACHINE;
237 /* Nonzero if cross-compiling.
238 When -b is used, the value comes from the `specs' file. */
241 static const char *cross_compile = "1";
243 static const char *cross_compile = "0";
246 #ifdef MODIFY_TARGET_NAME
248 /* Information on how to alter the target name based on a command-line
249 switch. The only case we support now is simply appending or deleting a
250 string to or from the end of the first part of the configuration name. */
252 static const struct modify_target
254 const char *const sw;
255 const enum add_del {ADD, DELETE} add_del;
256 const char *const str;
258 modify_target[] = MODIFY_TARGET_NAME;
261 /* The number of errors that have occurred; the link phase will not be
262 run if this is nonzero. */
263 static int error_count = 0;
265 /* Greatest exit code of sub-processes that has been encountered up to
267 static int greatest_status = 1;
269 /* This is the obstack which we use to allocate many strings. */
271 static struct obstack obstack;
273 /* This is the obstack to build an environment variable to pass to
274 collect2 that describes all of the relevant switches of what to
275 pass the compiler in building the list of pointers to constructors
278 static struct obstack collect_obstack;
280 /* These structs are used to collect resource usage information for
282 #ifdef HAVE_GETRUSAGE
283 static struct rusage rus, prus;
286 /* Forward declaration for prototypes. */
289 static void init_spec PARAMS ((void));
290 static void store_arg PARAMS ((const char *, int, int));
291 static char *load_specs PARAMS ((const char *));
292 static void read_specs PARAMS ((const char *, int));
293 static void set_spec PARAMS ((const char *, const char *));
294 static struct compiler *lookup_compiler PARAMS ((const char *, size_t, const char *));
295 static char *build_search_list PARAMS ((struct path_prefix *, const char *, int));
296 static void putenv_from_prefixes PARAMS ((struct path_prefix *, const char *));
297 static int access_check PARAMS ((const char *, int));
298 static char *find_a_file PARAMS ((struct path_prefix *, const char *,
300 static void add_prefix PARAMS ((struct path_prefix *, const char *,
301 const char *, int, int, int *, int));
302 static void add_sysrooted_prefix PARAMS ((struct path_prefix *, const char *,
303 const char *, int, int, int *, int));
304 static void translate_options PARAMS ((int *, const char *const **));
305 static char *skip_whitespace PARAMS ((char *));
306 static void delete_if_ordinary PARAMS ((const char *));
307 static void delete_temp_files PARAMS ((void));
308 static void delete_failure_queue PARAMS ((void));
309 static void clear_failure_queue PARAMS ((void));
310 static int check_live_switch PARAMS ((int, int));
311 static const char *handle_braces PARAMS ((const char *));
312 static inline bool input_suffix_matches PARAMS ((const char *,
314 static inline bool switch_matches PARAMS ((const char *,
316 static inline void mark_matching_switches PARAMS ((const char *,
318 static inline void process_marked_switches PARAMS ((void));
319 static const char *process_brace_body PARAMS ((const char *, const char *,
320 const char *, int, int));
321 static const struct spec_function *lookup_spec_function PARAMS ((const char *));
322 static const char *eval_spec_function PARAMS ((const char *, const char *));
323 static const char *handle_spec_function PARAMS ((const char *));
324 static char *save_string PARAMS ((const char *, int));
325 static void set_collect_gcc_options PARAMS ((void));
326 static int do_spec_1 PARAMS ((const char *, int, const char *));
327 static int do_spec_2 PARAMS ((const char *));
328 static void do_self_spec PARAMS ((const char *));
329 static const char *find_file PARAMS ((const char *));
330 static int is_directory PARAMS ((const char *, const char *, int));
331 static const char *validate_switches PARAMS ((const char *));
332 static void validate_all_switches PARAMS ((void));
333 static inline void validate_switches_from_spec PARAMS ((const char *));
334 static void give_switch PARAMS ((int, int));
335 static int used_arg PARAMS ((const char *, int));
336 static int default_arg PARAMS ((const char *, int));
337 static void set_multilib_dir PARAMS ((void));
338 static void print_multilib_info PARAMS ((void));
339 static void perror_with_name PARAMS ((const char *));
340 static void pfatal_pexecute PARAMS ((const char *, const char *))
342 static void notice PARAMS ((const char *, ...))
344 static void display_help PARAMS ((void));
345 static void add_preprocessor_option PARAMS ((const char *, int));
346 static void add_assembler_option PARAMS ((const char *, int));
347 static void add_linker_option PARAMS ((const char *, int));
348 static void process_command PARAMS ((int, const char *const *));
349 static int execute PARAMS ((void));
350 static void alloc_args PARAMS ((void));
351 static void clear_args PARAMS ((void));
352 static void fatal_error PARAMS ((int));
353 #ifdef ENABLE_SHARED_LIBGCC
354 static void init_gcc_specs PARAMS ((struct obstack *,
355 const char *, const char *,
358 #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
359 static const char *convert_filename PARAMS ((const char *, int, int));
362 static const char *if_exists_spec_function PARAMS ((int, const char **));
363 static const char *if_exists_else_spec_function PARAMS ((int, const char **));
365 /* The Specs Language
367 Specs are strings containing lines, each of which (if not blank)
368 is made up of a program name, and arguments separated by spaces.
369 The program name must be exact and start from root, since no path
370 is searched and it is unreliable to depend on the current working directory.
371 Redirection of input or output is not supported; the subprograms must
372 accept filenames saying what files to read and write.
374 In addition, the specs can contain %-sequences to substitute variable text
375 or for conditional text. Here is a table of all defined %-sequences.
376 Note that spaces are not generated automatically around the results of
377 expanding these sequences; therefore, you can concatenate them together
378 or with constant text in a single argument.
380 %% substitute one % into the program name or argument.
381 %i substitute the name of the input file being processed.
382 %b substitute the basename of the input file being processed.
383 This is the substring up to (and not including) the last period
384 and not including the directory.
385 %B same as %b, but include the file suffix (text after the last period).
387 substitute a file name that has suffix SUFFIX and is chosen
388 once per compilation, and mark the argument a la %d. To reduce
389 exposure to denial-of-service attacks, the file name is now
390 chosen in a way that is hard to predict even when previously
391 chosen file names are known. For example, `%g.s ... %g.o ... %g.s'
392 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX matches
393 the regexp "[.A-Za-z]*%O"; "%O" is treated exactly as if it
394 had been pre-processed. Previously, %g was simply substituted
395 with a file name chosen once per compilation, without regard
396 to any appended suffix (which was therefore treated just like
397 ordinary text), making such attacks more likely to succeed.
399 like %g, but if -pipe is in effect, expands simply to "-".
401 like %g, but if -pipe is in effect, expands to nothing. (We have both
402 %| and %m to accommodate differences between system assemblers; see
403 the AS_NEEDS_DASH_FOR_PIPED_INPUT target macro.)
405 like %g, but generates a new temporary file name even if %uSUFFIX
408 substitutes the last file name generated with %uSUFFIX, generating a
409 new one if there is no such last file name. In the absence of any
410 %uSUFFIX, this is just like %gSUFFIX, except they don't share
411 the same suffix "space", so `%g.s ... %U.s ... %g.s ... %U.s'
412 would involve the generation of two distinct file names, one
413 for each `%g.s' and another for each `%U.s'. Previously, %U was
414 simply substituted with a file name chosen for the previous %u,
415 without regard to any appended suffix.
417 substitutes the name of the HOST_BIT_BUCKET, if any, and if it is
418 writable, and if save-temps is off; otherwise, substitute the name
419 of a temporary file, just like %u. This temporary file is not
420 meant for communication between processes, but rather as a junk
423 substitutes .SUFFIX for the suffixes of a matched switch's args when
424 it is subsequently output with %*. SUFFIX is terminated by the next
426 %d marks the argument containing or following the %d as a
427 temporary file name, so that that file will be deleted if CC exits
428 successfully. Unlike %g, this contributes no text to the argument.
429 %w marks the argument containing or following the %w as the
430 "output file" of this compilation. This puts the argument
431 into the sequence of arguments that %o will substitute later.
432 %V indicates that this compilation produces no "output file".
434 like %{...} but mark last argument supplied within
435 as a file to be deleted on failure.
436 %o substitutes the names of all the output files, with spaces
437 automatically placed around them. You should write spaces
438 around the %o as well or the results are undefined.
439 %o is for use in the specs for running the linker.
440 Input files whose names have no recognized suffix are not compiled
441 at all, but they are included among the output files, so they will
443 %O substitutes the suffix for object files. Note that this is
444 handled specially when it immediately follows %g, %u, or %U
445 (with or without a suffix argument) because of the need for
446 those to form complete file names. The handling is such that
447 %O is treated exactly as if it had already been substituted,
448 except that %g, %u, and %U do not currently support additional
449 SUFFIX characters following %O as they would following, for
451 %p substitutes the standard macro predefinitions for the
452 current target machine. Use this when running cpp.
453 %P like %p, but puts `__' before and after the name of each macro.
454 (Except macros that already have __.)
456 %I Substitute any of -iprefix (made from GCC_EXEC_PREFIX), -isysroot
457 (made from TARGET_SYSTEM_ROOT), and -isystem (made from COMPILER_PATH
458 and -B options) as necessary.
459 %s current argument is the name of a library or startup file of some sort.
460 Search for that file in a standard list of directories
461 and substitute the full name found.
462 %eSTR Print STR as an error message. STR is terminated by a newline.
463 Use this when inconsistent options are detected.
464 %nSTR Print STR as a notice. STR is terminated by a newline.
465 %x{OPTION} Accumulate an option for %X.
466 %X Output the accumulated linker options specified by compilations.
467 %Y Output the accumulated assembler options specified by compilations.
468 %Z Output the accumulated preprocessor options specified by compilations.
469 %v1 Substitute the major version number of GCC.
470 (For version 2.5.3, this is 2.)
471 %v2 Substitute the minor version number of GCC.
472 (For version 2.5.3, this is 5.)
473 %v3 Substitute the patch level number of GCC.
474 (For version 2.5.3, this is 3.)
475 %a process ASM_SPEC as a spec.
476 This allows config.h to specify part of the spec for running as.
477 %A process ASM_FINAL_SPEC as a spec. A capital A is actually
478 used here. This can be used to run a post-processor after the
479 assembler has done its job.
480 %D Dump out a -L option for each directory in startfile_prefixes.
481 If multilib_dir is set, extra entries are generated with it affixed.
482 %l process LINK_SPEC as a spec.
483 %L process LIB_SPEC as a spec.
484 %G process LIBGCC_SPEC as a spec.
485 %M output multilib_dir with directory separators replaced with "_";
486 if multilib_dir is not set or is ".", output "".
487 %S process STARTFILE_SPEC as a spec. A capital S is actually used here.
488 %E process ENDFILE_SPEC as a spec. A capital E is actually used here.
489 %C process CPP_SPEC as a spec.
490 %1 process CC1_SPEC as a spec.
491 %2 process CC1PLUS_SPEC as a spec.
492 %* substitute the variable part of a matched option. (See below.)
493 Note that each comma in the substituted string is replaced by
495 %<S remove all occurrences of -S from the command line.
496 Note - this command is position dependent. % commands in the
497 spec string before this one will see -S, % commands in the
498 spec string after this one will not.
499 %<S* remove all occurrences of all switches beginning with -S from the
502 Call the named function FUNCTION, passing it ARGS. ARGS is
503 first processed as a nested spec string, then split into an
504 argument vector in the usual fashion. The function returns
505 a string which is processed as if it had appeared literally
506 as part of the current spec.
507 %{S} substitutes the -S switch, if that switch was given to CC.
508 If that switch was not specified, this substitutes nothing.
509 Here S is a metasyntactic variable.
510 %{S*} substitutes all the switches specified to CC whose names start
511 with -S. This is used for -o, -I, etc; switches that take
512 arguments. CC considers `-o foo' as being one switch whose
513 name starts with `o'. %{o*} would substitute this text,
514 including the space; thus, two arguments would be generated.
515 %{S*&T*} likewise, but preserve order of S and T options (the order
516 of S and T in the spec is not significant). Can be any number
517 of ampersand-separated variables; for each the wild card is
518 optional. Useful for CPP as %{D*&U*&A*}.
520 %{S:X} substitutes X, if the -S switch was given to CC.
521 %{!S:X} substitutes X, if the -S switch was NOT given to CC.
522 %{S*:X} substitutes X if one or more switches whose names start
523 with -S was given to CC. Normally X is substituted only
524 once, no matter how many such switches appeared. However,
525 if %* appears somewhere in X, then X will be substituted
526 once for each matching switch, with the %* replaced by the
527 part of that switch that matched the '*'.
528 %{.S:X} substitutes X, if processing a file with suffix S.
529 %{!.S:X} substitutes X, if NOT processing a file with suffix S.
531 %{S|T:X} substitutes X if either -S or -T was given to CC. This may be
532 combined with !, ., and * as above binding stronger than the OR.
533 If %* appears in X, all of the alternatives must be starred, and
534 only the first matching alternative is substituted.
535 %{S:X; if S was given to CC, substitutes X;
536 T:Y; else if T was given to CC, substitutes Y;
537 :D} else substitutes D. There can be as many clauses as you need.
538 This may be combined with ., !, |, and * as above.
540 %(Spec) processes a specification defined in a specs file as *Spec:
541 %[Spec] as above, but put __ around -D arguments
543 The conditional text X in a %{S:X} or similar construct may contain
544 other nested % constructs or spaces, or even newlines. They are
545 processed as usual, as described above. Trailing white space in X is
546 ignored. White space may also appear anywhere on the left side of the
547 colon in these constructs, except between . or * and the corresponding
550 The -O, -f, -m, and -W switches are handled specifically in these
551 constructs. If another value of -O or the negated form of a -f, -m, or
552 -W switch is found later in the command line, the earlier switch
553 value is ignored, except with {S*} where S is just one letter; this
554 passes all matching options.
556 The character | at the beginning of the predicate text is used to indicate
557 that a command should be piped to the following command, but only if -pipe
560 Note that it is built into CC which switches take arguments and which
561 do not. You might think it would be useful to generalize this to
562 allow each compiler's spec to say which switches take arguments. But
563 this cannot be done in a consistent fashion. CC cannot even decide
564 which input files have been specified without knowing which switches
565 take arguments, and it must know which input files to compile in order
566 to tell which compilers to run.
568 CC also knows implicitly that arguments starting in `-l' are to be
569 treated as compiler output files, and passed to the linker in their
570 proper position among the other output files. */
572 /* Define the macros used for specs %a, %l, %L, %S, %C, %1. */
574 /* config.h can define ASM_SPEC to provide extra args to the assembler
575 or extra switch-translations. */
580 /* config.h can define ASM_FINAL_SPEC to run a post processor after
581 the assembler has run. */
582 #ifndef ASM_FINAL_SPEC
583 #define ASM_FINAL_SPEC ""
586 /* config.h can define CPP_SPEC to provide extra args to the C preprocessor
587 or extra switch-translations. */
592 /* config.h can define CC1_SPEC to provide extra args to cc1 and cc1plus
593 or extra switch-translations. */
598 /* config.h can define CC1PLUS_SPEC to provide extra args to cc1plus
599 or extra switch-translations. */
601 #define CC1PLUS_SPEC ""
604 /* config.h can define LINK_SPEC to provide extra args to the linker
605 or extra switch-translations. */
610 /* config.h can define LIB_SPEC to override the default libraries. */
612 #define LIB_SPEC "%{!shared:%{g*:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}"
615 /* config.h can define LIBGCC_SPEC to override how and when libgcc.a is
618 #if defined(LINK_LIBGCC_SPECIAL) || defined(LINK_LIBGCC_SPECIAL_1)
619 /* Have gcc do the search for libgcc.a. */
620 #define LIBGCC_SPEC "libgcc.a%s"
622 #define LIBGCC_SPEC "-lgcc"
626 /* config.h can define STARTFILE_SPEC to override the default crt0 files. */
627 #ifndef STARTFILE_SPEC
628 #define STARTFILE_SPEC \
629 "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}}"
632 /* config.h can define SWITCHES_NEED_SPACES to control which options
633 require spaces between the option and the argument. */
634 #ifndef SWITCHES_NEED_SPACES
635 #define SWITCHES_NEED_SPACES ""
638 /* config.h can define ENDFILE_SPEC to override the default crtn files. */
640 #define ENDFILE_SPEC ""
644 #define LINKER_NAME "collect2"
647 /* Define ASM_DEBUG_SPEC to be a spec suitable for translating '-g'
649 #ifndef ASM_DEBUG_SPEC
650 # if defined(DBX_DEBUGGING_INFO) && defined(DWARF2_DEBUGGING_INFO) \
651 && defined(HAVE_AS_GDWARF2_DEBUG_FLAG) && defined(HAVE_AS_GSTABS_DEBUG_FLAG)
652 # define ASM_DEBUG_SPEC \
653 (PREFERRED_DEBUGGING_TYPE == DBX_DEBUG \
654 ? "%{gdwarf-2*:--gdwarf2}%{!gdwarf-2*:%{g*:--gstabs}}" \
655 : "%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}")
657 # if defined(DBX_DEBUGGING_INFO) && defined(HAVE_AS_GSTABS_DEBUG_FLAG)
658 # define ASM_DEBUG_SPEC "%{g*:--gstabs}"
660 # if defined(DWARF2_DEBUGGING_INFO) && defined(HAVE_AS_GDWARF2_DEBUG_FLAG)
661 # define ASM_DEBUG_SPEC "%{g*:--gdwarf2}"
665 #ifndef ASM_DEBUG_SPEC
666 # define ASM_DEBUG_SPEC ""
669 /* Here is the spec for running the linker, after compiling all files. */
671 /* This is overridable by the target in case they need to specify the
672 -lgcc and -lc order specially, yet not require them to override all
673 of LINK_COMMAND_SPEC. */
674 #ifndef LINK_GCC_C_SEQUENCE_SPEC
675 #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G"
678 /* -u* was put back because both BSD and SysV seem to support it. */
679 /* %{static:} simply prevents an error message if the target machine
680 doesn't handle -static. */
681 /* We want %{T*} after %{L*} and %D so that it can be used to specify linker
682 scripts which exist in user specified directories, or in standard
684 #ifndef LINK_COMMAND_SPEC
685 #define LINK_COMMAND_SPEC "\
686 %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
687 %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}\
688 %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
689 %{static:} %{L*} %(link_libgcc) %o %{fprofile-arcs:-lgcov}\
690 %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}\
691 %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}"
694 #ifndef LINK_LIBGCC_SPEC
695 # ifdef LINK_LIBGCC_SPECIAL
696 /* Don't generate -L options for startfile prefix list. */
697 # define LINK_LIBGCC_SPEC ""
699 /* Do generate them. */
700 # define LINK_LIBGCC_SPEC "%D"
704 #ifndef STARTFILE_PREFIX_SPEC
705 # define STARTFILE_PREFIX_SPEC ""
708 static const char *asm_debug;
709 static const char *cpp_spec = CPP_SPEC;
710 static const char *cpp_predefines = CPP_PREDEFINES;
711 static const char *cc1_spec = CC1_SPEC;
712 static const char *cc1plus_spec = CC1PLUS_SPEC;
713 static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC;
714 static const char *asm_spec = ASM_SPEC;
715 static const char *asm_final_spec = ASM_FINAL_SPEC;
716 static const char *link_spec = LINK_SPEC;
717 static const char *lib_spec = LIB_SPEC;
718 static const char *libgcc_spec = LIBGCC_SPEC;
719 static const char *endfile_spec = ENDFILE_SPEC;
720 static const char *startfile_spec = STARTFILE_SPEC;
721 static const char *switches_need_spaces = SWITCHES_NEED_SPACES;
722 static const char *linker_name_spec = LINKER_NAME;
723 static const char *link_command_spec = LINK_COMMAND_SPEC;
724 static const char *link_libgcc_spec = LINK_LIBGCC_SPEC;
725 static const char *startfile_prefix_spec = STARTFILE_PREFIX_SPEC;
727 /* Standard options to cpp, cc1, and as, to reduce duplication in specs.
728 There should be no need to override these in target dependent files,
729 but we need to copy them to the specs file so that newer versions
730 of the GCC driver can correctly drive older tool chains with the
731 appropriate -B options. */
733 /* When cpplib handles traditional preprocessing, get rid of this, and
734 call cc1 (or cc1obj in objc/lang-specs.h) from the main specs so
735 that we default the front end language better. */
736 static const char *trad_capable_cpp =
737 "cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}";
739 /* We don't wrap .d files in %W{} since a missing .d file, and
740 therefore no dependency entry, confuses make into thinking a .o
741 file that happens to exist is up-to-date. */
742 static const char *cpp_unique_options =
743 "%{C:%{!E:%eGNU C does not support -C without using -E}}\
744 %{CC:%{!E:%eGNU C does not support -CC without using -E}}\
745 %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I\
746 %{MD:-MD %{!o:%b.d}%{o*:%.d%*}}\
747 %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}}\
748 %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
749 %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}}\
750 %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
751 %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
752 %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i\
755 /* This contains cpp options which are common with cc1_options and are passed
756 only when preprocessing only to avoid duplication. We pass the cc1 spec
757 options to the preprocessor so that it the cc1 spec may manipulate
758 options used to set target flags. Those special target flags settings may
759 in turn cause preprocessor symbols to be defined specially. */
760 static const char *cpp_options =
761 "%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*}\
764 /* This contains cpp options which are not passed when the preprocessor
765 output will be used by another program. */
766 static const char *cpp_debug_options = "%{d*}";
768 /* NB: This is shared amongst all front-ends. */
769 static const char *cc1_options =
770 "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
771 %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\
772 -auxbase%{c|S:%{o*:-strip %*}%{!o*: %b}}%{!c:%{!S: %b}}\
773 %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi}\
774 %{v:-version} %{pg:-p} %{p} %{f*} %{undef}\
775 %{Qn:-fno-ident} %{--help:--help}\
776 %{--target-help:--target-help}\
777 %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\
778 %{fsyntax-only:-o %j} %{-param*}";
780 static const char *asm_options =
781 "%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}";
783 static const char *invoke_as =
784 #ifdef AS_NEEDS_DASH_FOR_PIPED_INPUT
785 "%{!S:-o %|.s |\n as %(asm_options) %|.s %A }";
787 "%{!S:-o %|.s |\n as %(asm_options) %m.s %A }";
790 /* Some compilers have limits on line lengths, and the multilib_select
791 and/or multilib_matches strings can be very long, so we build them at
793 static struct obstack multilib_obstack;
794 static const char *multilib_select;
795 static const char *multilib_matches;
796 static const char *multilib_defaults;
797 static const char *multilib_exclusions;
798 #include "multilib.h"
800 /* Check whether a particular argument is a default argument. */
802 #ifndef MULTILIB_DEFAULTS
803 #define MULTILIB_DEFAULTS { "" }
806 static const char *const multilib_defaults_raw[] = MULTILIB_DEFAULTS;
808 #ifndef DRIVER_SELF_SPECS
809 #define DRIVER_SELF_SPECS ""
812 static const char *const driver_self_specs[] = { DRIVER_SELF_SPECS };
816 struct user_specs *next;
817 const char *filename;
820 static struct user_specs *user_specs_head, *user_specs_tail;
822 #ifndef SWITCH_TAKES_ARG
823 #define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR)
826 #ifndef WORD_SWITCH_TAKES_ARG
827 #define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR)
830 #ifdef HAVE_TARGET_EXECUTABLE_SUFFIX
831 /* This defines which switches stop a full compilation. */
832 #define DEFAULT_SWITCH_CURTAILS_COMPILATION(CHAR) \
833 ((CHAR) == 'c' || (CHAR) == 'S')
835 #ifndef SWITCH_CURTAILS_COMPILATION
836 #define SWITCH_CURTAILS_COMPILATION(CHAR) \
837 DEFAULT_SWITCH_CURTAILS_COMPILATION(CHAR)
841 /* Record the mapping from file suffixes for compilation specs. */
845 const char *suffix; /* Use this compiler for input files
846 whose names end in this suffix. */
848 const char *spec; /* To use this compiler, run this spec. */
850 const char *cpp_spec; /* If non-NULL, substitute this spec
851 for `%C', rather than the usual
855 /* Pointer to a vector of `struct compiler' that gives the spec for
856 compiling a file, based on its suffix.
857 A file that does not end in any of these suffixes will be passed
858 unchanged to the loader and nothing else will be done to it.
860 An entry containing two 0s is used to terminate the vector.
862 If multiple entries match a file, the last matching one is used. */
864 static struct compiler *compilers;
866 /* Number of entries in `compilers', not counting the null terminator. */
868 static int n_compilers;
870 /* The default list of file name suffixes and their compilation specs. */
872 static const struct compiler default_compilers[] =
874 /* Add lists of suffixes of known languages here. If those languages
875 were not present when we built the driver, we will hit these copies
876 and be given a more meaningful error than "file not used since
877 linking is not done". */
878 {".m", "#Objective-C", 0}, {".mi", "#Objective-C", 0},
879 {".cc", "#C++", 0}, {".cxx", "#C++", 0}, {".cpp", "#C++", 0},
880 {".cp", "#C++", 0}, {".c++", "#C++", 0}, {".C", "#C++", 0},
881 {".CPP", "#C++", 0}, {".ii", "#C++", 0},
882 {".ads", "#Ada", 0}, {".adb", "#Ada", 0},
883 {".f", "#Fortran", 0}, {".for", "#Fortran", 0}, {".fpp", "#Fortran", 0},
884 {".F", "#Fortran", 0}, {".FOR", "#Fortran", 0}, {".FPP", "#Fortran", 0},
885 {".r", "#Ratfor", 0},
886 {".p", "#Pascal", 0}, {".pas", "#Pascal", 0},
887 {".java", "#Java", 0}, {".class", "#Java", 0},
888 {".zip", "#Java", 0}, {".jar", "#Java", 0},
889 /* Next come the entries for C. */
892 /* cc1 has an integrated ISO C preprocessor. We should invoke the
893 external preprocessor if -save-temps is given. */
894 "%{E|M|MM:%(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)}\
896 %{traditional|ftraditional:\
897 %eGNU C no longer supports -traditional without -E}\
898 %{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
899 %(cpp_options) %{save-temps:%b.i} %{!save-temps:%g.i} \n\
900 cc1 -fpreprocessed %{save-temps:%b.i} %{!save-temps:%g.i} %(cc1_options)}\
901 %{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\
902 cc1 %(cpp_unique_options) %(cc1_options)}}}\
903 %{!fsyntax-only:%(invoke_as)}}}}", 0},
905 "%{!E:%e-E required when input is from standard input}\
906 %(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)", 0},
907 {".h", "@c-header", 0},
909 /* cc1 has an integrated ISO C preprocessor. We should invoke the
910 external preprocessor if -save-temps is given. */
911 "%{E|M|MM:%(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)}\
913 %{save-temps|traditional-cpp:%(trad_capable_cpp) \
914 %(cpp_options) %b.i \n\
915 cc1 -fpreprocessed %b.i %(cc1_options)\
916 -o %g.s %{!o*:--output-pch=%i.gch}\
917 %W{o*:--output-pch=%*}%V}\
918 %{!save-temps:%{!traditional-cpp:\
919 cc1 %(cpp_unique_options) %(cc1_options)\
920 -o %g.s %{!o*:--output-pch=%i.gch}\
921 %W{o*:--output-pch=%*}%V}}}}}", 0},
922 {".i", "@cpp-output", 0},
924 "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0},
925 {".s", "@assembler", 0},
927 "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0},
928 {".S", "@assembler-with-cpp", 0},
929 {"@assembler-with-cpp",
930 #ifdef AS_NEEDS_DASH_FOR_PIPED_INPUT
931 "%(trad_capable_cpp) -lang-asm %(cpp_options)\
932 %{E|M|MM:%(cpp_debug_options)}\
933 %{!M:%{!MM:%{!E:%{!S:-o %|.s |\n\
934 as %(asm_debug) %(asm_options) %|.s %A }}}}"
936 "%(trad_capable_cpp) -lang-asm %(cpp_options)\
937 %{E|M|MM:%(cpp_debug_options)}\
938 %{!M:%{!MM:%{!E:%{!S:-o %|.s |\n\
939 as %(asm_debug) %(asm_options) %m.s %A }}}}"
944 /* Mark end of table */
948 /* Number of elements in default_compilers, not counting the terminator. */
950 static const int n_default_compilers = ARRAY_SIZE (default_compilers) - 1;
952 /* A vector of options to give to the linker.
953 These options are accumulated by %x,
954 and substituted into the linker command with %X. */
955 static int n_linker_options;
956 static char **linker_options;
958 /* A vector of options to give to the assembler.
959 These options are accumulated by -Wa,
960 and substituted into the assembler command with %Y. */
961 static int n_assembler_options;
962 static char **assembler_options;
964 /* A vector of options to give to the preprocessor.
965 These options are accumulated by -Wp,
966 and substituted into the preprocessor command with %Z. */
967 static int n_preprocessor_options;
968 static char **preprocessor_options;
970 /* Define how to map long options into short ones. */
972 /* This structure describes one mapping. */
975 /* The long option's name. */
976 const char *const name;
977 /* The equivalent short option. */
978 const char *const equivalent;
979 /* Argument info. A string of flag chars; NULL equals no options.
980 a => argument required.
981 o => argument optional.
982 j => join argument to equivalent, making one word.
983 * => require other text after NAME as an argument. */
984 const char *const arg_info;
987 /* This is the table of mappings. Mappings are tried sequentially
988 for each option encountered; the first one that matches, wins. */
990 static const struct option_map option_map[] =
992 {"--all-warnings", "-Wall", 0},
993 {"--ansi", "-ansi", 0},
994 {"--assemble", "-S", 0},
995 {"--assert", "-A", "a"},
996 {"--classpath", "-fclasspath=", "aj"},
997 {"--bootclasspath", "-fbootclasspath=", "aj"},
998 {"--CLASSPATH", "-fclasspath=", "aj"},
999 {"--comments", "-C", 0},
1000 {"--comments-in-macros", "-CC", 0},
1001 {"--compile", "-c", 0},
1002 {"--debug", "-g", "oj"},
1003 {"--define-macro", "-D", "aj"},
1004 {"--dependencies", "-M", 0},
1005 {"--dump", "-d", "a"},
1006 {"--dumpbase", "-dumpbase", "a"},
1007 {"--entry", "-e", 0},
1008 {"--extra-warnings", "-W", 0},
1009 {"--for-assembler", "-Wa", "a"},
1010 {"--for-linker", "-Xlinker", "a"},
1011 {"--force-link", "-u", "a"},
1012 {"--imacros", "-imacros", "a"},
1013 {"--include", "-include", "a"},
1014 {"--include-barrier", "-I-", 0},
1015 {"--include-directory", "-I", "aj"},
1016 {"--include-directory-after", "-idirafter", "a"},
1017 {"--include-prefix", "-iprefix", "a"},
1018 {"--include-with-prefix", "-iwithprefix", "a"},
1019 {"--include-with-prefix-before", "-iwithprefixbefore", "a"},
1020 {"--include-with-prefix-after", "-iwithprefix", "a"},
1021 {"--language", "-x", "a"},
1022 {"--library-directory", "-L", "a"},
1023 {"--machine", "-m", "aj"},
1024 {"--machine-", "-m", "*j"},
1025 {"--no-integrated-cpp", "-no-integrated-cpp", 0},
1026 {"--no-line-commands", "-P", 0},
1027 {"--no-precompiled-includes", "-noprecomp", 0},
1028 {"--no-standard-includes", "-nostdinc", 0},
1029 {"--no-standard-libraries", "-nostdlib", 0},
1030 {"--no-warnings", "-w", 0},
1031 {"--optimize", "-O", "oj"},
1032 {"--output", "-o", "a"},
1033 {"--output-class-directory", "-foutput-class-dir=", "ja"},
1034 {"--param", "--param", "a"},
1035 {"--pedantic", "-pedantic", 0},
1036 {"--pedantic-errors", "-pedantic-errors", 0},
1037 {"--pipe", "-pipe", 0},
1038 {"--prefix", "-B", "a"},
1039 {"--preprocess", "-E", 0},
1040 {"--print-search-dirs", "-print-search-dirs", 0},
1041 {"--print-file-name", "-print-file-name=", "aj"},
1042 {"--print-libgcc-file-name", "-print-libgcc-file-name", 0},
1043 {"--print-missing-file-dependencies", "-MG", 0},
1044 {"--print-multi-lib", "-print-multi-lib", 0},
1045 {"--print-multi-directory", "-print-multi-directory", 0},
1046 {"--print-multi-os-directory", "-print-multi-os-directory", 0},
1047 {"--print-prog-name", "-print-prog-name=", "aj"},
1048 {"--profile", "-p", 0},
1049 {"--profile-blocks", "-a", 0},
1050 {"--quiet", "-q", 0},
1051 {"--resource", "-fcompile-resource=", "aj"},
1052 {"--save-temps", "-save-temps", 0},
1053 {"--shared", "-shared", 0},
1054 {"--silent", "-q", 0},
1055 {"--specs", "-specs=", "aj"},
1056 {"--static", "-static", 0},
1057 {"--std", "-std=", "aj"},
1058 {"--symbolic", "-symbolic", 0},
1059 {"--target", "-b", "a"},
1060 {"--time", "-time", 0},
1061 {"--trace-includes", "-H", 0},
1062 {"--traditional", "-traditional", 0},
1063 {"--traditional-cpp", "-traditional-cpp", 0},
1064 {"--trigraphs", "-trigraphs", 0},
1065 {"--undefine-macro", "-U", "aj"},
1066 {"--use-version", "-V", "a"},
1067 {"--user-dependencies", "-MM", 0},
1068 {"--verbose", "-v", 0},
1069 {"--warn-", "-W", "*j"},
1070 {"--write-dependencies", "-MD", 0},
1071 {"--write-user-dependencies", "-MMD", 0},
1076 #ifdef TARGET_OPTION_TRANSLATE_TABLE
1077 static const struct {
1078 const char *const option_found;
1079 const char *const replacements;
1080 } target_option_translations[] =
1082 TARGET_OPTION_TRANSLATE_TABLE,
1087 /* Translate the options described by *ARGCP and *ARGVP.
1088 Make a new vector and store it back in *ARGVP,
1089 and store its length in *ARGVC. */
1092 translate_options (argcp, argvp)
1094 const char *const **argvp;
1098 const char *const *argv = *argvp;
1099 int newvsize = (argc + 2) * 2 * sizeof (const char *);
1101 (const char **) xmalloc (newvsize);
1105 newv[newindex++] = argv[i++];
1109 #ifdef TARGET_OPTION_TRANSLATE_TABLE
1113 target_option_translations[tott_idx].option_found;
1116 if (strcmp (target_option_translations[tott_idx].option_found,
1123 for (sp = target_option_translations[tott_idx].replacements;
1130 newvsize += spaces * sizeof (const char *);
1131 newv = (const char **) xrealloc (newv, newvsize);
1133 sp = target_option_translations[tott_idx].replacements;
1142 newv[newindex++] = np;
1143 while (*np != ' ' && *np)
1154 if (target_option_translations[tott_idx].option_found)
1158 /* Translate -- options. */
1159 if (argv[i][0] == '-' && argv[i][1] == '-')
1162 /* Find a mapping that applies to this option. */
1163 for (j = 0; j < ARRAY_SIZE (option_map); j++)
1165 size_t optlen = strlen (option_map[j].name);
1166 size_t arglen = strlen (argv[i]);
1167 size_t complen = arglen > optlen ? optlen : arglen;
1168 const char *arginfo = option_map[j].arg_info;
1173 if (!strncmp (argv[i], option_map[j].name, complen))
1175 const char *arg = 0;
1177 if (arglen < optlen)
1180 for (k = j + 1; k < ARRAY_SIZE (option_map); k++)
1181 if (strlen (option_map[k].name) >= arglen
1182 && !strncmp (argv[i], option_map[k].name, arglen))
1184 error ("ambiguous abbreviation %s", argv[i]);
1188 if (k != ARRAY_SIZE (option_map))
1192 if (arglen > optlen)
1194 /* If the option has an argument, accept that. */
1195 if (argv[i][optlen] == '=')
1196 arg = argv[i] + optlen + 1;
1198 /* If this mapping requires extra text at end of name,
1199 accept that as "argument". */
1200 else if (strchr (arginfo, '*') != 0)
1201 arg = argv[i] + optlen;
1203 /* Otherwise, extra text at end means mismatch.
1204 Try other mappings. */
1209 else if (strchr (arginfo, '*') != 0)
1211 error ("incomplete `%s' option", option_map[j].name);
1215 /* Handle arguments. */
1216 if (strchr (arginfo, 'a') != 0)
1222 error ("missing argument to `%s' option",
1223 option_map[j].name);
1230 else if (strchr (arginfo, '*') != 0)
1232 else if (strchr (arginfo, 'o') == 0)
1235 error ("extraneous argument to `%s' option",
1236 option_map[j].name);
1240 /* Store the translation as one argv elt or as two. */
1241 if (arg != 0 && strchr (arginfo, 'j') != 0)
1242 newv[newindex++] = concat (option_map[j].equivalent, arg,
1246 newv[newindex++] = option_map[j].equivalent;
1247 newv[newindex++] = arg;
1250 newv[newindex++] = option_map[j].equivalent;
1258 /* Handle old-fashioned options--just copy them through,
1259 with their arguments. */
1260 else if (argv[i][0] == '-')
1262 const char *p = argv[i] + 1;
1266 if (SWITCH_TAKES_ARG (c) > (p[1] != 0))
1267 nskip += SWITCH_TAKES_ARG (c) - (p[1] != 0);
1268 else if (WORD_SWITCH_TAKES_ARG (p))
1269 nskip += WORD_SWITCH_TAKES_ARG (p);
1270 else if ((c == 'B' || c == 'b' || c == 'x')
1273 else if (! strcmp (p, "Xlinker"))
1275 else if (! strcmp (p, "Xpreprocessor"))
1277 else if (! strcmp (p, "Xassembler"))
1280 /* Watch out for an option at the end of the command line that
1281 is missing arguments, and avoid skipping past the end of the
1283 if (nskip + i > argc)
1288 newv[newindex++] = argv[i++];
1293 /* Ordinary operands, or +e options. */
1294 newv[newindex++] = argv[i++];
1309 /* A fully-blank line is a delimiter in the SPEC file and shouldn't
1310 be considered whitespace. */
1311 if (p[0] == '\n' && p[1] == '\n' && p[2] == '\n')
1313 else if (*p == '\n' || *p == ' ' || *p == '\t')
1327 /* Structures to keep track of prefixes to try when looking for files. */
1331 const char *prefix; /* String to prepend to the path. */
1332 struct prefix_list *next; /* Next in linked list. */
1333 int require_machine_suffix; /* Don't use without machine_suffix. */
1334 /* 2 means try both machine_suffix and just_machine_suffix. */
1335 int *used_flag_ptr; /* 1 if a file was found with this prefix. */
1336 int priority; /* Sort key - priority within list. */
1337 int os_multilib; /* 1 if OS multilib scheme should be used,
1338 0 for GCC multilib scheme. */
1343 struct prefix_list *plist; /* List of prefixes to try */
1344 int max_len; /* Max length of a prefix in PLIST */
1345 const char *name; /* Name of this list (used in config stuff) */
1348 /* List of prefixes to try when looking for executables. */
1350 static struct path_prefix exec_prefixes = { 0, 0, "exec" };
1352 /* List of prefixes to try when looking for startup (crt0) files. */
1354 static struct path_prefix startfile_prefixes = { 0, 0, "startfile" };
1356 /* List of prefixes to try when looking for include files. */
1358 static struct path_prefix include_prefixes = { 0, 0, "include" };
1360 /* Suffix to attach to directories searched for commands.
1361 This looks like `MACHINE/VERSION/'. */
1363 static const char *machine_suffix = 0;
1365 /* Suffix to attach to directories searched for commands.
1366 This is just `MACHINE/'. */
1368 static const char *just_machine_suffix = 0;
1370 /* Adjusted value of GCC_EXEC_PREFIX envvar. */
1372 static const char *gcc_exec_prefix;
1374 /* Default prefixes to attach to command names. */
1376 #ifdef CROSS_COMPILE /* Don't use these prefixes for a cross compiler. */
1377 #undef MD_EXEC_PREFIX
1378 #undef MD_STARTFILE_PREFIX
1379 #undef MD_STARTFILE_PREFIX_1
1382 /* If no prefixes defined, use the null string, which will disable them. */
1383 #ifndef MD_EXEC_PREFIX
1384 #define MD_EXEC_PREFIX ""
1386 #ifndef MD_STARTFILE_PREFIX
1387 #define MD_STARTFILE_PREFIX ""
1389 #ifndef MD_STARTFILE_PREFIX_1
1390 #define MD_STARTFILE_PREFIX_1 ""
1393 /* Supply defaults for the standard prefixes. */
1395 #ifndef STANDARD_EXEC_PREFIX
1396 #define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-lib/"
1398 #ifndef STANDARD_STARTFILE_PREFIX
1399 #define STANDARD_STARTFILE_PREFIX "/usr/local/lib/"
1401 #ifndef TOOLDIR_BASE_PREFIX
1402 #define TOOLDIR_BASE_PREFIX "/usr/local/"
1404 #ifndef STANDARD_BINDIR_PREFIX
1405 #define STANDARD_BINDIR_PREFIX "/usr/local/bin"
1408 static const char *const standard_exec_prefix = STANDARD_EXEC_PREFIX;
1409 static const char *const standard_exec_prefix_1 = "/usr/lib/gcc/";
1410 static const char *md_exec_prefix = MD_EXEC_PREFIX;
1412 static const char *md_startfile_prefix = MD_STARTFILE_PREFIX;
1413 static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
1414 static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
1415 static const char *const standard_startfile_prefix_1 = "/lib/";
1416 static const char *const standard_startfile_prefix_2 = "/usr/lib/";
1418 static const char *const tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
1419 static const char *tooldir_prefix;
1421 static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX;
1423 /* Subdirectory to use for locating libraries. Set by
1424 set_multilib_dir based on the compilation options. */
1426 static const char *multilib_dir;
1428 /* Subdirectory to use for locating libraries in OS conventions. Set by
1429 set_multilib_dir based on the compilation options. */
1431 static const char *multilib_os_dir;
1433 /* Structure to keep track of the specs that have been defined so far.
1434 These are accessed using %(specname) or %[specname] in a compiler
1439 /* The following 2 fields must be first */
1440 /* to allow EXTRA_SPECS to be initialized */
1441 const char *name; /* name of the spec. */
1442 const char *ptr; /* available ptr if no static pointer */
1444 /* The following fields are not initialized */
1445 /* by EXTRA_SPECS */
1446 const char **ptr_spec; /* pointer to the spec itself. */
1447 struct spec_list *next; /* Next spec in linked list. */
1448 int name_len; /* length of the name */
1449 int alloc_p; /* whether string was allocated */
1452 #define INIT_STATIC_SPEC(NAME,PTR) \
1453 { NAME, NULL, PTR, (struct spec_list *) 0, sizeof (NAME) - 1, 0 }
1455 /* List of statically defined specs. */
1456 static struct spec_list static_specs[] =
1458 INIT_STATIC_SPEC ("asm", &asm_spec),
1459 INIT_STATIC_SPEC ("asm_debug", &asm_debug),
1460 INIT_STATIC_SPEC ("asm_final", &asm_final_spec),
1461 INIT_STATIC_SPEC ("asm_options", &asm_options),
1462 INIT_STATIC_SPEC ("invoke_as", &invoke_as),
1463 INIT_STATIC_SPEC ("cpp", &cpp_spec),
1464 INIT_STATIC_SPEC ("cpp_options", &cpp_options),
1465 INIT_STATIC_SPEC ("cpp_debug_options", &cpp_debug_options),
1466 INIT_STATIC_SPEC ("cpp_unique_options", &cpp_unique_options),
1467 INIT_STATIC_SPEC ("trad_capable_cpp", &trad_capable_cpp),
1468 INIT_STATIC_SPEC ("cc1", &cc1_spec),
1469 INIT_STATIC_SPEC ("cc1_options", &cc1_options),
1470 INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec),
1471 INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec),
1472 INIT_STATIC_SPEC ("endfile", &endfile_spec),
1473 INIT_STATIC_SPEC ("link", &link_spec),
1474 INIT_STATIC_SPEC ("lib", &lib_spec),
1475 INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
1476 INIT_STATIC_SPEC ("startfile", &startfile_spec),
1477 INIT_STATIC_SPEC ("switches_need_spaces", &switches_need_spaces),
1478 INIT_STATIC_SPEC ("predefines", &cpp_predefines),
1479 INIT_STATIC_SPEC ("cross_compile", &cross_compile),
1480 INIT_STATIC_SPEC ("version", &compiler_version),
1481 INIT_STATIC_SPEC ("multilib", &multilib_select),
1482 INIT_STATIC_SPEC ("multilib_defaults", &multilib_defaults),
1483 INIT_STATIC_SPEC ("multilib_extra", &multilib_extra),
1484 INIT_STATIC_SPEC ("multilib_matches", &multilib_matches),
1485 INIT_STATIC_SPEC ("multilib_exclusions", &multilib_exclusions),
1486 INIT_STATIC_SPEC ("multilib_options", &multilib_options),
1487 INIT_STATIC_SPEC ("linker", &linker_name_spec),
1488 INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec),
1489 INIT_STATIC_SPEC ("md_exec_prefix", &md_exec_prefix),
1490 INIT_STATIC_SPEC ("md_startfile_prefix", &md_startfile_prefix),
1491 INIT_STATIC_SPEC ("md_startfile_prefix_1", &md_startfile_prefix_1),
1492 INIT_STATIC_SPEC ("startfile_prefix_spec", &startfile_prefix_spec),
1495 #ifdef EXTRA_SPECS /* additional specs needed */
1496 /* Structure to keep track of just the first two args of a spec_list.
1497 That is all that the EXTRA_SPECS macro gives us. */
1500 const char *const name;
1501 const char *const ptr;
1504 static const struct spec_list_1 extra_specs_1[] = { EXTRA_SPECS };
1505 static struct spec_list *extra_specs = (struct spec_list *) 0;
1508 /* List of dynamically allocates specs that have been defined so far. */
1510 static struct spec_list *specs = (struct spec_list *) 0;
1512 /* List of static spec functions. */
1514 static const struct spec_function static_spec_functions[] =
1516 { "if-exists", if_exists_spec_function },
1517 { "if-exists-else", if_exists_else_spec_function },
1521 static int processing_spec_function;
1523 /* Add appropriate libgcc specs to OBSTACK, taking into account
1524 various permutations of -shared-libgcc, -shared, and such. */
1526 #ifdef ENABLE_SHARED_LIBGCC
1528 init_gcc_specs (obstack, shared_name, static_name, eh_name)
1529 struct obstack *obstack;
1530 const char *shared_name;
1531 const char *static_name;
1532 const char *eh_name;
1536 buf = concat ("%{static|static-libgcc:", static_name, " ", eh_name,
1537 "}%{!static:%{!static-libgcc:",
1538 "%{!shared:%{!shared-libgcc:", static_name, " ",
1539 eh_name, "}%{shared-libgcc:", shared_name, " ",
1540 static_name, "}}%{shared:",
1542 "%{shared-libgcc:", shared_name,
1543 "}%{!shared-libgcc:", static_name, "}",
1549 obstack_grow (obstack, buf, strlen (buf));
1552 #endif /* ENABLE_SHARED_LIBGCC */
1554 /* Initialize the specs lookup routines. */
1559 struct spec_list *next = (struct spec_list *) 0;
1560 struct spec_list *sl = (struct spec_list *) 0;
1564 return; /* Already initialized. */
1567 notice ("Using built-in specs.\n");
1570 extra_specs = (struct spec_list *)
1571 xcalloc (sizeof (struct spec_list), ARRAY_SIZE (extra_specs_1));
1573 for (i = ARRAY_SIZE (extra_specs_1) - 1; i >= 0; i--)
1575 sl = &extra_specs[i];
1576 sl->name = extra_specs_1[i].name;
1577 sl->ptr = extra_specs_1[i].ptr;
1579 sl->name_len = strlen (sl->name);
1580 sl->ptr_spec = &sl->ptr;
1585 /* Initialize here, not in definition. The IRIX 6 O32 cc sometimes chokes
1586 on ?: in file-scope variable initializations. */
1587 asm_debug = ASM_DEBUG_SPEC;
1589 for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--)
1591 sl = &static_specs[i];
1596 #ifdef ENABLE_SHARED_LIBGCC
1597 /* ??? If neither -shared-libgcc nor --static-libgcc was
1598 seen, then we should be making an educated guess. Some proposed
1599 heuristics for ELF include:
1601 (1) If "-Wl,--export-dynamic", then it's a fair bet that the
1602 program will be doing dynamic loading, which will likely
1603 need the shared libgcc.
1605 (2) If "-ldl", then it's also a fair bet that we're doing
1608 (3) For each ET_DYN we're linking against (either through -lfoo
1609 or /some/path/foo.so), check to see whether it or one of
1610 its dependencies depends on a shared libgcc.
1614 If the runtime is fixed to look for program headers instead
1615 of calling __register_frame_info at all, for each object,
1616 use the shared libgcc if any EH symbol referenced.
1618 If crtstuff is fixed to not invoke __register_frame_info
1619 automatically, for each object, use the shared libgcc if
1620 any non-empty unwind section found.
1622 Doing any of this probably requires invoking an external program to
1623 do the actual object file scanning. */
1625 const char *p = libgcc_spec;
1628 /* Transform the extant libgcc_spec into one that uses the shared libgcc
1629 when given the proper command line arguments. */
1632 if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0)
1634 init_gcc_specs (&obstack,
1635 #ifdef NO_SHARED_LIBGCC_MULTILIB
1640 #ifdef USE_LIBUNWIND_EXCEPTIONS
1649 else if (in_sep && *p == 'l' && strncmp (p, "libgcc.a%s", 10) == 0)
1651 /* Ug. We don't know shared library extensions. Hope that
1652 systems that use this form don't do shared libraries. */
1653 init_gcc_specs (&obstack,
1654 #ifdef NO_SHARED_LIBGCC_MULTILIB
1667 obstack_1grow (&obstack, *p);
1668 in_sep = (*p == ' ');
1673 obstack_1grow (&obstack, '\0');
1674 libgcc_spec = obstack_finish (&obstack);
1677 #ifdef USE_AS_TRADITIONAL_FORMAT
1678 /* Prepend "--traditional-format" to whatever asm_spec we had before. */
1680 static const char tf[] = "--traditional-format ";
1681 obstack_grow (&obstack, tf, sizeof(tf) - 1);
1682 obstack_grow0 (&obstack, asm_spec, strlen (asm_spec));
1683 asm_spec = obstack_finish (&obstack);
1687 /* Prepend LINK_EH_SPEC to whatever link_spec we had before. */
1688 obstack_grow (&obstack, LINK_EH_SPEC, sizeof(LINK_EH_SPEC) - 1);
1689 obstack_grow0 (&obstack, link_spec, strlen (link_spec));
1690 link_spec = obstack_finish (&obstack);
1696 /* Change the value of spec NAME to SPEC. If SPEC is empty, then the spec is
1697 removed; If the spec starts with a + then SPEC is added to the end of the
1701 set_spec (name, spec)
1705 struct spec_list *sl;
1706 const char *old_spec;
1707 int name_len = strlen (name);
1710 /* If this is the first call, initialize the statically allocated specs. */
1713 struct spec_list *next = (struct spec_list *) 0;
1714 for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--)
1716 sl = &static_specs[i];
1723 /* See if the spec already exists. */
1724 for (sl = specs; sl; sl = sl->next)
1725 if (name_len == sl->name_len && !strcmp (sl->name, name))
1730 /* Not found - make it. */
1731 sl = (struct spec_list *) xmalloc (sizeof (struct spec_list));
1732 sl->name = xstrdup (name);
1733 sl->name_len = name_len;
1734 sl->ptr_spec = &sl->ptr;
1736 *(sl->ptr_spec) = "";
1741 old_spec = *(sl->ptr_spec);
1742 *(sl->ptr_spec) = ((spec[0] == '+' && ISSPACE ((unsigned char)spec[1]))
1743 ? concat (old_spec, spec + 1, NULL)
1748 notice ("Setting spec %s to '%s'\n\n", name, *(sl->ptr_spec));
1751 /* Free the old spec. */
1752 if (old_spec && sl->alloc_p)
1753 free ((PTR) old_spec);
1758 /* Accumulate a command (program name and args), and run it. */
1760 /* Vector of pointers to arguments in the current line of specifications. */
1762 static const char **argbuf;
1764 /* Number of elements allocated in argbuf. */
1766 static int argbuf_length;
1768 /* Number of elements in argbuf currently in use (containing args). */
1770 static int argbuf_index;
1772 /* This is the list of suffixes and codes (%g/%u/%U/%j) and the associated
1773 temp file. If the HOST_BIT_BUCKET is used for %j, no entry is made for
1776 static struct temp_name {
1777 const char *suffix; /* suffix associated with the code. */
1778 int length; /* strlen (suffix). */
1779 int unique; /* Indicates whether %g or %u/%U was used. */
1780 const char *filename; /* associated filename. */
1781 int filename_length; /* strlen (filename). */
1782 struct temp_name *next;
1785 /* Number of commands executed so far. */
1787 static int execution_count;
1789 /* Number of commands that exited with a signal. */
1791 static int signal_count;
1793 /* Name with which this program was invoked. */
1795 static const char *programname;
1797 /* Allocate the argument vector. */
1803 argbuf = (const char **) xmalloc (argbuf_length * sizeof (const char *));
1806 /* Clear out the vector of arguments (after a command is executed). */
1814 /* Add one argument to the vector at the end.
1815 This is done when a space is seen or at the end of the line.
1816 If DELETE_ALWAYS is nonzero, the arg is a filename
1817 and the file should be deleted eventually.
1818 If DELETE_FAILURE is nonzero, the arg is a filename
1819 and the file should be deleted if this compilation fails. */
1822 store_arg (arg, delete_always, delete_failure)
1824 int delete_always, delete_failure;
1826 if (argbuf_index + 1 == argbuf_length)
1828 = (const char **) xrealloc (argbuf,
1829 (argbuf_length *= 2) * sizeof (const char *));
1831 argbuf[argbuf_index++] = arg;
1832 argbuf[argbuf_index] = 0;
1834 if (delete_always || delete_failure)
1835 record_temp_file (arg, delete_always, delete_failure);
1838 /* Load specs from a file name named FILENAME, replacing occurrences of
1839 various different types of line-endings, \r\n, \n\r and just \r, with
1843 load_specs (filename)
1844 const char *filename;
1848 struct stat statbuf;
1855 notice ("Reading specs from %s\n", filename);
1857 /* Open and stat the file. */
1858 desc = open (filename, O_RDONLY, 0);
1860 pfatal_with_name (filename);
1861 if (stat (filename, &statbuf) < 0)
1862 pfatal_with_name (filename);
1864 /* Read contents of file into BUFFER. */
1865 buffer = xmalloc ((unsigned) statbuf.st_size + 1);
1866 readlen = read (desc, buffer, (unsigned) statbuf.st_size);
1868 pfatal_with_name (filename);
1869 buffer[readlen] = 0;
1872 specs = xmalloc (readlen + 1);
1874 for (buffer_p = buffer; buffer_p && *buffer_p; buffer_p++)
1880 if (buffer_p > buffer && *(buffer_p - 1) == '\n') /* \n\r */
1882 else if (*(buffer_p + 1) == '\n') /* \r\n */
1896 /* Read compilation specs from a file named FILENAME,
1897 replacing the default ones.
1899 A suffix which starts with `*' is a definition for
1900 one of the machine-specific sub-specs. The "suffix" should be
1901 *asm, *cc1, *cpp, *link, *startfile, etc.
1902 The corresponding spec is stored in asm_spec, etc.,
1903 rather than in the `compilers' vector.
1905 Anything invalid in the file is a fatal error. */
1908 read_specs (filename, main_p)
1909 const char *filename;
1915 buffer = load_specs (filename);
1917 /* Scan BUFFER for specs, putting them in the vector. */
1923 char *in, *out, *p1, *p2, *p3;
1925 /* Advance P in BUFFER to the next nonblank nocomment line. */
1926 p = skip_whitespace (p);
1930 /* Is this a special command that starts with '%'? */
1931 /* Don't allow this for the main specs file, since it would
1932 encourage people to overwrite it. */
1933 if (*p == '%' && !main_p)
1936 while (*p && *p != '\n')
1942 if (!strncmp (p1, "%include", sizeof ("%include") - 1)
1943 && (p1[sizeof "%include" - 1] == ' '
1944 || p1[sizeof "%include" - 1] == '\t'))
1948 p1 += sizeof ("%include");
1949 while (*p1 == ' ' || *p1 == '\t')
1952 if (*p1++ != '<' || p[-2] != '>')
1953 fatal ("specs %%include syntax malformed after %ld characters",
1954 (long) (p1 - buffer + 1));
1957 new_filename = find_a_file (&startfile_prefixes, p1, R_OK, 0);
1958 read_specs (new_filename ? new_filename : p1, FALSE);
1961 else if (!strncmp (p1, "%include_noerr", sizeof "%include_noerr" - 1)
1962 && (p1[sizeof "%include_noerr" - 1] == ' '
1963 || p1[sizeof "%include_noerr" - 1] == '\t'))
1967 p1 += sizeof "%include_noerr";
1968 while (*p1 == ' ' || *p1 == '\t')
1971 if (*p1++ != '<' || p[-2] != '>')
1972 fatal ("specs %%include syntax malformed after %ld characters",
1973 (long) (p1 - buffer + 1));
1976 new_filename = find_a_file (&startfile_prefixes, p1, R_OK, 0);
1978 read_specs (new_filename, FALSE);
1979 else if (verbose_flag)
1980 notice ("could not find specs file %s\n", p1);
1983 else if (!strncmp (p1, "%rename", sizeof "%rename" - 1)
1984 && (p1[sizeof "%rename" - 1] == ' '
1985 || p1[sizeof "%rename" - 1] == '\t'))
1988 struct spec_list *sl;
1989 struct spec_list *newsl;
1991 /* Get original name. */
1992 p1 += sizeof "%rename";
1993 while (*p1 == ' ' || *p1 == '\t')
1996 if (! ISALPHA ((unsigned char) *p1))
1997 fatal ("specs %%rename syntax malformed after %ld characters",
1998 (long) (p1 - buffer));
2001 while (*p2 && !ISSPACE ((unsigned char) *p2))
2004 if (*p2 != ' ' && *p2 != '\t')
2005 fatal ("specs %%rename syntax malformed after %ld characters",
2006 (long) (p2 - buffer));
2010 while (*p2 == ' ' || *p2 == '\t')
2013 if (! ISALPHA ((unsigned char) *p2))
2014 fatal ("specs %%rename syntax malformed after %ld characters",
2015 (long) (p2 - buffer));
2017 /* Get new spec name. */
2019 while (*p3 && !ISSPACE ((unsigned char) *p3))
2023 fatal ("specs %%rename syntax malformed after %ld characters",
2024 (long) (p3 - buffer));
2027 for (sl = specs; sl; sl = sl->next)
2028 if (name_len == sl->name_len && !strcmp (sl->name, p1))
2032 fatal ("specs %s spec was not found to be renamed", p1);
2034 if (strcmp (p1, p2) == 0)
2037 for (newsl = specs; newsl; newsl = newsl->next)
2038 if (strcmp (newsl->name, p2) == 0)
2039 fatal ("%s: attempt to rename spec '%s' to already defined spec '%s'",
2044 notice ("rename spec %s to %s\n", p1, p2);
2046 notice ("spec is '%s'\n\n", *(sl->ptr_spec));
2050 set_spec (p2, *(sl->ptr_spec));
2052 free ((PTR) *(sl->ptr_spec));
2054 *(sl->ptr_spec) = "";
2059 fatal ("specs unknown %% command after %ld characters",
2060 (long) (p1 - buffer));
2063 /* Find the colon that should end the suffix. */
2065 while (*p1 && *p1 != ':' && *p1 != '\n')
2068 /* The colon shouldn't be missing. */
2070 fatal ("specs file malformed after %ld characters",
2071 (long) (p1 - buffer));
2073 /* Skip back over trailing whitespace. */
2075 while (p2 > buffer && (p2[-1] == ' ' || p2[-1] == '\t'))
2078 /* Copy the suffix to a string. */
2079 suffix = save_string (p, p2 - p);
2080 /* Find the next line. */
2081 p = skip_whitespace (p1 + 1);
2083 fatal ("specs file malformed after %ld characters",
2084 (long) (p - buffer));
2087 /* Find next blank line or end of string. */
2088 while (*p1 && !(*p1 == '\n' && (p1[1] == '\n' || p1[1] == '\0')))
2091 /* Specs end at the blank line and do not include the newline. */
2092 spec = save_string (p, p1 - p);
2095 /* Delete backslash-newline sequences from the spec. */
2100 if (in[0] == '\\' && in[1] == '\n')
2102 else if (in[0] == '#')
2103 while (*in && *in != '\n')
2111 if (suffix[0] == '*')
2113 if (! strcmp (suffix, "*link_command"))
2114 link_command_spec = spec;
2116 set_spec (suffix + 1, spec);
2120 /* Add this pair to the vector. */
2122 = ((struct compiler *)
2123 xrealloc (compilers,
2124 (n_compilers + 2) * sizeof (struct compiler)));
2126 compilers[n_compilers].suffix = suffix;
2127 compilers[n_compilers].spec = spec;
2129 memset (&compilers[n_compilers], 0, sizeof compilers[n_compilers]);
2133 link_command_spec = spec;
2136 if (link_command_spec == 0)
2137 fatal ("spec file has no spec for linking");
2140 /* Record the names of temporary files we tell compilers to write,
2141 and delete them at the end of the run. */
2143 /* This is the common prefix we use to make temp file names.
2144 It is chosen once for each run of this program.
2145 It is substituted into a spec by %g or %j.
2146 Thus, all temp file names contain this prefix.
2147 In practice, all temp file names start with this prefix.
2149 This prefix comes from the envvar TMPDIR if it is defined;
2150 otherwise, from the P_tmpdir macro if that is defined;
2151 otherwise, in /usr/tmp or /tmp;
2152 or finally the current directory if all else fails. */
2154 static const char *temp_filename;
2156 /* Length of the prefix. */
2158 static int temp_filename_length;
2160 /* Define the list of temporary files to delete. */
2165 struct temp_file *next;
2168 /* Queue of files to delete on success or failure of compilation. */
2169 static struct temp_file *always_delete_queue;
2170 /* Queue of files to delete on failure of compilation. */
2171 static struct temp_file *failure_delete_queue;
2173 /* Record FILENAME as a file to be deleted automatically.
2174 ALWAYS_DELETE nonzero means delete it if all compilation succeeds;
2175 otherwise delete it in any case.
2176 FAIL_DELETE nonzero means delete it if a compilation step fails;
2177 otherwise delete it in any case. */
2180 record_temp_file (filename, always_delete, fail_delete)
2181 const char *filename;
2185 char *const name = xstrdup (filename);
2189 struct temp_file *temp;
2190 for (temp = always_delete_queue; temp; temp = temp->next)
2191 if (! strcmp (name, temp->name))
2194 temp = (struct temp_file *) xmalloc (sizeof (struct temp_file));
2195 temp->next = always_delete_queue;
2197 always_delete_queue = temp;
2204 struct temp_file *temp;
2205 for (temp = failure_delete_queue; temp; temp = temp->next)
2206 if (! strcmp (name, temp->name))
2209 temp = (struct temp_file *) xmalloc (sizeof (struct temp_file));
2210 temp->next = failure_delete_queue;
2212 failure_delete_queue = temp;
2218 /* Delete all the temporary files whose names we previously recorded. */
2221 delete_if_ordinary (name)
2228 printf ("Delete %s? (y or n) ", name);
2232 while ((c = getchar ()) != '\n' && c != EOF)
2235 if (i == 'y' || i == 'Y')
2237 if (stat (name, &st) >= 0 && S_ISREG (st.st_mode))
2238 if (unlink (name) < 0)
2240 perror_with_name (name);
2244 delete_temp_files ()
2246 struct temp_file *temp;
2248 for (temp = always_delete_queue; temp; temp = temp->next)
2249 delete_if_ordinary (temp->name);
2250 always_delete_queue = 0;
2253 /* Delete all the files to be deleted on error. */
2256 delete_failure_queue ()
2258 struct temp_file *temp;
2260 for (temp = failure_delete_queue; temp; temp = temp->next)
2261 delete_if_ordinary (temp->name);
2265 clear_failure_queue ()
2267 failure_delete_queue = 0;
2270 /* Build a list of search directories from PATHS.
2271 PREFIX is a string to prepend to the list.
2272 If CHECK_DIR_P is nonzero we ensure the directory exists.
2273 This is used mostly by putenv_from_prefixes so we use `collect_obstack'.
2274 It is also used by the --print-search-dirs flag. */
2277 build_search_list (paths, prefix, check_dir_p)
2278 struct path_prefix *paths;
2282 int suffix_len = (machine_suffix) ? strlen (machine_suffix) : 0;
2284 = (just_machine_suffix) ? strlen (just_machine_suffix) : 0;
2285 int first_time = TRUE;
2286 struct prefix_list *pprefix;
2288 obstack_grow (&collect_obstack, prefix, strlen (prefix));
2289 obstack_1grow (&collect_obstack, '=');
2291 for (pprefix = paths->plist; pprefix != 0; pprefix = pprefix->next)
2293 int len = strlen (pprefix->prefix);
2297 || is_directory (pprefix->prefix, machine_suffix, 0)))
2300 obstack_1grow (&collect_obstack, PATH_SEPARATOR);
2303 obstack_grow (&collect_obstack, pprefix->prefix, len);
2304 obstack_grow (&collect_obstack, machine_suffix, suffix_len);
2307 if (just_machine_suffix
2308 && pprefix->require_machine_suffix == 2
2310 || is_directory (pprefix->prefix, just_machine_suffix, 0)))
2313 obstack_1grow (&collect_obstack, PATH_SEPARATOR);
2316 obstack_grow (&collect_obstack, pprefix->prefix, len);
2317 obstack_grow (&collect_obstack, just_machine_suffix,
2321 if (! pprefix->require_machine_suffix)
2324 obstack_1grow (&collect_obstack, PATH_SEPARATOR);
2327 obstack_grow (&collect_obstack, pprefix->prefix, len);
2331 obstack_1grow (&collect_obstack, '\0');
2332 return obstack_finish (&collect_obstack);
2335 /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
2339 putenv_from_prefixes (paths, env_var)
2340 struct path_prefix *paths;
2341 const char *env_var;
2343 putenv (build_search_list (paths, env_var, 1));
2346 /* Check whether NAME can be accessed in MODE. This is like access,
2347 except that it never considers directories to be executable. */
2350 access_check (name, mode)
2358 if (stat (name, &st) < 0
2359 || S_ISDIR (st.st_mode))
2363 return access (name, mode);
2366 /* Search for NAME using the prefix list PREFIXES. MODE is passed to
2367 access to check permissions.
2368 Return 0 if not found, otherwise return its name, allocated with malloc. */
2371 find_a_file (pprefix, name, mode, multilib)
2372 struct path_prefix *pprefix;
2377 const char *const file_suffix =
2378 ((mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "");
2379 struct prefix_list *pl;
2380 int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1;
2381 const char *multilib_name, *multilib_os_name;
2383 #ifdef DEFAULT_ASSEMBLER
2384 if (! strcmp (name, "as") && access (DEFAULT_ASSEMBLER, mode) == 0)
2385 return xstrdup (DEFAULT_ASSEMBLER);
2388 #ifdef DEFAULT_LINKER
2389 if (! strcmp(name, "ld") && access (DEFAULT_LINKER, mode) == 0)
2390 return xstrdup (DEFAULT_LINKER);
2394 len += strlen (machine_suffix);
2396 multilib_name = name;
2397 multilib_os_name = name;
2398 if (multilib && multilib_os_dir)
2400 int len1 = multilib_dir ? strlen (multilib_dir) + 1 : 0;
2401 int len2 = strlen (multilib_os_dir) + 1;
2403 len += len1 > len2 ? len1 : len2;
2405 multilib_name = ACONCAT ((multilib_dir, dir_separator_str, name,
2407 if (strcmp (multilib_os_dir, ".") != 0)
2408 multilib_os_name = ACONCAT ((multilib_os_dir, dir_separator_str, name,
2412 temp = xmalloc (len);
2414 /* Determine the filename to execute (special case for absolute paths). */
2416 if (IS_ABSOLUTE_PATHNAME (name))
2418 if (access (name, mode) == 0)
2420 strcpy (temp, name);
2425 for (pl = pprefix->plist; pl; pl = pl->next)
2427 const char *this_name
2428 = pl->os_multilib ? multilib_os_name : multilib_name;
2432 /* Some systems have a suffix for executable files.
2433 So try appending that first. */
2434 if (file_suffix[0] != 0)
2436 strcpy (temp, pl->prefix);
2437 strcat (temp, machine_suffix);
2438 strcat (temp, multilib_name);
2439 strcat (temp, file_suffix);
2440 if (access_check (temp, mode) == 0)
2442 if (pl->used_flag_ptr != 0)
2443 *pl->used_flag_ptr = 1;
2448 /* Now try just the multilib_name. */
2449 strcpy (temp, pl->prefix);
2450 strcat (temp, machine_suffix);
2451 strcat (temp, multilib_name);
2452 if (access_check (temp, mode) == 0)
2454 if (pl->used_flag_ptr != 0)
2455 *pl->used_flag_ptr = 1;
2460 /* Certain prefixes are tried with just the machine type,
2461 not the version. This is used for finding as, ld, etc. */
2462 if (just_machine_suffix && pl->require_machine_suffix == 2)
2464 /* Some systems have a suffix for executable files.
2465 So try appending that first. */
2466 if (file_suffix[0] != 0)
2468 strcpy (temp, pl->prefix);
2469 strcat (temp, just_machine_suffix);
2470 strcat (temp, multilib_name);
2471 strcat (temp, file_suffix);
2472 if (access_check (temp, mode) == 0)
2474 if (pl->used_flag_ptr != 0)
2475 *pl->used_flag_ptr = 1;
2480 strcpy (temp, pl->prefix);
2481 strcat (temp, just_machine_suffix);
2482 strcat (temp, multilib_name);
2483 if (access_check (temp, mode) == 0)
2485 if (pl->used_flag_ptr != 0)
2486 *pl->used_flag_ptr = 1;
2491 /* Certain prefixes can't be used without the machine suffix
2492 when the machine or version is explicitly specified. */
2493 if (! pl->require_machine_suffix)
2495 /* Some systems have a suffix for executable files.
2496 So try appending that first. */
2497 if (file_suffix[0] != 0)
2499 strcpy (temp, pl->prefix);
2500 strcat (temp, this_name);
2501 strcat (temp, file_suffix);
2502 if (access_check (temp, mode) == 0)
2504 if (pl->used_flag_ptr != 0)
2505 *pl->used_flag_ptr = 1;
2510 strcpy (temp, pl->prefix);
2511 strcat (temp, this_name);
2512 if (access_check (temp, mode) == 0)
2514 if (pl->used_flag_ptr != 0)
2515 *pl->used_flag_ptr = 1;
2525 /* Ranking of prefixes in the sort list. -B prefixes are put before
2528 enum path_prefix_priority
2530 PREFIX_PRIORITY_B_OPT,
2531 PREFIX_PRIORITY_LAST
2534 /* Add an entry for PREFIX in PLIST. The PLIST is kept in ascending
2535 order according to PRIORITY. Within each PRIORITY, new entries are
2538 If WARN is nonzero, we will warn if no file is found
2539 through this prefix. WARN should point to an int
2540 which will be set to 1 if this entry is used.
2542 COMPONENT is the value to be passed to update_path.
2544 REQUIRE_MACHINE_SUFFIX is 1 if this prefix can't be used without
2545 the complete value of machine_suffix.
2546 2 means try both machine_suffix and just_machine_suffix. */
2549 add_prefix (pprefix, prefix, component, priority, require_machine_suffix,
2551 struct path_prefix *pprefix;
2553 const char *component;
2554 /* enum prefix_priority */ int priority;
2555 int require_machine_suffix;
2559 struct prefix_list *pl, **prev;
2562 for (prev = &pprefix->plist;
2563 (*prev) != NULL && (*prev)->priority <= priority;
2564 prev = &(*prev)->next)
2567 /* Keep track of the longest prefix */
2569 prefix = update_path (prefix, component);
2570 len = strlen (prefix);
2571 if (len > pprefix->max_len)
2572 pprefix->max_len = len;
2574 pl = (struct prefix_list *) xmalloc (sizeof (struct prefix_list));
2575 pl->prefix = prefix;
2576 pl->require_machine_suffix = require_machine_suffix;
2577 pl->used_flag_ptr = warn;
2578 pl->priority = priority;
2579 pl->os_multilib = os_multilib;
2583 /* Insert after PREV */
2588 /* Same as add_prefix, but prepending target_system_root to prefix. */
2590 add_sysrooted_prefix (pprefix, prefix, component, priority,
2591 require_machine_suffix, warn, os_multilib)
2592 struct path_prefix *pprefix;
2594 const char *component;
2595 /* enum prefix_priority */ int priority;
2596 int require_machine_suffix;
2600 if (!IS_ABSOLUTE_PATHNAME (prefix))
2603 if (target_system_root)
2605 prefix = concat (target_system_root, prefix, NULL);
2606 /* We have to override this because GCC's notion of sysroot
2607 moves along with GCC. */
2611 add_prefix (pprefix, prefix, component, priority,
2612 require_machine_suffix, warn, os_multilib);
2615 /* Execute the command specified by the arguments on the current line of spec.
2616 When using pipes, this includes several piped-together commands
2617 with `|' between them.
2619 Return 0 if successful, -1 if failed. */
2625 int n_commands; /* # of command. */
2629 const char *prog; /* program name. */
2630 const char **argv; /* vector of args. */
2631 int pid; /* pid of process for this command. */
2634 struct command *commands; /* each command buffer with above info. */
2636 if (processing_spec_function)
2639 /* Count # of piped commands. */
2640 for (n_commands = 1, i = 0; i < argbuf_index; i++)
2641 if (strcmp (argbuf[i], "|") == 0)
2644 /* Get storage for each command. */
2645 commands = (struct command *) alloca (n_commands * sizeof (struct command));
2647 /* Split argbuf into its separate piped processes,
2648 and record info about each one.
2649 Also search for the programs that are to be run. */
2651 commands[0].prog = argbuf[0]; /* first command. */
2652 commands[0].argv = &argbuf[0];
2653 string = find_a_file (&exec_prefixes, commands[0].prog, X_OK, 0);
2656 commands[0].argv[0] = string;
2658 for (n_commands = 1, i = 0; i < argbuf_index; i++)
2659 if (strcmp (argbuf[i], "|") == 0)
2660 { /* each command. */
2661 #if defined (__MSDOS__) || defined (OS2) || defined (VMS)
2662 fatal ("-pipe not supported");
2664 argbuf[i] = 0; /* termination of command args. */
2665 commands[n_commands].prog = argbuf[i + 1];
2666 commands[n_commands].argv = &argbuf[i + 1];
2667 string = find_a_file (&exec_prefixes, commands[n_commands].prog,
2670 commands[n_commands].argv[0] = string;
2674 argbuf[argbuf_index] = 0;
2676 /* If -v, print what we are about to do, and maybe query. */
2680 /* For help listings, put a blank line between sub-processes. */
2681 if (print_help_list)
2682 fputc ('\n', stderr);
2684 /* Print each piped command as a separate line. */
2685 for (i = 0; i < n_commands; i++)
2687 const char *const *j;
2689 if (verbose_only_flag)
2691 for (j = commands[i].argv; *j; j++)
2694 fprintf (stderr, " \"");
2695 for (p = *j; *p; ++p)
2697 if (*p == '"' || *p == '\\' || *p == '$')
2698 fputc ('\\', stderr);
2701 fputc ('"', stderr);
2705 for (j = commands[i].argv; *j; j++)
2706 fprintf (stderr, " %s", *j);
2708 /* Print a pipe symbol after all but the last command. */
2709 if (i + 1 != n_commands)
2710 fprintf (stderr, " |");
2711 fprintf (stderr, "\n");
2714 if (verbose_only_flag != 0)
2717 notice ("\nGo ahead? (y or n) ");
2721 while (getchar () != '\n')
2724 if (i != 'y' && i != 'Y')
2729 #ifdef ENABLE_VALGRIND_CHECKING
2730 /* Run the each command through valgrind. To simplify prepending the
2731 path to valgrind and the option "-q" (for quiet operation unless
2732 something triggers), we allocate a separate argv array. */
2734 for (i = 0; i < n_commands; i++)
2740 for (argc = 0; commands[i].argv[argc] != NULL; argc++)
2743 argv = alloca ((argc + 3) * sizeof (char *));
2745 argv[0] = VALGRIND_PATH;
2747 for (j = 2; j < argc + 2; j++)
2748 argv[j] = commands[i].argv[j - 2];
2751 commands[i].argv = argv;
2752 commands[i].prog = argv[0];
2756 /* Run each piped subprocess. */
2758 for (i = 0; i < n_commands; i++)
2760 char *errmsg_fmt, *errmsg_arg;
2761 const char *string = commands[i].argv[0];
2763 /* For some bizarre reason, the second argument of execvp() is
2764 char *const *, not const char *const *. */
2765 commands[i].pid = pexecute (string, (char *const *) commands[i].argv,
2766 programname, temp_filename,
2767 &errmsg_fmt, &errmsg_arg,
2768 ((i == 0 ? PEXECUTE_FIRST : 0)
2769 | (i + 1 == n_commands ? PEXECUTE_LAST : 0)
2770 | (string == commands[i].prog
2771 ? PEXECUTE_SEARCH : 0)
2772 | (verbose_flag ? PEXECUTE_VERBOSE : 0)));
2774 if (commands[i].pid == -1)
2775 pfatal_pexecute (errmsg_fmt, errmsg_arg);
2777 if (string != commands[i].prog)
2778 free ((PTR) string);
2783 /* Wait for all the subprocesses to finish.
2784 We don't care what order they finish in;
2785 we know that N_COMMANDS waits will get them all.
2786 Ignore subprocesses that we don't know about,
2787 since they can be spawned by the process that exec'ed us. */
2791 #ifdef HAVE_GETRUSAGE
2793 double ut = 0.0, st = 0.0;
2796 for (i = 0; i < n_commands;)
2802 pid = pwait (commands[i].pid, &status, 0);
2806 #ifdef HAVE_GETRUSAGE
2809 /* getrusage returns the total resource usage of all children
2810 up to now. Copy the previous values into prus, get the
2811 current statistics, then take the difference. */
2814 getrusage (RUSAGE_CHILDREN, &rus);
2815 d.tv_sec = rus.ru_utime.tv_sec - prus.ru_utime.tv_sec;
2816 d.tv_usec = rus.ru_utime.tv_usec - prus.ru_utime.tv_usec;
2817 ut = (double) d.tv_sec + (double) d.tv_usec / 1.0e6;
2819 d.tv_sec = rus.ru_stime.tv_sec - prus.ru_stime.tv_sec;
2820 d.tv_usec = rus.ru_stime.tv_usec - prus.ru_stime.tv_usec;
2821 st = (double) d.tv_sec + (double) d.tv_usec / 1.0e6;
2825 for (j = 0; j < n_commands; j++)
2826 if (commands[j].pid == pid)
2829 if (WIFSIGNALED (status))
2832 /* SIGPIPE is a special case. It happens in -pipe mode
2833 when the compiler dies before the preprocessor is
2834 done, or the assembler dies before the compiler is
2835 done. There's generally been an error already, and
2836 this is just fallout. So don't generate another error
2837 unless we would otherwise have succeeded. */
2838 if (WTERMSIG (status) == SIGPIPE
2839 && (signal_count || greatest_status >= MIN_FATAL_STATUS))
2844 Internal error: %s (program %s)\n\
2845 Please submit a full bug report.\n\
2846 See %s for instructions.",
2847 strsignal (WTERMSIG (status)), commands[j].prog,
2852 else if (WIFEXITED (status)
2853 && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
2855 if (WEXITSTATUS (status) > greatest_status)
2856 greatest_status = WEXITSTATUS (status);
2859 #ifdef HAVE_GETRUSAGE
2860 if (report_times && ut + st != 0)
2861 notice ("# %s %.2f %.2f\n", commands[j].prog, ut, st);
2870 /* Find all the switches given to us
2871 and make a vector describing them.
2872 The elements of the vector are strings, one per switch given.
2873 If a switch uses following arguments, then the `part1' field
2874 is the switch itself and the `args' field
2875 is a null-terminated vector containing the following arguments.
2876 The `live_cond' field is:
2878 1 if the switch is true in a conditional spec,
2879 -1 if false (overridden by a later switch)
2880 -2 if this switch should be ignored (used in %<S)
2881 The `validated' field is nonzero if any spec has looked at this switch;
2882 if it remains zero at the end of the run, it must be meaningless. */
2885 #define SWITCH_FALSE -1
2886 #define SWITCH_IGNORE -2
2887 #define SWITCH_LIVE 1
2894 unsigned char validated;
2895 unsigned char ordering;
2898 static struct switchstr *switches;
2900 static int n_switches;
2905 const char *language;
2908 /* Also a vector of input files specified. */
2910 static struct infile *infiles;
2914 /* This counts the number of libraries added by lang_specific_driver, so that
2915 we can tell if there were any user supplied any files or libraries. */
2917 static int added_libraries;
2919 /* And a vector of corresponding output files is made up later. */
2921 const char **outfiles;
2923 /* Used to track if none of the -B paths are used. */
2926 /* Gives value to pass as "warn" to add_prefix for standard prefixes. */
2927 static int *warn_std_ptr = 0;
2929 #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
2931 /* Convert NAME to a new name if it is the standard suffix. DO_EXE
2932 is true if we should look for an executable suffix. DO_OBJ
2933 is true if we should look for an object suffix. */
2936 convert_filename (name, do_exe, do_obj)
2938 int do_exe ATTRIBUTE_UNUSED;
2939 int do_obj ATTRIBUTE_UNUSED;
2941 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
2949 len = strlen (name);
2951 #ifdef HAVE_TARGET_OBJECT_SUFFIX
2952 /* Convert x.o to x.obj if TARGET_OBJECT_SUFFIX is ".obj". */
2953 if (do_obj && len > 2
2954 && name[len - 2] == '.'
2955 && name[len - 1] == 'o')
2957 obstack_grow (&obstack, name, len - 2);
2958 obstack_grow0 (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX));
2959 name = obstack_finish (&obstack);
2963 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
2964 /* If there is no filetype, make it the executable suffix (which includes
2965 the "."). But don't get confused if we have just "-o". */
2966 if (! do_exe || TARGET_EXECUTABLE_SUFFIX[0] == 0 || (len == 2 && name[0] == '-'))
2969 for (i = len - 1; i >= 0; i--)
2970 if (IS_DIR_SEPARATOR (name[i]))
2973 for (i++; i < len; i++)
2977 obstack_grow (&obstack, name, len);
2978 obstack_grow0 (&obstack, TARGET_EXECUTABLE_SUFFIX,
2979 strlen (TARGET_EXECUTABLE_SUFFIX));
2980 name = obstack_finish (&obstack);
2987 /* Display the command line switches accepted by gcc. */
2991 printf (_("Usage: %s [options] file...\n"), programname);
2992 fputs (_("Options:\n"), stdout);
2994 fputs (_(" -pass-exit-codes Exit with highest error code from a phase\n"), stdout);
2995 fputs (_(" --help Display this information\n"), stdout);
2996 fputs (_(" --target-help Display target specific command line options\n"), stdout);
2998 fputs (_(" (Use '-v --help' to display command line options of sub-processes)\n"), stdout);
2999 fputs (_(" -dumpspecs Display all of the built in spec strings\n"), stdout);
3000 fputs (_(" -dumpversion Display the version of the compiler\n"), stdout);
3001 fputs (_(" -dumpmachine Display the compiler's target processor\n"), stdout);
3002 fputs (_(" -print-search-dirs Display the directories in the compiler's search path\n"), stdout);
3003 fputs (_(" -print-libgcc-file-name Display the name of the compiler's companion library\n"), stdout);
3004 fputs (_(" -print-file-name=<lib> Display the full path to library <lib>\n"), stdout);
3005 fputs (_(" -print-prog-name=<prog> Display the full path to compiler component <prog>\n"), stdout);
3006 fputs (_(" -print-multi-directory Display the root directory for versions of libgcc\n"), stdout);
3008 -print-multi-lib Display the mapping between command line options and\n\
3009 multiple library search directories\n"), stdout);
3010 fputs (_(" -print-multi-os-directory Display the relative path to OS libraries\n"), stdout);
3011 fputs (_(" -Wa,<options> Pass comma-separated <options> on to the assembler\n"), stdout);
3012 fputs (_(" -Wp,<options> Pass comma-separated <options> on to the preprocessor\n"), stdout);
3013 fputs (_(" -Wl,<options> Pass comma-separated <options> on to the linker\n"), stdout);
3014 fputs (_(" -Xassembler <arg> Pass <arg> on to the assembler\n"), stdout);
3015 fputs (_(" -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n"), stdout);
3016 fputs (_(" -Xlinker <arg> Pass <arg> on to the linker\n"), stdout);
3017 fputs (_(" -save-temps Do not delete intermediate files\n"), stdout);
3018 fputs (_(" -pipe Use pipes rather than intermediate files\n"), stdout);
3019 fputs (_(" -time Time the execution of each subprocess\n"), stdout);
3020 fputs (_(" -specs=<file> Override built-in specs with the contents of <file>\n"), stdout);
3021 fputs (_(" -std=<standard> Assume that the input sources are for <standard>\n"), stdout);
3022 fputs (_(" -B <directory> Add <directory> to the compiler's search paths\n"), stdout);
3023 fputs (_(" -b <machine> Run gcc for target <machine>, if installed\n"), stdout);
3024 fputs (_(" -V <version> Run gcc version number <version>, if installed\n"), stdout);
3025 fputs (_(" -v Display the programs invoked by the compiler\n"), stdout);
3026 fputs (_(" -### Like -v but options quoted and commands not executed\n"), stdout);
3027 fputs (_(" -E Preprocess only; do not compile, assemble or link\n"), stdout);
3028 fputs (_(" -S Compile only; do not assemble or link\n"), stdout);
3029 fputs (_(" -c Compile and assemble, but do not link\n"), stdout);
3030 fputs (_(" -o <file> Place the output into <file>\n"), stdout);
3032 -x <language> Specify the language of the following input files\n\
3033 Permissable languages include: c c++ assembler none\n\
3034 'none' means revert to the default behavior of\n\
3035 guessing the language based on the file's extension\n\
3039 \nOptions starting with -g, -f, -m, -O, -W, or --param are automatically\n\
3040 passed on to the various sub-processes invoked by %s. In order to pass\n\
3041 other options on to these processes the -W<letter> options must be used.\n\
3044 /* The rest of the options are displayed by invocations of the various
3049 add_preprocessor_option (option, len)
3053 n_preprocessor_options++;
3055 if (! preprocessor_options)
3056 preprocessor_options
3057 = (char **) xmalloc (n_preprocessor_options * sizeof (char *));
3059 preprocessor_options
3060 = (char **) xrealloc (preprocessor_options,
3061 n_preprocessor_options * sizeof (char *));
3063 preprocessor_options [n_preprocessor_options - 1] =
3064 save_string (option, len);
3068 add_assembler_option (option, len)
3072 n_assembler_options++;
3074 if (! assembler_options)
3076 = (char **) xmalloc (n_assembler_options * sizeof (char *));
3079 = (char **) xrealloc (assembler_options,
3080 n_assembler_options * sizeof (char *));
3082 assembler_options [n_assembler_options - 1] = save_string (option, len);
3086 add_linker_option (option, len)
3092 if (! linker_options)
3094 = (char **) xmalloc (n_linker_options * sizeof (char *));
3097 = (char **) xrealloc (linker_options,
3098 n_linker_options * sizeof (char *));
3100 linker_options [n_linker_options - 1] = save_string (option, len);
3103 /* Create the vector `switches' and its contents.
3104 Store its length in `n_switches'. */
3107 process_command (argc, argv)
3109 const char *const *argv;
3114 const char *spec_lang = 0;
3115 int last_language_n_infiles;
3118 int lang_n_infiles = 0;
3119 #ifdef MODIFY_TARGET_NAME
3120 int is_modify_target_name;
3124 GET_ENVIRONMENT (gcc_exec_prefix, "GCC_EXEC_PREFIX");
3128 added_libraries = 0;
3130 /* Figure compiler version from version string. */
3132 compiler_version = temp1 = xstrdup (version_string);
3134 for (; *temp1; ++temp1)
3143 /* If there is a -V or -b option (or both), process it now, before
3144 trying to interpret the rest of the command line. */
3145 /* Use heuristic that all configuration names must have at least one dash '-'.
3146 This allows to pass options that start with -b. */
3147 if (argc > 1 && argv[1][0] == '-'
3148 && (argv[1][1] == 'V'
3149 || (argv[1][1] == 'b' && strchr (argv[1] + 2, '-') != NULL)))
3151 const char *new_version = DEFAULT_TARGET_VERSION;
3152 const char *new_machine = DEFAULT_TARGET_MACHINE;
3153 const char *progname = argv[0];
3158 while (argc > 1 && argv[1][0] == '-'
3159 && (argv[1][1] == 'V' || argv[1][1] == 'b'))
3161 char opt = argv[1][1];
3163 if (argv[1][2] != '\0')
3176 fatal ("`-%c' option must have argument", opt);
3183 for (baselen = strlen (progname); baselen > 0; baselen--)
3184 if (IS_DIR_SEPARATOR (progname[baselen-1]))
3186 new_argv0 = xmemdup (progname, baselen,
3187 baselen + concat_length (new_version, new_machine,
3188 "-gcc-", NULL) + 1);
3189 strcpy (new_argv0 + baselen, new_machine);
3190 strcat (new_argv0, "-gcc-");
3191 strcat (new_argv0, new_version);
3193 new_argv = xmemdup (argv, (argc + 1) * sizeof (argv[0]),
3194 (argc + 1) * sizeof (argv[0]));
3195 new_argv[0] = new_argv0;
3197 execvp (new_argv0, new_argv);
3198 fatal ("couldn't run `%s': %s", new_argv0, xstrerror (errno));
3201 /* Set up the default search paths. If there is no GCC_EXEC_PREFIX,
3202 see if we can create it from the pathname specified in argv[0]. */
3205 /* FIXME: make_relative_prefix doesn't yet work for VMS. */
3206 if (!gcc_exec_prefix)
3208 gcc_exec_prefix = make_relative_prefix (argv[0], standard_bindir_prefix,
3209 standard_exec_prefix);
3210 if (gcc_exec_prefix)
3211 putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL));
3215 if (gcc_exec_prefix)
3217 int len = strlen (gcc_exec_prefix);
3219 if (len > (int) sizeof ("/lib/gcc-lib/") - 1
3220 && (IS_DIR_SEPARATOR (gcc_exec_prefix[len-1])))
3222 temp = gcc_exec_prefix + len - sizeof ("/lib/gcc-lib/") + 1;
3223 if (IS_DIR_SEPARATOR (*temp)
3224 && strncmp (temp + 1, "lib", 3) == 0
3225 && IS_DIR_SEPARATOR (temp[4])
3226 && strncmp (temp + 5, "gcc-lib", 7) == 0)
3227 len -= sizeof ("/lib/gcc-lib/") - 1;
3230 set_std_prefix (gcc_exec_prefix, len);
3231 add_prefix (&exec_prefixes, gcc_exec_prefix, "GCC",
3232 PREFIX_PRIORITY_LAST, 0, NULL, 0);
3233 add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC",
3234 PREFIX_PRIORITY_LAST, 0, NULL, 0);
3237 /* COMPILER_PATH and LIBRARY_PATH have values
3238 that are lists of directory names with colons. */
3240 GET_ENVIRONMENT (temp, "COMPILER_PATH");
3243 const char *startp, *endp;
3244 char *nstore = (char *) alloca (strlen (temp) + 3);
3246 startp = endp = temp;
3249 if (*endp == PATH_SEPARATOR || *endp == 0)
3251 strncpy (nstore, startp, endp - startp);
3253 strcpy (nstore, concat (".", dir_separator_str, NULL));
3254 else if (!IS_DIR_SEPARATOR (endp[-1]))
3256 nstore[endp - startp] = DIR_SEPARATOR;
3257 nstore[endp - startp + 1] = 0;
3260 nstore[endp - startp] = 0;
3261 add_prefix (&exec_prefixes, nstore, 0,
3262 PREFIX_PRIORITY_LAST, 0, NULL, 0);
3263 add_prefix (&include_prefixes,
3264 concat (nstore, "include", NULL),
3265 0, PREFIX_PRIORITY_LAST, 0, NULL, 0);
3268 endp = startp = endp + 1;
3275 GET_ENVIRONMENT (temp, LIBRARY_PATH_ENV);
3276 if (temp && *cross_compile == '0')
3278 const char *startp, *endp;
3279 char *nstore = (char *) alloca (strlen (temp) + 3);
3281 startp = endp = temp;
3284 if (*endp == PATH_SEPARATOR || *endp == 0)
3286 strncpy (nstore, startp, endp - startp);
3288 strcpy (nstore, concat (".", dir_separator_str, NULL));
3289 else if (!IS_DIR_SEPARATOR (endp[-1]))
3291 nstore[endp - startp] = DIR_SEPARATOR;
3292 nstore[endp - startp + 1] = 0;
3295 nstore[endp - startp] = 0;
3296 add_prefix (&startfile_prefixes, nstore, NULL,
3297 PREFIX_PRIORITY_LAST, 0, NULL, 1);
3300 endp = startp = endp + 1;
3307 /* Use LPATH like LIBRARY_PATH (for the CMU build program). */
3308 GET_ENVIRONMENT (temp, "LPATH");
3309 if (temp && *cross_compile == '0')
3311 const char *startp, *endp;
3312 char *nstore = (char *) alloca (strlen (temp) + 3);
3314 startp = endp = temp;
3317 if (*endp == PATH_SEPARATOR || *endp == 0)
3319 strncpy (nstore, startp, endp - startp);
3321 strcpy (nstore, concat (".", dir_separator_str, NULL));
3322 else if (!IS_DIR_SEPARATOR (endp[-1]))
3324 nstore[endp - startp] = DIR_SEPARATOR;
3325 nstore[endp - startp + 1] = 0;
3328 nstore[endp - startp] = 0;
3329 add_prefix (&startfile_prefixes, nstore, NULL,
3330 PREFIX_PRIORITY_LAST, 0, NULL, 1);
3333 endp = startp = endp + 1;
3340 /* Convert new-style -- options to old-style. */
3341 translate_options (&argc, &argv);
3343 /* Do language-specific adjustment/addition of flags. */
3344 lang_specific_driver (&argc, &argv, &added_libraries);
3346 /* Scan argv twice. Here, the first time, just count how many switches
3347 there will be in their vector, and how many input files in theirs.
3348 Here we also parse the switches that cc itself uses (e.g. -v). */
3350 for (i = 1; i < argc; i++)
3352 if (! strcmp (argv[i], "-dumpspecs"))
3354 struct spec_list *sl;
3356 for (sl = specs; sl; sl = sl->next)
3357 printf ("*%s:\n%s\n\n", sl->name, *(sl->ptr_spec));
3358 if (link_command_spec)
3359 printf ("*link_command:\n%s\n\n", link_command_spec);
3362 else if (! strcmp (argv[i], "-dumpversion"))
3364 printf ("%s\n", spec_version);
3367 else if (! strcmp (argv[i], "-dumpmachine"))
3369 printf ("%s\n", spec_machine);
3372 else if (strcmp (argv[i], "-fversion") == 0)
3374 /* translate_options () has turned --version into -fversion. */
3375 printf (_("%s (GCC) %s\n"), programname, version_string);
3376 fputs (_("Copyright (C) 2002 Free Software Foundation, Inc.\n"),
3378 fputs (_("This is free software; see the source for copying conditions. There is NO\n\
3379 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"),
3383 else if (strcmp (argv[i], "-fhelp") == 0)
3385 /* translate_options () has turned --help into -fhelp. */
3386 print_help_list = 1;
3388 /* We will be passing a dummy file on to the sub-processes. */
3392 /* CPP driver cannot obtain switch from cc1_options. */
3394 add_preprocessor_option ("--help", 6);
3395 add_assembler_option ("--help", 6);
3396 add_linker_option ("--help", 6);
3398 else if (strcmp (argv[i], "-ftarget-help") == 0)
3400 /* translate_options() has turned --target-help into -ftarget-help. */
3401 target_help_flag = 1;
3403 /* We will be passing a dummy file on to the sub-processes. */
3407 /* CPP driver cannot obtain switch from cc1_options. */
3409 add_preprocessor_option ("--target-help", 13);
3410 add_assembler_option ("--target-help", 13);
3411 add_linker_option ("--target-help", 13);
3413 else if (! strcmp (argv[i], "-pass-exit-codes"))
3415 pass_exit_codes = 1;
3418 else if (! strcmp (argv[i], "-print-search-dirs"))
3419 print_search_dirs = 1;
3420 else if (! strcmp (argv[i], "-print-libgcc-file-name"))
3421 print_file_name = "libgcc.a";
3422 else if (! strncmp (argv[i], "-print-file-name=", 17))
3423 print_file_name = argv[i] + 17;
3424 else if (! strncmp (argv[i], "-print-prog-name=", 17))
3425 print_prog_name = argv[i] + 17;
3426 else if (! strcmp (argv[i], "-print-multi-lib"))
3427 print_multi_lib = 1;
3428 else if (! strcmp (argv[i], "-print-multi-directory"))
3429 print_multi_directory = 1;
3430 else if (! strcmp (argv[i], "-print-multi-os-directory"))
3431 print_multi_os_directory = 1;
3432 else if (! strncmp (argv[i], "-Wa,", 4))
3435 /* Pass the rest of this option to the assembler. */
3437 /* Split the argument at commas. */
3439 for (j = 4; argv[i][j]; j++)
3440 if (argv[i][j] == ',')
3442 add_assembler_option (argv[i] + prev, j - prev);
3446 /* Record the part after the last comma. */
3447 add_assembler_option (argv[i] + prev, j - prev);
3449 else if (! strncmp (argv[i], "-Wp,", 4))
3452 /* Pass the rest of this option to the preprocessor. */
3454 /* Split the argument at commas. */
3456 for (j = 4; argv[i][j]; j++)
3457 if (argv[i][j] == ',')
3459 add_preprocessor_option (argv[i] + prev, j - prev);
3463 /* Record the part after the last comma. */
3464 add_preprocessor_option (argv[i] + prev, j - prev);
3466 else if (argv[i][0] == '+' && argv[i][1] == 'e')
3467 /* The +e options to the C++ front-end. */
3469 else if (strncmp (argv[i], "-Wl,", 4) == 0)
3472 /* Split the argument at commas. */
3473 for (j = 3; argv[i][j]; j++)
3474 n_infiles += (argv[i][j] == ',');
3476 else if (strcmp (argv[i], "-Xlinker") == 0)
3479 fatal ("argument to `-Xlinker' is missing");
3484 else if (strcmp (argv[i], "-Xpreprocessor") == 0)
3487 fatal ("argument to `-Xpreprocessor' is missing");
3489 add_preprocessor_option (argv[i+1], strlen (argv[i+1]));
3491 else if (strcmp (argv[i], "-Xassembler") == 0)
3494 fatal ("argument to `-Xassembler' is missing");
3496 add_assembler_option (argv[i+1], strlen (argv[i+1]));
3498 else if (strcmp (argv[i], "-l") == 0)
3501 fatal ("argument to `-l' is missing");
3506 else if (strncmp (argv[i], "-l", 2) == 0)
3508 else if (strcmp (argv[i], "-save-temps") == 0)
3510 save_temps_flag = 1;
3513 else if (strcmp (argv[i], "-specs") == 0)
3515 struct user_specs *user = (struct user_specs *)
3516 xmalloc (sizeof (struct user_specs));
3518 fatal ("argument to `-specs' is missing");
3520 user->next = (struct user_specs *) 0;
3521 user->filename = argv[i];
3522 if (user_specs_tail)
3523 user_specs_tail->next = user;
3525 user_specs_head = user;
3526 user_specs_tail = user;
3528 else if (strncmp (argv[i], "-specs=", 7) == 0)
3530 struct user_specs *user = (struct user_specs *)
3531 xmalloc (sizeof (struct user_specs));
3532 if (strlen (argv[i]) == 7)
3533 fatal ("argument to `-specs=' is missing");
3535 user->next = (struct user_specs *) 0;
3536 user->filename = argv[i] + 7;
3537 if (user_specs_tail)
3538 user_specs_tail->next = user;
3540 user_specs_head = user;
3541 user_specs_tail = user;
3543 else if (strcmp (argv[i], "-time") == 0)
3545 else if (strcmp (argv[i], "-pipe") == 0)
3547 /* -pipe has to go into the switches array as well as
3552 else if (strcmp (argv[i], "-###") == 0)
3554 /* This is similar to -v except that there is no execution
3555 of the commands and the echoed arguments are quoted. It
3556 is intended for use in shell scripts to capture the
3557 driver-generated command line. */
3558 verbose_only_flag++;
3561 else if (argv[i][0] == '-' && argv[i][1] != 0)
3563 const char *p = &argv[i][1];
3570 fatal ("`-%c' must come at the start of the command line", c);
3578 if (p[1] == 0 && i + 1 == argc)
3579 fatal ("argument to `-B' is missing");
3585 len = strlen (value);
3587 /* Catch the case where the user has forgotten to append a
3588 directory separator to the path. Note, they may be using
3589 -B to add an executable name prefix, eg "i386-elf-", in
3590 order to distinguish between multiple installations of
3591 GCC in the same directory. Hence we must check to see
3592 if appending a directory separator actually makes a
3593 valid directory name. */
3594 if (! IS_DIR_SEPARATOR (value [len - 1])
3595 && is_directory (value, "", 0))
3597 char *tmp = xmalloc (len + 2);
3598 strcpy (tmp, value);
3599 tmp[len] = DIR_SEPARATOR;
3604 /* As a kludge, if the arg is "[foo/]stageN/", just
3605 add "[foo/]include" to the include prefix. */
3608 && (IS_DIR_SEPARATOR (value[len - 8]))))
3609 && strncmp (value + len - 7, "stage", 5) == 0
3610 && ISDIGIT (value[len - 2])
3611 && (IS_DIR_SEPARATOR (value[len - 1])))
3614 add_prefix (&include_prefixes, "include", NULL,
3615 PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
3618 char * string = xmalloc (len + 1);
3620 strncpy (string, value, len - 7);
3621 strcpy (string + len - 7, "include");
3622 add_prefix (&include_prefixes, string, NULL,
3623 PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
3627 add_prefix (&exec_prefixes, value, NULL,
3628 PREFIX_PRIORITY_B_OPT, 0, &warn_B, 0);
3629 add_prefix (&startfile_prefixes, value, NULL,
3630 PREFIX_PRIORITY_B_OPT, 0, &warn_B, 0);
3631 add_prefix (&include_prefixes, concat (value, "include", NULL),
3632 NULL, PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
3637 case 'v': /* Print our subcommands and print versions. */
3639 /* If they do anything other than exactly `-v', don't set
3640 verbose_flag; rather, continue on to give the error. */
3658 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
3663 /* Forward scan, just in case -S or -c is specified
3670 if (argv[j][0] == '-')
3672 if (SWITCH_CURTAILS_COMPILATION (argv[j][1])
3678 else if ((skip = SWITCH_TAKES_ARG (argv[j][1])))
3679 j += skip - (argv[j][2] != 0);
3680 else if ((skip = WORD_SWITCH_TAKES_ARG (argv[j] + 1)))
3687 #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) || defined(HAVE_TARGET_OBJECT_SUFFIX)
3689 argv[i + 1] = convert_filename (argv[i + 1], ! have_c, 0);
3691 argv[i] = convert_filename (argv[i], ! have_c, 0);
3698 #ifdef MODIFY_TARGET_NAME
3699 is_modify_target_name = 0;
3701 for (j = 0; j < ARRAY_SIZE (modify_target); j++)
3702 if (! strcmp (argv[i], modify_target[j].sw))
3705 = (char *) xmalloc (strlen (modify_target[j].str)
3706 + strlen (spec_machine));
3709 int made_addition = 0;
3711 is_modify_target_name = 1;
3712 for (p = spec_machine, q = new_name; *p != 0; )
3714 if (modify_target[j].add_del == DELETE
3715 && (! strncmp (q, modify_target[j].str,
3716 strlen (modify_target[j].str))))
3717 p += strlen (modify_target[j].str);
3718 else if (modify_target[j].add_del == ADD
3719 && ! made_addition && *p == '-')
3721 for (r = modify_target[j].str; *r != 0; )
3729 spec_machine = new_name;
3732 if (is_modify_target_name)
3738 if (SWITCH_TAKES_ARG (c) > (p[1] != 0))
3739 i += SWITCH_TAKES_ARG (c) - (p[1] != 0);
3740 else if (WORD_SWITCH_TAKES_ARG (p))
3741 i += WORD_SWITCH_TAKES_ARG (p);
3751 if (have_c && have_o && lang_n_infiles > 1)
3752 fatal ("cannot specify -o with -c or -S and multiple compilations");
3754 if ((save_temps_flag || report_times) && use_pipes)
3756 /* -save-temps overrides -pipe, so that temp files are produced */
3757 if (save_temps_flag)
3758 error ("warning: -pipe ignored because -save-temps specified");
3759 /* -time overrides -pipe because we can't get correct stats when
3760 multiple children are running at once. */
3761 else if (report_times)
3762 error ("warning: -pipe ignored because -time specified");
3767 /* Set up the search paths before we go looking for config files. */
3769 /* These come before the md prefixes so that we will find gcc's subcommands
3770 (such as cpp) rather than those of the host system. */
3771 /* Use 2 as fourth arg meaning try just the machine as a suffix,
3772 as well as trying the machine and the version. */
3774 add_prefix (&exec_prefixes, standard_exec_prefix, "GCC",
3775 PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
3776 add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS",
3777 PREFIX_PRIORITY_LAST, 2, warn_std_ptr, 0);
3778 add_prefix (&exec_prefixes, standard_exec_prefix_1, "BINUTILS",
3779 PREFIX_PRIORITY_LAST, 2, warn_std_ptr, 0);
3782 add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS",
3783 PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
3784 add_prefix (&startfile_prefixes, standard_exec_prefix_1, "BINUTILS",
3785 PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
3787 tooldir_prefix = concat (tooldir_base_prefix, spec_machine,
3788 dir_separator_str, NULL);
3790 /* If tooldir is relative, base it on exec_prefixes. A relative
3791 tooldir lets us move the installed tree as a unit.
3793 If GCC_EXEC_PREFIX is defined, then we want to add two relative
3794 directories, so that we can search both the user specified directory
3795 and the standard place. */
3797 if (!IS_ABSOLUTE_PATHNAME (tooldir_prefix))
3799 if (gcc_exec_prefix)
3801 char *gcc_exec_tooldir_prefix
3802 = concat (gcc_exec_prefix, spec_machine, dir_separator_str,
3803 spec_version, dir_separator_str, tooldir_prefix, NULL);
3805 add_prefix (&exec_prefixes,
3806 concat (gcc_exec_tooldir_prefix, "bin",
3807 dir_separator_str, NULL),
3808 NULL, PREFIX_PRIORITY_LAST, 0, NULL, 0);
3809 add_prefix (&startfile_prefixes,
3810 concat (gcc_exec_tooldir_prefix, "lib",
3811 dir_separator_str, NULL),
3812 NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
3815 tooldir_prefix = concat (standard_exec_prefix, spec_machine,
3816 dir_separator_str, spec_version,
3817 dir_separator_str, tooldir_prefix, NULL);
3820 add_prefix (&exec_prefixes,
3821 concat (tooldir_prefix, "bin", dir_separator_str, NULL),
3822 "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 0);
3823 add_prefix (&startfile_prefixes,
3824 concat (tooldir_prefix, "lib", dir_separator_str, NULL),
3825 "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
3827 #if defined(TARGET_SYSTEM_ROOT_RELOCATABLE) && !defined(VMS)
3828 /* If the normal TARGET_SYSTEM_ROOT is inside of $exec_prefix,
3829 then consider it to relocate with the rest of the GCC installation
3830 if GCC_EXEC_PREFIX is set.
3831 ``make_relative_prefix'' is not compiled for VMS, so don't call it. */
3832 if (target_system_root && gcc_exec_prefix)
3834 char *tmp_prefix = make_relative_prefix (argv[0],
3835 standard_bindir_prefix,
3836 target_system_root);
3837 if (tmp_prefix && access_check (tmp_prefix, F_OK) == 0)
3839 target_system_root = tmp_prefix;
3840 target_system_root_changed = 1;
3845 /* More prefixes are enabled in main, after we read the specs file
3846 and determine whether this is cross-compilation or not. */
3848 /* Then create the space for the vectors and scan again. */
3850 switches = ((struct switchstr *)
3851 xmalloc ((n_switches + 1) * sizeof (struct switchstr)));
3852 infiles = (struct infile *) xmalloc ((n_infiles + 1) * sizeof (struct infile));
3855 last_language_n_infiles = -1;
3857 /* This, time, copy the text of each switch and store a pointer
3858 to the copy in the vector of switches.
3859 Store all the infiles in their vector. */
3861 for (i = 1; i < argc; i++)
3863 /* Just skip the switches that were handled by the preceding loop. */
3864 #ifdef MODIFY_TARGET_NAME
3865 is_modify_target_name = 0;
3867 for (j = 0; j < ARRAY_SIZE (modify_target); j++)
3868 if (! strcmp (argv[i], modify_target[j].sw))
3869 is_modify_target_name = 1;
3871 if (is_modify_target_name)
3875 if (! strncmp (argv[i], "-Wa,", 4))
3877 else if (! strncmp (argv[i], "-Wp,", 4))
3879 else if (! strcmp (argv[i], "-pass-exit-codes"))
3881 else if (! strcmp (argv[i], "-print-search-dirs"))
3883 else if (! strcmp (argv[i], "-print-libgcc-file-name"))
3885 else if (! strncmp (argv[i], "-print-file-name=", 17))
3887 else if (! strncmp (argv[i], "-print-prog-name=", 17))
3889 else if (! strcmp (argv[i], "-print-multi-lib"))
3891 else if (! strcmp (argv[i], "-print-multi-directory"))
3893 else if (! strcmp (argv[i], "-print-multi-os-directory"))
3895 else if (! strcmp (argv[i], "-ftarget-help"))
3897 else if (! strcmp (argv[i], "-fhelp"))
3899 else if (argv[i][0] == '+' && argv[i][1] == 'e')
3901 /* Compensate for the +e options to the C++ front-end;
3902 they're there simply for cfront call-compatibility. We do
3903 some magic in default_compilers to pass them down properly.
3904 Note we deliberately start at the `+' here, to avoid passing
3905 -e0 or -e1 down into the linker. */
3906 switches[n_switches].part1 = &argv[i][0];
3907 switches[n_switches].args = 0;
3908 switches[n_switches].live_cond = SWITCH_OK;
3909 switches[n_switches].validated = 0;
3912 else if (strncmp (argv[i], "-Wl,", 4) == 0)
3915 /* Split the argument at commas. */
3917 for (j = 4; argv[i][j]; j++)
3918 if (argv[i][j] == ',')
3920 infiles[n_infiles].language = "*";
3921 infiles[n_infiles++].name
3922 = save_string (argv[i] + prev, j - prev);
3925 /* Record the part after the last comma. */
3926 infiles[n_infiles].language = "*";
3927 infiles[n_infiles++].name = argv[i] + prev;
3929 else if (strcmp (argv[i], "-Xlinker") == 0)
3931 infiles[n_infiles].language = "*";
3932 infiles[n_infiles++].name = argv[++i];
3934 else if (strcmp (argv[i], "-Xassembler") == 0)
3936 infiles[n_infiles].language = "*";
3937 infiles[n_infiles++].name = argv[++i];
3939 else if (strcmp (argv[i], "-Xpreprocessor") == 0)
3941 infiles[n_infiles].language = "*";
3942 infiles[n_infiles++].name = argv[++i];
3944 else if (strcmp (argv[i], "-l") == 0)
3945 { /* POSIX allows separation of -l and the lib arg;
3946 canonicalize by concatenating -l with its arg */
3947 infiles[n_infiles].language = "*";
3948 infiles[n_infiles++].name = concat ("-l", argv[++i], NULL);
3950 else if (strncmp (argv[i], "-l", 2) == 0)
3952 infiles[n_infiles].language = "*";
3953 infiles[n_infiles++].name = argv[i];
3955 else if (strcmp (argv[i], "-specs") == 0)
3957 else if (strncmp (argv[i], "-specs=", 7) == 0)
3959 else if (strcmp (argv[i], "-time") == 0)
3961 else if (strcmp (argv[i], "-###") == 0)
3963 else if (argv[i][0] == '-' && argv[i][1] != 0)
3965 const char *p = &argv[i][1];
3970 if (p[1] == 0 && i + 1 == argc)
3971 fatal ("argument to `-x' is missing");
3973 spec_lang = argv[++i];
3976 if (! strcmp (spec_lang, "none"))
3977 /* Suppress the warning if -xnone comes after the last input
3978 file, because alternate command interfaces like g++ might
3979 find it useful to place -xnone after each input file. */
3982 last_language_n_infiles = n_infiles;
3985 switches[n_switches].part1 = p;
3986 /* Deal with option arguments in separate argv elements. */
3987 if ((SWITCH_TAKES_ARG (c) > (p[1] != 0))
3988 || WORD_SWITCH_TAKES_ARG (p))
3991 int n_args = WORD_SWITCH_TAKES_ARG (p);
3995 /* Count only the option arguments in separate argv elements. */
3996 n_args = SWITCH_TAKES_ARG (c) - (p[1] != 0);
3998 if (i + n_args >= argc)
3999 fatal ("argument to `-%s' is missing", p);
4000 switches[n_switches].args
4001 = (const char **) xmalloc ((n_args + 1) * sizeof(const char *));
4003 switches[n_switches].args[j++] = argv[++i];
4004 /* Null-terminate the vector. */
4005 switches[n_switches].args[j] = 0;
4007 else if (strchr (switches_need_spaces, c))
4009 /* On some systems, ld cannot handle some options without
4010 a space. So split the option from its argument. */
4011 char *part1 = (char *) xmalloc (2);
4015 switches[n_switches].part1 = part1;
4016 switches[n_switches].args
4017 = (const char **) xmalloc (2 * sizeof (const char *));
4018 switches[n_switches].args[0] = xstrdup (p+1);
4019 switches[n_switches].args[1] = 0;
4022 switches[n_switches].args = 0;
4024 switches[n_switches].live_cond = SWITCH_OK;
4025 switches[n_switches].validated = 0;
4026 switches[n_switches].ordering = 0;
4027 /* These are always valid, since gcc.c itself understands them. */
4028 if (!strcmp (p, "save-temps")
4029 || !strcmp (p, "static-libgcc")
4030 || !strcmp (p, "shared-libgcc")
4031 || !strcmp (p, "pipe"))
4032 switches[n_switches].validated = 1;
4035 char ch = switches[n_switches].part1[0];
4037 switches[n_switches].validated = 1;
4043 #ifdef HAVE_TARGET_OBJECT_SUFFIX
4044 argv[i] = convert_filename (argv[i], 0, access (argv[i], F_OK));
4047 if (strcmp (argv[i], "-") != 0 && access (argv[i], F_OK) < 0)
4049 perror_with_name (argv[i]);
4054 infiles[n_infiles].language = spec_lang;
4055 infiles[n_infiles++].name = argv[i];
4060 if (n_infiles == last_language_n_infiles && spec_lang != 0)
4061 error ("warning: `-x %s' after last input file has no effect", spec_lang);
4063 /* Ensure we only invoke each subprocess once. */
4064 if (target_help_flag || print_help_list)
4068 /* Create a dummy input file, so that we can pass --target-help on to
4069 the various sub-processes. */
4070 infiles[0].language = "c";
4071 infiles[0].name = "help-dummy";
4073 if (target_help_flag)
4075 switches[n_switches].part1 = "--target-help";
4076 switches[n_switches].args = 0;
4077 switches[n_switches].live_cond = SWITCH_OK;
4078 switches[n_switches].validated = 0;
4083 if (print_help_list)
4085 switches[n_switches].part1 = "--help";
4086 switches[n_switches].args = 0;
4087 switches[n_switches].live_cond = SWITCH_OK;
4088 switches[n_switches].validated = 0;
4094 switches[n_switches].part1 = 0;
4095 infiles[n_infiles].name = 0;
4098 /* Store switches not filtered out by %<S in spec in COLLECT_GCC_OPTIONS
4099 and place that in the environment. */
4102 set_collect_gcc_options ()
4107 /* Build COLLECT_GCC_OPTIONS to have all of the options specified to
4109 obstack_grow (&collect_obstack, "COLLECT_GCC_OPTIONS=",
4110 sizeof ("COLLECT_GCC_OPTIONS=") - 1);
4113 for (i = 0; (int) i < n_switches; i++)
4115 const char *const *args;
4118 obstack_grow (&collect_obstack, " ", 1);
4122 /* Ignore elided switches. */
4123 if (switches[i].live_cond == SWITCH_IGNORE)
4126 obstack_grow (&collect_obstack, "'-", 2);
4127 q = switches[i].part1;
4128 while ((p = strchr (q, '\'')))
4130 obstack_grow (&collect_obstack, q, p - q);
4131 obstack_grow (&collect_obstack, "'\\''", 4);
4134 obstack_grow (&collect_obstack, q, strlen (q));
4135 obstack_grow (&collect_obstack, "'", 1);
4137 for (args = switches[i].args; args && *args; args++)
4139 obstack_grow (&collect_obstack, " '", 2);
4141 while ((p = strchr (q, '\'')))
4143 obstack_grow (&collect_obstack, q, p - q);
4144 obstack_grow (&collect_obstack, "'\\''", 4);
4147 obstack_grow (&collect_obstack, q, strlen (q));
4148 obstack_grow (&collect_obstack, "'", 1);
4151 obstack_grow (&collect_obstack, "\0", 1);
4152 putenv (obstack_finish (&collect_obstack));
4155 /* Process a spec string, accumulating and running commands. */
4157 /* These variables describe the input file name.
4158 input_file_number is the index on outfiles of this file,
4159 so that the output file name can be stored for later use by %o.
4160 input_basename is the start of the part of the input file
4161 sans all directory names, and basename_length is the number
4162 of characters starting there excluding the suffix .c or whatever. */
4164 const char *input_filename;
4165 static int input_file_number;
4166 size_t input_filename_length;
4167 static int basename_length;
4168 static int suffixed_basename_length;
4169 static const char *input_basename;
4170 static const char *input_suffix;
4171 static struct stat input_stat;
4172 static int input_stat_set;
4174 /* The compiler used to process the current input file. */
4175 static struct compiler *input_file_compiler;
4177 /* These are variables used within do_spec and do_spec_1. */
4179 /* Nonzero if an arg has been started and not yet terminated
4180 (with space, tab or newline). */
4181 static int arg_going;
4183 /* Nonzero means %d or %g has been seen; the next arg to be terminated
4184 is a temporary file name. */
4185 static int delete_this_arg;
4187 /* Nonzero means %w has been seen; the next arg to be terminated
4188 is the output file name of this compilation. */
4189 static int this_is_output_file;
4191 /* Nonzero means %s has been seen; the next arg to be terminated
4192 is the name of a library file and we should try the standard
4193 search dirs for it. */
4194 static int this_is_library_file;
4196 /* Nonzero means that the input of this command is coming from a pipe. */
4197 static int input_from_pipe;
4199 /* Nonnull means substitute this for any suffix when outputting a switches
4201 static const char *suffix_subst;
4203 /* Process the spec SPEC and run the commands specified therein.
4204 Returns 0 if the spec is successfully processed; -1 if failed. */
4212 value = do_spec_2 (spec);
4214 /* Force out any unfinished command.
4215 If -pipe, this forces out the last command if it ended in `|'. */
4218 if (argbuf_index > 0 && !strcmp (argbuf[argbuf_index - 1], "|"))
4221 set_collect_gcc_options ();
4223 if (argbuf_index > 0)
4239 delete_this_arg = 0;
4240 this_is_output_file = 0;
4241 this_is_library_file = 0;
4242 input_from_pipe = 0;
4243 suffix_subst = NULL;
4245 result = do_spec_1 (spec, 0, NULL);
4247 /* End any pending argument. */
4250 obstack_1grow (&obstack, 0);
4251 string = obstack_finish (&obstack);
4252 if (this_is_library_file)
4253 string = find_file (string);
4254 store_arg (string, delete_this_arg, this_is_output_file);
4255 if (this_is_output_file)
4256 outfiles[input_file_number] = string;
4264 /* Process the given spec string and add any new options to the end
4265 of the switches/n_switches array. */
4272 do_spec_1 (" ", 0, NULL);
4274 if (argbuf_index > 0)
4279 n_switches += argbuf_index;
4280 switches = xrealloc (switches,
4281 sizeof (struct switchstr) * (n_switches + 1));
4283 switches[n_switches] = switches[first];
4284 for (i = 0; i < argbuf_index; i++)
4286 struct switchstr *sw;
4288 /* Each switch should start with '-'. */
4289 if (argbuf[i][0] != '-')
4292 sw = &switches[i + first];
4293 sw->part1 = &argbuf[i][1];
4295 sw->live_cond = SWITCH_OK;
4302 /* Process the sub-spec SPEC as a portion of a larger spec.
4303 This is like processing a whole spec except that we do
4304 not initialize at the beginning and we do not supply a
4305 newline by default at the end.
4306 INSWITCH nonzero means don't process %-sequences in SPEC;
4307 in this case, % is treated as an ordinary character.
4308 This is used while substituting switches.
4309 INSWITCH nonzero also causes SPC not to terminate an argument.
4311 Value is zero unless a line was finished
4312 and the command on that line reported an error. */
4315 do_spec_1 (spec, inswitch, soft_matched_part)
4318 const char *soft_matched_part;
4320 const char *p = spec;
4327 /* If substituting a switch, treat all chars like letters.
4328 Otherwise, NL, SPC, TAB and % are special. */
4329 switch (inswitch ? 'a' : c)
4332 /* End of line: finish any pending argument,
4333 then run the pending command if one has been started. */
4336 obstack_1grow (&obstack, 0);
4337 string = obstack_finish (&obstack);
4338 if (this_is_library_file)
4339 string = find_file (string);
4340 store_arg (string, delete_this_arg, this_is_output_file);
4341 if (this_is_output_file)
4342 outfiles[input_file_number] = string;
4346 if (argbuf_index > 0 && !strcmp (argbuf[argbuf_index - 1], "|"))
4348 /* A `|' before the newline means use a pipe here,
4349 but only if -pipe was specified.
4350 Otherwise, execute now and don't pass the `|' as an arg. */
4353 input_from_pipe = 1;
4360 set_collect_gcc_options ();
4362 if (argbuf_index > 0)
4368 /* Reinitialize for a new command, and for a new argument. */
4371 delete_this_arg = 0;
4372 this_is_output_file = 0;
4373 this_is_library_file = 0;
4374 input_from_pipe = 0;
4378 /* End any pending argument. */
4381 obstack_1grow (&obstack, 0);
4382 string = obstack_finish (&obstack);
4383 if (this_is_library_file)
4384 string = find_file (string);
4385 store_arg (string, delete_this_arg, this_is_output_file);
4386 if (this_is_output_file)
4387 outfiles[input_file_number] = string;
4391 obstack_1grow (&obstack, c);
4397 /* Space or tab ends an argument if one is pending. */
4400 obstack_1grow (&obstack, 0);
4401 string = obstack_finish (&obstack);
4402 if (this_is_library_file)
4403 string = find_file (string);
4404 store_arg (string, delete_this_arg, this_is_output_file);
4405 if (this_is_output_file)
4406 outfiles[input_file_number] = string;
4408 /* Reinitialize for a new argument. */
4410 delete_this_arg = 0;
4411 this_is_output_file = 0;
4412 this_is_library_file = 0;
4419 fatal ("invalid specification! Bug in cc");
4422 obstack_grow (&obstack, input_basename, basename_length);
4427 obstack_grow (&obstack, input_basename, suffixed_basename_length);
4432 delete_this_arg = 2;
4435 /* Dump out the directories specified with LIBRARY_PATH,
4436 followed by the absolute directories
4437 that we search for startfiles. */
4440 struct prefix_list *pl = startfile_prefixes.plist;
4441 size_t bufsize = 100;
4442 char *buffer = (char *) xmalloc (bufsize);
4445 for (; pl; pl = pl->next)
4447 #ifdef RELATIVE_PREFIX_NOT_LINKDIR
4448 /* Used on systems which record the specified -L dirs
4449 and use them to search for dynamic linking. */
4450 /* Relative directories always come from -B,
4451 and it is better not to use them for searching
4452 at run time. In particular, stage1 loses. */
4453 if (!IS_ABSOLUTE_PATHNAME (pl->prefix))
4456 /* Try subdirectory if there is one. */
4457 if (multilib_dir != NULL
4458 || (pl->os_multilib && multilib_os_dir != NULL))
4460 const char *multi_dir;
4462 multi_dir = pl->os_multilib ? multilib_os_dir
4464 if (machine_suffix && multilib_dir)
4466 if (strlen (pl->prefix) + strlen (machine_suffix)
4468 bufsize = (strlen (pl->prefix)
4469 + strlen (machine_suffix)) * 2 + 1;
4470 buffer = (char *) xrealloc (buffer, bufsize);
4471 strcpy (buffer, pl->prefix);
4472 strcat (buffer, machine_suffix);
4473 if (is_directory (buffer, multilib_dir, 1))
4475 do_spec_1 ("-L", 0, NULL);
4476 #ifdef SPACE_AFTER_L_OPTION
4477 do_spec_1 (" ", 0, NULL);
4479 do_spec_1 (buffer, 1, NULL);
4480 do_spec_1 (multilib_dir, 1, NULL);
4481 /* Make this a separate argument. */
4482 do_spec_1 (" ", 0, NULL);
4485 if (!pl->require_machine_suffix)
4487 if (is_directory (pl->prefix, multi_dir, 1))
4489 do_spec_1 ("-L", 0, NULL);
4490 #ifdef SPACE_AFTER_L_OPTION
4491 do_spec_1 (" ", 0, NULL);
4493 do_spec_1 (pl->prefix, 1, NULL);
4494 do_spec_1 (multi_dir, 1, NULL);
4495 /* Make this a separate argument. */
4496 do_spec_1 (" ", 0, NULL);
4502 if (is_directory (pl->prefix, machine_suffix, 1))
4504 do_spec_1 ("-L", 0, NULL);
4505 #ifdef SPACE_AFTER_L_OPTION
4506 do_spec_1 (" ", 0, NULL);
4508 do_spec_1 (pl->prefix, 1, NULL);
4509 /* Remove slash from machine_suffix. */
4510 if (strlen (machine_suffix) >= bufsize)
4511 bufsize = strlen (machine_suffix) * 2 + 1;
4512 buffer = (char *) xrealloc (buffer, bufsize);
4513 strcpy (buffer, machine_suffix);
4514 idx = strlen (buffer);
4515 if (IS_DIR_SEPARATOR (buffer[idx - 1]))
4516 buffer[idx - 1] = 0;
4517 do_spec_1 (buffer, 1, NULL);
4518 /* Make this a separate argument. */
4519 do_spec_1 (" ", 0, NULL);
4522 if (!pl->require_machine_suffix)
4524 if (is_directory (pl->prefix, "", 1))
4526 do_spec_1 ("-L", 0, NULL);
4527 #ifdef SPACE_AFTER_L_OPTION
4528 do_spec_1 (" ", 0, NULL);
4530 /* Remove slash from pl->prefix. */
4531 if (strlen (pl->prefix) >= bufsize)
4532 bufsize = strlen (pl->prefix) * 2 + 1;
4533 buffer = (char *) xrealloc (buffer, bufsize);
4534 strcpy (buffer, pl->prefix);
4535 idx = strlen (buffer);
4536 if (IS_DIR_SEPARATOR (buffer[idx - 1]))
4537 buffer[idx - 1] = 0;
4538 do_spec_1 (buffer, 1, NULL);
4539 /* Make this a separate argument. */
4540 do_spec_1 (" ", 0, NULL);
4549 /* %efoo means report an error with `foo' as error message
4550 and don't execute any more commands for this file. */
4554 while (*p != 0 && *p != '\n')
4556 buf = (char *) alloca (p - q + 1);
4557 strncpy (buf, q, p - q);
4564 /* %nfoo means report a notice with `foo' on stderr. */
4568 while (*p != 0 && *p != '\n')
4570 buf = (char *) alloca (p - q + 1);
4571 strncpy (buf, q, p - q);
4573 notice ("%s\n", buf);
4583 /* If save_temps_flag is off, and the HOST_BIT_BUCKET is
4584 defined, and it is not a directory, and it is
4585 writable, use it. Otherwise, treat this like any
4586 other temporary file. */
4588 if ((!save_temps_flag)
4589 && (stat (HOST_BIT_BUCKET, &st) == 0) && (!S_ISDIR (st.st_mode))
4590 && (access (HOST_BIT_BUCKET, W_OK) == 0))
4592 obstack_grow (&obstack, HOST_BIT_BUCKET,
4593 strlen (HOST_BIT_BUCKET));
4594 delete_this_arg = 0;
4599 goto create_temp_file;
4603 obstack_1grow (&obstack, '-');
4604 delete_this_arg = 0;
4607 /* consume suffix */
4608 while (*p == '.' || ISALPHA ((unsigned char) *p))
4610 if (p[0] == '%' && p[1] == 'O')
4615 goto create_temp_file;
4619 /* consume suffix */
4620 while (*p == '.' || ISALPHA ((unsigned char) *p))
4622 if (p[0] == '%' && p[1] == 'O')
4627 goto create_temp_file;
4633 struct temp_name *t;
4635 const char *suffix = p;
4636 char *saved_suffix = NULL;
4638 while (*p == '.' || ISALPHA ((unsigned char) *p))
4640 suffix_length = p - suffix;
4641 if (p[0] == '%' && p[1] == 'O')
4644 /* We don't support extra suffix characters after %O. */
4645 if (*p == '.' || ISALPHA ((unsigned char) *p))
4647 if (suffix_length == 0)
4648 suffix = TARGET_OBJECT_SUFFIX;
4652 = (char *) xmalloc (suffix_length
4653 + strlen (TARGET_OBJECT_SUFFIX));
4654 strncpy (saved_suffix, suffix, suffix_length);
4655 strcpy (saved_suffix + suffix_length,
4656 TARGET_OBJECT_SUFFIX);
4658 suffix_length += strlen (TARGET_OBJECT_SUFFIX);
4661 /* If the input_filename has the same suffix specified
4662 for the %g, %u, or %U, and -save-temps is specified,
4663 we could end up using that file as an intermediate
4664 thus clobbering the user's source file (.e.g.,
4665 gcc -save-temps foo.s would clobber foo.s with the
4666 output of cpp0). So check for this condition and
4667 generate a temp file as the intermediate. */
4669 if (save_temps_flag)
4671 temp_filename_length = basename_length + suffix_length;
4672 temp_filename = alloca (temp_filename_length + 1);
4673 strncpy ((char *) temp_filename, input_basename, basename_length);
4674 strncpy ((char *) temp_filename + basename_length, suffix,
4676 *((char *) temp_filename + temp_filename_length) = '\0';
4677 if (strcmp (temp_filename, input_filename) != 0)
4679 struct stat st_temp;
4681 /* Note, set_input() resets input_stat_set to 0. */
4682 if (input_stat_set == 0)
4684 input_stat_set = stat (input_filename, &input_stat);
4685 if (input_stat_set >= 0)
4689 /* If we have the stat for the input_filename
4690 and we can do the stat for the temp_filename
4691 then the they could still refer to the same
4692 file if st_dev/st_ino's are the same. */
4694 if (input_stat_set != 1
4695 || stat (temp_filename, &st_temp) < 0
4696 || input_stat.st_dev != st_temp.st_dev
4697 || input_stat.st_ino != st_temp.st_ino)
4699 temp_filename = save_string (temp_filename,
4700 temp_filename_length + 1);
4701 obstack_grow (&obstack, temp_filename,
4702 temp_filename_length);
4704 delete_this_arg = 0;
4710 /* See if we already have an association of %g/%u/%U and
4712 for (t = temp_names; t; t = t->next)
4713 if (t->length == suffix_length
4714 && strncmp (t->suffix, suffix, suffix_length) == 0
4715 && t->unique == (c == 'u' || c == 'U' || c == 'j'))
4718 /* Make a new association if needed. %u and %j
4720 if (t == 0 || c == 'u' || c == 'j')
4724 t = (struct temp_name *) xmalloc (sizeof (struct temp_name));
4725 t->next = temp_names;
4728 t->length = suffix_length;
4731 t->suffix = saved_suffix;
4732 saved_suffix = NULL;
4735 t->suffix = save_string (suffix, suffix_length);
4736 t->unique = (c == 'u' || c == 'U' || c == 'j');
4737 temp_filename = make_temp_file (t->suffix);
4738 temp_filename_length = strlen (temp_filename);
4739 t->filename = temp_filename;
4740 t->filename_length = temp_filename_length;
4744 free (saved_suffix);
4746 obstack_grow (&obstack, t->filename, t->filename_length);
4747 delete_this_arg = 1;
4753 obstack_grow (&obstack, input_filename, input_filename_length);
4759 struct prefix_list *pl = include_prefixes.plist;
4761 if (gcc_exec_prefix)
4763 do_spec_1 ("-iprefix", 1, NULL);
4764 /* Make this a separate argument. */
4765 do_spec_1 (" ", 0, NULL);
4766 do_spec_1 (gcc_exec_prefix, 1, NULL);
4767 do_spec_1 (" ", 0, NULL);
4770 if (target_system_root_changed)
4772 do_spec_1 ("-isysroot", 1, NULL);
4773 /* Make this a separate argument. */
4774 do_spec_1 (" ", 0, NULL);
4775 do_spec_1 (target_system_root, 1, NULL);
4776 do_spec_1 (" ", 0, NULL);
4779 for (; pl; pl = pl->next)
4781 do_spec_1 ("-isystem", 1, NULL);
4782 /* Make this a separate argument. */
4783 do_spec_1 (" ", 0, NULL);
4784 do_spec_1 (pl->prefix, 1, NULL);
4785 do_spec_1 (" ", 0, NULL);
4792 int max = n_infiles;
4793 max += lang_specific_extra_outfiles;
4795 for (i = 0; i < max; i++)
4797 store_arg (outfiles[i], 0, 0);
4802 obstack_grow (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX));
4807 this_is_library_file = 1;
4811 outfiles[input_file_number] = NULL;
4815 this_is_output_file = 1;
4820 int cur_index = argbuf_index;
4821 /* Handle the {...} following the %W. */
4824 p = handle_braces (p + 1);
4827 /* End any pending argument. */
4830 obstack_1grow (&obstack, 0);
4831 string = obstack_finish (&obstack);
4832 if (this_is_library_file)
4833 string = find_file (string);
4834 store_arg (string, delete_this_arg, this_is_output_file);
4835 if (this_is_output_file)
4836 outfiles[input_file_number] = string;
4839 /* If any args were output, mark the last one for deletion
4841 if (argbuf_index != cur_index)
4842 record_temp_file (argbuf[argbuf_index - 1], 0, 1);
4846 /* %x{OPTION} records OPTION for %X to output. */
4852 /* Skip past the option value and make a copy. */
4857 string = save_string (p1 + 1, p - p1 - 2);
4859 /* See if we already recorded this option. */
4860 for (i = 0; i < n_linker_options; i++)
4861 if (! strcmp (string, linker_options[i]))
4867 /* This option is new; add it. */
4868 add_linker_option (string, strlen (string));
4872 /* Dump out the options accumulated previously using %x. */
4874 for (i = 0; i < n_linker_options; i++)
4876 do_spec_1 (linker_options[i], 1, NULL);
4877 /* Make each accumulated option a separate argument. */
4878 do_spec_1 (" ", 0, NULL);
4882 /* Dump out the options accumulated previously using -Wa,. */
4884 for (i = 0; i < n_assembler_options; i++)
4886 do_spec_1 (assembler_options[i], 1, NULL);
4887 /* Make each accumulated option a separate argument. */
4888 do_spec_1 (" ", 0, NULL);
4892 /* Dump out the options accumulated previously using -Wp,. */
4894 for (i = 0; i < n_preprocessor_options; i++)
4896 do_spec_1 (preprocessor_options[i], 1, NULL);
4897 /* Make each accumulated option a separate argument. */
4898 do_spec_1 (" ", 0, NULL);
4902 /* Here are digits and numbers that just process
4903 a certain constant string as a spec. */
4906 value = do_spec_1 (cc1_spec, 0, NULL);
4912 value = do_spec_1 (cc1plus_spec, 0, NULL);
4918 value = do_spec_1 (asm_spec, 0, NULL);
4924 value = do_spec_1 (asm_final_spec, 0, NULL);
4931 const char *const spec
4932 = (input_file_compiler->cpp_spec
4933 ? input_file_compiler->cpp_spec
4935 value = do_spec_1 (spec, 0, NULL);
4942 value = do_spec_1 (endfile_spec, 0, NULL);
4948 value = do_spec_1 (link_spec, 0, NULL);
4954 value = do_spec_1 (lib_spec, 0, NULL);
4960 value = do_spec_1 (libgcc_spec, 0, NULL);
4966 if (multilib_dir && strcmp (multilib_dir, ".") != 0)
4972 len = strlen (multilib_dir);
4973 obstack_blank (&obstack, len + 1);
4974 p = obstack_next_free (&obstack) - (len + 1);
4977 for (q = multilib_dir; *q ; ++q, ++p)
4978 *p = (IS_DIR_SEPARATOR (*q) ? '_' : *q);
4984 char *x = (char *) alloca (strlen (cpp_predefines) + 1);
4988 /* Copy all of the -D options in CPP_PREDEFINES into BUF. */
4992 if (! strncmp (y, "-D", 2))
4993 /* Copy the whole option. */
4994 while (*y && *y != ' ' && *y != '\t')
4996 else if (*y == ' ' || *y == '\t')
4997 /* Copy whitespace to the result. */
4999 /* Don't copy other options. */
5006 value = do_spec_1 (buf, 0, NULL);
5014 char *x = (char *) alloca (strlen (cpp_predefines) * 4 + 1);
5018 /* Copy all of CPP_PREDEFINES into BUF,
5019 but force them all into the reserved name space if they
5020 aren't already there. The reserved name space is all
5021 identifiers beginning with two underscores or with one
5022 underscore and a capital letter. We do the forcing by
5023 adding up to two underscores to the beginning and end
5024 of each symbol. e.g. mips, _mips, mips_, and _mips_ all
5029 if (! strncmp (y, "-D", 2))
5038 && ! ISUPPER ((unsigned char) *(y + 1))))
5040 /* Stick __ at front of macro name. */
5044 /* Arrange to stick __ at the end as well. */
5048 /* Copy the macro name. */
5049 while (*y && *y != '=' && *y != ' ' && *y != '\t')
5062 /* Copy the value given, if any. */
5063 while (*y && *y != ' ' && *y != '\t')
5066 else if (*y == ' ' || *y == '\t')
5067 /* Copy whitespace to the result. */
5069 /* Don't copy -A options */
5075 /* Copy all of CPP_PREDEFINES into BUF,
5076 but put __ after every -D. */
5080 if (! strncmp (y, "-D", 2))
5086 && ! ISUPPER ((unsigned char) *(y + 1))))
5088 /* Stick -D__ at front of macro name. */
5095 /* Copy the macro name. */
5096 while (*y && *y != '=' && *y != ' ' && *y != '\t')
5099 /* Copy the value given, if any. */
5100 while (*y && *y != ' ' && *y != '\t')
5105 /* Do not copy this macro - we have just done it before */
5106 while (*y && *y != ' ' && *y != '\t')
5110 else if (*y == ' ' || *y == '\t')
5111 /* Copy whitespace to the result. */
5113 /* Don't copy -A options. */
5119 /* Copy all of the -A options in CPP_PREDEFINES into BUF. */
5123 if (! strncmp (y, "-A", 2))
5124 /* Copy the whole option. */
5125 while (*y && *y != ' ' && *y != '\t')
5127 else if (*y == ' ' || *y == '\t')
5128 /* Copy whitespace to the result. */
5130 /* Don't copy other options. */
5137 value = do_spec_1 (buf, 0, NULL);
5144 /* We assume there is a directory
5145 separator at the end of this string. */
5146 if (target_system_root)
5147 obstack_grow (&obstack, target_system_root,
5148 strlen (target_system_root));
5152 value = do_spec_1 (startfile_spec, 0, NULL);
5157 /* Here we define characters other than letters and digits. */
5160 p = handle_braces (p);
5166 p = handle_spec_function (p);
5172 obstack_1grow (&obstack, '%');
5179 while (p[len] && p[len] != ' ' && p[len] != '%')
5181 suffix_subst = save_string (p - 1, len + 1);
5186 /* Henceforth ignore the option(s) matching the pattern
5191 int have_wildcard = 0;
5194 while (p[len] && p[len] != ' ' && p[len] != '\t')
5197 if (p[len-1] == '*')
5200 for (i = 0; i < n_switches; i++)
5201 if (!strncmp (switches[i].part1, p, len - have_wildcard)
5202 && (have_wildcard || switches[i].part1[len] == '\0'))
5204 switches[i].live_cond = SWITCH_IGNORE;
5205 switches[i].validated = 1;
5213 if (soft_matched_part)
5215 do_spec_1 (soft_matched_part, 1, NULL);
5216 do_spec_1 (" ", 0, NULL);
5219 /* Catch the case where a spec string contains something like
5220 '%{foo:%*}'. ie there is no * in the pattern on the left
5221 hand side of the :. */
5222 error ("spec failure: '%%*' has not been initialized by pattern match");
5225 /* Process a string found as the value of a spec given by name.
5226 This feature allows individual machine descriptions
5227 to add and use their own specs.
5228 %[...] modifies -D options the way %P does;
5229 %(...) uses the spec unmodified. */
5231 error ("warning: use of obsolete %%[ operator in specs");
5234 const char *name = p;
5235 struct spec_list *sl;
5238 /* The string after the S/P is the name of a spec that is to be
5240 while (*p && *p != ')' && *p != ']')
5243 /* See if it's in the list. */
5244 for (len = p - name, sl = specs; sl; sl = sl->next)
5245 if (sl->name_len == len && !strncmp (sl->name, name, len))
5247 name = *(sl->ptr_spec);
5249 notice ("Processing spec %c%s%c, which is '%s'\n",
5250 c, sl->name, (c == '(') ? ')' : ']', name);
5259 value = do_spec_1 (name, 0, NULL);
5265 char *x = (char *) alloca (strlen (name) * 2 + 1);
5267 const char *y = name;
5270 /* Copy all of NAME into BUF, but put __ after
5271 every -D and at the end of each arg. */
5274 if (! strncmp (y, "-D", 2))
5285 && (*y == ' ' || *y == '\t' || *y == '='
5286 || *y == '}' || *y == 0))
5299 value = do_spec_1 (buf, 0, NULL);
5305 /* Discard the closing paren or bracket. */
5313 int c1 = *p++; /* Select first or second version number. */
5314 const char *v = compiler_version;
5316 static const char zeroc = '0';
5318 /* The format of the version string is
5319 ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? */
5321 /* Ignore leading non-digits. i.e. "foo-" in "foo-2.7.2". */
5322 while (! ISDIGIT (*v))
5324 if (v > compiler_version && v[-1] != '-')
5327 /* If desired, advance to second version number. */
5330 /* Set V after the first period. */
5331 while (ISDIGIT (*v))
5338 /* If desired, advance to third version number.
5339 But don't complain if it's not present */
5342 /* Set V after the second period. */
5343 while (ISDIGIT (*v))
5345 if ((*v != 0) && (*v != ' ') && (*v != '.') && (*v != '-'))
5351 /* Set Q at the next period or at the end. */
5353 while (ISDIGIT (*q))
5355 if (*q != 0 && q > v && *q != ' ' && *q != '.' && *q != '-')
5359 /* Put that part into the command. */
5360 obstack_grow (&obstack, v, q - v);
5362 /* Default to "0" */
5363 obstack_grow (&obstack, &zeroc, 1);
5369 error ("spec failure: unrecognized spec option '%c'", c);
5375 /* Backslash: treat next character as ordinary. */
5380 /* Ordinary character: put it into the current argument. */
5381 obstack_1grow (&obstack, c);
5385 /* End of string. If we are processing a spec function, we need to
5386 end any pending argument. */
5387 if (processing_spec_function && arg_going)
5389 obstack_1grow (&obstack, 0);
5390 string = obstack_finish (&obstack);
5391 if (this_is_library_file)
5392 string = find_file (string);
5393 store_arg (string, delete_this_arg, this_is_output_file);
5394 if (this_is_output_file)
5395 outfiles[input_file_number] = string;
5402 /* Look up a spec function. */
5404 static const struct spec_function *
5405 lookup_spec_function (name)
5408 static const struct spec_function * const spec_function_tables[] =
5410 static_spec_functions,
5411 lang_specific_spec_functions,
5413 const struct spec_function *sf;
5416 for (i = 0; i < ARRAY_SIZE (spec_function_tables); i++)
5418 for (sf = spec_function_tables[i]; sf->name != NULL; sf++)
5419 if (strcmp (sf->name, name) == 0)
5426 /* Evaluate a spec function. */
5429 eval_spec_function (func, args)
5430 const char *func, *args;
5432 const struct spec_function *sf;
5433 const char *funcval;
5435 /* Saved spec processing context. */
5436 int save_argbuf_index;
5437 int save_argbuf_length;
5438 const char **save_argbuf;
5441 int save_delete_this_arg;
5442 int save_this_is_output_file;
5443 int save_this_is_library_file;
5444 int save_input_from_pipe;
5445 const char *save_suffix_subst;
5448 sf = lookup_spec_function (func);
5450 fatal ("unknown spec function `%s'", func);
5452 /* Push the spec processing context. */
5453 save_argbuf_index = argbuf_index;
5454 save_argbuf_length = argbuf_length;
5455 save_argbuf = argbuf;
5457 save_arg_going = arg_going;
5458 save_delete_this_arg = delete_this_arg;
5459 save_this_is_output_file = this_is_output_file;
5460 save_this_is_library_file = this_is_library_file;
5461 save_input_from_pipe = input_from_pipe;
5462 save_suffix_subst = suffix_subst;
5464 /* Create a new spec processing context, and build the function
5468 if (do_spec_2 (args) < 0)
5469 fatal ("error in args to spec function `%s'", func);
5471 /* argbuf_index is an index for the next argument to be inserted, and
5472 so contains the count of the args already inserted. */
5474 funcval = (*sf->func) (argbuf_index, argbuf);
5476 /* Pop the spec processing context. */
5477 argbuf_index = save_argbuf_index;
5478 argbuf_length = save_argbuf_length;
5480 argbuf = save_argbuf;
5482 arg_going = save_arg_going;
5483 delete_this_arg = save_delete_this_arg;
5484 this_is_output_file = save_this_is_output_file;
5485 this_is_library_file = save_this_is_library_file;
5486 input_from_pipe = save_input_from_pipe;
5487 suffix_subst = save_suffix_subst;
5492 /* Handle a spec function call of the form:
5496 ARGS is processed as a spec in a separate context and split into an
5497 argument vector in the normal fashion. The function returns a string
5498 containing a spec which we then process in the caller's context, or
5499 NULL if no processing is required. */
5502 handle_spec_function (p)
5506 const char *endp, *funcval;
5509 processing_spec_function++;
5511 /* Get the function name. */
5512 for (endp = p; *endp != '\0'; endp++)
5514 if (*endp == '(') /* ) */
5516 /* Only allow [A-Za-z0-9], -, and _ in function names. */
5517 if (!ISALNUM (*endp) && !(*endp == '-' || *endp == '_'))
5518 fatal ("malformed spec function name");
5520 if (*endp != '(') /* ) */
5521 fatal ("no arguments for spec function");
5522 func = save_string (p, endp - p);
5525 /* Get the arguments. */
5526 for (count = 0; *endp != '\0'; endp++)
5535 else if (*endp == '(') /* ) */
5540 fatal ("malformed spec function arguments");
5541 args = save_string (p, endp - p);
5544 /* p now points to just past the end of the spec function expression. */
5546 funcval = eval_spec_function (func, args);
5547 if (funcval != NULL && do_spec_1 (funcval, 0, NULL) < 0)
5553 processing_spec_function--;
5558 /* Inline subroutine of handle_braces. Returns true if the current
5559 input suffix matches the atom bracketed by ATOM and END_ATOM. */
5561 input_suffix_matches (atom, end_atom)
5563 const char *end_atom;
5565 return (input_suffix
5566 && !strncmp (input_suffix, atom, end_atom - atom)
5567 && input_suffix[end_atom - atom] == '\0');
5570 /* Inline subroutine of handle_braces. Returns true if a switch
5571 matching the atom bracketed by ATOM and END_ATOM appeared on the
5574 switch_matches (atom, end_atom, starred)
5576 const char *end_atom;
5580 int len = end_atom - atom;
5581 int plen = starred ? len : -1;
5583 for (i = 0; i < n_switches; i++)
5584 if (!strncmp (switches[i].part1, atom, len)
5585 && (starred || switches[i].part1[len] == '\0')
5586 && check_live_switch (i, plen))
5592 /* Inline subroutine of handle_braces. Mark all of the switches which
5593 match ATOM (extends to END_ATOM; STARRED indicates whether there
5594 was a star after the atom) for later processing. */
5596 mark_matching_switches (atom, end_atom, starred)
5598 const char *end_atom;
5602 int len = end_atom - atom;
5603 int plen = starred ? len : -1;
5605 for (i = 0; i < n_switches; i++)
5606 if (!strncmp (switches[i].part1, atom, len)
5607 && (starred || switches[i].part1[len] == '\0')
5608 && check_live_switch (i, plen))
5609 switches[i].ordering = 1;
5612 /* Inline subroutine of handle_braces. Process all the currently
5613 marked switches through give_switch, and clear the marks. */
5615 process_marked_switches ()
5619 for (i = 0; i < n_switches; i++)
5620 if (switches[i].ordering == 1)
5622 switches[i].ordering = 0;
5627 /* Handle a %{ ... } construct. P points just inside the leading {.
5628 Returns a pointer one past the end of the brace block, or 0
5629 if we call do_spec_1 and that returns -1. */
5635 const char *atom, *end_atom;
5636 const char *d_atom = NULL, *d_end_atom = NULL;
5643 bool a_must_be_last = false;
5644 bool ordered_set = false;
5645 bool disjunct_set = false;
5646 bool disj_matched = false;
5647 bool disj_starred = true;
5648 bool n_way_choice = false;
5649 bool n_way_matched = false;
5651 #define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0)
5658 /* Scan one "atom" (S in the description above of %{}, possibly
5659 with !, ., or * modifiers). */
5660 a_matched = a_is_suffix = a_is_starred = a_is_negated = false;
5664 p++, a_is_negated = true;
5668 p++, a_is_suffix = true;
5671 while (ISIDNUM(*p) || *p == '-' || *p == '+' || *p == '='
5672 || *p == ',' || *p == '.' || *p == '@')
5677 p++, a_is_starred = 1;
5680 if (*p == '&' || *p == '}')
5682 /* Substitute the switch(es) indicated by the current atom. */
5684 if (disjunct_set || n_way_choice || a_is_negated || a_is_suffix
5685 || atom == end_atom)
5688 mark_matching_switches (atom, end_atom, a_is_starred);
5691 process_marked_switches ();
5693 else if (*p == '|' || *p == ':')
5695 /* Substitute some text if the current atom appears as a switch
5697 disjunct_set = true;
5701 if (atom == end_atom)
5703 if (!n_way_choice || disj_matched || *p == '|'
5704 || a_is_negated || a_is_suffix || a_is_starred)
5707 /* An empty term may appear as the last choice of an
5708 N-way choice set; it means "otherwise". */
5709 a_must_be_last = true;
5710 disj_matched = !n_way_matched;
5711 disj_starred = false;
5715 if (a_is_suffix && a_is_starred)
5719 disj_starred = false;
5721 /* Don't bother testing this atom if we already have a
5723 if (!disj_matched && !n_way_matched)
5726 a_matched = input_suffix_matches (atom, end_atom);
5728 a_matched = switch_matches (atom, end_atom, a_is_starred);
5730 if (a_matched != a_is_negated)
5732 disj_matched = true;
5734 d_end_atom = end_atom;
5741 /* Found the body, that is, the text to substitute if the
5742 current disjunction matches. */
5743 p = process_brace_body (p + 1, d_atom, d_end_atom, disj_starred,
5744 disj_matched && !n_way_matched);
5748 /* If we have an N-way choice, reset state for the next
5752 n_way_choice = true;
5753 n_way_matched |= disj_matched;
5754 disj_matched = false;
5755 disj_starred = true;
5756 d_atom = d_end_atom = NULL;
5763 while (*p++ != '}');
5770 /* Subroutine of handle_braces. Scan and process a brace substitution body
5771 (X in the description of %{} syntax). P points one past the colon;
5772 ATOM and END_ATOM bracket the first atom which was found to be true
5773 (present) in the current disjunction; STARRED indicates whether all
5774 the atoms in the current disjunction were starred (for syntax validation);
5775 MATCHED indicates whether the disjunction matched or not, and therefore
5776 whether or not the body is to be processed through do_spec_1 or just
5777 skipped. Returns a pointer to the closing } or ;, or 0 if do_spec_1
5781 process_brace_body (p, atom, end_atom, starred, matched)
5784 const char *end_atom;
5788 const char *body, *end_body;
5789 unsigned int nesting_level;
5790 bool have_subst = false;
5792 /* Locate the closing } or ;, honoring nested braces.
5793 Trim trailing whitespace. */
5802 if (!--nesting_level)
5805 else if (*p == ';' && nesting_level == 1)
5807 else if (*p == '%' && p[1] == '*' && nesting_level == 1)
5809 else if (*p == '\0')
5815 while (end_body[-1] == ' ' || end_body[-1] == '\t')
5818 if (have_subst && !starred)
5823 /* Copy the substitution body to permanent storage and execute it.
5824 If have_subst is false, this is a simple matter of running the
5825 body through do_spec_1... */
5826 char *string = save_string (body, end_body - body);
5829 if (do_spec_1 (string, 0, NULL) < 0)
5834 /* ... but if have_subst is true, we have to process the
5835 body once for each matching switch, with %* set to the
5836 variant part of the switch. */
5837 unsigned int hard_match_len = end_atom - atom;
5840 for (i = 0; i < n_switches; i++)
5841 if (!strncmp (switches[i].part1, atom, hard_match_len)
5842 && check_live_switch (i, hard_match_len))
5844 if (do_spec_1 (string, 0,
5845 &switches[i].part1[hard_match_len]) < 0)
5847 /* Pass any arguments this switch has. */
5849 suffix_subst = NULL;
5857 /* Return 0 iff switch number SWITCHNUM is obsoleted by a later switch
5858 on the command line. PREFIX_LENGTH is the length of XXX in an {XXX*}
5859 spec, or -1 if either exact match or %* is used.
5861 A -O switch is obsoleted by a later -O switch. A -f, -m, or -W switch
5862 whose value does not begin with "no-" is obsoleted by the same value
5863 with the "no-", similarly for a switch with the "no-" prefix. */
5866 check_live_switch (switchnum, prefix_length)
5870 const char *name = switches[switchnum].part1;
5873 /* In the common case of {<at-most-one-letter>*}, a negating
5874 switch would always match, so ignore that case. We will just
5875 send the conflicting switches to the compiler phase. */
5876 if (prefix_length >= 0 && prefix_length <= 1)
5879 /* If we already processed this switch and determined if it was
5880 live or not, return our past determination. */
5881 if (switches[switchnum].live_cond != 0)
5882 return switches[switchnum].live_cond > 0;
5884 /* Now search for duplicate in a manner that depends on the name. */
5888 for (i = switchnum + 1; i < n_switches; i++)
5889 if (switches[i].part1[0] == 'O')
5891 switches[switchnum].validated = 1;
5892 switches[switchnum].live_cond = SWITCH_FALSE;
5897 case 'W': case 'f': case 'm':
5898 if (! strncmp (name + 1, "no-", 3))
5900 /* We have Xno-YYY, search for XYYY. */
5901 for (i = switchnum + 1; i < n_switches; i++)
5902 if (switches[i].part1[0] == name[0]
5903 && ! strcmp (&switches[i].part1[1], &name[4]))
5905 switches[switchnum].validated = 1;
5906 switches[switchnum].live_cond = SWITCH_FALSE;
5912 /* We have XYYY, search for Xno-YYY. */
5913 for (i = switchnum + 1; i < n_switches; i++)
5914 if (switches[i].part1[0] == name[0]
5915 && switches[i].part1[1] == 'n'
5916 && switches[i].part1[2] == 'o'
5917 && switches[i].part1[3] == '-'
5918 && !strcmp (&switches[i].part1[4], &name[1]))
5920 switches[switchnum].validated = 1;
5921 switches[switchnum].live_cond = SWITCH_FALSE;
5928 /* Otherwise the switch is live. */
5929 switches[switchnum].live_cond = SWITCH_LIVE;
5933 /* Pass a switch to the current accumulating command
5934 in the same form that we received it.
5935 SWITCHNUM identifies the switch; it is an index into
5936 the vector of switches gcc received, which is `switches'.
5937 This cannot fail since it never finishes a command line.
5939 If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument. */
5942 give_switch (switchnum, omit_first_word)
5944 int omit_first_word;
5946 if (switches[switchnum].live_cond == SWITCH_IGNORE)
5949 if (!omit_first_word)
5951 do_spec_1 ("-", 0, NULL);
5952 do_spec_1 (switches[switchnum].part1, 1, NULL);
5955 if (switches[switchnum].args != 0)
5958 for (p = switches[switchnum].args; *p; p++)
5960 const char *arg = *p;
5962 do_spec_1 (" ", 0, NULL);
5965 unsigned length = strlen (arg);
5968 while (length-- && !IS_DIR_SEPARATOR (arg[length]))
5969 if (arg[length] == '.')
5971 ((char *)arg)[length] = 0;
5975 do_spec_1 (arg, 1, NULL);
5977 ((char *)arg)[length] = '.';
5978 do_spec_1 (suffix_subst, 1, NULL);
5981 do_spec_1 (arg, 1, NULL);
5985 do_spec_1 (" ", 0, NULL);
5986 switches[switchnum].validated = 1;
5989 /* Search for a file named NAME trying various prefixes including the
5990 user's -B prefix and some standard ones.
5991 Return the absolute file name found. If nothing is found, return NAME. */
5999 /* Try multilib_dir if it is defined. */
6000 if (multilib_os_dir != NULL)
6002 newname = find_a_file (&startfile_prefixes, name, R_OK, 1);
6004 /* If we don't find it in the multi library dir, then fall
6005 through and look for it in the normal places. */
6006 if (newname != NULL)
6010 newname = find_a_file (&startfile_prefixes, name, R_OK, 0);
6011 return newname ? newname : name;
6014 /* Determine whether a directory exists. If LINKER, return 0 for
6015 certain fixed names not needed by the linker. If not LINKER, it is
6016 only important to return 0 if the host machine has a small ARG_MAX
6020 is_directory (path1, path2, linker)
6025 int len1 = strlen (path1);
6026 int len2 = strlen (path2);
6027 char *path = (char *) alloca (3 + len1 + len2);
6031 #ifndef SMALL_ARG_MAX
6036 /* Construct the path from the two parts. Ensure the string ends with "/.".
6037 The resulting path will be a directory even if the given path is a
6039 memcpy (path, path1, len1);
6040 memcpy (path + len1, path2, len2);
6041 cp = path + len1 + len2;
6042 if (!IS_DIR_SEPARATOR (cp[-1]))
6043 *cp++ = DIR_SEPARATOR;
6047 /* Exclude directories that the linker is known to search. */
6050 && strcmp (path, concat (dir_separator_str, "lib",
6051 dir_separator_str, ".", NULL)) == 0)
6053 && strcmp (path, concat (dir_separator_str, "usr",
6054 dir_separator_str, "lib",
6055 dir_separator_str, ".", NULL)) == 0)))
6058 return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode));
6061 /* Set up the various global variables to indicate that we're processing
6062 the input file named FILENAME. */
6065 set_input (filename)
6066 const char *filename;
6070 input_filename = filename;
6071 input_filename_length = strlen (input_filename);
6073 input_basename = input_filename;
6074 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
6075 /* Skip drive name so 'x:foo' is handled properly. */
6076 if (input_basename[1] == ':')
6077 input_basename += 2;
6079 for (p = input_basename; *p; p++)
6080 if (IS_DIR_SEPARATOR (*p))
6081 input_basename = p + 1;
6083 /* Find a suffix starting with the last period,
6084 and set basename_length to exclude that suffix. */
6085 basename_length = strlen (input_basename);
6086 suffixed_basename_length = basename_length;
6087 p = input_basename + basename_length;
6088 while (p != input_basename && *p != '.')
6090 if (*p == '.' && p != input_basename)
6092 basename_length = p - input_basename;
6093 input_suffix = p + 1;
6098 /* If a spec for 'g', 'u', or 'U' is seen with -save-temps then
6099 we will need to do a stat on the input_filename. The
6100 INPUT_STAT_SET signals that the stat is needed. */
6104 /* On fatal signals, delete all the temporary files. */
6107 fatal_error (signum)
6110 signal (signum, SIG_DFL);
6111 delete_failure_queue ();
6112 delete_temp_files ();
6113 /* Get the same signal again, this time not handled,
6114 so its normal effect occurs. */
6115 kill (getpid (), signum);
6118 extern int main PARAMS ((int, const char *const *));
6123 const char *const *argv;
6127 int linker_was_run = 0;
6128 int num_linker_inputs = 0;
6129 char *explicit_link_files;
6132 struct user_specs *uptr;
6134 p = argv[0] + strlen (argv[0]);
6135 while (p != argv[0] && !IS_DIR_SEPARATOR (p[-1]))
6139 xmalloc_set_program_name (programname);
6141 #ifdef GCC_DRIVER_HOST_INITIALIZATION
6142 /* Perform host dependent initialization when needed. */
6143 GCC_DRIVER_HOST_INITIALIZATION;
6146 gcc_init_libintl ();
6148 if (signal (SIGINT, SIG_IGN) != SIG_IGN)
6149 signal (SIGINT, fatal_error);
6151 if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
6152 signal (SIGHUP, fatal_error);
6154 if (signal (SIGTERM, SIG_IGN) != SIG_IGN)
6155 signal (SIGTERM, fatal_error);
6157 if (signal (SIGPIPE, SIG_IGN) != SIG_IGN)
6158 signal (SIGPIPE, fatal_error);
6161 /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will
6162 receive the signal. A different setting is inheritable */
6163 signal (SIGCHLD, SIG_DFL);
6166 /* Allocate the argument vector. */
6169 obstack_init (&obstack);
6171 /* Build multilib_select, et. al from the separate lines that make up each
6172 multilib selection. */
6174 const char *const *q = multilib_raw;
6177 obstack_init (&multilib_obstack);
6178 while ((p = *q++) != (char *) 0)
6179 obstack_grow (&multilib_obstack, p, strlen (p));
6181 obstack_1grow (&multilib_obstack, 0);
6182 multilib_select = obstack_finish (&multilib_obstack);
6184 q = multilib_matches_raw;
6185 while ((p = *q++) != (char *) 0)
6186 obstack_grow (&multilib_obstack, p, strlen (p));
6188 obstack_1grow (&multilib_obstack, 0);
6189 multilib_matches = obstack_finish (&multilib_obstack);
6191 q = multilib_exclusions_raw;
6192 while ((p = *q++) != (char *) 0)
6193 obstack_grow (&multilib_obstack, p, strlen (p));
6195 obstack_1grow (&multilib_obstack, 0);
6196 multilib_exclusions = obstack_finish (&multilib_obstack);
6199 for (i = 0; i < ARRAY_SIZE (multilib_defaults_raw); i++)
6202 obstack_1grow (&multilib_obstack, ' ');
6203 obstack_grow (&multilib_obstack,
6204 multilib_defaults_raw[i],
6205 strlen (multilib_defaults_raw[i]));
6209 obstack_1grow (&multilib_obstack, 0);
6210 multilib_defaults = obstack_finish (&multilib_obstack);
6213 /* Set up to remember the pathname of gcc and any options
6214 needed for collect. We use argv[0] instead of programname because
6215 we need the complete pathname. */
6216 obstack_init (&collect_obstack);
6217 obstack_grow (&collect_obstack, "COLLECT_GCC=", sizeof ("COLLECT_GCC=") - 1);
6218 obstack_grow (&collect_obstack, argv[0], strlen (argv[0]) + 1);
6219 putenv (obstack_finish (&collect_obstack));
6221 #ifdef INIT_ENVIRONMENT
6222 /* Set up any other necessary machine specific environment variables. */
6223 putenv (INIT_ENVIRONMENT);
6226 /* Make a table of what switches there are (switches, n_switches).
6227 Make a table of specified input files (infiles, n_infiles).
6228 Decode switches that are handled locally. */
6230 process_command (argc, argv);
6232 /* Initialize the vector of specs to just the default.
6233 This means one element containing 0s, as a terminator. */
6235 compilers = (struct compiler *) xmalloc (sizeof default_compilers);
6236 memcpy ((char *) compilers, (char *) default_compilers,
6237 sizeof default_compilers);
6238 n_compilers = n_default_compilers;
6240 /* Read specs from a file if there is one. */
6242 machine_suffix = concat (spec_machine, dir_separator_str,
6243 spec_version, dir_separator_str, NULL);
6244 just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
6246 specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, 0);
6247 /* Read the specs file unless it is a default one. */
6248 if (specs_file != 0 && strcmp (specs_file, "specs"))
6249 read_specs (specs_file, TRUE);
6253 /* We need to check standard_exec_prefix/just_machine_suffix/specs
6254 for any override of as, ld and libraries. */
6255 specs_file = (char *) alloca (strlen (standard_exec_prefix)
6256 + strlen (just_machine_suffix)
6257 + sizeof ("specs"));
6259 strcpy (specs_file, standard_exec_prefix);
6260 strcat (specs_file, just_machine_suffix);
6261 strcat (specs_file, "specs");
6262 if (access (specs_file, R_OK) == 0)
6263 read_specs (specs_file, TRUE);
6265 /* Process DRIVER_SELF_SPECS, adding any new options to the end
6266 of the command line. */
6268 for (i = 0; i < ARRAY_SIZE (driver_self_specs); i++)
6269 do_self_spec (driver_self_specs[i]);
6271 /* If not cross-compiling, look for executables in the standard
6273 if (*cross_compile == '0')
6275 if (*md_exec_prefix)
6277 add_prefix (&exec_prefixes, md_exec_prefix, "GCC",
6278 PREFIX_PRIORITY_LAST, 0, NULL, 0);
6282 /* Look for startfiles in the standard places. */
6283 if (*startfile_prefix_spec != 0
6284 && do_spec_2 (startfile_prefix_spec) == 0
6285 && do_spec_1 (" ", 0, NULL) == 0)
6288 for (ndx = 0; ndx < argbuf_index; ndx++)
6289 add_sysrooted_prefix (&startfile_prefixes, argbuf[ndx], "BINUTILS",
6290 PREFIX_PRIORITY_LAST, 0, NULL, 1);
6292 /* We should eventually get rid of all these and stick to
6293 startfile_prefix_spec exclusively. */
6294 else if (*cross_compile == '0' || target_system_root)
6296 if (*md_exec_prefix)
6297 add_sysrooted_prefix (&startfile_prefixes, md_exec_prefix, "GCC",
6298 PREFIX_PRIORITY_LAST, 0, NULL, 1);
6300 if (*md_startfile_prefix)
6301 add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix,
6302 "GCC", PREFIX_PRIORITY_LAST, 0, NULL, 1);
6304 if (*md_startfile_prefix_1)
6305 add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix_1,
6306 "GCC", PREFIX_PRIORITY_LAST, 0, NULL, 1);
6308 /* If standard_startfile_prefix is relative, base it on
6309 standard_exec_prefix. This lets us move the installed tree
6310 as a unit. If GCC_EXEC_PREFIX is defined, base
6311 standard_startfile_prefix on that as well. */
6312 if (IS_ABSOLUTE_PATHNAME (standard_startfile_prefix))
6313 add_sysrooted_prefix (&startfile_prefixes,
6314 standard_startfile_prefix, "BINUTILS",
6315 PREFIX_PRIORITY_LAST, 0, NULL, 1);
6318 if (gcc_exec_prefix)
6319 add_prefix (&startfile_prefixes,
6320 concat (gcc_exec_prefix, machine_suffix,
6321 standard_startfile_prefix, NULL),
6322 NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
6323 add_prefix (&startfile_prefixes,
6324 concat (standard_exec_prefix,
6326 standard_startfile_prefix, NULL),
6327 NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
6330 add_sysrooted_prefix (&startfile_prefixes, standard_startfile_prefix_1,
6331 "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
6332 add_sysrooted_prefix (&startfile_prefixes, standard_startfile_prefix_2,
6333 "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
6334 #if 0 /* Can cause surprises, and one can use -B./ instead. */
6335 add_prefix (&startfile_prefixes, "./", NULL,
6336 PREFIX_PRIORITY_LAST, 1, NULL, 0);
6340 /* Process any user specified specs in the order given on the command
6342 for (uptr = user_specs_head; uptr; uptr = uptr->next)
6344 char *filename = find_a_file (&startfile_prefixes, uptr->filename,
6346 read_specs (filename ? filename : uptr->filename, FALSE);
6349 /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake. */
6350 if (gcc_exec_prefix)
6351 gcc_exec_prefix = concat (gcc_exec_prefix, spec_machine, dir_separator_str,
6352 spec_version, dir_separator_str, NULL);
6354 /* Now we have the specs.
6355 Set the `valid' bits for switches that match anything in any spec. */
6357 validate_all_switches ();
6359 /* Now that we have the switches and the specs, set
6360 the subdirectory based on the options. */
6361 set_multilib_dir ();
6363 /* Warn about any switches that no pass was interested in. */
6365 for (i = 0; (int) i < n_switches; i++)
6366 if (! switches[i].validated)
6367 error ("unrecognized option `-%s'", switches[i].part1);
6369 /* Obey some of the options. */
6371 if (print_search_dirs)
6373 printf (_("install: %s%s\n"), standard_exec_prefix, machine_suffix);
6374 printf (_("programs: %s\n"), build_search_list (&exec_prefixes, "", 0));
6375 printf (_("libraries: %s\n"), build_search_list (&startfile_prefixes, "", 0));
6379 if (print_file_name)
6381 printf ("%s\n", find_file (print_file_name));
6385 if (print_prog_name)
6387 char *newname = find_a_file (&exec_prefixes, print_prog_name, X_OK, 0);
6388 printf ("%s\n", (newname ? newname : print_prog_name));
6392 if (print_multi_lib)
6394 print_multilib_info ();
6398 if (print_multi_directory)
6400 if (multilib_dir == NULL)
6403 printf ("%s\n", multilib_dir);
6407 if (print_multi_os_directory)
6409 if (multilib_os_dir == NULL)
6412 printf ("%s\n", multilib_os_dir);
6416 if (target_help_flag)
6418 /* Print if any target specific options. */
6420 /* We do not exit here. Instead we have created a fake input file
6421 called 'target-dummy' which needs to be compiled, and we pass this
6422 on to the various sub-processes, along with the --target-help
6426 if (print_help_list)
6432 printf (_("\nFor bug reporting instructions, please see:\n"));
6433 printf ("%s.\n", bug_report_url);
6438 /* We do not exit here. Instead we have created a fake input file
6439 called 'help-dummy' which needs to be compiled, and we pass this
6440 on the various sub-processes, along with the --help switch. */
6448 notice ("Configured with: %s\n", configuration_arguments);
6450 #ifdef THREAD_MODEL_SPEC
6451 /* We could have defined THREAD_MODEL_SPEC to "%*" by default,
6452 but there's no point in doing all this processing just to get
6453 thread_model back. */
6454 obstack_init (&obstack);
6455 do_spec_1 (THREAD_MODEL_SPEC, 0, thread_model);
6456 obstack_1grow (&obstack, '\0');
6457 thrmod = obstack_finish (&obstack);
6459 thrmod = thread_model;
6462 notice ("Thread model: %s\n", thrmod);
6464 /* compiler_version is truncated at the first space when initialized
6465 from version string, so truncate version_string at the first space
6466 before comparing. */
6467 for (n = 0; version_string[n]; n++)
6468 if (version_string[n] == ' ')
6471 if (! strncmp (version_string, compiler_version, n)
6472 && compiler_version[n] == 0)
6473 notice ("gcc version %s\n", version_string);
6475 notice ("gcc driver version %s executing gcc version %s\n",
6476 version_string, compiler_version);
6482 if (n_infiles == added_libraries)
6483 fatal ("no input files");
6485 /* Make a place to record the compiler output file names
6486 that correspond to the input files. */
6489 i += lang_specific_extra_outfiles;
6490 outfiles = (const char **) xcalloc (i, sizeof (char *));
6492 /* Record which files were specified explicitly as link input. */
6494 explicit_link_files = xcalloc (1, n_infiles);
6496 for (i = 0; (int) i < n_infiles; i++)
6498 int this_file_error = 0;
6500 /* Tell do_spec what to substitute for %i. */
6502 input_file_number = i;
6503 set_input (infiles[i].name);
6505 /* Use the same thing in %o, unless cp->spec says otherwise. */
6507 outfiles[i] = input_filename;
6509 /* Figure out which compiler from the file's suffix. */
6512 = lookup_compiler (infiles[i].name, input_filename_length,
6513 infiles[i].language);
6515 if (input_file_compiler)
6517 /* Ok, we found an applicable compiler. Run its spec. */
6519 if (input_file_compiler->spec[0] == '#')
6521 error ("%s: %s compiler not installed on this system",
6522 input_filename, &input_file_compiler->spec[1]);
6523 this_file_error = 1;
6527 value = do_spec (input_file_compiler->spec);
6529 this_file_error = 1;
6533 /* If this file's name does not contain a recognized suffix,
6534 record it as explicit linker input. */
6537 explicit_link_files[i] = 1;
6539 /* Clear the delete-on-failure queue, deleting the files in it
6540 if this compilation failed. */
6542 if (this_file_error)
6544 delete_failure_queue ();
6547 /* If this compilation succeeded, don't delete those files later. */
6548 clear_failure_queue ();
6551 /* Reset the output file name to the first input file name, for use
6552 with %b in LINK_SPEC on a target that prefers not to emit a.out
6555 set_input (infiles[0].name);
6557 if (error_count == 0)
6559 /* Make sure INPUT_FILE_NUMBER points to first available open
6561 input_file_number = n_infiles;
6562 if (lang_specific_pre_link ())
6566 /* Determine if there are any linker input files. */
6567 num_linker_inputs = 0;
6568 for (i = 0; (int) i < n_infiles; i++)
6569 if (explicit_link_files[i] || outfiles[i] != NULL)
6570 num_linker_inputs++;
6572 /* Run ld to link all the compiler output files. */
6574 if (num_linker_inputs > 0 && error_count == 0)
6576 int tmp = execution_count;
6578 /* We'll use ld if we can't find collect2. */
6579 if (! strcmp (linker_name_spec, "collect2"))
6581 char *s = find_a_file (&exec_prefixes, "collect2", X_OK, 0);
6583 linker_name_spec = "ld";
6585 /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables
6587 putenv_from_prefixes (&exec_prefixes, "COMPILER_PATH");
6588 putenv_from_prefixes (&startfile_prefixes, LIBRARY_PATH_ENV);
6590 value = do_spec (link_command_spec);
6593 linker_was_run = (tmp != execution_count);
6596 /* If options said don't run linker,
6597 complain about input files to be given to the linker. */
6599 if (! linker_was_run && error_count == 0)
6600 for (i = 0; (int) i < n_infiles; i++)
6601 if (explicit_link_files[i])
6602 error ("%s: linker input file unused because linking not done",
6605 /* Delete some or all of the temporary files we made. */
6608 delete_failure_queue ();
6609 delete_temp_files ();
6611 if (print_help_list)
6613 printf (("\nFor bug reporting instructions, please see:\n"));
6614 printf ("%s\n", bug_report_url);
6617 return (signal_count != 0 ? 2
6618 : error_count > 0 ? (pass_exit_codes ? greatest_status : 1)
6622 /* Find the proper compilation spec for the file name NAME,
6623 whose length is LENGTH. LANGUAGE is the specified language,
6624 or 0 if this file is to be passed to the linker. */
6626 static struct compiler *
6627 lookup_compiler (name, length, language)
6630 const char *language;
6632 struct compiler *cp;
6634 /* If this was specified by the user to be a linker input, indicate that. */
6635 if (language != 0 && language[0] == '*')
6638 /* Otherwise, look for the language, if one is spec'd. */
6641 for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
6642 if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language))
6645 error ("language %s not recognized", language);
6649 /* Look for a suffix. */
6650 for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
6652 if (/* The suffix `-' matches only the file name `-'. */
6653 (!strcmp (cp->suffix, "-") && !strcmp (name, "-"))
6654 || (strlen (cp->suffix) < length
6655 /* See if the suffix matches the end of NAME. */
6656 && !strcmp (cp->suffix,
6657 name + length - strlen (cp->suffix))
6662 #if defined (OS2) ||defined (HAVE_DOS_BASED_FILE_SYSTEM)
6663 /* look again, but case-insensitively this time. */
6665 for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
6667 if (/* The suffix `-' matches only the file name `-'. */
6668 (!strcmp (cp->suffix, "-") && !strcmp (name, "-"))
6669 || (strlen (cp->suffix) < length
6670 /* See if the suffix matches the end of NAME. */
6671 && ((!strcmp (cp->suffix,
6672 name + length - strlen (cp->suffix))
6673 || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
6674 && !strcasecmp (cp->suffix,
6675 name + length - strlen (cp->suffix)))
6681 if (cp >= compilers)
6683 if (cp->spec[0] != '@')
6684 /* A non-alias entry: return it. */
6687 /* An alias entry maps a suffix to a language.
6688 Search for the language; pass 0 for NAME and LENGTH
6689 to avoid infinite recursion if language not found. */
6690 return lookup_compiler (NULL, 0, cp->spec + 1);
6696 save_string (s, len)
6700 char *result = xmalloc (len + 1);
6702 memcpy (result, s, len);
6708 pfatal_with_name (name)
6711 perror_with_name (name);
6712 delete_temp_files ();
6717 perror_with_name (name)
6720 error ("%s: %s", name, xstrerror (errno));
6724 pfatal_pexecute (errmsg_fmt, errmsg_arg)
6725 const char *errmsg_fmt;
6726 const char *errmsg_arg;
6730 int save_errno = errno;
6732 /* Space for trailing '\0' is in %s. */
6733 char *msg = xmalloc (strlen (errmsg_fmt) + strlen (errmsg_arg));
6734 sprintf (msg, errmsg_fmt, errmsg_arg);
6740 pfatal_with_name (errmsg_fmt);
6743 /* Output an error message and exit */
6748 fatal ("internal gcc abort");
6751 /* Output an error message and exit */
6754 fatal VPARAMS ((const char *msgid, ...))
6756 VA_OPEN (ap, msgid);
6757 VA_FIXEDARG (ap, const char *, msgid);
6759 fprintf (stderr, "%s: ", programname);
6760 vfprintf (stderr, _(msgid), ap);
6762 fprintf (stderr, "\n");
6763 delete_temp_files ();
6768 error VPARAMS ((const char *msgid, ...))
6770 VA_OPEN (ap, msgid);
6771 VA_FIXEDARG (ap, const char *, msgid);
6773 fprintf (stderr, "%s: ", programname);
6774 vfprintf (stderr, _(msgid), ap);
6777 fprintf (stderr, "\n");
6781 notice VPARAMS ((const char *msgid, ...))
6783 VA_OPEN (ap, msgid);
6784 VA_FIXEDARG (ap, const char *, msgid);
6786 vfprintf (stderr, _(msgid), ap);
6791 validate_switches_from_spec (spec)
6794 const char *p = spec;
6797 if (c == '%' && (*p == '{' || *p == '<' || (*p == 'W' && *++p == '{')))
6798 /* We have a switch spec. */
6799 p = validate_switches (p + 1);
6803 validate_all_switches ()
6805 struct compiler *comp;
6806 struct spec_list *spec;
6808 for (comp = compilers; comp->spec; comp++)
6809 validate_switches_from_spec (comp->spec);
6811 /* Look through the linked list of specs read from the specs file. */
6812 for (spec = specs; spec; spec = spec->next)
6813 validate_switches_from_spec (*spec->ptr_spec);
6815 validate_switches_from_spec (link_command_spec);
6818 /* Look at the switch-name that comes after START
6819 and mark as valid all supplied switches that match it. */
6822 validate_switches (start)
6825 const char *p = start;
6829 bool suffix = false;
6830 bool starred = false;
6832 #define SKIP_WHITE() do { while (*p == ' ' || *p == '\t') p++; } while (0)
6845 while (ISIDNUM (*p) || *p == '-' || *p == '+' || *p == '='
6846 || *p == ',' || *p == '.' || *p == '@')
6851 starred = true, p++;
6857 /* Mark all matching switches as valid. */
6858 for (i = 0; i < n_switches; i++)
6859 if (!strncmp (switches[i].part1, atom, len)
6860 && (starred || switches[i].part1[len] == 0))
6861 switches[i].validated = 1;
6865 if (*p && (p[-1] == '|' || p[-1] == '&'))
6868 if (*p && p[-1] == ':')
6870 while (*p && *p != ';' && *p != '}')
6875 if (*p == '{' || *p == '<')
6876 p = validate_switches (p+1);
6877 else if (p[0] == 'W' && p[1] == '{')
6878 p = validate_switches (p+2);
6885 if (*p && p[-1] == ';')
6899 static struct mdswitchstr *mdswitches;
6900 static int n_mdswitches;
6902 /* Check whether a particular argument was used. The first time we
6903 canonicalize the switches to keep only the ones we care about. */
6913 const char *replace;
6918 static struct mswitchstr *mswitches;
6919 static int n_mswitches;
6924 struct mswitchstr *matches;
6928 /* Break multilib_matches into the component strings of string
6929 and replacement string. */
6930 for (q = multilib_matches; *q != '\0'; q++)
6935 (struct mswitchstr *) alloca ((sizeof (struct mswitchstr)) * cnt);
6937 q = multilib_matches;
6947 matches[i].len = q - matches[i].str;
6949 matches[i].replace = ++q;
6950 while (*q != ';' && *q != '\0')
6956 matches[i].rep_len = q - matches[i].replace;
6962 /* Now build a list of the replacement string for switches that we care
6963 about. Make sure we allocate at least one entry. This prevents
6964 xmalloc from calling fatal, and prevents us from re-executing this
6967 = (struct mswitchstr *)
6968 xmalloc (sizeof (struct mswitchstr)
6969 * (n_mdswitches + (n_switches ? n_switches : 1)));
6970 for (i = 0; i < n_switches; i++)
6972 int xlen = strlen (switches[i].part1);
6973 for (j = 0; j < cnt; j++)
6974 if (xlen == matches[j].len
6975 && ! strncmp (switches[i].part1, matches[j].str, xlen))
6977 mswitches[n_mswitches].str = matches[j].replace;
6978 mswitches[n_mswitches].len = matches[j].rep_len;
6979 mswitches[n_mswitches].replace = (char *) 0;
6980 mswitches[n_mswitches].rep_len = 0;
6986 /* Add MULTILIB_DEFAULTS switches too, as long as they were not present
6987 on the command line nor any options mutually incompatible with
6989 for (i = 0; i < n_mdswitches; i++)
6993 for (q = multilib_options; *q != '\0'; q++)
6999 while (strncmp (q, mdswitches[i].str, mdswitches[i].len) != 0
7000 || strchr (" /", q[mdswitches[i].len]) == NULL)
7002 while (*q != ' ' && *q != '/' && *q != '\0')
7009 if (*q != ' ' && *q != '\0')
7011 while (*r != ' ' && *r != '\0')
7014 while (*q != ' ' && *q != '/' && *q != '\0')
7017 if (used_arg (r, q - r))
7022 mswitches[n_mswitches].str = mdswitches[i].str;
7023 mswitches[n_mswitches].len = mdswitches[i].len;
7024 mswitches[n_mswitches].replace = (char *) 0;
7025 mswitches[n_mswitches].rep_len = 0;
7038 for (i = 0; i < n_mswitches; i++)
7039 if (len == mswitches[i].len && ! strncmp (p, mswitches[i].str, len))
7046 default_arg (p, len)
7052 for (i = 0; i < n_mdswitches; i++)
7053 if (len == mdswitches[i].len && ! strncmp (p, mdswitches[i].str, len))
7059 /* Work out the subdirectory to use based on the options. The format of
7060 multilib_select is a list of elements. Each element is a subdirectory
7061 name followed by a list of options followed by a semicolon. The format
7062 of multilib_exclusions is the same, but without the preceding
7063 directory. First gcc will check the exclusions, if none of the options
7064 beginning with an exclamation point are present, and all of the other
7065 options are present, then we will ignore this completely. Passing
7066 that, gcc will consider each multilib_select in turn using the same
7067 rules for matching the options. If a match is found, that subdirectory
7074 unsigned int this_path_len;
7075 const char *this_path, *this_arg;
7076 const char *start, *end;
7078 int ok, ndfltok, first;
7081 start = multilib_defaults;
7082 while (*start == ' ' || *start == '\t')
7084 while (*start != '\0')
7087 while (*start != ' ' && *start != '\t' && *start != '\0')
7089 while (*start == ' ' || *start == '\t')
7098 = (struct mdswitchstr *) xmalloc (sizeof (struct mdswitchstr)
7100 for (start = multilib_defaults; *start != '\0'; start = end + 1)
7102 while (*start == ' ' || *start == '\t')
7108 for (end = start + 1;
7109 *end != ' ' && *end != '\t' && *end != '\0'; end++)
7112 obstack_grow (&multilib_obstack, start, end - start);
7113 obstack_1grow (&multilib_obstack, 0);
7114 mdswitches[i].str = obstack_finish (&multilib_obstack);
7115 mdswitches[i++].len = end - start;
7122 p = multilib_exclusions;
7125 /* Ignore newlines. */
7132 /* Check the arguments. */
7146 while (*p != ' ' && *p != ';')
7153 if (*this_arg != '!')
7161 ok = used_arg (this_arg, p - this_arg);
7176 p = multilib_select;
7179 /* Ignore newlines. */
7186 /* Get the initial path. */
7194 this_path_len = p - this_path;
7196 /* Check the arguments. */
7212 while (*p != ' ' && *p != ';')
7219 if (*this_arg != '!')
7227 /* If this is a default argument, we can just ignore it.
7228 This is true even if this_arg begins with '!'. Beginning
7229 with '!' does not mean that this argument is necessarily
7230 inappropriate for this library: it merely means that
7231 there is a more specific library which uses this
7232 argument. If this argument is a default, we need not
7233 consider that more specific library. */
7234 ok = used_arg (this_arg, p - this_arg);
7241 if (default_arg (this_arg, p - this_arg))
7250 if (this_path_len != 1
7251 || this_path[0] != '.')
7253 char *new_multilib_dir = xmalloc (this_path_len + 1);
7256 strncpy (new_multilib_dir, this_path, this_path_len);
7257 new_multilib_dir[this_path_len] = '\0';
7258 q = strchr (new_multilib_dir, ':');
7261 multilib_dir = new_multilib_dir;
7268 const char *q = this_path, *end = this_path + this_path_len;
7270 while (q < end && *q != ':')
7274 char *new_multilib_os_dir = xmalloc (end - q);
7275 memcpy (new_multilib_os_dir, q + 1, end - q - 1);
7276 new_multilib_os_dir[end - q - 1] = '\0';
7277 multilib_os_dir = new_multilib_os_dir;
7285 if (multilib_dir == NULL && multilib_os_dir != NULL
7286 && strcmp (multilib_os_dir, ".") == 0)
7288 free ((char *) multilib_os_dir);
7289 multilib_os_dir = NULL;
7291 else if (multilib_dir != NULL && multilib_os_dir == NULL)
7292 multilib_os_dir = multilib_dir;
7295 /* Print out the multiple library subdirectory selection
7296 information. This prints out a series of lines. Each line looks
7297 like SUBDIRECTORY;@OPTION@OPTION, with as many options as is
7298 required. Only the desired options are printed out, the negative
7299 matches. The options are print without a leading dash. There are
7300 no spaces to make it easy to use the information in the shell.
7301 Each subdirectory is printed only once. This assumes the ordering
7302 generated by the genmultilib script. Also, we leave out ones that match
7306 print_multilib_info ()
7308 const char *p = multilib_select;
7309 const char *last_path = 0, *this_path;
7311 unsigned int last_path_len = 0;
7316 /* Ignore newlines. */
7323 /* Get the initial path. */
7332 /* When --disable-multilib was used but target defines
7333 MULTILIB_OSDIRNAMES, entries starting with .: are there just
7334 to find multilib_os_dir, so skip them from output. */
7335 if (this_path[0] == '.' && this_path[1] == ':')
7338 /* Check for matches with the multilib_exclusions. We don't bother
7339 with the '!' in either list. If any of the exclusion rules match
7340 all of its options with the select rule, we skip it. */
7342 const char *e = multilib_exclusions;
7343 const char *this_arg;
7348 /* Ignore newlines. */
7355 /* Check the arguments. */
7372 while (*e != ' ' && *e != ';')
7383 int len = e - this_arg;
7390 while (*q != ' ' && *q != ';')
7397 if (! strncmp (arg, this_arg, (len < q - arg) ? q - arg : len) ||
7398 default_arg (this_arg, e - this_arg))
7428 /* If this is a duplicate, skip it. */
7429 skip = (last_path != 0 && (unsigned int) (p - this_path) == last_path_len
7430 && ! strncmp (last_path, this_path, last_path_len));
7432 last_path = this_path;
7433 last_path_len = p - this_path;
7436 /* If this directory requires any default arguments, we can skip
7437 it. We will already have printed a directory identical to
7438 this one which does not require that default argument. */
7456 while (*q != ' ' && *q != ';')
7464 && default_arg (arg, q - arg))
7479 for (p1 = last_path; p1 < p && *p1 != ':'; p1++)
7498 use_arg = *p != '!';
7503 while (*p != ' ' && *p != ';')
7518 /* If there are extra options, print them now. */
7519 if (multilib_extra && *multilib_extra)
7521 int print_at = TRUE;
7524 for (q = multilib_extra; *q != '\0'; q++)
7545 /* if-exists built-in spec function.
7547 Checks to see if the file specified by the absolute pathname in
7548 ARGS exists. Returns that pathname if found.
7550 The usual use for this function is to check for a library file
7551 (whose name has been expanded with %s). */
7554 if_exists_spec_function (argc, argv)
7558 /* Must have only one argument. */
7559 if (argc == 1 && IS_ABSOLUTE_PATHNAME (argv[0]) && ! access (argv[0], R_OK))
7565 /* if-exists-else built-in spec function.
7567 This is like if-exists, but takes an additional argument which
7568 is returned if the first argument does not exist. */
7571 if_exists_else_spec_function (argc, argv)
7575 /* Must have exactly two arguments. */
7579 if (IS_ABSOLUTE_PATHNAME (argv[0]) && ! access (argv[0], R_OK))