The intent of the phases was to have a high-level but mutually exclusive accounting...
[gcc.git] / gcc / toplev.c
1 /* Top level of GCC compilers (cc1, cc1plus, etc.)
2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4 2011 Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
21
22 /* This is the top level of cc1/c++.
23 It parses command args, opens files, invokes the various passes
24 in the proper order, and counts the time used by each.
25 Error messages and low-level interface to malloc also handled here. */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "line-map.h"
32 #include "input.h"
33 #include "tree.h"
34 #include "realmpfr.h" /* For GMP/MPFR/MPC versions, in print_version. */
35 #include "version.h"
36 #include "rtl.h"
37 #include "tm_p.h"
38 #include "flags.h"
39 #include "insn-attr.h"
40 #include "insn-config.h"
41 #include "insn-flags.h"
42 #include "hard-reg-set.h"
43 #include "recog.h"
44 #include "output.h"
45 #include "except.h"
46 #include "function.h"
47 #include "toplev.h"
48 #include "expr.h"
49 #include "basic-block.h"
50 #include "intl.h"
51 #include "ggc.h"
52 #include "graph.h"
53 #include "regs.h"
54 #include "timevar.h"
55 #include "diagnostic.h"
56 #include "tree-diagnostic.h"
57 #include "tree-pretty-print.h"
58 #include "params.h"
59 #include "reload.h"
60 #include "ira.h"
61 #include "dwarf2asm.h"
62 #include "debug.h"
63 #include "target.h"
64 #include "common/common-target.h"
65 #include "langhooks.h"
66 #include "cfgloop.h" /* for init_set_costs */
67 #include "hosthooks.h"
68 #include "cgraph.h"
69 #include "opts.h"
70 #include "opts-diagnostic.h"
71 #include "coverage.h"
72 #include "value-prof.h"
73 #include "alloc-pool.h"
74 #include "tree-mudflap.h"
75 #include "gimple.h"
76 #include "tree-ssa-alias.h"
77 #include "plugin.h"
78
79 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
80 #include "dwarf2out.h"
81 #endif
82
83 #if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
84 #include "dbxout.h"
85 #endif
86
87 #ifdef SDB_DEBUGGING_INFO
88 #include "sdbout.h"
89 #endif
90
91 #ifdef XCOFF_DEBUGGING_INFO
92 #include "xcoffout.h" /* Needed for external data
93 declarations for e.g. AIX 4.x. */
94 #endif
95
96 static void general_init (const char *);
97 static void do_compile (void);
98 static void process_options (void);
99 static void backend_init (void);
100 static int lang_dependent_init (const char *);
101 static void init_asm_output (const char *);
102 static void finalize (bool);
103
104 static void crash_signal (int) ATTRIBUTE_NORETURN;
105 static void compile_file (void);
106
107 /* True if we don't need a backend (e.g. preprocessing only). */
108 static bool no_backend;
109
110 /* Length of line when printing switch values. */
111 #define MAX_LINE 75
112
113 /* Decoded options, and number of such options. */
114 struct cl_decoded_option *save_decoded_options;
115 unsigned int save_decoded_options_count;
116
117 /* Used to enable -fvar-tracking, -fweb and -frename-registers according
118 to optimize in process_options (). */
119 #define AUTODETECT_VALUE 2
120
121 /* Debug hooks - dependent upon command line options. */
122
123 const struct gcc_debug_hooks *debug_hooks;
124
125 /* The FUNCTION_DECL for the function currently being compiled,
126 or 0 if between functions. */
127 tree current_function_decl;
128
129 /* Set to the FUNC_BEGIN label of the current function, or NULL
130 if none. */
131 const char * current_function_func_begin_label;
132
133 /* A random sequence of characters, unless overridden by user. */
134 static const char *flag_random_seed;
135
136 /* A local time stamp derived from the time of compilation. It will be
137 zero if the system cannot provide a time. It will be -1u, if the
138 user has specified a particular random seed. */
139 unsigned local_tick;
140
141 /* Random number for this compilation */
142 HOST_WIDE_INT random_seed;
143
144 /* -f flags. */
145
146 /* When non-NULL, indicates that whenever space is allocated on the
147 stack, the resulting stack pointer must not pass this
148 address---that is, for stacks that grow downward, the stack pointer
149 must always be greater than or equal to this address; for stacks
150 that grow upward, the stack pointer must be less than this address.
151 At present, the rtx may be either a REG or a SYMBOL_REF, although
152 the support provided depends on the backend. */
153 rtx stack_limit_rtx;
154
155 /* True if the user has tagged the function with the 'section'
156 attribute. */
157
158 bool user_defined_section_attribute = false;
159
160 struct target_flag_state default_target_flag_state;
161 #if SWITCHABLE_TARGET
162 struct target_flag_state *this_target_flag_state = &default_target_flag_state;
163 #else
164 #define this_target_flag_state (&default_target_flag_state)
165 #endif
166
167 /* The user symbol prefix after having resolved same. */
168 const char *user_label_prefix;
169
170 /* Output files for assembler code (real compiler output)
171 and debugging dumps. */
172
173 FILE *asm_out_file;
174 FILE *aux_info_file;
175 FILE *stack_usage_file = NULL;
176 FILE *dump_file = NULL;
177 const char *dump_file_name;
178
179 /* The current working directory of a translation. It's generally the
180 directory from which compilation was initiated, but a preprocessed
181 file may specify the original directory in which it was
182 created. */
183
184 static const char *src_pwd;
185
186 /* Initialize src_pwd with the given string, and return true. If it
187 was already initialized, return false. As a special case, it may
188 be called with a NULL argument to test whether src_pwd has NOT been
189 initialized yet. */
190
191 bool
192 set_src_pwd (const char *pwd)
193 {
194 if (src_pwd)
195 {
196 if (strcmp (src_pwd, pwd) == 0)
197 return true;
198 else
199 return false;
200 }
201
202 src_pwd = xstrdup (pwd);
203 return true;
204 }
205
206 /* Return the directory from which the translation unit was initiated,
207 in case set_src_pwd() was not called before to assign it a
208 different value. */
209
210 const char *
211 get_src_pwd (void)
212 {
213 if (! src_pwd)
214 {
215 src_pwd = getpwd ();
216 if (!src_pwd)
217 src_pwd = ".";
218 }
219
220 return src_pwd;
221 }
222
223 /* Called when the start of a function definition is parsed,
224 this function prints on stderr the name of the function. */
225 void
226 announce_function (tree decl)
227 {
228 if (!quiet_flag)
229 {
230 if (rtl_dump_and_exit)
231 fprintf (stderr, "%s ",
232 identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl))));
233 else
234 fprintf (stderr, " %s",
235 identifier_to_locale (lang_hooks.decl_printable_name (decl, 2)));
236 fflush (stderr);
237 pp_needs_newline (global_dc->printer) = true;
238 diagnostic_set_last_function (global_dc, (diagnostic_info *) NULL);
239 }
240 }
241
242 /* Initialize local_tick with a random number or -1 if
243 flag_random_seed is set. */
244
245 static void
246 init_local_tick (void)
247 {
248 if (!flag_random_seed)
249 {
250 /* Try urandom first. Time of day is too likely to collide.
251 In case of any error we just use the local tick. */
252
253 int fd = open ("/dev/urandom", O_RDONLY);
254 if (fd >= 0)
255 {
256 read (fd, &random_seed, sizeof (random_seed));
257 close (fd);
258 }
259
260 /* Now get the tick anyways */
261 #ifdef HAVE_GETTIMEOFDAY
262 {
263 struct timeval tv;
264
265 gettimeofday (&tv, NULL);
266 local_tick = tv.tv_sec * 1000 + tv.tv_usec / 1000;
267 }
268 #else
269 {
270 time_t now = time (NULL);
271
272 if (now != (time_t)-1)
273 local_tick = (unsigned) now;
274 }
275 #endif
276 }
277 else
278 local_tick = -1;
279 }
280
281 /* Set up a default flag_random_seed and local_tick, unless the user
282 already specified one. Must be called after init_local_tick. */
283
284 static void
285 init_random_seed (void)
286 {
287 if (flag_random_seed)
288 {
289 char *endp;
290
291 /* When the driver passed in a hex number don't crc it again */
292 random_seed = strtoul (flag_random_seed, &endp, 0);
293 if (!(endp > flag_random_seed && *endp == 0))
294 random_seed = crc32_string (0, flag_random_seed);
295 }
296 else if (!random_seed)
297 random_seed = local_tick ^ getpid (); /* Old racey fallback method */
298 }
299
300 /* Obtain the random_seed. Unless NOINIT, initialize it if
301 it's not provided in the command line. */
302
303 HOST_WIDE_INT
304 get_random_seed (bool noinit)
305 {
306 if (!flag_random_seed && !noinit)
307 init_random_seed ();
308 return random_seed;
309 }
310
311 /* Modify the random_seed string to VAL. Return its previous
312 value. */
313
314 const char *
315 set_random_seed (const char *val)
316 {
317 const char *old = flag_random_seed;
318 flag_random_seed = val;
319 return old;
320 }
321
322 /* Handler for fatal signals, such as SIGSEGV. These are transformed
323 into ICE messages, which is much more user friendly. In case the
324 error printer crashes, reset the signal to prevent infinite recursion. */
325
326 static void
327 crash_signal (int signo)
328 {
329 signal (signo, SIG_DFL);
330
331 /* If we crashed while processing an ASM statement, then be a little more
332 graceful. It's most likely the user's fault. */
333 if (this_is_asm_operands)
334 {
335 output_operand_lossage ("unrecoverable error");
336 exit (FATAL_EXIT_CODE);
337 }
338
339 internal_error ("%s", strsignal (signo));
340 }
341
342 /* A subroutine of wrapup_global_declarations. We've come to the end of
343 the compilation unit. All deferred variables should be undeferred,
344 and all incomplete decls should be finalized. */
345
346 void
347 wrapup_global_declaration_1 (tree decl)
348 {
349 /* We're not deferring this any longer. Assignment is conditional to
350 avoid needlessly dirtying PCH pages. */
351 if (CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_WITH_VIS)
352 && DECL_DEFER_OUTPUT (decl) != 0)
353 DECL_DEFER_OUTPUT (decl) = 0;
354
355 if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0)
356 lang_hooks.finish_incomplete_decl (decl);
357 }
358
359 /* A subroutine of wrapup_global_declarations. Decide whether or not DECL
360 needs to be output. Return true if it is output. */
361
362 bool
363 wrapup_global_declaration_2 (tree decl)
364 {
365 if (TREE_ASM_WRITTEN (decl) || DECL_EXTERNAL (decl)
366 || (TREE_CODE (decl) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (decl)))
367 return false;
368
369 /* Don't write out static consts, unless we still need them.
370
371 We also keep static consts if not optimizing (for debugging),
372 unless the user specified -fno-keep-static-consts.
373 ??? They might be better written into the debug information.
374 This is possible when using DWARF.
375
376 A language processor that wants static constants to be always
377 written out (even if it is not used) is responsible for
378 calling rest_of_decl_compilation itself. E.g. the C front-end
379 calls rest_of_decl_compilation from finish_decl.
380 One motivation for this is that is conventional in some
381 environments to write things like:
382 static const char rcsid[] = "... version string ...";
383 intending to force the string to be in the executable.
384
385 A language processor that would prefer to have unneeded
386 static constants "optimized away" would just defer writing
387 them out until here. E.g. C++ does this, because static
388 constants are often defined in header files.
389
390 ??? A tempting alternative (for both C and C++) would be
391 to force a constant to be written if and only if it is
392 defined in a main file, as opposed to an include file. */
393
394 if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
395 {
396 struct varpool_node *node;
397 bool needed = true;
398 node = varpool_get_node (decl);
399
400 if (!node && flag_ltrans)
401 needed = false;
402 else if (node && node->finalized)
403 needed = false;
404 else if (node && node->alias)
405 needed = false;
406 else if (!cgraph_global_info_ready
407 && (TREE_USED (decl)
408 || TREE_USED (DECL_ASSEMBLER_NAME (decl))))
409 /* needed */;
410 else if (node && node->analyzed)
411 /* needed */;
412 else if (DECL_COMDAT (decl))
413 needed = false;
414 else if (TREE_READONLY (decl) && !TREE_PUBLIC (decl)
415 && (optimize || !flag_keep_static_consts
416 || DECL_ARTIFICIAL (decl)))
417 needed = false;
418
419 if (needed)
420 {
421 rest_of_decl_compilation (decl, 1, 1);
422 return true;
423 }
424 }
425
426 return false;
427 }
428
429 /* Do any final processing required for the declarations in VEC, of
430 which there are LEN. We write out inline functions and variables
431 that have been deferred until this point, but which are required.
432 Returns nonzero if anything was put out. */
433
434 bool
435 wrapup_global_declarations (tree *vec, int len)
436 {
437 bool reconsider, output_something = false;
438 int i;
439
440 for (i = 0; i < len; i++)
441 wrapup_global_declaration_1 (vec[i]);
442
443 /* Now emit any global variables or functions that we have been
444 putting off. We need to loop in case one of the things emitted
445 here references another one which comes earlier in the list. */
446 do
447 {
448 reconsider = false;
449 for (i = 0; i < len; i++)
450 reconsider |= wrapup_global_declaration_2 (vec[i]);
451 if (reconsider)
452 output_something = true;
453 }
454 while (reconsider);
455
456 return output_something;
457 }
458
459 /* A subroutine of check_global_declarations. Issue appropriate warnings
460 for the global declaration DECL. */
461
462 void
463 check_global_declaration_1 (tree decl)
464 {
465 /* Warn about any function declared static but not defined. We don't
466 warn about variables, because many programs have static variables
467 that exist only to get some text into the object file. */
468 if (TREE_CODE (decl) == FUNCTION_DECL
469 && DECL_INITIAL (decl) == 0
470 && DECL_EXTERNAL (decl)
471 && ! DECL_ARTIFICIAL (decl)
472 && ! TREE_NO_WARNING (decl)
473 && ! TREE_PUBLIC (decl)
474 && (warn_unused_function
475 || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
476 {
477 if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
478 pedwarn (input_location, 0, "%q+F used but never defined", decl);
479 else
480 warning (OPT_Wunused_function, "%q+F declared %<static%> but never defined", decl);
481 /* This symbol is effectively an "extern" declaration now. */
482 TREE_PUBLIC (decl) = 1;
483 }
484
485 /* Warn about static fns or vars defined but not used. */
486 if (((warn_unused_function && TREE_CODE (decl) == FUNCTION_DECL)
487 /* We don't warn about "static const" variables because the
488 "rcs_id" idiom uses that construction. */
489 || (warn_unused_variable
490 && TREE_CODE (decl) == VAR_DECL && ! TREE_READONLY (decl)))
491 && ! DECL_IN_SYSTEM_HEADER (decl)
492 && ! TREE_USED (decl)
493 /* The TREE_USED bit for file-scope decls is kept in the identifier,
494 to handle multiple external decls in different scopes. */
495 && ! (DECL_NAME (decl) && TREE_USED (DECL_NAME (decl)))
496 && ! DECL_EXTERNAL (decl)
497 && ! TREE_PUBLIC (decl)
498 /* A volatile variable might be used in some non-obvious way. */
499 && ! TREE_THIS_VOLATILE (decl)
500 /* Global register variables must be declared to reserve them. */
501 && ! (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
502 /* Otherwise, ask the language. */
503 && lang_hooks.decls.warn_unused_global (decl))
504 warning ((TREE_CODE (decl) == FUNCTION_DECL)
505 ? OPT_Wunused_function
506 : OPT_Wunused_variable,
507 "%q+D defined but not used", decl);
508 }
509
510 /* Issue appropriate warnings for the global declarations in VEC (of
511 which there are LEN). */
512
513 void
514 check_global_declarations (tree *vec, int len)
515 {
516 int i;
517
518 for (i = 0; i < len; i++)
519 check_global_declaration_1 (vec[i]);
520 }
521
522 /* Emit debugging information for all global declarations in VEC. */
523
524 void
525 emit_debug_global_declarations (tree *vec, int len)
526 {
527 int i;
528
529 /* Avoid confusing the debug information machinery when there are errors. */
530 if (seen_error ())
531 return;
532
533 timevar_push (TV_SYMOUT);
534 for (i = 0; i < len; i++)
535 debug_hooks->global_decl (vec[i]);
536 timevar_pop (TV_SYMOUT);
537 }
538
539 /* Compile an entire translation unit. Write a file of assembly
540 output and various debugging dumps. */
541
542 static void
543 compile_file (void)
544 {
545 timevar_start (TV_PHASE_PARSING);
546 timevar_push (TV_PARSE_GLOBAL);
547
548 /* Call the parser, which parses the entire file (calling
549 rest_of_compilation for each function). */
550 lang_hooks.parse_file ();
551
552 timevar_pop (TV_PARSE_GLOBAL);
553 timevar_stop (TV_PHASE_PARSING);
554
555 /* Compilation is now finished except for writing
556 what's left of the symbol table output. */
557
558 if (flag_syntax_only || flag_wpa)
559 return;
560
561 ggc_protect_identifiers = false;
562
563 /* This must also call finalize_compilation_unit. */
564 lang_hooks.decls.final_write_globals ();
565
566 if (seen_error ())
567 return;
568
569 timevar_start (TV_PHASE_LATE_ASM);
570
571 /* Compilation unit is finalized. When producing non-fat LTO object, we are
572 basically finished. */
573 if (in_lto_p || !flag_lto || flag_fat_lto_objects)
574 {
575 /* Likewise for mudflap static object registrations. */
576 if (flag_mudflap)
577 mudflap_finish_file ();
578
579 output_shared_constant_pool ();
580 output_object_blocks ();
581 finish_tm_clone_pairs ();
582
583 /* Write out any pending weak symbol declarations. */
584 weak_finish ();
585
586 /* This must be at the end before unwind and debug info.
587 Some target ports emit PIC setup thunks here. */
588 targetm.asm_out.code_end ();
589
590 /* Do dbx symbols. */
591 timevar_push (TV_SYMOUT);
592
593 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_UNWIND_INFO
594 if (dwarf2out_do_frame ())
595 dwarf2out_frame_finish ();
596 #endif
597
598 (*debug_hooks->finish) (main_input_filename);
599 timevar_pop (TV_SYMOUT);
600
601 /* Output some stuff at end of file if nec. */
602
603 dw2_output_indirect_constants ();
604
605 /* Flush any pending external directives. */
606 process_pending_assemble_externals ();
607 }
608
609 /* Emit LTO marker if LTO info has been previously emitted. This is
610 used by collect2 to determine whether an object file contains IL.
611 We used to emit an undefined reference here, but this produces
612 link errors if an object file with IL is stored into a shared
613 library without invoking lto1. */
614 if (flag_generate_lto)
615 {
616 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
617 ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, NULL_TREE,
618 "__gnu_lto_v1",
619 (unsigned HOST_WIDE_INT) 1, 8);
620 #elif defined ASM_OUTPUT_ALIGNED_COMMON
621 ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, "__gnu_lto_v1",
622 (unsigned HOST_WIDE_INT) 1, 8);
623 #else
624 ASM_OUTPUT_COMMON (asm_out_file, "__gnu_lto_v1",
625 (unsigned HOST_WIDE_INT) 1,
626 (unsigned HOST_WIDE_INT) 1);
627 #endif
628 /* Let linker plugin know that this is a slim object and must be LTOed
629 even when user did not ask for it. */
630 if (!flag_fat_lto_objects)
631 {
632 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
633 ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, NULL_TREE,
634 "__gnu_lto_slim",
635 (unsigned HOST_WIDE_INT) 1, 8);
636 #elif defined ASM_OUTPUT_ALIGNED_COMMON
637 ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, "__gnu_lto_slim",
638 (unsigned HOST_WIDE_INT) 1, 8);
639 #else
640 ASM_OUTPUT_COMMON (asm_out_file, "__gnu_lto_slim",
641 (unsigned HOST_WIDE_INT) 1,
642 (unsigned HOST_WIDE_INT) 1);
643 #endif
644 }
645 }
646
647 /* Attach a special .ident directive to the end of the file to identify
648 the version of GCC which compiled this code. The format of the .ident
649 string is patterned after the ones produced by native SVR4 compilers. */
650 #ifdef IDENT_ASM_OP
651 if (!flag_no_ident)
652 {
653 const char *pkg_version = "(GNU) ";
654
655 if (strcmp ("(GCC) ", pkgversion_string))
656 pkg_version = pkgversion_string;
657 fprintf (asm_out_file, "%s\"GCC: %s%s\"\n",
658 IDENT_ASM_OP, pkg_version, version_string);
659 }
660 #endif
661
662 /* Invoke registered plugin callbacks. */
663 invoke_plugin_callbacks (PLUGIN_FINISH_UNIT, NULL);
664
665 /* This must be at the end. Some target ports emit end of file directives
666 into the assembly file here, and hence we can not output anything to the
667 assembly file after this point. */
668 targetm.asm_out.file_end ();
669
670 timevar_stop (TV_PHASE_LATE_ASM);
671 }
672
673 /* Print version information to FILE.
674 Each line begins with INDENT (for the case where FILE is the
675 assembler output file). */
676
677 void
678 print_version (FILE *file, const char *indent)
679 {
680 static const char fmt1[] =
681 #ifdef __GNUC__
682 N_("%s%s%s %sversion %s (%s)\n%s\tcompiled by GNU C version %s, ")
683 #else
684 N_("%s%s%s %sversion %s (%s) compiled by CC, ")
685 #endif
686 ;
687 static const char fmt2[] =
688 N_("GMP version %s, MPFR version %s, MPC version %s\n");
689 static const char fmt3[] =
690 N_("%s%swarning: %s header version %s differs from library version %s.\n");
691 static const char fmt4[] =
692 N_("%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n");
693 #ifndef __VERSION__
694 #define __VERSION__ "[?]"
695 #endif
696 fprintf (file,
697 file == stderr ? _(fmt1) : fmt1,
698 indent, *indent != 0 ? " " : "",
699 lang_hooks.name, pkgversion_string, version_string, TARGET_NAME,
700 indent, __VERSION__);
701
702 /* We need to stringify the GMP macro values. Ugh, gmp_version has
703 two string formats, "i.j.k" and "i.j" when k is zero. As of
704 gmp-4.3.0, GMP always uses the 3 number format. */
705 #define GCC_GMP_STRINGIFY_VERSION3(X) #X
706 #define GCC_GMP_STRINGIFY_VERSION2(X) GCC_GMP_STRINGIFY_VERSION3(X)
707 #define GCC_GMP_VERSION_NUM(X,Y,Z) (((X) << 16L) | ((Y) << 8) | (Z))
708 #define GCC_GMP_VERSION \
709 GCC_GMP_VERSION_NUM(__GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL)
710 #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,3,0) && __GNU_MP_VERSION_PATCHLEVEL == 0
711 #define GCC_GMP_STRINGIFY_VERSION GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION) "." \
712 GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_MINOR)
713 #else
714 #define GCC_GMP_STRINGIFY_VERSION GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION) "." \
715 GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_MINOR) "." \
716 GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_PATCHLEVEL)
717 #endif
718 fprintf (file,
719 file == stderr ? _(fmt2) : fmt2,
720 GCC_GMP_STRINGIFY_VERSION, MPFR_VERSION_STRING, MPC_VERSION_STRING);
721 if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
722 fprintf (file,
723 file == stderr ? _(fmt3) : fmt3,
724 indent, *indent != 0 ? " " : "",
725 "GMP", GCC_GMP_STRINGIFY_VERSION, gmp_version);
726 if (strcmp (MPFR_VERSION_STRING, mpfr_get_version ()))
727 fprintf (file,
728 file == stderr ? _(fmt3) : fmt3,
729 indent, *indent != 0 ? " " : "",
730 "MPFR", MPFR_VERSION_STRING, mpfr_get_version ());
731 if (strcmp (MPC_VERSION_STRING, mpc_get_version ()))
732 fprintf (file,
733 file == stderr ? _(fmt3) : fmt3,
734 indent, *indent != 0 ? " " : "",
735 "MPC", MPC_VERSION_STRING, mpc_get_version ());
736 fprintf (file,
737 file == stderr ? _(fmt4) : fmt4,
738 indent, *indent != 0 ? " " : "",
739 PARAM_VALUE (GGC_MIN_EXPAND), PARAM_VALUE (GGC_MIN_HEAPSIZE));
740
741 print_plugins_versions (file, indent);
742 }
743
744 static int
745 print_to_asm_out_file (print_switch_type type, const char * text)
746 {
747 bool prepend_sep = true;
748
749 switch (type)
750 {
751 case SWITCH_TYPE_LINE_END:
752 putc ('\n', asm_out_file);
753 return 1;
754
755 case SWITCH_TYPE_LINE_START:
756 fputs (ASM_COMMENT_START, asm_out_file);
757 return strlen (ASM_COMMENT_START);
758
759 case SWITCH_TYPE_DESCRIPTIVE:
760 if (ASM_COMMENT_START[0] == 0)
761 prepend_sep = false;
762 /* Drop through. */
763 case SWITCH_TYPE_PASSED:
764 case SWITCH_TYPE_ENABLED:
765 if (prepend_sep)
766 fputc (' ', asm_out_file);
767 fputs (text, asm_out_file);
768 /* No need to return the length here as
769 print_single_switch has already done it. */
770 return 0;
771
772 default:
773 return -1;
774 }
775 }
776
777 static int
778 print_to_stderr (print_switch_type type, const char * text)
779 {
780 switch (type)
781 {
782 case SWITCH_TYPE_LINE_END:
783 putc ('\n', stderr);
784 return 1;
785
786 case SWITCH_TYPE_LINE_START:
787 return 0;
788
789 case SWITCH_TYPE_PASSED:
790 case SWITCH_TYPE_ENABLED:
791 fputc (' ', stderr);
792 /* Drop through. */
793
794 case SWITCH_TYPE_DESCRIPTIVE:
795 fputs (text, stderr);
796 /* No need to return the length here as
797 print_single_switch has already done it. */
798 return 0;
799
800 default:
801 return -1;
802 }
803 }
804
805 /* Print an option value and return the adjusted position in the line.
806 ??? print_fn doesn't handle errors, eg disk full; presumably other
807 code will catch a disk full though. */
808
809 static int
810 print_single_switch (print_switch_fn_type print_fn,
811 int pos,
812 print_switch_type type,
813 const char * text)
814 {
815 /* The ultrix fprintf returns 0 on success, so compute the result
816 we want here since we need it for the following test. The +1
817 is for the separator character that will probably be emitted. */
818 int len = strlen (text) + 1;
819
820 if (pos != 0
821 && pos + len > MAX_LINE)
822 {
823 print_fn (SWITCH_TYPE_LINE_END, NULL);
824 pos = 0;
825 }
826
827 if (pos == 0)
828 pos += print_fn (SWITCH_TYPE_LINE_START, NULL);
829
830 print_fn (type, text);
831 return pos + len;
832 }
833
834 /* Print active target switches using PRINT_FN.
835 POS is the current cursor position and MAX is the size of a "line".
836 Each line begins with INDENT and ends with TERM.
837 Each switch is separated from the next by SEP. */
838
839 static void
840 print_switch_values (print_switch_fn_type print_fn)
841 {
842 int pos = 0;
843 size_t j;
844
845 /* Fill in the -frandom-seed option, if the user didn't pass it, so
846 that it can be printed below. This helps reproducibility. */
847 if (!flag_random_seed)
848 init_random_seed ();
849
850 /* Print the options as passed. */
851 pos = print_single_switch (print_fn, pos,
852 SWITCH_TYPE_DESCRIPTIVE, _("options passed: "));
853
854 for (j = 1; j < save_decoded_options_count; j++)
855 {
856 switch (save_decoded_options[j].opt_index)
857 {
858 case OPT_o:
859 case OPT_d:
860 case OPT_dumpbase:
861 case OPT_dumpdir:
862 case OPT_auxbase:
863 case OPT_quiet:
864 case OPT_version:
865 /* Ignore these. */
866 continue;
867 }
868
869 pos = print_single_switch (print_fn, pos, SWITCH_TYPE_PASSED,
870 save_decoded_options[j].orig_option_with_args_text);
871 }
872
873 if (pos > 0)
874 print_fn (SWITCH_TYPE_LINE_END, NULL);
875
876 /* Print the -f and -m options that have been enabled.
877 We don't handle language specific options but printing argv
878 should suffice. */
879 pos = print_single_switch (print_fn, 0,
880 SWITCH_TYPE_DESCRIPTIVE, _("options enabled: "));
881
882 for (j = 0; j < cl_options_count; j++)
883 if (cl_options[j].cl_report
884 && option_enabled (j, &global_options) > 0)
885 pos = print_single_switch (print_fn, pos,
886 SWITCH_TYPE_ENABLED, cl_options[j].opt_text);
887
888 print_fn (SWITCH_TYPE_LINE_END, NULL);
889 }
890
891 /* Open assembly code output file. Do this even if -fsyntax-only is
892 on, because then the driver will have provided the name of a
893 temporary file or bit bucket for us. NAME is the file specified on
894 the command line, possibly NULL. */
895 static void
896 init_asm_output (const char *name)
897 {
898 if (name == NULL && asm_file_name == 0)
899 asm_out_file = stdout;
900 else
901 {
902 if (asm_file_name == 0)
903 {
904 int len = strlen (dump_base_name);
905 char *dumpname = XNEWVEC (char, len + 6);
906
907 memcpy (dumpname, dump_base_name, len + 1);
908 strip_off_ending (dumpname, len);
909 strcat (dumpname, ".s");
910 asm_file_name = dumpname;
911 }
912 if (!strcmp (asm_file_name, "-"))
913 asm_out_file = stdout;
914 else
915 asm_out_file = fopen (asm_file_name, "w+b");
916 if (asm_out_file == 0)
917 fatal_error ("can%'t open %s for writing: %m", asm_file_name);
918 }
919
920 if (!flag_syntax_only)
921 {
922 targetm.asm_out.file_start ();
923
924 if (flag_record_gcc_switches)
925 {
926 if (targetm.asm_out.record_gcc_switches)
927 {
928 /* Let the target know that we are about to start recording. */
929 targetm.asm_out.record_gcc_switches (SWITCH_TYPE_DESCRIPTIVE,
930 NULL);
931 /* Now record the switches. */
932 print_switch_values (targetm.asm_out.record_gcc_switches);
933 /* Let the target know that the recording is over. */
934 targetm.asm_out.record_gcc_switches (SWITCH_TYPE_DESCRIPTIVE,
935 NULL);
936 }
937 else
938 inform (input_location, "-frecord-gcc-switches is not supported by the current target");
939 }
940
941 if (flag_verbose_asm)
942 {
943 /* Print the list of switches in effect
944 into the assembler file as comments. */
945 print_version (asm_out_file, ASM_COMMENT_START);
946 print_switch_values (print_to_asm_out_file);
947 putc ('\n', asm_out_file);
948 }
949 }
950 }
951
952 /* A helper function; used as the reallocator function for cpp's line
953 table. */
954 static void *
955 realloc_for_line_map (void *ptr, size_t len)
956 {
957 return GGC_RESIZEVAR (void, ptr, len);
958 }
959
960 /* A helper function: used as the allocator function for
961 identifier_to_locale. */
962 static void *
963 alloc_for_identifier_to_locale (size_t len)
964 {
965 return ggc_alloc_atomic (len);
966 }
967
968 /* Output stack usage information. */
969 void
970 output_stack_usage (void)
971 {
972 static bool warning_issued = false;
973 enum stack_usage_kind_type { STATIC = 0, DYNAMIC, DYNAMIC_BOUNDED };
974 const char *stack_usage_kind_str[] = {
975 "static",
976 "dynamic",
977 "dynamic,bounded"
978 };
979 HOST_WIDE_INT stack_usage = current_function_static_stack_size;
980 enum stack_usage_kind_type stack_usage_kind;
981
982 if (stack_usage < 0)
983 {
984 if (!warning_issued)
985 {
986 warning (0, "stack usage computation not supported for this target");
987 warning_issued = true;
988 }
989 return;
990 }
991
992 stack_usage_kind = STATIC;
993
994 /* Add the maximum amount of space pushed onto the stack. */
995 if (current_function_pushed_stack_size > 0)
996 {
997 stack_usage += current_function_pushed_stack_size;
998 stack_usage_kind = DYNAMIC_BOUNDED;
999 }
1000
1001 /* Now on to the tricky part: dynamic stack allocation. */
1002 if (current_function_allocates_dynamic_stack_space)
1003 {
1004 if (current_function_has_unbounded_dynamic_stack_size)
1005 stack_usage_kind = DYNAMIC;
1006 else
1007 stack_usage_kind = DYNAMIC_BOUNDED;
1008
1009 /* Add the size even in the unbounded case, this can't hurt. */
1010 stack_usage += current_function_dynamic_stack_size;
1011 }
1012
1013 if (flag_stack_usage)
1014 {
1015 expanded_location loc
1016 = expand_location (DECL_SOURCE_LOCATION (current_function_decl));
1017 const char *raw_id, *id;
1018
1019 /* Strip the scope prefix if any. */
1020 raw_id = lang_hooks.decl_printable_name (current_function_decl, 2);
1021 id = strrchr (raw_id, '.');
1022 if (id)
1023 id++;
1024 else
1025 id = raw_id;
1026
1027 fprintf (stack_usage_file,
1028 "%s:%d:%d:%s\t"HOST_WIDE_INT_PRINT_DEC"\t%s\n",
1029 lbasename (loc.file),
1030 loc.line,
1031 loc.column,
1032 id,
1033 stack_usage,
1034 stack_usage_kind_str[stack_usage_kind]);
1035 }
1036
1037 if (warn_stack_usage >= 0)
1038 {
1039 if (stack_usage_kind == DYNAMIC)
1040 warning (OPT_Wstack_usage_, "stack usage might be unbounded");
1041 else if (stack_usage > warn_stack_usage)
1042 {
1043 if (stack_usage_kind == DYNAMIC_BOUNDED)
1044 warning (OPT_Wstack_usage_, "stack usage might be %wd bytes",
1045 stack_usage);
1046 else
1047 warning (OPT_Wstack_usage_, "stack usage is %wd bytes",
1048 stack_usage);
1049 }
1050 }
1051 }
1052
1053 /* Open an auxiliary output file. */
1054 static FILE *
1055 open_auxiliary_file (const char *ext)
1056 {
1057 char *filename;
1058 FILE *file;
1059
1060 filename = concat (aux_base_name, ".", ext, NULL);
1061 file = fopen (filename, "w");
1062 if (!file)
1063 fatal_error ("can%'t open %s for writing: %m", filename);
1064 free (filename);
1065 return file;
1066 }
1067
1068 /* Initialization of the front end environment, before command line
1069 options are parsed. Signal handlers, internationalization etc.
1070 ARGV0 is main's argv[0]. */
1071 static void
1072 general_init (const char *argv0)
1073 {
1074 const char *p;
1075
1076 p = argv0 + strlen (argv0);
1077 while (p != argv0 && !IS_DIR_SEPARATOR (p[-1]))
1078 --p;
1079 progname = p;
1080
1081 xmalloc_set_program_name (progname);
1082
1083 hex_init ();
1084
1085 /* Unlock the stdio streams. */
1086 unlock_std_streams ();
1087
1088 gcc_init_libintl ();
1089
1090 identifier_to_locale_alloc = alloc_for_identifier_to_locale;
1091 identifier_to_locale_free = ggc_free;
1092
1093 /* Initialize the diagnostics reporting machinery, so option parsing
1094 can give warnings and errors. */
1095 diagnostic_initialize (global_dc, N_OPTS);
1096 /* Set a default printer. Language specific initializations will
1097 override it later. */
1098 tree_diagnostics_defaults (global_dc);
1099 /* FIXME: This should probably be moved to C-family
1100 language-specific initializations. */
1101 /* By default print macro expansion contexts in the diagnostic
1102 finalizer -- for tokens resulting from macro expansion. */
1103 diagnostic_finalizer (global_dc) = virt_loc_aware_diagnostic_finalizer;
1104
1105 global_dc->show_caret
1106 = global_options_init.x_flag_diagnostics_show_caret;
1107 global_dc->show_option_requested
1108 = global_options_init.x_flag_diagnostics_show_option;
1109 global_dc->show_column
1110 = global_options_init.x_flag_show_column;
1111 global_dc->internal_error = plugins_internal_error_function;
1112 global_dc->option_enabled = option_enabled;
1113 global_dc->option_state = &global_options;
1114 global_dc->option_name = option_name;
1115
1116 /* Trap fatal signals, e.g. SIGSEGV, and convert them to ICE messages. */
1117 #ifdef SIGSEGV
1118 signal (SIGSEGV, crash_signal);
1119 #endif
1120 #ifdef SIGILL
1121 signal (SIGILL, crash_signal);
1122 #endif
1123 #ifdef SIGBUS
1124 signal (SIGBUS, crash_signal);
1125 #endif
1126 #ifdef SIGABRT
1127 signal (SIGABRT, crash_signal);
1128 #endif
1129 #if defined SIGIOT && (!defined SIGABRT || SIGABRT != SIGIOT)
1130 signal (SIGIOT, crash_signal);
1131 #endif
1132 #ifdef SIGFPE
1133 signal (SIGFPE, crash_signal);
1134 #endif
1135
1136 /* Other host-specific signal setup. */
1137 (*host_hooks.extra_signals)();
1138
1139 /* Initialize the garbage-collector, string pools and tree type hash
1140 table. */
1141 init_ggc ();
1142 init_stringpool ();
1143 line_table = ggc_alloc_line_maps ();
1144 linemap_init (line_table);
1145 line_table->reallocator = realloc_for_line_map;
1146 line_table->round_alloc_size = ggc_round_alloc_size;
1147 init_ttree ();
1148
1149 /* Initialize register usage now so switches may override. */
1150 init_reg_sets ();
1151
1152 /* Register the language-independent parameters. */
1153 global_init_params ();
1154
1155 /* This must be done after global_init_params but before argument
1156 processing. */
1157 init_ggc_heuristics();
1158 init_optimization_passes ();
1159 statistics_early_init ();
1160 finish_params ();
1161 }
1162
1163 /* Return true if the current target supports -fsection-anchors. */
1164
1165 static bool
1166 target_supports_section_anchors_p (void)
1167 {
1168 if (targetm.min_anchor_offset == 0 && targetm.max_anchor_offset == 0)
1169 return false;
1170
1171 if (targetm.asm_out.output_anchor == NULL)
1172 return false;
1173
1174 return true;
1175 }
1176
1177 /* Default the align_* variables to 1 if they're still unset, and
1178 set up the align_*_log variables. */
1179 static void
1180 init_alignments (void)
1181 {
1182 if (align_loops <= 0)
1183 align_loops = 1;
1184 if (align_loops_max_skip > align_loops)
1185 align_loops_max_skip = align_loops - 1;
1186 align_loops_log = floor_log2 (align_loops * 2 - 1);
1187 if (align_jumps <= 0)
1188 align_jumps = 1;
1189 if (align_jumps_max_skip > align_jumps)
1190 align_jumps_max_skip = align_jumps - 1;
1191 align_jumps_log = floor_log2 (align_jumps * 2 - 1);
1192 if (align_labels <= 0)
1193 align_labels = 1;
1194 align_labels_log = floor_log2 (align_labels * 2 - 1);
1195 if (align_labels_max_skip > align_labels)
1196 align_labels_max_skip = align_labels - 1;
1197 if (align_functions <= 0)
1198 align_functions = 1;
1199 align_functions_log = floor_log2 (align_functions * 2 - 1);
1200 }
1201
1202 /* Process the options that have been parsed. */
1203 static void
1204 process_options (void)
1205 {
1206 /* Just in case lang_hooks.post_options ends up calling a debug_hook.
1207 This can happen with incorrect pre-processed input. */
1208 debug_hooks = &do_nothing_debug_hooks;
1209
1210 maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT;
1211
1212 /* Allow the front end to perform consistency checks and do further
1213 initialization based on the command line options. This hook also
1214 sets the original filename if appropriate (e.g. foo.i -> foo.c)
1215 so we can correctly initialize debug output. */
1216 no_backend = lang_hooks.post_options (&main_input_filename);
1217
1218 /* Some machines may reject certain combinations of options. */
1219 targetm.target_option.override ();
1220
1221 /* Avoid any informative notes in the second run of -fcompare-debug. */
1222 if (flag_compare_debug)
1223 diagnostic_inhibit_notes (global_dc);
1224
1225 if (flag_section_anchors && !target_supports_section_anchors_p ())
1226 {
1227 warning (OPT_fsection_anchors,
1228 "this target does not support %qs", "-fsection-anchors");
1229 flag_section_anchors = 0;
1230 }
1231
1232 if (flag_short_enums == 2)
1233 flag_short_enums = targetm.default_short_enums ();
1234
1235 /* Set aux_base_name if not already set. */
1236 if (aux_base_name)
1237 ;
1238 else if (main_input_filename)
1239 {
1240 char *name = xstrdup (lbasename (main_input_filename));
1241
1242 strip_off_ending (name, strlen (name));
1243 aux_base_name = name;
1244 }
1245 else
1246 aux_base_name = "gccaux";
1247
1248 #ifndef HAVE_cloog
1249 if (flag_graphite
1250 || flag_graphite_identity
1251 || flag_loop_block
1252 || flag_loop_interchange
1253 || flag_loop_strip_mine
1254 || flag_loop_parallelize_all)
1255 sorry ("Graphite loop optimizations cannot be used (-fgraphite, "
1256 "-fgraphite-identity, -floop-block, "
1257 "-floop-interchange, -floop-strip-mine, -floop-parallelize-all, "
1258 "and -ftree-loop-linear)");
1259 #endif
1260
1261 if (flag_mudflap && flag_lto)
1262 sorry ("mudflap cannot be used together with link-time optimization");
1263
1264 /* One region RA really helps to decrease the code size. */
1265 if (flag_ira_region == IRA_REGION_AUTODETECT)
1266 flag_ira_region
1267 = optimize_size || !optimize ? IRA_REGION_ONE : IRA_REGION_MIXED;
1268
1269 if (flag_strict_volatile_bitfields > 0 && !abi_version_at_least (2))
1270 {
1271 warning (0, "-fstrict-volatile-bitfields disabled; "
1272 "it is incompatible with ABI versions < 2");
1273 flag_strict_volatile_bitfields = 0;
1274 }
1275
1276 /* Unrolling all loops implies that standard loop unrolling must also
1277 be done. */
1278 if (flag_unroll_all_loops)
1279 flag_unroll_loops = 1;
1280
1281 /* web and rename-registers help when run after loop unrolling. */
1282 if (flag_web == AUTODETECT_VALUE)
1283 flag_web = flag_unroll_loops || flag_peel_loops;
1284
1285 if (flag_rename_registers == AUTODETECT_VALUE)
1286 flag_rename_registers = flag_unroll_loops || flag_peel_loops;
1287
1288 if (flag_non_call_exceptions)
1289 flag_asynchronous_unwind_tables = 1;
1290 if (flag_asynchronous_unwind_tables)
1291 flag_unwind_tables = 1;
1292
1293 if (flag_value_profile_transformations)
1294 flag_profile_values = 1;
1295
1296 /* Warn about options that are not supported on this machine. */
1297 #ifndef INSN_SCHEDULING
1298 if (flag_schedule_insns || flag_schedule_insns_after_reload)
1299 warning (0, "instruction scheduling not supported on this target machine");
1300 #endif
1301 #ifndef DELAY_SLOTS
1302 if (flag_delayed_branch)
1303 warning (0, "this target machine does not have delayed branches");
1304 #endif
1305
1306 user_label_prefix = USER_LABEL_PREFIX;
1307 if (flag_leading_underscore != -1)
1308 {
1309 /* If the default prefix is more complicated than "" or "_",
1310 issue a warning and ignore this option. */
1311 if (user_label_prefix[0] == 0 ||
1312 (user_label_prefix[0] == '_' && user_label_prefix[1] == 0))
1313 {
1314 user_label_prefix = flag_leading_underscore ? "_" : "";
1315 }
1316 else
1317 warning (0, "-f%sleading-underscore not supported on this target machine",
1318 flag_leading_underscore ? "" : "no-");
1319 }
1320
1321 /* If we are in verbose mode, write out the version and maybe all the
1322 option flags in use. */
1323 if (version_flag)
1324 {
1325 print_version (stderr, "");
1326 if (! quiet_flag)
1327 print_switch_values (print_to_stderr);
1328 }
1329
1330 if (flag_syntax_only)
1331 {
1332 write_symbols = NO_DEBUG;
1333 profile_flag = 0;
1334 }
1335
1336 if (flag_gtoggle)
1337 {
1338 if (debug_info_level == DINFO_LEVEL_NONE)
1339 {
1340 debug_info_level = DINFO_LEVEL_NORMAL;
1341
1342 if (write_symbols == NO_DEBUG)
1343 write_symbols = PREFERRED_DEBUGGING_TYPE;
1344 }
1345 else
1346 debug_info_level = DINFO_LEVEL_NONE;
1347 }
1348
1349 if (flag_dump_final_insns && !flag_syntax_only && !no_backend)
1350 {
1351 FILE *final_output = fopen (flag_dump_final_insns, "w");
1352 if (!final_output)
1353 {
1354 error ("could not open final insn dump file %qs: %m",
1355 flag_dump_final_insns);
1356 flag_dump_final_insns = NULL;
1357 }
1358 else if (fclose (final_output))
1359 {
1360 error ("could not close zeroed insn dump file %qs: %m",
1361 flag_dump_final_insns);
1362 flag_dump_final_insns = NULL;
1363 }
1364 }
1365
1366 /* A lot of code assumes write_symbols == NO_DEBUG if the debugging
1367 level is 0. */
1368 if (debug_info_level == DINFO_LEVEL_NONE)
1369 write_symbols = NO_DEBUG;
1370
1371 if (write_symbols == NO_DEBUG)
1372 ;
1373 #if defined(DBX_DEBUGGING_INFO)
1374 else if (write_symbols == DBX_DEBUG)
1375 debug_hooks = &dbx_debug_hooks;
1376 #endif
1377 #if defined(XCOFF_DEBUGGING_INFO)
1378 else if (write_symbols == XCOFF_DEBUG)
1379 debug_hooks = &xcoff_debug_hooks;
1380 #endif
1381 #ifdef SDB_DEBUGGING_INFO
1382 else if (write_symbols == SDB_DEBUG)
1383 debug_hooks = &sdb_debug_hooks;
1384 #endif
1385 #ifdef DWARF2_DEBUGGING_INFO
1386 else if (write_symbols == DWARF2_DEBUG)
1387 debug_hooks = &dwarf2_debug_hooks;
1388 #endif
1389 #ifdef VMS_DEBUGGING_INFO
1390 else if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
1391 debug_hooks = &vmsdbg_debug_hooks;
1392 #endif
1393 else
1394 error ("target system does not support the \"%s\" debug format",
1395 debug_type_names[write_symbols]);
1396
1397 /* We know which debug output will be used so we can set flag_var_tracking
1398 and flag_var_tracking_uninit if the user has not specified them. */
1399 if (debug_info_level < DINFO_LEVEL_NORMAL
1400 || debug_hooks->var_location == do_nothing_debug_hooks.var_location)
1401 {
1402 if (flag_var_tracking == 1
1403 || flag_var_tracking_uninit == 1)
1404 {
1405 if (debug_info_level < DINFO_LEVEL_NORMAL)
1406 warning (0, "variable tracking requested, but useless unless "
1407 "producing debug info");
1408 else
1409 warning (0, "variable tracking requested, but not supported "
1410 "by this debug format");
1411 }
1412 flag_var_tracking = 0;
1413 flag_var_tracking_uninit = 0;
1414 }
1415
1416 /* The debug hooks are used to implement -fdump-go-spec because it
1417 gives a simple and stable API for all the information we need to
1418 dump. */
1419 if (flag_dump_go_spec != NULL)
1420 debug_hooks = dump_go_spec_init (flag_dump_go_spec, debug_hooks);
1421
1422 /* If the user specifically requested variable tracking with tagging
1423 uninitialized variables, we need to turn on variable tracking.
1424 (We already determined above that variable tracking is feasible.) */
1425 if (flag_var_tracking_uninit)
1426 flag_var_tracking = 1;
1427
1428 if (flag_var_tracking == AUTODETECT_VALUE)
1429 flag_var_tracking = optimize >= 1;
1430
1431 if (flag_var_tracking_assignments == AUTODETECT_VALUE)
1432 flag_var_tracking_assignments = flag_var_tracking
1433 && !(flag_selective_scheduling || flag_selective_scheduling2);
1434
1435 if (flag_var_tracking_assignments_toggle)
1436 flag_var_tracking_assignments = !flag_var_tracking_assignments;
1437
1438 if (flag_var_tracking_assignments && !flag_var_tracking)
1439 flag_var_tracking = flag_var_tracking_assignments = -1;
1440
1441 if (flag_var_tracking_assignments
1442 && (flag_selective_scheduling || flag_selective_scheduling2))
1443 warning (0, "var-tracking-assignments changes selective scheduling");
1444
1445 if (flag_tree_cselim == AUTODETECT_VALUE)
1446 #ifdef HAVE_conditional_move
1447 flag_tree_cselim = 1;
1448 #else
1449 flag_tree_cselim = 0;
1450 #endif
1451
1452 /* If auxiliary info generation is desired, open the output file.
1453 This goes in the same directory as the source file--unlike
1454 all the other output files. */
1455 if (flag_gen_aux_info)
1456 {
1457 aux_info_file = fopen (aux_info_file_name, "w");
1458 if (aux_info_file == 0)
1459 fatal_error ("can%'t open %s: %m", aux_info_file_name);
1460 }
1461
1462 if (!targetm_common.have_named_sections)
1463 {
1464 if (flag_function_sections)
1465 {
1466 warning (0, "-ffunction-sections not supported for this target");
1467 flag_function_sections = 0;
1468 }
1469 if (flag_data_sections)
1470 {
1471 warning (0, "-fdata-sections not supported for this target");
1472 flag_data_sections = 0;
1473 }
1474 }
1475
1476 if (flag_function_sections && profile_flag)
1477 {
1478 warning (0, "-ffunction-sections disabled; it makes profiling impossible");
1479 flag_function_sections = 0;
1480 }
1481
1482 #ifndef HAVE_prefetch
1483 if (flag_prefetch_loop_arrays > 0)
1484 {
1485 warning (0, "-fprefetch-loop-arrays not supported for this target");
1486 flag_prefetch_loop_arrays = 0;
1487 }
1488 #else
1489 if (flag_prefetch_loop_arrays > 0 && !HAVE_prefetch)
1490 {
1491 warning (0, "-fprefetch-loop-arrays not supported for this target (try -march switches)");
1492 flag_prefetch_loop_arrays = 0;
1493 }
1494 #endif
1495
1496 /* This combination of options isn't handled for i386 targets and doesn't
1497 make much sense anyway, so don't allow it. */
1498 if (flag_prefetch_loop_arrays > 0 && optimize_size)
1499 {
1500 warning (0, "-fprefetch-loop-arrays is not supported with -Os");
1501 flag_prefetch_loop_arrays = 0;
1502 }
1503
1504 /* The presence of IEEE signaling NaNs, implies all math can trap. */
1505 if (flag_signaling_nans)
1506 flag_trapping_math = 1;
1507
1508 /* We cannot reassociate if we want traps or signed zeros. */
1509 if (flag_associative_math && (flag_trapping_math || flag_signed_zeros))
1510 {
1511 warning (0, "-fassociative-math disabled; other options take precedence");
1512 flag_associative_math = 0;
1513 }
1514
1515 /* With -fcx-limited-range, we do cheap and quick complex arithmetic. */
1516 if (flag_cx_limited_range)
1517 flag_complex_method = 0;
1518
1519 /* With -fcx-fortran-rules, we do something in-between cheap and C99. */
1520 if (flag_cx_fortran_rules)
1521 flag_complex_method = 1;
1522
1523 /* Targets must be able to place spill slots at lower addresses. If the
1524 target already uses a soft frame pointer, the transition is trivial. */
1525 if (!FRAME_GROWS_DOWNWARD && flag_stack_protect)
1526 {
1527 warning (0, "-fstack-protector not supported for this target");
1528 flag_stack_protect = 0;
1529 }
1530 if (!flag_stack_protect)
1531 warn_stack_protect = 0;
1532
1533 /* ??? Unwind info is not correct around the CFG unless either a frame
1534 pointer is present or A_O_A is set. Fixing this requires rewriting
1535 unwind info generation to be aware of the CFG and propagating states
1536 around edges. */
1537 if (flag_unwind_tables && !ACCUMULATE_OUTGOING_ARGS
1538 && flag_omit_frame_pointer)
1539 {
1540 warning (0, "unwind tables currently require a frame pointer "
1541 "for correctness");
1542 flag_omit_frame_pointer = 0;
1543 }
1544
1545 /* Enable -Werror=coverage-mismatch when -Werror and -Wno-error
1546 have not been set. */
1547 if (!global_options_set.x_warnings_are_errors
1548 && warn_coverage_mismatch
1549 && (global_dc->classify_diagnostic[OPT_Wcoverage_mismatch] ==
1550 DK_UNSPECIFIED))
1551 diagnostic_classify_diagnostic (global_dc, OPT_Wcoverage_mismatch,
1552 DK_ERROR, UNKNOWN_LOCATION);
1553
1554 /* Save the current optimization options. */
1555 optimization_default_node = build_optimization_node ();
1556 optimization_current_node = optimization_default_node;
1557 }
1558
1559 /* This function can be called multiple times to reinitialize the compiler
1560 back end when register classes or instruction sets have changed,
1561 before each function. */
1562 static void
1563 backend_init_target (void)
1564 {
1565 /* Initialize alignment variables. */
1566 init_alignments ();
1567
1568 /* This reinitializes hard_frame_pointer, and calls init_reg_modes_target()
1569 to initialize reg_raw_mode[]. */
1570 init_emit_regs ();
1571
1572 /* This invokes target hooks to set fixed_reg[] etc, which is
1573 mode-dependent. */
1574 init_regs ();
1575
1576 /* This depends on stack_pointer_rtx. */
1577 init_fake_stack_mems ();
1578
1579 /* Sets static_base_value[HARD_FRAME_POINTER_REGNUM], which is
1580 mode-dependent. */
1581 init_alias_target ();
1582
1583 /* Depends on HARD_FRAME_POINTER_REGNUM. */
1584 init_reload ();
1585
1586 /* The following initialization functions need to generate rtl, so
1587 provide a dummy function context for them. */
1588 init_dummy_function_start ();
1589
1590 /* rtx_cost is mode-dependent, so cached values need to be recomputed
1591 on a mode change. */
1592 init_expmed ();
1593 init_lower_subreg ();
1594
1595 /* We may need to recompute regno_save_code[] and regno_restore_code[]
1596 after a mode change as well. */
1597 caller_save_initialized_p = false;
1598
1599 expand_dummy_function_end ();
1600 }
1601
1602 /* Initialize the compiler back end. This function is called only once,
1603 when starting the compiler. */
1604 static void
1605 backend_init (void)
1606 {
1607 init_emit_once ();
1608
1609 init_rtlanal ();
1610 init_inline_once ();
1611 init_varasm_once ();
1612 save_register_info ();
1613
1614 /* Initialize the target-specific back end pieces. */
1615 ira_init_once ();
1616 backend_init_target ();
1617 }
1618
1619 /* Initialize excess precision settings. */
1620 static void
1621 init_excess_precision (void)
1622 {
1623 /* Adjust excess precision handling based on the target options. If
1624 the front end cannot handle it, flag_excess_precision_cmdline
1625 will already have been set accordingly in the post_options
1626 hook. */
1627 gcc_assert (flag_excess_precision_cmdline != EXCESS_PRECISION_DEFAULT);
1628 flag_excess_precision = flag_excess_precision_cmdline;
1629 if (flag_unsafe_math_optimizations)
1630 flag_excess_precision = EXCESS_PRECISION_FAST;
1631 if (flag_excess_precision == EXCESS_PRECISION_STANDARD)
1632 {
1633 int flt_eval_method = TARGET_FLT_EVAL_METHOD;
1634 switch (flt_eval_method)
1635 {
1636 case -1:
1637 case 0:
1638 /* Either the target acts unpredictably (-1) or has all the
1639 operations required not to have excess precision (0). */
1640 flag_excess_precision = EXCESS_PRECISION_FAST;
1641 break;
1642 case 1:
1643 case 2:
1644 /* In these cases, predictable excess precision makes
1645 sense. */
1646 break;
1647 default:
1648 /* Any other implementation-defined FLT_EVAL_METHOD values
1649 require the compiler to handle the associated excess
1650 precision rules in excess_precision_type. */
1651 gcc_unreachable ();
1652 }
1653 }
1654 }
1655
1656 /* Initialize things that are both lang-dependent and target-dependent.
1657 This function can be called more than once if target parameters change. */
1658 static void
1659 lang_dependent_init_target (void)
1660 {
1661 /* This determines excess precision settings. */
1662 init_excess_precision ();
1663
1664 /* This creates various _DECL nodes, so needs to be called after the
1665 front end is initialized. It also depends on the HAVE_xxx macros
1666 generated from the target machine description. */
1667 init_optabs ();
1668
1669 /* The following initialization functions need to generate rtl, so
1670 provide a dummy function context for them. */
1671 init_dummy_function_start ();
1672
1673 /* Do the target-specific parts of expr initialization. */
1674 init_expr_target ();
1675
1676 /* Although the actions of these functions are language-independent,
1677 they use optabs, so we cannot call them from backend_init. */
1678 init_set_costs ();
1679 ira_init ();
1680
1681 expand_dummy_function_end ();
1682 }
1683
1684 /* Language-dependent initialization. Returns nonzero on success. */
1685 static int
1686 lang_dependent_init (const char *name)
1687 {
1688 location_t save_loc = input_location;
1689 if (dump_base_name == 0)
1690 dump_base_name = name && name[0] ? name : "gccdump";
1691
1692 /* Other front-end initialization. */
1693 input_location = BUILTINS_LOCATION;
1694 if (lang_hooks.init () == 0)
1695 return 0;
1696 input_location = save_loc;
1697
1698 if (!flag_wpa)
1699 {
1700 init_asm_output (name);
1701
1702 /* If stack usage information is desired, open the output file. */
1703 if (flag_stack_usage)
1704 stack_usage_file = open_auxiliary_file ("su");
1705 }
1706
1707 /* This creates various _DECL nodes, so needs to be called after the
1708 front end is initialized. */
1709 init_eh ();
1710
1711 /* Do the target-specific parts of the initialization. */
1712 lang_dependent_init_target ();
1713
1714 if (!flag_wpa)
1715 {
1716 /* If dbx symbol table desired, initialize writing it and output the
1717 predefined types. */
1718 timevar_push (TV_SYMOUT);
1719
1720 /* Now we have the correct original filename, we can initialize
1721 debug output. */
1722 (*debug_hooks->init) (name);
1723
1724 timevar_pop (TV_SYMOUT);
1725 }
1726
1727 return 1;
1728 }
1729
1730
1731 /* Reinitialize everything when target parameters, such as register usage,
1732 have changed. */
1733 void
1734 target_reinit (void)
1735 {
1736 struct rtl_data saved_x_rtl;
1737 rtx *saved_regno_reg_rtx;
1738
1739 /* Save *crtl and regno_reg_rtx around the reinitialization
1740 to allow target_reinit being called even after prepare_function_start. */
1741 saved_regno_reg_rtx = regno_reg_rtx;
1742 if (saved_regno_reg_rtx)
1743 {
1744 saved_x_rtl = *crtl;
1745 memset (crtl, '\0', sizeof (*crtl));
1746 regno_reg_rtx = NULL;
1747 }
1748
1749 /* Reinitialize RTL backend. */
1750 backend_init_target ();
1751
1752 /* Reinitialize lang-dependent parts. */
1753 lang_dependent_init_target ();
1754
1755 /* And restore it at the end, as free_after_compilation from
1756 expand_dummy_function_end clears it. */
1757 if (saved_regno_reg_rtx)
1758 {
1759 *crtl = saved_x_rtl;
1760 regno_reg_rtx = saved_regno_reg_rtx;
1761 saved_regno_reg_rtx = NULL;
1762 }
1763 }
1764
1765 void
1766 dump_memory_report (bool final)
1767 {
1768 dump_line_table_statistics ();
1769 ggc_print_statistics ();
1770 stringpool_statistics ();
1771 dump_tree_statistics ();
1772 dump_gimple_statistics ();
1773 dump_rtx_statistics ();
1774 dump_alloc_pool_statistics ();
1775 dump_bitmap_statistics ();
1776 dump_vec_loc_statistics ();
1777 dump_ggc_loc_statistics (final);
1778 dump_alias_stats (stderr);
1779 dump_pta_stats (stderr);
1780 }
1781
1782 /* Clean up: close opened files, etc. */
1783
1784 static void
1785 finalize (bool no_backend)
1786 {
1787 /* Close the dump files. */
1788 if (flag_gen_aux_info)
1789 {
1790 fclose (aux_info_file);
1791 if (seen_error ())
1792 unlink (aux_info_file_name);
1793 }
1794
1795 /* Close non-debugging input and output files. Take special care to note
1796 whether fclose returns an error, since the pages might still be on the
1797 buffer chain while the file is open. */
1798
1799 if (asm_out_file)
1800 {
1801 if (ferror (asm_out_file) != 0)
1802 fatal_error ("error writing to %s: %m", asm_file_name);
1803 if (fclose (asm_out_file) != 0)
1804 fatal_error ("error closing %s: %m", asm_file_name);
1805 }
1806
1807 if (stack_usage_file)
1808 fclose (stack_usage_file);
1809
1810 if (!no_backend)
1811 {
1812 statistics_fini ();
1813
1814 finish_optimization_passes ();
1815
1816 ira_finish_once ();
1817 }
1818
1819 if (mem_report)
1820 dump_memory_report (true);
1821
1822 /* Language-specific end of compilation actions. */
1823 lang_hooks.finish ();
1824 }
1825
1826 /* Initialize the compiler, and compile the input file. */
1827 static void
1828 do_compile (void)
1829 {
1830 /* Initialize timing first. The C front ends read the main file in
1831 the post_options hook, and C++ does file timings. */
1832 if (time_report || !quiet_flag || flag_detailed_statistics)
1833 timevar_init ();
1834 timevar_start (TV_TOTAL);
1835
1836 process_options ();
1837
1838 /* Don't do any more if an error has already occurred. */
1839 if (!seen_error ())
1840 {
1841 timevar_start (TV_PHASE_SETUP);
1842
1843 /* This must be run always, because it is needed to compute the FP
1844 predefined macros, such as __LDBL_MAX__, for targets using non
1845 default FP formats. */
1846 init_adjust_machine_modes ();
1847
1848 /* Set up the back-end if requested. */
1849 if (!no_backend)
1850 backend_init ();
1851
1852 /* Language-dependent initialization. Returns true on success. */
1853 if (lang_dependent_init (main_input_filename))
1854 {
1855 /* Initialize yet another pass. */
1856
1857 ggc_protect_identifiers = true;
1858
1859 init_cgraph ();
1860 init_final (main_input_filename);
1861 coverage_init (aux_base_name);
1862 statistics_init ();
1863 invoke_plugin_callbacks (PLUGIN_START_UNIT, NULL);
1864
1865 timevar_stop (TV_PHASE_SETUP);
1866
1867 compile_file ();
1868 }
1869 else
1870 {
1871 timevar_stop (TV_PHASE_SETUP);
1872 }
1873
1874 timevar_start (TV_PHASE_FINALIZE);
1875
1876 finalize (no_backend);
1877
1878 timevar_stop (TV_PHASE_FINALIZE);
1879 }
1880
1881 /* Stop timing and print the times. */
1882 timevar_stop (TV_TOTAL);
1883 timevar_print (stderr);
1884 }
1885
1886 /* Entry point of cc1, cc1plus, jc1, f771, etc.
1887 Exit code is FATAL_EXIT_CODE if can't open files or if there were
1888 any errors, or SUCCESS_EXIT_CODE if compilation succeeded.
1889
1890 It is not safe to call this function more than once. */
1891
1892 int
1893 toplev_main (int argc, char **argv)
1894 {
1895 /* Parsing and gimplification sometimes need quite large stack.
1896 Increase stack size limits if possible. */
1897 stack_limit_increase (64 * 1024 * 1024);
1898
1899 expandargv (&argc, &argv);
1900
1901 /* Initialization of GCC's environment, and diagnostics. */
1902 general_init (argv[0]);
1903
1904 /* One-off initialization of options that does not need to be
1905 repeated when options are added for particular functions. */
1906 init_options_once ();
1907
1908 /* Initialize global options structures; this must be repeated for
1909 each structure used for parsing options. */
1910 init_options_struct (&global_options, &global_options_set);
1911 lang_hooks.init_options_struct (&global_options);
1912
1913 /* Convert the options to an array. */
1914 decode_cmdline_options_to_array_default_mask (argc,
1915 CONST_CAST2 (const char **,
1916 char **, argv),
1917 &save_decoded_options,
1918 &save_decoded_options_count);
1919
1920 /* Perform language-specific options initialization. */
1921 lang_hooks.init_options (save_decoded_options_count, save_decoded_options);
1922
1923 /* Parse the options and do minimal processing; basically just
1924 enough to default flags appropriately. */
1925 decode_options (&global_options, &global_options_set,
1926 save_decoded_options, save_decoded_options_count,
1927 UNKNOWN_LOCATION, global_dc);
1928
1929 handle_common_deferred_options ();
1930
1931 init_local_tick ();
1932
1933 initialize_plugins ();
1934
1935 if (version_flag)
1936 print_version (stderr, "");
1937
1938 if (help_flag)
1939 print_plugins_help (stderr, "");
1940
1941 /* Exit early if we can (e.g. -help). */
1942 if (!exit_after_options)
1943 do_compile ();
1944
1945 if (warningcount || errorcount)
1946 print_ignored_options ();
1947 diagnostic_finish (global_dc);
1948
1949 /* Invoke registered plugin callbacks if any. */
1950 invoke_plugin_callbacks (PLUGIN_FINISH, NULL);
1951
1952 finalize_plugins ();
1953 if (seen_error ())
1954 return (FATAL_EXIT_CODE);
1955
1956 return (SUCCESS_EXIT_CODE);
1957 }