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