annotate gcc/toplev.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* Top level of GCC compilers (cc1, cc1plus, etc.)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 1987-2020 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 This file is part of GCC.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 GCC is free software; you can redistribute it and/or modify it under
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 the terms of the GNU General Public License as published by the Free
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 Software Foundation; either version 3, or (at your option) any later
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 along with GCC; see the file COPYING3. If not see
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 <http://www.gnu.org/licenses/>. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 /* This is the top level of cc1/c++.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 It parses command args, opens files, invokes the various passes
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 in the proper order, and counts the time used by each.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 Error messages and low-level interface to malloc also handled here. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 #include "config.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 #include "system.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 #include "coretypes.h"
111
kono
parents: 67
diff changeset
28 #include "backend.h"
kono
parents: 67
diff changeset
29 #include "target.h"
kono
parents: 67
diff changeset
30 #include "rtl.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 #include "tree.h"
111
kono
parents: 67
diff changeset
32 #include "gimple.h"
kono
parents: 67
diff changeset
33 #include "alloc-pool.h"
kono
parents: 67
diff changeset
34 #include "timevar.h"
kono
parents: 67
diff changeset
35 #include "memmodel.h"
kono
parents: 67
diff changeset
36 #include "tm_p.h"
kono
parents: 67
diff changeset
37 #include "optabs-libfuncs.h"
kono
parents: 67
diff changeset
38 #include "insn-config.h"
kono
parents: 67
diff changeset
39 #include "ira.h"
kono
parents: 67
diff changeset
40 #include "recog.h"
kono
parents: 67
diff changeset
41 #include "cgraph.h"
kono
parents: 67
diff changeset
42 #include "coverage.h"
kono
parents: 67
diff changeset
43 #include "diagnostic.h"
kono
parents: 67
diff changeset
44 #include "varasm.h"
kono
parents: 67
diff changeset
45 #include "tree-inline.h"
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
46 #include "realmpfr.h" /* For GMP/MPFR/MPC versions, in print_version. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 #include "version.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 #include "flags.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 #include "insn-attr.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 #include "output.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 #include "toplev.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 #include "expr.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 #include "intl.h"
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
54 #include "tree-diagnostic.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 #include "reload.h"
111
kono
parents: 67
diff changeset
56 #include "lra.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 #include "dwarf2asm.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 #include "debug.h"
111
kono
parents: 67
diff changeset
59 #include "common/common-target.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 #include "langhooks.h"
111
kono
parents: 67
diff changeset
61 #include "cfgloop.h" /* for init_set_costs */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 #include "hosthooks.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 #include "opts.h"
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
64 #include "opts-diagnostic.h"
111
kono
parents: 67
diff changeset
65 #include "stringpool.h"
kono
parents: 67
diff changeset
66 #include "attribs.h"
kono
parents: 67
diff changeset
67 #include "asan.h"
kono
parents: 67
diff changeset
68 #include "tsan.h"
kono
parents: 67
diff changeset
69 #include "plugin.h"
kono
parents: 67
diff changeset
70 #include "context.h"
kono
parents: 67
diff changeset
71 #include "pass_manager.h"
kono
parents: 67
diff changeset
72 #include "auto-profile.h"
kono
parents: 67
diff changeset
73 #include "dwarf2out.h"
kono
parents: 67
diff changeset
74 #include "ipa-reference.h"
kono
parents: 67
diff changeset
75 #include "symbol-summary.h"
kono
parents: 67
diff changeset
76 #include "tree-vrp.h"
kono
parents: 67
diff changeset
77 #include "ipa-prop.h"
kono
parents: 67
diff changeset
78 #include "gcse.h"
kono
parents: 67
diff changeset
79 #include "omp-offload.h"
kono
parents: 67
diff changeset
80 #include "hsa-common.h"
kono
parents: 67
diff changeset
81 #include "edit-context.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 #include "tree-pass.h"
111
kono
parents: 67
diff changeset
83 #include "dumpfile.h"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
84 #include "ipa-fnsummary.h"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
85 #include "dump-context.h"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
86 #include "print-tree.h"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
87 #include "optinfo-emit-json.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 #if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 #include "dbxout.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 #ifdef XCOFF_DEBUGGING_INFO
111
kono
parents: 67
diff changeset
94 #include "xcoffout.h" /* Needed for external data declarations. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
111
kono
parents: 67
diff changeset
97 #include "selftest.h"
kono
parents: 67
diff changeset
98
kono
parents: 67
diff changeset
99 #ifdef HAVE_isl
kono
parents: 67
diff changeset
100 #include <isl/version.h>
kono
parents: 67
diff changeset
101 #endif
kono
parents: 67
diff changeset
102
kono
parents: 67
diff changeset
103 static void general_init (const char *, bool);
kono
parents: 67
diff changeset
104 static void do_compile ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 static void process_options (void);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 static void backend_init (void);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 static int lang_dependent_init (const char *);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 static void init_asm_output (const char *);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
109 static void finalize (bool);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 static void crash_signal (int) ATTRIBUTE_NORETURN;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 static void compile_file (void);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 /* True if we don't need a backend (e.g. preprocessing only). */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 static bool no_backend;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 /* Length of line when printing switch values. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 #define MAX_LINE 75
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
120 /* Decoded options, and number of such options. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
121 struct cl_decoded_option *save_decoded_options;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
122 unsigned int save_decoded_options_count;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 /* Used to enable -fvar-tracking, -fweb and -frename-registers according
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
125 to optimize in process_options (). */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 #define AUTODETECT_VALUE 2
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 /* Debug hooks - dependent upon command line options. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 const struct gcc_debug_hooks *debug_hooks;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 /* The FUNCTION_DECL for the function currently being compiled,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 or 0 if between functions. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 tree current_function_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 /* Set to the FUNC_BEGIN label of the current function, or NULL
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 if none. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 const char * current_function_func_begin_label;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 /* A random sequence of characters, unless overridden by user. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 static const char *flag_random_seed;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 /* A local time stamp derived from the time of compilation. It will be
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 zero if the system cannot provide a time. It will be -1u, if the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 user has specified a particular random seed. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 unsigned local_tick;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
111
kono
parents: 67
diff changeset
148 /* Random number for this compilation */
kono
parents: 67
diff changeset
149 HOST_WIDE_INT random_seed;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150
111
kono
parents: 67
diff changeset
151 /* -f flags. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 /* When non-NULL, indicates that whenever space is allocated on the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 stack, the resulting stack pointer must not pass this
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 address---that is, for stacks that grow downward, the stack pointer
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 must always be greater than or equal to this address; for stacks
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 that grow upward, the stack pointer must be less than this address.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 At present, the rtx may be either a REG or a SYMBOL_REF, although
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 the support provided depends on the backend. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 rtx stack_limit_rtx;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
162 class target_flag_state default_target_flag_state;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
163 #if SWITCHABLE_TARGET
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
164 class target_flag_state *this_target_flag_state = &default_target_flag_state;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
165 #else
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
166 #define this_target_flag_state (&default_target_flag_state)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
167 #endif
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 /* The user symbol prefix after having resolved same. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 const char *user_label_prefix;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 /* Output files for assembler code (real compiler output)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 and debugging dumps. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
174
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 FILE *asm_out_file;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 FILE *aux_info_file;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
177 FILE *callgraph_info_file = NULL;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
178 static bitmap callgraph_info_external_printed;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
179 FILE *stack_usage_file = NULL;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 /* The current working directory of a translation. It's generally the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 directory from which compilation was initiated, but a preprocessed
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 file may specify the original directory in which it was
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 created. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
185
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 static const char *src_pwd;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 /* Initialize src_pwd with the given string, and return true. If it
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 was already initialized, return false. As a special case, it may
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 be called with a NULL argument to test whether src_pwd has NOT been
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 initialized yet. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 set_src_pwd (const char *pwd)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 if (src_pwd)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 if (strcmp (src_pwd, pwd) == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 src_pwd = xstrdup (pwd);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 /* Return the directory from which the translation unit was initiated,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 in case set_src_pwd() was not called before to assign it a
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 different value. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
211
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 const char *
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 get_src_pwd (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 if (! src_pwd)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 src_pwd = getpwd ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 if (!src_pwd)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 src_pwd = ".";
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 return src_pwd;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 /* Called when the start of a function definition is parsed,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 this function prints on stderr the name of the function. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 announce_function (tree decl)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 if (!quiet_flag)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 if (rtl_dump_and_exit)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
233 fprintf (stderr, "%s ",
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
234 identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl))));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 else
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
236 fprintf (stderr, " %s",
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
237 identifier_to_locale (lang_hooks.decl_printable_name (decl, 2)));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 fflush (stderr);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 pp_needs_newline (global_dc->printer) = true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 diagnostic_set_last_function (global_dc, (diagnostic_info *) NULL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 /* Initialize local_tick with the time of day, or -1 if
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 flag_random_seed is set. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 init_local_tick (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 if (!flag_random_seed)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 #ifdef HAVE_GETTIMEOFDAY
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 struct timeval tv;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 gettimeofday (&tv, NULL);
111
kono
parents: 67
diff changeset
257 local_tick = (unsigned) tv.tv_sec * 1000 + tv.tv_usec / 1000;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 #else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 time_t now = time (NULL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 if (now != (time_t)-1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 local_tick = (unsigned) now;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 local_tick = -1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
271
111
kono
parents: 67
diff changeset
272 /* Obtain the random_seed. Unless NOINIT, initialize it if
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 it's not provided in the command line. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274
111
kono
parents: 67
diff changeset
275 HOST_WIDE_INT
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 get_random_seed (bool noinit)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 {
111
kono
parents: 67
diff changeset
278 if (!random_seed && !noinit)
kono
parents: 67
diff changeset
279 {
kono
parents: 67
diff changeset
280 int fd = open ("/dev/urandom", O_RDONLY);
kono
parents: 67
diff changeset
281 if (fd >= 0)
kono
parents: 67
diff changeset
282 {
kono
parents: 67
diff changeset
283 if (read (fd, &random_seed, sizeof (random_seed))
kono
parents: 67
diff changeset
284 != sizeof (random_seed))
kono
parents: 67
diff changeset
285 random_seed = 0;
kono
parents: 67
diff changeset
286 close (fd);
kono
parents: 67
diff changeset
287 }
kono
parents: 67
diff changeset
288 if (!random_seed)
kono
parents: 67
diff changeset
289 random_seed = local_tick ^ getpid ();
kono
parents: 67
diff changeset
290 }
kono
parents: 67
diff changeset
291 return random_seed;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293
111
kono
parents: 67
diff changeset
294 /* Set flag_random_seed to VAL, and if non-null, reinitialize random_seed. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
295
111
kono
parents: 67
diff changeset
296 void
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 set_random_seed (const char *val)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 flag_random_seed = val;
111
kono
parents: 67
diff changeset
300 if (flag_random_seed)
kono
parents: 67
diff changeset
301 {
kono
parents: 67
diff changeset
302 char *endp;
kono
parents: 67
diff changeset
303
kono
parents: 67
diff changeset
304 /* When the driver passed in a hex number don't crc it again */
kono
parents: 67
diff changeset
305 random_seed = strtoul (flag_random_seed, &endp, 0);
kono
parents: 67
diff changeset
306 if (!(endp > flag_random_seed && *endp == 0))
kono
parents: 67
diff changeset
307 random_seed = crc32_string (0, flag_random_seed);
kono
parents: 67
diff changeset
308 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
310
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 /* Handler for fatal signals, such as SIGSEGV. These are transformed
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 into ICE messages, which is much more user friendly. In case the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 error printer crashes, reset the signal to prevent infinite recursion. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
314
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 crash_signal (int signo)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 signal (signo, SIG_DFL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
319
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 /* If we crashed while processing an ASM statement, then be a little more
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 graceful. It's most likely the user's fault. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 if (this_is_asm_operands)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 output_operand_lossage ("unrecoverable error");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 exit (FATAL_EXIT_CODE);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
327
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 internal_error ("%s", strsignal (signo));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
330
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 /* A subroutine of wrapup_global_declarations. We've come to the end of
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 the compilation unit. All deferred variables should be undeferred,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 and all incomplete decls should be finalized. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
334
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 wrapup_global_declaration_1 (tree decl)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
337 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
338 /* We're not deferring this any longer. Assignment is conditional to
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 avoid needlessly dirtying PCH pages. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 if (CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_WITH_VIS)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 && DECL_DEFER_OUTPUT (decl) != 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 DECL_DEFER_OUTPUT (decl) = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
343
111
kono
parents: 67
diff changeset
344 if (VAR_P (decl) && DECL_SIZE (decl) == 0)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
345 lang_hooks.finish_incomplete_decl (decl);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
346 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
347
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
348 /* A subroutine of wrapup_global_declarations. Decide whether or not DECL
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 needs to be output. Return true if it is output. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
350
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
352 wrapup_global_declaration_2 (tree decl)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 {
111
kono
parents: 67
diff changeset
354 if (TREE_ASM_WRITTEN (decl) || DECL_EXTERNAL (decl)
kono
parents: 67
diff changeset
355 || (VAR_P (decl) && DECL_HAS_VALUE_EXPR_P (decl)))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
357
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 /* Don't write out static consts, unless we still need them.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
359
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 We also keep static consts if not optimizing (for debugging),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 unless the user specified -fno-keep-static-consts.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 ??? They might be better written into the debug information.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 This is possible when using DWARF.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
364
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 A language processor that wants static constants to be always
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 written out (even if it is not used) is responsible for
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 calling rest_of_decl_compilation itself. E.g. the C front-end
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 calls rest_of_decl_compilation from finish_decl.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 One motivation for this is that is conventional in some
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 environments to write things like:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 static const char rcsid[] = "... version string ...";
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 intending to force the string to be in the executable.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
373
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 A language processor that would prefer to have unneeded
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 static constants "optimized away" would just defer writing
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 them out until here. E.g. C++ does this, because static
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 constants are often defined in header files.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
378
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 ??? A tempting alternative (for both C and C++) would be
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 to force a constant to be written if and only if it is
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 defined in a main file, as opposed to an include file. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
382
111
kono
parents: 67
diff changeset
383 if (VAR_P (decl) && TREE_STATIC (decl))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 {
111
kono
parents: 67
diff changeset
385 varpool_node *node;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 bool needed = true;
111
kono
parents: 67
diff changeset
387 node = varpool_node::get (decl);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
388
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
389 if (!node && flag_ltrans)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 needed = false;
111
kono
parents: 67
diff changeset
391 else if (node && node->definition)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
392 needed = false;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
393 else if (node && node->alias)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 needed = false;
111
kono
parents: 67
diff changeset
395 else if (!symtab->global_info_ready
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 && (TREE_USED (decl)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 || TREE_USED (DECL_ASSEMBLER_NAME (decl))))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 /* needed */;
111
kono
parents: 67
diff changeset
399 else if (node && node->analyzed)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 /* needed */;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 else if (DECL_COMDAT (decl))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 needed = false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 else if (TREE_READONLY (decl) && !TREE_PUBLIC (decl)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 && (optimize || !flag_keep_static_consts
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 || DECL_ARTIFICIAL (decl)))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 needed = false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 if (needed)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 rest_of_decl_compilation (decl, 1, 1);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
417
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 /* Do any final processing required for the declarations in VEC, of
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 which there are LEN. We write out inline functions and variables
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 that have been deferred until this point, but which are required.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 Returns nonzero if anything was put out. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
422
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 wrapup_global_declarations (tree *vec, int len)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 bool reconsider, output_something = false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 for (i = 0; i < len; i++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 wrapup_global_declaration_1 (vec[i]);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 /* Now emit any global variables or functions that we have been
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 putting off. We need to loop in case one of the things emitted
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 here references another one which comes earlier in the list. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 do
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 reconsider = false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 for (i = 0; i < len; i++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 reconsider |= wrapup_global_declaration_2 (vec[i]);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 if (reconsider)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 output_something = true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 while (reconsider);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 return output_something;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
447
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 /* Compile an entire translation unit. Write a file of assembly
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 output and various debugging dumps. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
450
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 compile_file (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 {
111
kono
parents: 67
diff changeset
454 timevar_start (TV_PHASE_PARSING);
kono
parents: 67
diff changeset
455 timevar_push (TV_PARSE_GLOBAL);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
456
111
kono
parents: 67
diff changeset
457 /* Parse entire file and generate initial debug information. */
kono
parents: 67
diff changeset
458 lang_hooks.parse_file ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
459
111
kono
parents: 67
diff changeset
460 timevar_pop (TV_PARSE_GLOBAL);
kono
parents: 67
diff changeset
461 timevar_stop (TV_PHASE_PARSING);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
462
111
kono
parents: 67
diff changeset
463 if (flag_dump_locations)
kono
parents: 67
diff changeset
464 dump_location_info (stderr);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
465
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 /* Compilation is now finished except for writing
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 what's left of the symbol table output. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
468
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
469 if (flag_syntax_only || flag_wpa)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 return;
111
kono
parents: 67
diff changeset
471
kono
parents: 67
diff changeset
472 /* Reset maximum_field_alignment, it can be adjusted by #pragma pack
kono
parents: 67
diff changeset
473 and this shouldn't influence any types built by the middle-end
kono
parents: 67
diff changeset
474 from now on (like gcov_info_type). */
kono
parents: 67
diff changeset
475 maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
476
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 ggc_protect_identifiers = false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
478
111
kono
parents: 67
diff changeset
479 /* Run the actual compilation process. */
kono
parents: 67
diff changeset
480 if (!in_lto_p)
kono
parents: 67
diff changeset
481 {
kono
parents: 67
diff changeset
482 timevar_start (TV_PHASE_OPT_GEN);
kono
parents: 67
diff changeset
483 symtab->finalize_compilation_unit ();
kono
parents: 67
diff changeset
484 timevar_stop (TV_PHASE_OPT_GEN);
kono
parents: 67
diff changeset
485 }
kono
parents: 67
diff changeset
486
kono
parents: 67
diff changeset
487 /* Perform any post compilation-proper parser cleanups and
kono
parents: 67
diff changeset
488 processing. This is currently only needed for the C++ parser,
kono
parents: 67
diff changeset
489 which can be hopefully cleaned up so this hook is no longer
kono
parents: 67
diff changeset
490 necessary. */
kono
parents: 67
diff changeset
491 if (lang_hooks.decls.post_compilation_parsing_cleanups)
kono
parents: 67
diff changeset
492 lang_hooks.decls.post_compilation_parsing_cleanups ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
493
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
494 dump_context::get ().finish_any_json_writer ();
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
495
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
496 if (seen_error ())
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 return;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
498
111
kono
parents: 67
diff changeset
499 timevar_start (TV_PHASE_LATE_ASM);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
500
111
kono
parents: 67
diff changeset
501 /* Compilation unit is finalized. When producing non-fat LTO object, we are
kono
parents: 67
diff changeset
502 basically finished. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
503 if ((in_lto_p && flag_incremental_link != INCREMENTAL_LINK_LTO)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
504 || !flag_lto || flag_fat_lto_objects)
111
kono
parents: 67
diff changeset
505 {
kono
parents: 67
diff changeset
506 /* File-scope initialization for AddressSanitizer. */
kono
parents: 67
diff changeset
507 if (flag_sanitize & SANITIZE_ADDRESS)
kono
parents: 67
diff changeset
508 asan_finish_file ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
509
111
kono
parents: 67
diff changeset
510 if (flag_sanitize & SANITIZE_THREAD)
kono
parents: 67
diff changeset
511 tsan_finish_file ();
kono
parents: 67
diff changeset
512
kono
parents: 67
diff changeset
513 omp_finish_file ();
kono
parents: 67
diff changeset
514
kono
parents: 67
diff changeset
515 hsa_output_brig ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
516
111
kono
parents: 67
diff changeset
517 output_shared_constant_pool ();
kono
parents: 67
diff changeset
518 output_object_blocks ();
kono
parents: 67
diff changeset
519 finish_tm_clone_pairs ();
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
520
111
kono
parents: 67
diff changeset
521 /* Write out any pending weak symbol declarations. */
kono
parents: 67
diff changeset
522 weak_finish ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
523
111
kono
parents: 67
diff changeset
524 /* This must be at the end before unwind and debug info.
kono
parents: 67
diff changeset
525 Some target ports emit PIC setup thunks here. */
kono
parents: 67
diff changeset
526 targetm.asm_out.code_end ();
kono
parents: 67
diff changeset
527
kono
parents: 67
diff changeset
528 /* Do dbx symbols. */
kono
parents: 67
diff changeset
529 timevar_push (TV_SYMOUT);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
530
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
531 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_UNWIND_INFO
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
532 dwarf2out_frame_finish ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
533 #endif
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
534
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
535 debuginfo_start ();
111
kono
parents: 67
diff changeset
536 (*debug_hooks->finish) (main_input_filename);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
537 debuginfo_stop ();
111
kono
parents: 67
diff changeset
538 timevar_pop (TV_SYMOUT);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
539
111
kono
parents: 67
diff changeset
540 /* Output some stuff at end of file if nec. */
kono
parents: 67
diff changeset
541
kono
parents: 67
diff changeset
542 dw2_output_indirect_constants ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
543
111
kono
parents: 67
diff changeset
544 /* Flush any pending external directives. */
kono
parents: 67
diff changeset
545 process_pending_assemble_externals ();
kono
parents: 67
diff changeset
546 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
547
111
kono
parents: 67
diff changeset
548 /* Let linker plugin know that this is a slim object and must be LTOed
kono
parents: 67
diff changeset
549 even when user did not ask for it. */
kono
parents: 67
diff changeset
550 if (flag_generate_lto && !flag_fat_lto_objects)
kono
parents: 67
diff changeset
551 {
kono
parents: 67
diff changeset
552 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
kono
parents: 67
diff changeset
553 ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, NULL_TREE, "__gnu_lto_slim",
kono
parents: 67
diff changeset
554 HOST_WIDE_INT_1U, 8);
kono
parents: 67
diff changeset
555 #elif defined ASM_OUTPUT_ALIGNED_COMMON
kono
parents: 67
diff changeset
556 ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, "__gnu_lto_slim",
kono
parents: 67
diff changeset
557 HOST_WIDE_INT_1U, 8);
kono
parents: 67
diff changeset
558 #else
kono
parents: 67
diff changeset
559 ASM_OUTPUT_COMMON (asm_out_file, "__gnu_lto_slim",
kono
parents: 67
diff changeset
560 HOST_WIDE_INT_1U,
kono
parents: 67
diff changeset
561 HOST_WIDE_INT_1U);
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
562 #endif
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
563 }
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
564
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 /* Attach a special .ident directive to the end of the file to identify
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
566 the version of GCC which compiled this code. The format of the .ident
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 string is patterned after the ones produced by native SVR4 compilers. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
568 if (!flag_no_ident)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
570 const char *pkg_version = "(GNU) ";
111
kono
parents: 67
diff changeset
571 char *ident_str;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
572
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 if (strcmp ("(GCC) ", pkgversion_string))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
574 pkg_version = pkgversion_string;
111
kono
parents: 67
diff changeset
575
kono
parents: 67
diff changeset
576 ident_str = ACONCAT (("GCC: ", pkg_version, version_string, NULL));
kono
parents: 67
diff changeset
577 targetm.asm_out.output_ident (ident_str);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 }
111
kono
parents: 67
diff changeset
579
kono
parents: 67
diff changeset
580 /* Auto profile finalization. */
kono
parents: 67
diff changeset
581 if (flag_auto_profile)
kono
parents: 67
diff changeset
582 end_auto_profile ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
583
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
584 /* Invoke registered plugin callbacks. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
585 invoke_plugin_callbacks (PLUGIN_FINISH_UNIT, NULL);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
586
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 /* This must be at the end. Some target ports emit end of file directives
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
588 into the assembly file here, and hence we cannot output anything to the
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 assembly file after this point. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
590 targetm.asm_out.file_end ();
111
kono
parents: 67
diff changeset
591
kono
parents: 67
diff changeset
592 timevar_stop (TV_PHASE_LATE_ASM);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
593 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
594
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 /* Print version information to FILE.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 Each line begins with INDENT (for the case where FILE is the
111
kono
parents: 67
diff changeset
597 assembler output file).
kono
parents: 67
diff changeset
598
kono
parents: 67
diff changeset
599 If SHOW_GLOBAL_STATE is true (for cc1 etc), we are within the compiler
kono
parents: 67
diff changeset
600 proper and can print pertinent state (e.g. params and plugins).
kono
parents: 67
diff changeset
601
kono
parents: 67
diff changeset
602 If SHOW_GLOBAL_STATE is false (for use by libgccjit), we are outside the
kono
parents: 67
diff changeset
603 compiler, and we don't hold the mutex on the compiler's global state:
kono
parents: 67
diff changeset
604 we can't print params and plugins, since they might not be initialized,
kono
parents: 67
diff changeset
605 or might be being manipulated by a compile running in another
kono
parents: 67
diff changeset
606 thread. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
607
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
608 void
111
kono
parents: 67
diff changeset
609 print_version (FILE *file, const char *indent, bool show_global_state)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
610 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
611 static const char fmt1[] =
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
612 #ifdef __GNUC__
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
613 N_("%s%s%s %sversion %s (%s)\n%s\tcompiled by GNU C version %s, ")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
614 #else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
615 N_("%s%s%s %sversion %s (%s) compiled by CC, ")
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
616 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
617 ;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
618 static const char fmt2[] =
111
kono
parents: 67
diff changeset
619 N_("GMP version %s, MPFR version %s, MPC version %s, isl version %s\n");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
620 static const char fmt3[] =
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
621 N_("%s%swarning: %s header version %s differs from library version %s.\n");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
622 static const char fmt4[] =
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
623 N_("%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
624 #ifndef __VERSION__
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
625 #define __VERSION__ "[?]"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
626 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
627 fprintf (file,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
628 file == stderr ? _(fmt1) : fmt1,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
629 indent, *indent != 0 ? " " : "",
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
630 lang_hooks.name, pkgversion_string, version_string, TARGET_NAME,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
631 indent, __VERSION__);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
632
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
633 /* We need to stringify the GMP macro values. Ugh, gmp_version has
19
58ad6c70ea60 update gcc from 4.4.0 to 4.4.1.
kent@firefly.cr.ie.u-ryukyu.ac.jp
parents: 0
diff changeset
634 two string formats, "i.j.k" and "i.j" when k is zero. As of
58ad6c70ea60 update gcc from 4.4.0 to 4.4.1.
kent@firefly.cr.ie.u-ryukyu.ac.jp
parents: 0
diff changeset
635 gmp-4.3.0, GMP always uses the 3 number format. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
636 #define GCC_GMP_STRINGIFY_VERSION3(X) #X
111
kono
parents: 67
diff changeset
637 #define GCC_GMP_STRINGIFY_VERSION2(X) GCC_GMP_STRINGIFY_VERSION3 (X)
19
58ad6c70ea60 update gcc from 4.4.0 to 4.4.1.
kent@firefly.cr.ie.u-ryukyu.ac.jp
parents: 0
diff changeset
638 #define GCC_GMP_VERSION_NUM(X,Y,Z) (((X) << 16L) | ((Y) << 8) | (Z))
58ad6c70ea60 update gcc from 4.4.0 to 4.4.1.
kent@firefly.cr.ie.u-ryukyu.ac.jp
parents: 0
diff changeset
639 #define GCC_GMP_VERSION \
58ad6c70ea60 update gcc from 4.4.0 to 4.4.1.
kent@firefly.cr.ie.u-ryukyu.ac.jp
parents: 0
diff changeset
640 GCC_GMP_VERSION_NUM(__GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL)
58ad6c70ea60 update gcc from 4.4.0 to 4.4.1.
kent@firefly.cr.ie.u-ryukyu.ac.jp
parents: 0
diff changeset
641 #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,3,0) && __GNU_MP_VERSION_PATCHLEVEL == 0
111
kono
parents: 67
diff changeset
642 #define GCC_GMP_STRINGIFY_VERSION \
kono
parents: 67
diff changeset
643 GCC_GMP_STRINGIFY_VERSION2 (__GNU_MP_VERSION) "." \
kono
parents: 67
diff changeset
644 GCC_GMP_STRINGIFY_VERSION2 (__GNU_MP_VERSION_MINOR)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
645 #else
111
kono
parents: 67
diff changeset
646 #define GCC_GMP_STRINGIFY_VERSION \
kono
parents: 67
diff changeset
647 GCC_GMP_STRINGIFY_VERSION2 (__GNU_MP_VERSION) "." \
kono
parents: 67
diff changeset
648 GCC_GMP_STRINGIFY_VERSION2 (__GNU_MP_VERSION_MINOR) "." \
kono
parents: 67
diff changeset
649 GCC_GMP_STRINGIFY_VERSION2 (__GNU_MP_VERSION_PATCHLEVEL)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
650 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
651 fprintf (file,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 file == stderr ? _(fmt2) : fmt2,
111
kono
parents: 67
diff changeset
653 GCC_GMP_STRINGIFY_VERSION, MPFR_VERSION_STRING, MPC_VERSION_STRING,
kono
parents: 67
diff changeset
654 #ifndef HAVE_isl
kono
parents: 67
diff changeset
655 "none"
kono
parents: 67
diff changeset
656 #else
kono
parents: 67
diff changeset
657 isl_version ()
kono
parents: 67
diff changeset
658 #endif
kono
parents: 67
diff changeset
659 );
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
660 if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
661 fprintf (file,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
662 file == stderr ? _(fmt3) : fmt3,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
663 indent, *indent != 0 ? " " : "",
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
664 "GMP", GCC_GMP_STRINGIFY_VERSION, gmp_version);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
665 if (strcmp (MPFR_VERSION_STRING, mpfr_get_version ()))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
666 fprintf (file,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
667 file == stderr ? _(fmt3) : fmt3,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
668 indent, *indent != 0 ? " " : "",
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
669 "MPFR", MPFR_VERSION_STRING, mpfr_get_version ());
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
670 if (strcmp (MPC_VERSION_STRING, mpc_get_version ()))
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
671 fprintf (file,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
672 file == stderr ? _(fmt3) : fmt3,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
673 indent, *indent != 0 ? " " : "",
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
674 "MPC", MPC_VERSION_STRING, mpc_get_version ());
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
675
111
kono
parents: 67
diff changeset
676 if (show_global_state)
kono
parents: 67
diff changeset
677 {
kono
parents: 67
diff changeset
678 fprintf (file,
kono
parents: 67
diff changeset
679 file == stderr ? _(fmt4) : fmt4,
kono
parents: 67
diff changeset
680 indent, *indent != 0 ? " " : "",
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
681 param_ggc_min_expand, param_ggc_min_heapsize);
111
kono
parents: 67
diff changeset
682
kono
parents: 67
diff changeset
683 print_plugins_versions (file, indent);
kono
parents: 67
diff changeset
684 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
685 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
686
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
687 static int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
688 print_to_asm_out_file (print_switch_type type, const char * text)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
689 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
690 bool prepend_sep = true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
691
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
692 switch (type)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
693 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
694 case SWITCH_TYPE_LINE_END:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
695 putc ('\n', asm_out_file);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
696 return 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
697
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
698 case SWITCH_TYPE_LINE_START:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
699 fputs (ASM_COMMENT_START, asm_out_file);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
700 return strlen (ASM_COMMENT_START);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
701
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
702 case SWITCH_TYPE_DESCRIPTIVE:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
703 if (ASM_COMMENT_START[0] == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
704 prepend_sep = false;
111
kono
parents: 67
diff changeset
705 /* FALLTHRU */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
706 case SWITCH_TYPE_PASSED:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
707 case SWITCH_TYPE_ENABLED:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
708 if (prepend_sep)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
709 fputc (' ', asm_out_file);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
710 fputs (text, asm_out_file);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
711 /* No need to return the length here as
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
712 print_single_switch has already done it. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
713 return 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
714
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
715 default:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
716 return -1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
717 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
718 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
719
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
720 static int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
721 print_to_stderr (print_switch_type type, const char * text)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
722 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
723 switch (type)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
724 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
725 case SWITCH_TYPE_LINE_END:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
726 putc ('\n', stderr);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
727 return 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
728
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
729 case SWITCH_TYPE_LINE_START:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
730 return 0;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
731
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
732 case SWITCH_TYPE_PASSED:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
733 case SWITCH_TYPE_ENABLED:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
734 fputc (' ', stderr);
111
kono
parents: 67
diff changeset
735 /* FALLTHRU */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
736
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
737 case SWITCH_TYPE_DESCRIPTIVE:
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
738 fputs (text, stderr);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
739 /* No need to return the length here as
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
740 print_single_switch has already done it. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
741 return 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
742
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
743 default:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
744 return -1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
745 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
746 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
747
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
748 /* Print an option value and return the adjusted position in the line.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
749 ??? print_fn doesn't handle errors, eg disk full; presumably other
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
750 code will catch a disk full though. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
751
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
752 static int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
753 print_single_switch (print_switch_fn_type print_fn,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
754 int pos,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
755 print_switch_type type,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
756 const char * text)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
757 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
758 /* The ultrix fprintf returns 0 on success, so compute the result
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
759 we want here since we need it for the following test. The +1
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
760 is for the separator character that will probably be emitted. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
761 int len = strlen (text) + 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
762
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
763 if (pos != 0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
764 && pos + len > MAX_LINE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
765 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
766 print_fn (SWITCH_TYPE_LINE_END, NULL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
767 pos = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
768 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
769
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
770 if (pos == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
771 pos += print_fn (SWITCH_TYPE_LINE_START, NULL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
772
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
773 print_fn (type, text);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
774 return pos + len;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
775 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
776
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
777 /* Print active target switches using PRINT_FN.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
778 POS is the current cursor position and MAX is the size of a "line".
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
779 Each line begins with INDENT and ends with TERM.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
780 Each switch is separated from the next by SEP. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
781
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
782 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
783 print_switch_values (print_switch_fn_type print_fn)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
784 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
785 int pos = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
786 size_t j;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
787
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
788 /* Print the options as passed. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
789 pos = print_single_switch (print_fn, pos,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
790 SWITCH_TYPE_DESCRIPTIVE, _("options passed: "));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
791
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
792 for (j = 1; j < save_decoded_options_count; j++)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
793 {
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
794 switch (save_decoded_options[j].opt_index)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
795 {
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
796 case OPT_o:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
797 case OPT_d:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
798 case OPT_dumpbase:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
799 case OPT_dumpdir:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
800 case OPT_auxbase:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
801 case OPT_quiet:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
802 case OPT_version:
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
803 /* Ignore these. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
804 continue;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
805 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
806
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
807 pos = print_single_switch (print_fn, pos, SWITCH_TYPE_PASSED,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
808 save_decoded_options[j].orig_option_with_args_text);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
809 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
810
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
811 if (pos > 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
812 print_fn (SWITCH_TYPE_LINE_END, NULL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
813
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
814 /* Print the -f and -m options that have been enabled.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
815 We don't handle language specific options but printing argv
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
816 should suffice. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
817 pos = print_single_switch (print_fn, 0,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
818 SWITCH_TYPE_DESCRIPTIVE, _("options enabled: "));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
819
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
820 unsigned lang_mask = lang_hooks.option_lang_mask ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
821 for (j = 0; j < cl_options_count; j++)
111
kono
parents: 67
diff changeset
822 if (cl_options[j].cl_report
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
823 && option_enabled (j, lang_mask, &global_options) > 0)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
824 pos = print_single_switch (print_fn, pos,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
825 SWITCH_TYPE_ENABLED, cl_options[j].opt_text);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
826
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
827 print_fn (SWITCH_TYPE_LINE_END, NULL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
828 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
829
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
830 /* Open assembly code output file. Do this even if -fsyntax-only is
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
831 on, because then the driver will have provided the name of a
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
832 temporary file or bit bucket for us. NAME is the file specified on
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
833 the command line, possibly NULL. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
834 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
835 init_asm_output (const char *name)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
836 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
837 if (name == NULL && asm_file_name == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 asm_out_file = stdout;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
839 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
840 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
841 if (asm_file_name == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
842 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
843 int len = strlen (dump_base_name);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
844 char *dumpname = XNEWVEC (char, len + 6);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
845
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 memcpy (dumpname, dump_base_name, len + 1);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 strip_off_ending (dumpname, len);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
848 strcat (dumpname, ".s");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
849 asm_file_name = dumpname;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
850 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
851 if (!strcmp (asm_file_name, "-"))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
852 asm_out_file = stdout;
111
kono
parents: 67
diff changeset
853 else if (!canonical_filename_eq (asm_file_name, name)
kono
parents: 67
diff changeset
854 || !strcmp (asm_file_name, HOST_BIT_BUCKET))
kono
parents: 67
diff changeset
855 asm_out_file = fopen (asm_file_name, "w");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
856 else
111
kono
parents: 67
diff changeset
857 /* Use UNKOWN_LOCATION to prevent gcc from printing the first
kono
parents: 67
diff changeset
858 line in the current file. */
kono
parents: 67
diff changeset
859 fatal_error (UNKNOWN_LOCATION,
kono
parents: 67
diff changeset
860 "input file %qs is the same as output file",
kono
parents: 67
diff changeset
861 asm_file_name);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
862 if (asm_out_file == 0)
111
kono
parents: 67
diff changeset
863 fatal_error (UNKNOWN_LOCATION,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
864 "cannot open %qs for writing: %m", asm_file_name);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
865 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
866
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 if (!flag_syntax_only)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
868 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
869 targetm.asm_out.file_start ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
870
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
871 if (flag_record_gcc_switches)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
872 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
873 if (targetm.asm_out.record_gcc_switches)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
874 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
875 /* Let the target know that we are about to start recording. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
876 targetm.asm_out.record_gcc_switches (SWITCH_TYPE_DESCRIPTIVE,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
877 NULL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
878 /* Now record the switches. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
879 print_switch_values (targetm.asm_out.record_gcc_switches);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
880 /* Let the target know that the recording is over. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
881 targetm.asm_out.record_gcc_switches (SWITCH_TYPE_DESCRIPTIVE,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
882 NULL);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
883 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
884 else
111
kono
parents: 67
diff changeset
885 inform (UNKNOWN_LOCATION,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
886 "%<-frecord-gcc-switches%> is not supported by "
111
kono
parents: 67
diff changeset
887 "the current target");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
888 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
889
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
890 if (flag_verbose_asm)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
891 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 /* Print the list of switches in effect
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
893 into the assembler file as comments. */
111
kono
parents: 67
diff changeset
894 print_version (asm_out_file, ASM_COMMENT_START, true);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
895 print_switch_values (print_to_asm_out_file);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
896 putc ('\n', asm_out_file);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
897 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
898 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
899 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
900
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
901 /* A helper function; used as the reallocator function for cpp's line
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
902 table. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
903 static void *
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
904 realloc_for_line_map (void *ptr, size_t len)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
905 {
111
kono
parents: 67
diff changeset
906 return ggc_realloc (ptr, len);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
907 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
908
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
909 /* A helper function: used as the allocator function for
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
910 identifier_to_locale. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
911 static void *
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
912 alloc_for_identifier_to_locale (size_t len)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
913 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
914 return ggc_alloc_atomic (len);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
915 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
916
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
917 /* Output stack usage information. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
918 static void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
919 output_stack_usage_1 (FILE *cf)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
920 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
921 static bool warning_issued = false;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
922 enum stack_usage_kind_type { STATIC = 0, DYNAMIC, DYNAMIC_BOUNDED };
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
923 const char *stack_usage_kind_str[] = {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
924 "static",
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
925 "dynamic",
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
926 "dynamic,bounded"
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
927 };
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
928 HOST_WIDE_INT stack_usage = current_function_static_stack_size;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
929 enum stack_usage_kind_type stack_usage_kind;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
930
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
931 if (stack_usage < 0)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
932 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
933 if (!warning_issued)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
934 {
111
kono
parents: 67
diff changeset
935 warning (0, "stack usage computation not supported for this target");
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
936 warning_issued = true;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
937 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
938 return;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
939 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
940
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
941 stack_usage_kind = STATIC;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
942
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
943 /* Add the maximum amount of space pushed onto the stack. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
944 if (maybe_ne (current_function_pushed_stack_size, 0))
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
945 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
946 HOST_WIDE_INT extra;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
947 if (current_function_pushed_stack_size.is_constant (&extra))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
948 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
949 stack_usage += extra;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
950 stack_usage_kind = DYNAMIC_BOUNDED;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
951 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
952 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
953 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
954 extra = constant_lower_bound (current_function_pushed_stack_size);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
955 stack_usage += extra;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
956 stack_usage_kind = DYNAMIC;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
957 }
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
958 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
959
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
960 /* Now on to the tricky part: dynamic stack allocation. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
961 if (current_function_allocates_dynamic_stack_space)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
962 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
963 if (stack_usage_kind != DYNAMIC)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
964 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
965 if (current_function_has_unbounded_dynamic_stack_size)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
966 stack_usage_kind = DYNAMIC;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
967 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
968 stack_usage_kind = DYNAMIC_BOUNDED;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
969 }
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
970
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
971 /* Add the size even in the unbounded case, this can't hurt. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
972 stack_usage += current_function_dynamic_stack_size;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
973 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
974
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
975 if (flag_callgraph_info & CALLGRAPH_INFO_STACK_USAGE)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
976 fprintf (cf, "\\n" HOST_WIDE_INT_PRINT_DEC " bytes (%s)",
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
977 stack_usage,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
978 stack_usage_kind_str[stack_usage_kind]);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
979
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
980 if (stack_usage_file)
111
kono
parents: 67
diff changeset
981 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
982 print_decl_identifier (stack_usage_file, current_function_decl,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
983 PRINT_DECL_ORIGIN | PRINT_DECL_NAME);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
984 fprintf (stack_usage_file, "\t" HOST_WIDE_INT_PRINT_DEC"\t%s\n",
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
985 stack_usage, stack_usage_kind_str[stack_usage_kind]);
111
kono
parents: 67
diff changeset
986 }
kono
parents: 67
diff changeset
987
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
988 if (warn_stack_usage >= 0 && warn_stack_usage < HOST_WIDE_INT_MAX)
111
kono
parents: 67
diff changeset
989 {
kono
parents: 67
diff changeset
990 const location_t loc = DECL_SOURCE_LOCATION (current_function_decl);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
991
111
kono
parents: 67
diff changeset
992 if (stack_usage_kind == DYNAMIC)
kono
parents: 67
diff changeset
993 warning_at (loc, OPT_Wstack_usage_, "stack usage might be unbounded");
kono
parents: 67
diff changeset
994 else if (stack_usage > warn_stack_usage)
kono
parents: 67
diff changeset
995 {
kono
parents: 67
diff changeset
996 if (stack_usage_kind == DYNAMIC_BOUNDED)
kono
parents: 67
diff changeset
997 warning_at (loc,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
998 OPT_Wstack_usage_, "stack usage might be %wu bytes",
111
kono
parents: 67
diff changeset
999 stack_usage);
kono
parents: 67
diff changeset
1000 else
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1001 warning_at (loc, OPT_Wstack_usage_, "stack usage is %wu bytes",
111
kono
parents: 67
diff changeset
1002 stack_usage);
kono
parents: 67
diff changeset
1003 }
kono
parents: 67
diff changeset
1004 }
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1005 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1006
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1007 /* Dump placeholder node for indirect calls in VCG format. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1008
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1009 #define INDIRECT_CALL_NAME "__indirect_call"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1010
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1011 static void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1012 dump_final_node_vcg_start (FILE *f, tree decl)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1013 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1014 fputs ("node: { title: \"", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1015 if (decl)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1016 print_decl_identifier (f, decl, PRINT_DECL_UNIQUE_NAME);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1017 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1018 fputs (INDIRECT_CALL_NAME, f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1019 fputs ("\" label: \"", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1020 if (decl)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1021 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1022 print_decl_identifier (f, decl, PRINT_DECL_NAME);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1023 fputs ("\\n", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1024 print_decl_identifier (f, decl, PRINT_DECL_ORIGIN);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1025 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1026 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1027 fputs ("Indirect Call Placeholder", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1028 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1029
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1030 /* Dump final cgraph edge in VCG format. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1031
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1032 static void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1033 dump_final_callee_vcg (FILE *f, location_t location, tree callee)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1034 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1035 if ((!callee || DECL_EXTERNAL (callee))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1036 && bitmap_set_bit (callgraph_info_external_printed,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1037 callee ? DECL_UID (callee) + 1 : 0))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1038 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1039 dump_final_node_vcg_start (f, callee);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1040 fputs ("\" shape : ellipse }\n", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1041 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1042
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1043 fputs ("edge: { sourcename: \"", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1044 print_decl_identifier (f, current_function_decl, PRINT_DECL_UNIQUE_NAME);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1045 fputs ("\" targetname: \"", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1046 if (callee)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1047 print_decl_identifier (f, callee, PRINT_DECL_UNIQUE_NAME);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1048 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1049 fputs (INDIRECT_CALL_NAME, f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1050 if (LOCATION_LOCUS (location) != UNKNOWN_LOCATION)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1051 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1052 expanded_location loc;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1053 fputs ("\" label: \"", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1054 loc = expand_location (location);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1055 fprintf (f, "%s:%d:%d", loc.file, loc.line, loc.column);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1056 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1057 fputs ("\" }\n", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1058 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1059
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1060 /* Dump final cgraph node in VCG format. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1061
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1062 static void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1063 dump_final_node_vcg (FILE *f)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1064 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1065 dump_final_node_vcg_start (f, current_function_decl);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1066
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1067 if (flag_stack_usage_info
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1068 || (flag_callgraph_info & CALLGRAPH_INFO_STACK_USAGE))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1069 output_stack_usage_1 (f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1070
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1071 if (flag_callgraph_info & CALLGRAPH_INFO_DYNAMIC_ALLOC)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1072 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1073 fprintf (f, "\\n%u dynamic objects", vec_safe_length (cfun->su->dallocs));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1074
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1075 unsigned i;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1076 callinfo_dalloc *cda;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1077 FOR_EACH_VEC_SAFE_ELT (cfun->su->dallocs, i, cda)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1078 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1079 expanded_location loc = expand_location (cda->location);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1080 fprintf (f, "\\n %s", cda->name);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1081 fprintf (f, " %s:%d:%d", loc.file, loc.line, loc.column);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1082 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1083
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1084 vec_free (cfun->su->dallocs);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1085 cfun->su->dallocs = NULL;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1086 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1087
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1088 fputs ("\" }\n", f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1089
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1090 unsigned i;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1091 callinfo_callee *c;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1092 FOR_EACH_VEC_SAFE_ELT (cfun->su->callees, i, c)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1093 dump_final_callee_vcg (f, c->location, c->decl);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1094 vec_free (cfun->su->callees);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1095 cfun->su->callees = NULL;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1096 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1097
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1098 /* Output stack usage and callgraph info, as requested. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1099 void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1100 output_stack_usage (void)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1101 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1102 if (flag_callgraph_info)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1103 dump_final_node_vcg (callgraph_info_file);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1104 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1105 output_stack_usage_1 (NULL);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1106 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1107
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1108 /* Open an auxiliary output file. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1109 static FILE *
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1110 open_auxiliary_file (const char *ext)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1111 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1112 char *filename;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1113 FILE *file;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1114
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1115 filename = concat (aux_base_name, ".", ext, NULL);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1116 file = fopen (filename, "w");
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1117 if (!file)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1118 fatal_error (input_location, "cannot open %s for writing: %m", filename);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1119 free (filename);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1120 return file;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1121 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1122
111
kono
parents: 67
diff changeset
1123 /* Alternative diagnostics callback for reentered ICE reporting. */
kono
parents: 67
diff changeset
1124
kono
parents: 67
diff changeset
1125 static void
kono
parents: 67
diff changeset
1126 internal_error_reentered (diagnostic_context *, const char *, va_list *)
kono
parents: 67
diff changeset
1127 {
kono
parents: 67
diff changeset
1128 /* Flush the dump file if emergency_dump_function itself caused an ICE. */
kono
parents: 67
diff changeset
1129 if (dump_file)
kono
parents: 67
diff changeset
1130 fflush (dump_file);
kono
parents: 67
diff changeset
1131 }
kono
parents: 67
diff changeset
1132
kono
parents: 67
diff changeset
1133 /* Auxiliary callback for the diagnostics code. */
kono
parents: 67
diff changeset
1134
kono
parents: 67
diff changeset
1135 static void
kono
parents: 67
diff changeset
1136 internal_error_function (diagnostic_context *, const char *, va_list *)
kono
parents: 67
diff changeset
1137 {
kono
parents: 67
diff changeset
1138 global_dc->internal_error = internal_error_reentered;
kono
parents: 67
diff changeset
1139 warn_if_plugins ();
kono
parents: 67
diff changeset
1140 emergency_dump_function ();
kono
parents: 67
diff changeset
1141 }
kono
parents: 67
diff changeset
1142
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1143 /* Initialization of the front end environment, before command line
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1144 options are parsed. Signal handlers, internationalization etc.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1145 ARGV0 is main's argv[0]. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1146 static void
111
kono
parents: 67
diff changeset
1147 general_init (const char *argv0, bool init_signals)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1148 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1149 const char *p;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1150
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1151 p = argv0 + strlen (argv0);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1152 while (p != argv0 && !IS_DIR_SEPARATOR (p[-1]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1153 --p;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1154 progname = p;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1155
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1156 xmalloc_set_program_name (progname);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1157
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1158 hex_init ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1159
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1160 /* Unlock the stdio streams. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1161 unlock_std_streams ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1162
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1163 gcc_init_libintl ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1164
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1165 identifier_to_locale_alloc = alloc_for_identifier_to_locale;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1166 identifier_to_locale_free = ggc_free;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1167
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1168 /* Initialize the diagnostics reporting machinery, so option parsing
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1169 can give warnings and errors. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1170 diagnostic_initialize (global_dc, N_OPTS);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1171 global_dc->lang_mask = lang_hooks.option_lang_mask ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1172 /* Set a default printer. Language specific initializations will
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1173 override it later. */
111
kono
parents: 67
diff changeset
1174 tree_diagnostics_defaults (global_dc);
kono
parents: 67
diff changeset
1175
kono
parents: 67
diff changeset
1176 global_dc->show_caret
kono
parents: 67
diff changeset
1177 = global_options_init.x_flag_diagnostics_show_caret;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1178 global_dc->show_labels_p
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1179 = global_options_init.x_flag_diagnostics_show_labels;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1180 global_dc->show_line_numbers_p
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1181 = global_options_init.x_flag_diagnostics_show_line_numbers;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1182 global_dc->show_cwe
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1183 = global_options_init.x_flag_diagnostics_show_cwe;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1184 global_dc->path_format
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1185 = (enum diagnostic_path_format)global_options_init.x_flag_diagnostics_path_format;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1186 global_dc->show_path_depths
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1187 = global_options_init.x_flag_diagnostics_show_path_depths;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1188 global_dc->show_option_requested
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1189 = global_options_init.x_flag_diagnostics_show_option;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1190 global_dc->min_margin_width
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1191 = global_options_init.x_diagnostics_minimum_margin_width;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1192 global_dc->show_column
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1193 = global_options_init.x_flag_show_column;
111
kono
parents: 67
diff changeset
1194 global_dc->internal_error = internal_error_function;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1195 global_dc->option_enabled = option_enabled;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1196 global_dc->option_state = &global_options;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1197 global_dc->option_name = option_name;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1198 global_dc->get_option_url = get_option_url;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1199
111
kono
parents: 67
diff changeset
1200 if (init_signals)
kono
parents: 67
diff changeset
1201 {
kono
parents: 67
diff changeset
1202 /* Trap fatal signals, e.g. SIGSEGV, and convert them to ICE messages. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1203 #ifdef SIGSEGV
111
kono
parents: 67
diff changeset
1204 signal (SIGSEGV, crash_signal);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1205 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1206 #ifdef SIGILL
111
kono
parents: 67
diff changeset
1207 signal (SIGILL, crash_signal);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1208 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1209 #ifdef SIGBUS
111
kono
parents: 67
diff changeset
1210 signal (SIGBUS, crash_signal);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1211 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1212 #ifdef SIGABRT
111
kono
parents: 67
diff changeset
1213 signal (SIGABRT, crash_signal);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1214 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1215 #if defined SIGIOT && (!defined SIGABRT || SIGABRT != SIGIOT)
111
kono
parents: 67
diff changeset
1216 signal (SIGIOT, crash_signal);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1217 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1218 #ifdef SIGFPE
111
kono
parents: 67
diff changeset
1219 signal (SIGFPE, crash_signal);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1220 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1221
111
kono
parents: 67
diff changeset
1222 /* Other host-specific signal setup. */
kono
parents: 67
diff changeset
1223 (*host_hooks.extra_signals)();
kono
parents: 67
diff changeset
1224 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1225
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1226 /* Initialize the garbage-collector, string pools and tree type hash
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1227 table. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1228 init_ggc ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1229 init_stringpool ();
111
kono
parents: 67
diff changeset
1230 input_location = UNKNOWN_LOCATION;
kono
parents: 67
diff changeset
1231 line_table = ggc_alloc<line_maps> ();
kono
parents: 67
diff changeset
1232 linemap_init (line_table, BUILTINS_LOCATION);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1233 line_table->reallocator = realloc_for_line_map;
111
kono
parents: 67
diff changeset
1234 line_table->round_alloc_size = ggc_round_alloc_size;
kono
parents: 67
diff changeset
1235 line_table->default_range_bits = 5;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1236 init_ttree ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1237
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1238 /* Initialize register usage now so switches may override. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1239 init_reg_sets ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1240
111
kono
parents: 67
diff changeset
1241 /* Create the singleton holder for global state. This creates the
kono
parents: 67
diff changeset
1242 dump manager. */
kono
parents: 67
diff changeset
1243 g = new gcc::context ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1244
111
kono
parents: 67
diff changeset
1245 /* Allow languages and middle-end to register their dumps before the
kono
parents: 67
diff changeset
1246 optimization passes. */
kono
parents: 67
diff changeset
1247 g->get_dumps ()->register_dumps ();
kono
parents: 67
diff changeset
1248
kono
parents: 67
diff changeset
1249 /* Create the passes. */
kono
parents: 67
diff changeset
1250 g->set_passes (new gcc::pass_manager (g));
kono
parents: 67
diff changeset
1251
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1252 symtab = new (ggc_alloc <symbol_table> ()) symbol_table ();
111
kono
parents: 67
diff changeset
1253
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1254 statistics_early_init ();
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1255 debuginfo_early_init ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1256 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1257
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1258 /* Return true if the current target supports -fsection-anchors. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1259
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1260 static bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1261 target_supports_section_anchors_p (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1262 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1263 if (targetm.min_anchor_offset == 0 && targetm.max_anchor_offset == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1264 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1265
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1266 if (targetm.asm_out.output_anchor == NULL)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1267 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1268
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1269 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1270 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1271
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1272 /* Parse "N[:M][:...]" into struct align_flags A.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1273 VALUES contains parsed values (in reverse order), all processed
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1274 values are popped. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1275
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1276 static void
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1277 read_log_maxskip (auto_vec<unsigned> &values, align_flags_tuple *a)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1278 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1279 unsigned n = values.pop ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1280 if (n != 0)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1281 a->log = floor_log2 (n * 2 - 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1282
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1283 if (values.is_empty ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1284 a->maxskip = n ? n - 1 : 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1285 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1286 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1287 unsigned m = values.pop ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1288 /* -falign-foo=N:M means M-1 max bytes of padding, not M. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1289 if (m > 0)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1290 m--;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1291 a->maxskip = m;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1292 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1293
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1294 /* Normalize the tuple. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1295 a->normalize ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1296 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1297
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1298 /* Parse "N[:M[:N2[:M2]]]" string FLAG into a pair of struct align_flags. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1299
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1300 static void
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1301 parse_N_M (const char *flag, align_flags &a)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1302 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1303 if (flag)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1304 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1305 static hash_map <nofree_string_hash, align_flags> cache;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1306 align_flags *entry = cache.get (flag);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1307 if (entry)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1308 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1309 a = *entry;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1310 return;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1311 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1312
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1313 auto_vec<unsigned> result_values;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1314 bool r = parse_and_check_align_values (flag, NULL, result_values, false,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1315 UNKNOWN_LOCATION);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1316 if (!r)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1317 return;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1318
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1319 /* Reverse values for easier manipulation. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1320 result_values.reverse ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1321
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1322 read_log_maxskip (result_values, &a.levels[0]);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1323 if (!result_values.is_empty ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1324 read_log_maxskip (result_values, &a.levels[1]);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1325 #ifdef SUBALIGN_LOG
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1326 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1327 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1328 /* N2[:M2] is not specified. This arch has a default for N2.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1329 Before -falign-foo=N:M:N2:M2 was introduced, x86 had a tweak.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1330 -falign-functions=N with N > 8 was adding secondary alignment.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1331 -falign-functions=10 was emitting this before every function:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1332 .p2align 4,,9
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1333 .p2align 3
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1334 Now this behavior (and more) can be explicitly requested:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1335 -falign-functions=16:10:8
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1336 Retain old behavior if N2 is missing: */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1337
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1338 int align = 1 << a.levels[0].log;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1339 int subalign = 1 << SUBALIGN_LOG;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1340
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1341 if (a.levels[0].log > SUBALIGN_LOG
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1342 && a.levels[0].maxskip >= subalign - 1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1343 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1344 /* Set N2 unless subalign can never have any effect. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1345 if (align > a.levels[0].maxskip + 1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1346 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1347 a.levels[1].log = SUBALIGN_LOG;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1348 a.levels[1].normalize ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1349 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1350 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1351 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1352 #endif
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1353
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1354 /* Cache seen value. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1355 cache.put (flag, a);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1356 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1357 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1358
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1359 /* Process -falign-foo=N[:M[:N2[:M2]]] options. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1360
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1361 void
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1362 parse_alignment_opts (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1363 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1364 parse_N_M (str_align_loops, align_loops);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1365 parse_N_M (str_align_jumps, align_jumps);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1366 parse_N_M (str_align_labels, align_labels);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1367 parse_N_M (str_align_functions, align_functions);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1368 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1369
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1370 /* Process the options that have been parsed. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1371 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1372 process_options (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1373 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1374 /* Just in case lang_hooks.post_options ends up calling a debug_hook.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1375 This can happen with incorrect pre-processed input. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1376 debug_hooks = &do_nothing_debug_hooks;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1377
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1378 maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1379
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1380 /* Allow the front end to perform consistency checks and do further
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1381 initialization based on the command line options. This hook also
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1382 sets the original filename if appropriate (e.g. foo.i -> foo.c)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1383 so we can correctly initialize debug output. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1384 no_backend = lang_hooks.post_options (&main_input_filename);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1385
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1386 /* Some machines may reject certain combinations of options. */
111
kono
parents: 67
diff changeset
1387 location_t saved_location = input_location;
kono
parents: 67
diff changeset
1388 input_location = UNKNOWN_LOCATION;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1389 targetm.target_option.override ();
111
kono
parents: 67
diff changeset
1390 input_location = saved_location;
kono
parents: 67
diff changeset
1391
kono
parents: 67
diff changeset
1392 if (flag_diagnostics_generate_patch)
kono
parents: 67
diff changeset
1393 global_dc->edit_context_ptr = new edit_context ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1394
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1395 /* Avoid any informative notes in the second run of -fcompare-debug. */
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1396 if (flag_compare_debug)
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1397 diagnostic_inhibit_notes (global_dc);
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1398
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1399 if (flag_section_anchors && !target_supports_section_anchors_p ())
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1400 {
111
kono
parents: 67
diff changeset
1401 warning_at (UNKNOWN_LOCATION, OPT_fsection_anchors,
kono
parents: 67
diff changeset
1402 "this target does not support %qs",
kono
parents: 67
diff changeset
1403 "-fsection-anchors");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1404 flag_section_anchors = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1405 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1406
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1407 if (flag_short_enums == 2)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1408 flag_short_enums = targetm.default_short_enums ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1409
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1410 /* Set aux_base_name if not already set. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1411 if (aux_base_name)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1412 ;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1413 else if (main_input_filename)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1414 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1415 char *name = xstrdup (lbasename (main_input_filename));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1416
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1417 strip_off_ending (name, strlen (name));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1418 aux_base_name = name;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1419 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1420 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1421 aux_base_name = "gccaux";
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1422
111
kono
parents: 67
diff changeset
1423 #ifndef HAVE_isl
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1424 if (flag_graphite
111
kono
parents: 67
diff changeset
1425 || flag_loop_nest_optimize
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1426 || flag_graphite_identity
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1427 || flag_loop_parallelize_all)
111
kono
parents: 67
diff changeset
1428 sorry ("Graphite loop optimizations cannot be used (isl is not available) "
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1429 "(%<-fgraphite%>, %<-fgraphite-identity%>, "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1430 "%<-floop-nest-optimize%>, %<-floop-parallelize-all%>)");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1431 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1432
111
kono
parents: 67
diff changeset
1433 if (flag_cf_protection != CF_NONE
kono
parents: 67
diff changeset
1434 && !(flag_cf_protection & CF_SET))
kono
parents: 67
diff changeset
1435 {
kono
parents: 67
diff changeset
1436 if (flag_cf_protection == CF_FULL)
kono
parents: 67
diff changeset
1437 {
kono
parents: 67
diff changeset
1438 error_at (UNKNOWN_LOCATION,
kono
parents: 67
diff changeset
1439 "%<-fcf-protection=full%> is not supported for this "
kono
parents: 67
diff changeset
1440 "target");
kono
parents: 67
diff changeset
1441 flag_cf_protection = CF_NONE;
kono
parents: 67
diff changeset
1442 }
kono
parents: 67
diff changeset
1443 if (flag_cf_protection == CF_BRANCH)
kono
parents: 67
diff changeset
1444 {
kono
parents: 67
diff changeset
1445 error_at (UNKNOWN_LOCATION,
kono
parents: 67
diff changeset
1446 "%<-fcf-protection=branch%> is not supported for this "
kono
parents: 67
diff changeset
1447 "target");
kono
parents: 67
diff changeset
1448 flag_cf_protection = CF_NONE;
kono
parents: 67
diff changeset
1449 }
kono
parents: 67
diff changeset
1450 if (flag_cf_protection == CF_RETURN)
kono
parents: 67
diff changeset
1451 {
kono
parents: 67
diff changeset
1452 error_at (UNKNOWN_LOCATION,
kono
parents: 67
diff changeset
1453 "%<-fcf-protection=return%> is not supported for this "
kono
parents: 67
diff changeset
1454 "target");
kono
parents: 67
diff changeset
1455 flag_cf_protection = CF_NONE;
kono
parents: 67
diff changeset
1456 }
kono
parents: 67
diff changeset
1457 }
kono
parents: 67
diff changeset
1458
kono
parents: 67
diff changeset
1459 /* One region RA really helps to decrease the code size. */
kono
parents: 67
diff changeset
1460 if (flag_ira_region == IRA_REGION_AUTODETECT)
kono
parents: 67
diff changeset
1461 flag_ira_region
kono
parents: 67
diff changeset
1462 = optimize_size || !optimize ? IRA_REGION_ONE : IRA_REGION_MIXED;
kono
parents: 67
diff changeset
1463
kono
parents: 67
diff changeset
1464 if (!abi_version_at_least (2))
kono
parents: 67
diff changeset
1465 {
kono
parents: 67
diff changeset
1466 /* -fabi-version=1 support was removed after GCC 4.9. */
kono
parents: 67
diff changeset
1467 error_at (UNKNOWN_LOCATION,
kono
parents: 67
diff changeset
1468 "%<-fabi-version=1%> is no longer supported");
kono
parents: 67
diff changeset
1469 flag_abi_version = 2;
kono
parents: 67
diff changeset
1470 }
kono
parents: 67
diff changeset
1471
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1472 /* Unrolling all loops implies that standard loop unrolling must also
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1473 be done. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1474 if (flag_unroll_all_loops)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1475 flag_unroll_loops = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1476
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1477 /* web and rename-registers help when run after loop unrolling. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1478 if (flag_web == AUTODETECT_VALUE)
111
kono
parents: 67
diff changeset
1479 flag_web = flag_unroll_loops;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1480
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1481 if (flag_rename_registers == AUTODETECT_VALUE)
111
kono
parents: 67
diff changeset
1482 flag_rename_registers = flag_unroll_loops;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1483
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1484 if (flag_non_call_exceptions)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1485 flag_asynchronous_unwind_tables = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1486 if (flag_asynchronous_unwind_tables)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1487 flag_unwind_tables = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1488
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1489 if (flag_value_profile_transformations)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1490 flag_profile_values = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1491
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1492 /* Warn about options that are not supported on this machine. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1493 #ifndef INSN_SCHEDULING
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1494 if (flag_schedule_insns || flag_schedule_insns_after_reload)
111
kono
parents: 67
diff changeset
1495 warning_at (UNKNOWN_LOCATION, 0,
kono
parents: 67
diff changeset
1496 "instruction scheduling not supported on this target machine");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1497 #endif
111
kono
parents: 67
diff changeset
1498 if (!DELAY_SLOTS && flag_delayed_branch)
kono
parents: 67
diff changeset
1499 warning_at (UNKNOWN_LOCATION, 0,
kono
parents: 67
diff changeset
1500 "this target machine does not have delayed branches");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1501
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1502 user_label_prefix = USER_LABEL_PREFIX;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1503 if (flag_leading_underscore != -1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1504 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1505 /* If the default prefix is more complicated than "" or "_",
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1506 issue a warning and ignore this option. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1507 if (user_label_prefix[0] == 0 ||
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1508 (user_label_prefix[0] == '_' && user_label_prefix[1] == 0))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1509 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1510 user_label_prefix = flag_leading_underscore ? "_" : "";
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1511 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1512 else
111
kono
parents: 67
diff changeset
1513 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1514 "%<-f%sleading-underscore%> not supported on this "
111
kono
parents: 67
diff changeset
1515 "target machine", flag_leading_underscore ? "" : "no-");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1516 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1517
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1518 /* If we are in verbose mode, write out the version and maybe all the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1519 option flags in use. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1520 if (version_flag)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1521 {
111
kono
parents: 67
diff changeset
1522 print_version (stderr, "", true);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1523 if (! quiet_flag)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1524 print_switch_values (print_to_stderr);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1525 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1526
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1527 if (flag_syntax_only)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1528 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1529 write_symbols = NO_DEBUG;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1530 profile_flag = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1531 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1532
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1533 if (flag_gtoggle)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1534 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1535 if (debug_info_level == DINFO_LEVEL_NONE)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1536 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1537 debug_info_level = DINFO_LEVEL_NORMAL;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1538
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1539 if (write_symbols == NO_DEBUG)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1540 write_symbols = PREFERRED_DEBUGGING_TYPE;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1541 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1542 else
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1543 debug_info_level = DINFO_LEVEL_NONE;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1544 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1545
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1546 if (flag_dump_final_insns && !flag_syntax_only && !no_backend)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1547 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1548 FILE *final_output = fopen (flag_dump_final_insns, "w");
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1549 if (!final_output)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1550 {
111
kono
parents: 67
diff changeset
1551 error_at (UNKNOWN_LOCATION,
kono
parents: 67
diff changeset
1552 "could not open final insn dump file %qs: %m",
kono
parents: 67
diff changeset
1553 flag_dump_final_insns);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1554 flag_dump_final_insns = NULL;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1555 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1556 else if (fclose (final_output))
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1557 {
111
kono
parents: 67
diff changeset
1558 error_at (UNKNOWN_LOCATION,
kono
parents: 67
diff changeset
1559 "could not close zeroed insn dump file %qs: %m",
kono
parents: 67
diff changeset
1560 flag_dump_final_insns);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1561 flag_dump_final_insns = NULL;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1562 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1563 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1564
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1565 /* A lot of code assumes write_symbols == NO_DEBUG if the debugging
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1566 level is 0. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1567 if (debug_info_level == DINFO_LEVEL_NONE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1568 write_symbols = NO_DEBUG;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1569
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1570 if (write_symbols == NO_DEBUG)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1571 ;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1572 #if defined(DBX_DEBUGGING_INFO)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1573 else if (write_symbols == DBX_DEBUG)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1574 debug_hooks = &dbx_debug_hooks;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1575 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1576 #if defined(XCOFF_DEBUGGING_INFO)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1577 else if (write_symbols == XCOFF_DEBUG)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1578 debug_hooks = &xcoff_debug_hooks;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1579 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1580 #ifdef DWARF2_DEBUGGING_INFO
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1581 else if (write_symbols == DWARF2_DEBUG)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1582 debug_hooks = &dwarf2_debug_hooks;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1583 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1584 #ifdef VMS_DEBUGGING_INFO
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1585 else if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1586 debug_hooks = &vmsdbg_debug_hooks;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1587 #endif
111
kono
parents: 67
diff changeset
1588 #ifdef DWARF2_LINENO_DEBUGGING_INFO
kono
parents: 67
diff changeset
1589 else if (write_symbols == DWARF2_DEBUG)
kono
parents: 67
diff changeset
1590 debug_hooks = &dwarf2_lineno_debug_hooks;
kono
parents: 67
diff changeset
1591 #endif
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1592 else
111
kono
parents: 67
diff changeset
1593 error_at (UNKNOWN_LOCATION,
kono
parents: 67
diff changeset
1594 "target system does not support the %qs debug format",
kono
parents: 67
diff changeset
1595 debug_type_names[write_symbols]);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1596
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1597 /* We know which debug output will be used so we can set flag_var_tracking
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1598 and flag_var_tracking_uninit if the user has not specified them. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1599 if (debug_info_level < DINFO_LEVEL_NORMAL
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1600 || debug_hooks->var_location == do_nothing_debug_hooks.var_location)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1601 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1602 if (flag_var_tracking == 1
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1603 || flag_var_tracking_uninit == 1)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1604 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1605 if (debug_info_level < DINFO_LEVEL_NORMAL)
111
kono
parents: 67
diff changeset
1606 warning_at (UNKNOWN_LOCATION, 0,
kono
parents: 67
diff changeset
1607 "variable tracking requested, but useless unless "
kono
parents: 67
diff changeset
1608 "producing debug info");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1609 else
111
kono
parents: 67
diff changeset
1610 warning_at (UNKNOWN_LOCATION, 0,
kono
parents: 67
diff changeset
1611 "variable tracking requested, but not supported "
kono
parents: 67
diff changeset
1612 "by this debug format");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1613 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1614 flag_var_tracking = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1615 flag_var_tracking_uninit = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1616 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1617
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1618 /* The debug hooks are used to implement -fdump-go-spec because it
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1619 gives a simple and stable API for all the information we need to
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1620 dump. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1621 if (flag_dump_go_spec != NULL)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1622 debug_hooks = dump_go_spec_init (flag_dump_go_spec, debug_hooks);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1623
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1624 /* If the user specifically requested variable tracking with tagging
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1625 uninitialized variables, we need to turn on variable tracking.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1626 (We already determined above that variable tracking is feasible.) */
111
kono
parents: 67
diff changeset
1627 if (flag_var_tracking_uninit == 1)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1628 flag_var_tracking = 1;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1629
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1630 if (flag_var_tracking == AUTODETECT_VALUE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1631 flag_var_tracking = optimize >= 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1632
111
kono
parents: 67
diff changeset
1633 if (flag_var_tracking_uninit == AUTODETECT_VALUE)
kono
parents: 67
diff changeset
1634 flag_var_tracking_uninit = flag_var_tracking;
kono
parents: 67
diff changeset
1635
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1636 if (flag_var_tracking_assignments == AUTODETECT_VALUE)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1637 flag_var_tracking_assignments
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1638 = (flag_var_tracking
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1639 && !(flag_selective_scheduling || flag_selective_scheduling2));
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1640
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1641 if (flag_var_tracking_assignments_toggle)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1642 flag_var_tracking_assignments = !flag_var_tracking_assignments;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1643
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1644 if (flag_var_tracking_assignments && !flag_var_tracking)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1645 flag_var_tracking = flag_var_tracking_assignments = -1;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1646
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1647 if (flag_var_tracking_assignments
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1648 && (flag_selective_scheduling || flag_selective_scheduling2))
111
kono
parents: 67
diff changeset
1649 warning_at (UNKNOWN_LOCATION, 0,
kono
parents: 67
diff changeset
1650 "var-tracking-assignments changes selective scheduling");
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1651
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1652 if (debug_nonbind_markers_p == AUTODETECT_VALUE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1653 debug_nonbind_markers_p
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1654 = (optimize
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1655 && debug_info_level >= DINFO_LEVEL_NORMAL
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1656 && (write_symbols == DWARF2_DEBUG
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1657 || write_symbols == VMS_AND_DWARF2_DEBUG)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1658 && !(flag_selective_scheduling || flag_selective_scheduling2));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1659
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1660 if (dwarf2out_as_loc_support == AUTODETECT_VALUE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1661 dwarf2out_as_loc_support
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1662 = dwarf2out_default_as_loc_support ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1663 if (dwarf2out_as_locview_support == AUTODETECT_VALUE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1664 dwarf2out_as_locview_support
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1665 = dwarf2out_default_as_locview_support ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1666
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1667 if (debug_variable_location_views == AUTODETECT_VALUE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1668 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1669 debug_variable_location_views
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1670 = (flag_var_tracking
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1671 && debug_info_level >= DINFO_LEVEL_NORMAL
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1672 && (write_symbols == DWARF2_DEBUG
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1673 || write_symbols == VMS_AND_DWARF2_DEBUG)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1674 && !dwarf_strict
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1675 && dwarf2out_as_loc_support
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1676 && dwarf2out_as_locview_support);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1677 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1678 else if (debug_variable_location_views == -1 && dwarf_version != 5)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1679 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1680 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1681 "without %<-gdwarf-5%>, "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1682 "%<-gvariable-location-views=incompat5%> "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1683 "is equivalent to %<-gvariable-location-views%>");
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1684 debug_variable_location_views = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1685 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1686
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1687 if (debug_internal_reset_location_views == 2)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1688 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1689 debug_internal_reset_location_views
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1690 = (debug_variable_location_views
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1691 && targetm.reset_location_view);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1692 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1693 else if (debug_internal_reset_location_views
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1694 && !debug_variable_location_views)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1695 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1696 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1697 "%<-ginternal-reset-location-views%> is forced disabled "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1698 "without %<-gvariable-location-views%>");
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1699 debug_internal_reset_location_views = 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1700 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1701
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1702 if (debug_inline_points == AUTODETECT_VALUE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1703 debug_inline_points = debug_variable_location_views;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1704 else if (debug_inline_points && !debug_nonbind_markers_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1705 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1706 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1707 "%<-ginline-points%> is forced disabled without "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1708 "%<-gstatement-frontiers%>");
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1709 debug_inline_points = 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1710 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1711
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1712 if (flag_tree_cselim == AUTODETECT_VALUE)
111
kono
parents: 67
diff changeset
1713 {
kono
parents: 67
diff changeset
1714 if (HAVE_conditional_move)
kono
parents: 67
diff changeset
1715 flag_tree_cselim = 1;
kono
parents: 67
diff changeset
1716 else
kono
parents: 67
diff changeset
1717 flag_tree_cselim = 0;
kono
parents: 67
diff changeset
1718 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1719
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1720 /* If auxiliary info generation is desired, open the output file.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1721 This goes in the same directory as the source file--unlike
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1722 all the other output files. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1723 if (flag_gen_aux_info)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1724 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1725 aux_info_file = fopen (aux_info_file_name, "w");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1726 if (aux_info_file == 0)
111
kono
parents: 67
diff changeset
1727 fatal_error (UNKNOWN_LOCATION,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1728 "cannot open %s: %m", aux_info_file_name);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1729 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1730
111
kono
parents: 67
diff changeset
1731 if (!targetm_common.have_named_sections)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1732 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1733 if (flag_function_sections)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1734 {
111
kono
parents: 67
diff changeset
1735 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1736 "%<-ffunction-sections%> not supported for this target");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1737 flag_function_sections = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1738 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1739 if (flag_data_sections)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1740 {
111
kono
parents: 67
diff changeset
1741 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1742 "%<-fdata-sections%> not supported for this target");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1743 flag_data_sections = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1744 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1745 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1746
111
kono
parents: 67
diff changeset
1747 if (flag_prefetch_loop_arrays > 0 && !targetm.code_for_prefetch)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1748 {
111
kono
parents: 67
diff changeset
1749 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1750 "%<-fprefetch-loop-arrays%> not supported for this target");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1751 flag_prefetch_loop_arrays = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1752 }
111
kono
parents: 67
diff changeset
1753 else if (flag_prefetch_loop_arrays > 0 && !targetm.have_prefetch ())
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1754 {
111
kono
parents: 67
diff changeset
1755 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1756 "%<-fprefetch-loop-arrays%> not supported for this target "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1757 "(try %<-march%> switches)");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1758 flag_prefetch_loop_arrays = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1759 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1760
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1761 /* This combination of options isn't handled for i386 targets and doesn't
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1762 make much sense anyway, so don't allow it. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1763 if (flag_prefetch_loop_arrays > 0 && optimize_size)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1764 {
111
kono
parents: 67
diff changeset
1765 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1766 "%<-fprefetch-loop-arrays%> is not supported with %<-Os%>");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1767 flag_prefetch_loop_arrays = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1768 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1769
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1770 /* The presence of IEEE signaling NaNs, implies all math can trap. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1771 if (flag_signaling_nans)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1772 flag_trapping_math = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1773
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1774 /* We cannot reassociate if we want traps or signed zeros. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1775 if (flag_associative_math && (flag_trapping_math || flag_signed_zeros))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1776 {
111
kono
parents: 67
diff changeset
1777 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1778 "%<-fassociative-math%> disabled; other options take "
111
kono
parents: 67
diff changeset
1779 "precedence");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1780 flag_associative_math = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1781 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1782
111
kono
parents: 67
diff changeset
1783 /* -fstack-clash-protection is not currently supported on targets
kono
parents: 67
diff changeset
1784 where the stack grows up. */
kono
parents: 67
diff changeset
1785 if (flag_stack_clash_protection && !STACK_GROWS_DOWNWARD)
kono
parents: 67
diff changeset
1786 {
kono
parents: 67
diff changeset
1787 warning_at (UNKNOWN_LOCATION, 0,
kono
parents: 67
diff changeset
1788 "%<-fstack-clash-protection%> is not supported on targets "
kono
parents: 67
diff changeset
1789 "where the stack grows from lower to higher addresses");
kono
parents: 67
diff changeset
1790 flag_stack_clash_protection = 0;
kono
parents: 67
diff changeset
1791 }
kono
parents: 67
diff changeset
1792
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1793 /* We cannot support -fstack-check= and -fstack-clash-protection at
111
kono
parents: 67
diff changeset
1794 the same time. */
kono
parents: 67
diff changeset
1795 if (flag_stack_check != NO_STACK_CHECK && flag_stack_clash_protection)
kono
parents: 67
diff changeset
1796 {
kono
parents: 67
diff changeset
1797 warning_at (UNKNOWN_LOCATION, 0,
kono
parents: 67
diff changeset
1798 "%<-fstack-check=%> and %<-fstack-clash_protection%> are "
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1799 "mutually exclusive; disabling %<-fstack-check=%>");
111
kono
parents: 67
diff changeset
1800 flag_stack_check = NO_STACK_CHECK;
kono
parents: 67
diff changeset
1801 }
kono
parents: 67
diff changeset
1802
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1803 /* With -fcx-limited-range, we do cheap and quick complex arithmetic. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1804 if (flag_cx_limited_range)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1805 flag_complex_method = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1806
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1807 /* With -fcx-fortran-rules, we do something in-between cheap and C99. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1808 if (flag_cx_fortran_rules)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1809 flag_complex_method = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1810
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1811 /* Targets must be able to place spill slots at lower addresses. If the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1812 target already uses a soft frame pointer, the transition is trivial. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1813 if (!FRAME_GROWS_DOWNWARD && flag_stack_protect)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1814 {
111
kono
parents: 67
diff changeset
1815 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1816 "%<-fstack-protector%> not supported for this target");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1817 flag_stack_protect = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1818 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1819 if (!flag_stack_protect)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1820 warn_stack_protect = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1821
111
kono
parents: 67
diff changeset
1822 /* Address Sanitizer needs porting to each target architecture. */
kono
parents: 67
diff changeset
1823
kono
parents: 67
diff changeset
1824 if ((flag_sanitize & SANITIZE_ADDRESS)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1825 && (!FRAME_GROWS_DOWNWARD || targetm.asan_shadow_offset == NULL))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1826 {
111
kono
parents: 67
diff changeset
1827 warning_at (UNKNOWN_LOCATION, 0,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1828 "%<-fsanitize=address%> and %<-fsanitize=kernel-address%> "
111
kono
parents: 67
diff changeset
1829 "are not supported for this target");
kono
parents: 67
diff changeset
1830 flag_sanitize &= ~SANITIZE_ADDRESS;
kono
parents: 67
diff changeset
1831 }
kono
parents: 67
diff changeset
1832
kono
parents: 67
diff changeset
1833 /* Do not use IPA optimizations for register allocation if profiler is active
kono
parents: 67
diff changeset
1834 or patchable function entries are inserted for run-time instrumentation
kono
parents: 67
diff changeset
1835 or port does not emit prologue and epilogue as RTL. */
kono
parents: 67
diff changeset
1836 if (profile_flag || function_entry_patch_area_size
kono
parents: 67
diff changeset
1837 || !targetm.have_prologue () || !targetm.have_epilogue ())
kono
parents: 67
diff changeset
1838 flag_ipa_ra = 0;
kono
parents: 67
diff changeset
1839
kono
parents: 67
diff changeset
1840 /* Enable -Werror=coverage-mismatch when -Werror and -Wno-error
kono
parents: 67
diff changeset
1841 have not been set. */
kono
parents: 67
diff changeset
1842 if (!global_options_set.x_warnings_are_errors
kono
parents: 67
diff changeset
1843 && warn_coverage_mismatch
kono
parents: 67
diff changeset
1844 && (global_dc->classify_diagnostic[OPT_Wcoverage_mismatch] ==
kono
parents: 67
diff changeset
1845 DK_UNSPECIFIED))
kono
parents: 67
diff changeset
1846 diagnostic_classify_diagnostic (global_dc, OPT_Wcoverage_mismatch,
kono
parents: 67
diff changeset
1847 DK_ERROR, UNKNOWN_LOCATION);
kono
parents: 67
diff changeset
1848
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1849 /* Save the current optimization options. */
111
kono
parents: 67
diff changeset
1850 optimization_default_node = build_optimization_node (&global_options);
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1851 optimization_current_node = optimization_default_node;
111
kono
parents: 67
diff changeset
1852
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1853 if (flag_checking >= 2)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1854 hash_table_sanitize_eq_limit
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1855 = param_hash_table_verification_limit;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1856
111
kono
parents: 67
diff changeset
1857 /* Please don't change global_options after this point, those changes won't
kono
parents: 67
diff changeset
1858 be reflected in optimization_{default,current}_node. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1859 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1860
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1861 /* This function can be called multiple times to reinitialize the compiler
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1862 back end when register classes or instruction sets have changed,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1863 before each function. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1864 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1865 backend_init_target (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1866 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1867 /* This depends on stack_pointer_rtx. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1868 init_fake_stack_mems ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1869
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1870 /* Sets static_base_value[HARD_FRAME_POINTER_REGNUM], which is
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1871 mode-dependent. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1872 init_alias_target ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1873
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1874 /* Depends on HARD_FRAME_POINTER_REGNUM. */
111
kono
parents: 67
diff changeset
1875 if (!ira_use_lra_p)
kono
parents: 67
diff changeset
1876 init_reload ();
kono
parents: 67
diff changeset
1877
kono
parents: 67
diff changeset
1878 /* Depends on the enabled attribute. */
kono
parents: 67
diff changeset
1879 recog_init ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1880
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1881 /* The following initialization functions need to generate rtl, so
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1882 provide a dummy function context for them. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1883 init_dummy_function_start ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1884
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1885 /* rtx_cost is mode-dependent, so cached values need to be recomputed
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1886 on a mode change. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1887 init_expmed ();
111
kono
parents: 67
diff changeset
1888 init_lower_subreg ();
kono
parents: 67
diff changeset
1889 init_set_costs ();
kono
parents: 67
diff changeset
1890
kono
parents: 67
diff changeset
1891 init_expr_target ();
kono
parents: 67
diff changeset
1892 ira_init ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1893
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1894 /* We may need to recompute regno_save_code[] and regno_restore_code[]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1895 after a mode change as well. */
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1896 caller_save_initialized_p = false;
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1897
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1898 expand_dummy_function_end ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1899 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1900
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1901 /* Initialize the compiler back end. This function is called only once,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1902 when starting the compiler. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1903 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1904 backend_init (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1905 {
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
1906 init_emit_once ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1907
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1908 init_rtlanal ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1909 init_inline_once ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1910 init_varasm_once ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1911 save_register_info ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1912
111
kono
parents: 67
diff changeset
1913 /* Middle end needs this initialization for default mem attributes
kono
parents: 67
diff changeset
1914 used by early calls to make_decl_rtl. */
kono
parents: 67
diff changeset
1915 init_emit_regs ();
kono
parents: 67
diff changeset
1916
kono
parents: 67
diff changeset
1917 /* Middle end needs this initialization for mode tables used to assign
kono
parents: 67
diff changeset
1918 modes to vector variables. */
kono
parents: 67
diff changeset
1919 init_regs ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1920 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1921
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1922 /* Initialize things that are both lang-dependent and target-dependent.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1923 This function can be called more than once if target parameters change. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1924 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1925 lang_dependent_init_target (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1926 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1927 /* This creates various _DECL nodes, so needs to be called after the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1928 front end is initialized. It also depends on the HAVE_xxx macros
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1929 generated from the target machine description. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1930 init_optabs ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1931
111
kono
parents: 67
diff changeset
1932 gcc_assert (!this_target_rtl->target_specific_initialized);
kono
parents: 67
diff changeset
1933 }
kono
parents: 67
diff changeset
1934
kono
parents: 67
diff changeset
1935 /* Perform initializations that are lang-dependent or target-dependent.
kono
parents: 67
diff changeset
1936 but matters only for late optimizations and RTL generation. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1937
111
kono
parents: 67
diff changeset
1938 static int rtl_initialized;
kono
parents: 67
diff changeset
1939
kono
parents: 67
diff changeset
1940 void
kono
parents: 67
diff changeset
1941 initialize_rtl (void)
kono
parents: 67
diff changeset
1942 {
kono
parents: 67
diff changeset
1943 auto_timevar tv (g_timer, TV_INITIALIZE_RTL);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1944
111
kono
parents: 67
diff changeset
1945 /* Initialization done just once per compilation, but delayed
kono
parents: 67
diff changeset
1946 till code generation. */
kono
parents: 67
diff changeset
1947 if (!rtl_initialized)
kono
parents: 67
diff changeset
1948 ira_init_once ();
kono
parents: 67
diff changeset
1949 rtl_initialized = true;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1950
111
kono
parents: 67
diff changeset
1951 /* Target specific RTL backend initialization. */
kono
parents: 67
diff changeset
1952 if (!this_target_rtl->target_specific_initialized)
kono
parents: 67
diff changeset
1953 {
kono
parents: 67
diff changeset
1954 backend_init_target ();
kono
parents: 67
diff changeset
1955 this_target_rtl->target_specific_initialized = true;
kono
parents: 67
diff changeset
1956 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1957 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1958
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1959 /* Language-dependent initialization. Returns nonzero on success. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1960 static int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1961 lang_dependent_init (const char *name)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1962 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1963 location_t save_loc = input_location;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1964 if (dump_base_name == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1965 dump_base_name = name && name[0] ? name : "gccdump";
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1966
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1967 /* Other front-end initialization. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1968 input_location = BUILTINS_LOCATION;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1969 if (lang_hooks.init () == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1970 return 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1971 input_location = save_loc;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1972
111
kono
parents: 67
diff changeset
1973 if (!flag_wpa)
kono
parents: 67
diff changeset
1974 {
kono
parents: 67
diff changeset
1975 init_asm_output (name);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1976
111
kono
parents: 67
diff changeset
1977 /* If stack usage information is desired, open the output file. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1978 if (flag_stack_usage && !flag_generate_lto)
111
kono
parents: 67
diff changeset
1979 stack_usage_file = open_auxiliary_file ("su");
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1980
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1981 /* If call graph information is desired, open the output file. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1982 if (flag_callgraph_info && !flag_generate_lto)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1983 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1984 callgraph_info_file = open_auxiliary_file ("ci");
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1985 /* Write the file header. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1986 fprintf (callgraph_info_file,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1987 "graph: { title: \"%s\"\n", main_input_filename);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1988 bitmap_obstack_initialize (NULL);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1989 callgraph_info_external_printed = BITMAP_ALLOC (NULL);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1990 }
111
kono
parents: 67
diff changeset
1991 }
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1992
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1993 /* This creates various _DECL nodes, so needs to be called after the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1994 front end is initialized. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1995 init_eh ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1996
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1997 /* Do the target-specific parts of the initialization. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1998 lang_dependent_init_target ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1999
111
kono
parents: 67
diff changeset
2000 if (!flag_wpa)
kono
parents: 67
diff changeset
2001 {
kono
parents: 67
diff changeset
2002 /* If dbx symbol table desired, initialize writing it and output the
kono
parents: 67
diff changeset
2003 predefined types. */
kono
parents: 67
diff changeset
2004 timevar_push (TV_SYMOUT);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2005
111
kono
parents: 67
diff changeset
2006 /* Now we have the correct original filename, we can initialize
kono
parents: 67
diff changeset
2007 debug output. */
kono
parents: 67
diff changeset
2008 (*debug_hooks->init) (name);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2009
111
kono
parents: 67
diff changeset
2010 timevar_pop (TV_SYMOUT);
kono
parents: 67
diff changeset
2011 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2012
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2013 return 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2014 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2015
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2016
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2017 /* Reinitialize everything when target parameters, such as register usage,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2018 have changed. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2019 void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2020 target_reinit (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2021 {
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2022 struct rtl_data saved_x_rtl;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2023 rtx *saved_regno_reg_rtx;
111
kono
parents: 67
diff changeset
2024 tree saved_optimization_current_node;
kono
parents: 67
diff changeset
2025 struct target_optabs *saved_this_fn_optabs;
kono
parents: 67
diff changeset
2026
kono
parents: 67
diff changeset
2027 /* Temporarily switch to the default optimization node, so that
kono
parents: 67
diff changeset
2028 *this_target_optabs is set to the default, not reflecting
kono
parents: 67
diff changeset
2029 whatever a previous function used for the optimize
kono
parents: 67
diff changeset
2030 attribute. */
kono
parents: 67
diff changeset
2031 saved_optimization_current_node = optimization_current_node;
kono
parents: 67
diff changeset
2032 saved_this_fn_optabs = this_fn_optabs;
kono
parents: 67
diff changeset
2033 if (saved_optimization_current_node != optimization_default_node)
kono
parents: 67
diff changeset
2034 {
kono
parents: 67
diff changeset
2035 optimization_current_node = optimization_default_node;
kono
parents: 67
diff changeset
2036 cl_optimization_restore
kono
parents: 67
diff changeset
2037 (&global_options,
kono
parents: 67
diff changeset
2038 TREE_OPTIMIZATION (optimization_default_node));
kono
parents: 67
diff changeset
2039 }
kono
parents: 67
diff changeset
2040 this_fn_optabs = this_target_optabs;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2041
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2042 /* Save *crtl and regno_reg_rtx around the reinitialization
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2043 to allow target_reinit being called even after prepare_function_start. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2044 saved_regno_reg_rtx = regno_reg_rtx;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2045 if (saved_regno_reg_rtx)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2046 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2047 saved_x_rtl = *crtl;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2048 memset (crtl, '\0', sizeof (*crtl));
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2049 regno_reg_rtx = NULL;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2050 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2051
111
kono
parents: 67
diff changeset
2052 this_target_rtl->target_specific_initialized = false;
kono
parents: 67
diff changeset
2053
kono
parents: 67
diff changeset
2054 /* This initializes hard_frame_pointer, and calls init_reg_modes_target()
kono
parents: 67
diff changeset
2055 to initialize reg_raw_mode[]. */
kono
parents: 67
diff changeset
2056 init_emit_regs ();
kono
parents: 67
diff changeset
2057
kono
parents: 67
diff changeset
2058 /* This invokes target hooks to set fixed_reg[] etc, which is
kono
parents: 67
diff changeset
2059 mode-dependent. */
kono
parents: 67
diff changeset
2060 init_regs ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2061
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2062 /* Reinitialize lang-dependent parts. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2063 lang_dependent_init_target ();
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2064
111
kono
parents: 67
diff changeset
2065 /* Restore the original optimization node. */
kono
parents: 67
diff changeset
2066 if (saved_optimization_current_node != optimization_default_node)
kono
parents: 67
diff changeset
2067 {
kono
parents: 67
diff changeset
2068 optimization_current_node = saved_optimization_current_node;
kono
parents: 67
diff changeset
2069 cl_optimization_restore (&global_options,
kono
parents: 67
diff changeset
2070 TREE_OPTIMIZATION (optimization_current_node));
kono
parents: 67
diff changeset
2071 }
kono
parents: 67
diff changeset
2072 this_fn_optabs = saved_this_fn_optabs;
kono
parents: 67
diff changeset
2073
kono
parents: 67
diff changeset
2074 /* Restore regno_reg_rtx at the end, as free_after_compilation from
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2075 expand_dummy_function_end clears it. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2076 if (saved_regno_reg_rtx)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2077 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2078 *crtl = saved_x_rtl;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2079 regno_reg_rtx = saved_regno_reg_rtx;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2080 saved_regno_reg_rtx = NULL;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2081 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2082 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2083
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2084 void
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2085 dump_memory_report (const char *header)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2086 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2087 /* Print significant header. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2088 fputc ('\n', stderr);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2089 for (unsigned i = 0; i < 80; i++)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2090 fputc ('#', stderr);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2091 fprintf (stderr, "\n# %-77s#\n", header);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2092 for (unsigned i = 0; i < 80; i++)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2093 fputc ('#', stderr);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2094 fputs ("\n\n", stderr);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2095
111
kono
parents: 67
diff changeset
2096 dump_line_table_statistics ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2097 ggc_print_statistics ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2098 stringpool_statistics ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2099 dump_tree_statistics ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2100 dump_gimple_statistics ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2101 dump_rtx_statistics ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2102 dump_alloc_pool_statistics ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2103 dump_bitmap_statistics ();
111
kono
parents: 67
diff changeset
2104 dump_hash_table_loc_statistics ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2105 dump_vec_loc_statistics ();
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2106 dump_ggc_loc_statistics ();
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2107 dump_alias_stats (stderr);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2108 dump_pta_stats (stderr);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2109 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2110
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2111 /* Clean up: close opened files, etc. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2112
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2113 static void
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2114 finalize (bool no_backend)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2115 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2116 /* Close the dump files. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2117 if (flag_gen_aux_info)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2118 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2119 fclose (aux_info_file);
111
kono
parents: 67
diff changeset
2120 aux_info_file = NULL;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2121 if (seen_error ())
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2122 unlink (aux_info_file_name);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2123 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2124
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2125 /* Close non-debugging input and output files. Take special care to note
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2126 whether fclose returns an error, since the pages might still be on the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2127 buffer chain while the file is open. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2128
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2129 if (asm_out_file)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2130 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2131 if (ferror (asm_out_file) != 0)
111
kono
parents: 67
diff changeset
2132 fatal_error (input_location, "error writing to %s: %m", asm_file_name);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2133 if (fclose (asm_out_file) != 0)
111
kono
parents: 67
diff changeset
2134 fatal_error (input_location, "error closing %s: %m", asm_file_name);
kono
parents: 67
diff changeset
2135 asm_out_file = NULL;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2136 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2137
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2138 if (stack_usage_file)
111
kono
parents: 67
diff changeset
2139 {
kono
parents: 67
diff changeset
2140 fclose (stack_usage_file);
kono
parents: 67
diff changeset
2141 stack_usage_file = NULL;
kono
parents: 67
diff changeset
2142 }
kono
parents: 67
diff changeset
2143
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2144 if (callgraph_info_file)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2145 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2146 fputs ("}\n", callgraph_info_file);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2147 fclose (callgraph_info_file);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2148 callgraph_info_file = NULL;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2149 BITMAP_FREE (callgraph_info_external_printed);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2150 bitmap_obstack_release (NULL);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2151 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2152
111
kono
parents: 67
diff changeset
2153 if (seen_error ())
kono
parents: 67
diff changeset
2154 coverage_remove_note_file ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2155
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2156 if (!no_backend)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2157 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2158 statistics_fini ();
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2159 debuginfo_fini ();
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2160
111
kono
parents: 67
diff changeset
2161 g->get_passes ()->finish_optimization_passes ();
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2162
111
kono
parents: 67
diff changeset
2163 lra_finish_once ();
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2164 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2165
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2166 if (mem_report)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2167 dump_memory_report ("Final");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2168
111
kono
parents: 67
diff changeset
2169 if (profile_report)
kono
parents: 67
diff changeset
2170 dump_profile_report ();
kono
parents: 67
diff changeset
2171
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2172 /* Language-specific end of compilation actions. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2173 lang_hooks.finish ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2174 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2175
111
kono
parents: 67
diff changeset
2176 static bool
kono
parents: 67
diff changeset
2177 standard_type_bitsize (int bitsize)
kono
parents: 67
diff changeset
2178 {
kono
parents: 67
diff changeset
2179 /* As a special exception, we always want __int128 enabled if possible. */
kono
parents: 67
diff changeset
2180 if (bitsize == 128)
kono
parents: 67
diff changeset
2181 return false;
kono
parents: 67
diff changeset
2182 if (bitsize == CHAR_TYPE_SIZE
kono
parents: 67
diff changeset
2183 || bitsize == SHORT_TYPE_SIZE
kono
parents: 67
diff changeset
2184 || bitsize == INT_TYPE_SIZE
kono
parents: 67
diff changeset
2185 || bitsize == LONG_TYPE_SIZE
kono
parents: 67
diff changeset
2186 || bitsize == LONG_LONG_TYPE_SIZE)
kono
parents: 67
diff changeset
2187 return true;
kono
parents: 67
diff changeset
2188 return false;
kono
parents: 67
diff changeset
2189 }
kono
parents: 67
diff changeset
2190
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2191 /* Initialize the compiler, and compile the input file. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2192 static void
111
kono
parents: 67
diff changeset
2193 do_compile ()
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2194 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2195 process_options ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2196
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2197 /* Don't do any more if an error has already occurred. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2198 if (!seen_error ())
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2199 {
111
kono
parents: 67
diff changeset
2200 int i;
kono
parents: 67
diff changeset
2201
kono
parents: 67
diff changeset
2202 timevar_start (TV_PHASE_SETUP);
kono
parents: 67
diff changeset
2203
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2204 if (flag_save_optimization_record)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2205 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2206 dump_context::get ().set_json_writer (new optrecord_json_writer ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2207 }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2208
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2209 /* This must be run always, because it is needed to compute the FP
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2210 predefined macros, such as __LDBL_MAX__, for targets using non
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2211 default FP formats. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2212 init_adjust_machine_modes ();
111
kono
parents: 67
diff changeset
2213 init_derived_machine_modes ();
kono
parents: 67
diff changeset
2214
kono
parents: 67
diff changeset
2215 /* This must happen after the backend has a chance to process
kono
parents: 67
diff changeset
2216 command line options, but before the parsers are
kono
parents: 67
diff changeset
2217 initialized. */
kono
parents: 67
diff changeset
2218 for (i = 0; i < NUM_INT_N_ENTS; i ++)
kono
parents: 67
diff changeset
2219 if (targetm.scalar_mode_supported_p (int_n_data[i].m)
kono
parents: 67
diff changeset
2220 && ! standard_type_bitsize (int_n_data[i].bitsize))
kono
parents: 67
diff changeset
2221 int_n_enabled_p[i] = true;
kono
parents: 67
diff changeset
2222 else
kono
parents: 67
diff changeset
2223 int_n_enabled_p[i] = false;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2224
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2225 /* Initialize mpfrs exponent range. This is important to get
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2226 underflow/overflow in a reasonable timeframe. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2227 machine_mode mode;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2228 int min_exp = -1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2229 int max_exp = 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2230 FOR_EACH_MODE_IN_CLASS (mode, MODE_FLOAT)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2231 if (SCALAR_FLOAT_MODE_P (mode))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2232 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2233 const real_format *fmt = REAL_MODE_FORMAT (mode);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2234 if (fmt)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2235 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2236 /* fmt->emin - fmt->p + 1 should be enough but the
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2237 back-and-forth dance in real_to_decimal_for_mode we
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2238 do for checking fails due to rounding effects then. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2239 if ((fmt->emin - fmt->p) < min_exp)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2240 min_exp = fmt->emin - fmt->p;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2241 if (fmt->emax > max_exp)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2242 max_exp = fmt->emax;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2243 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2244 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2245 /* E.g. mpc_norm assumes it can square a number without bothering with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2246 with range scaling, so until that is fixed, double the minimum
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2247 and maximum exponents, plus add some buffer for arithmetics
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2248 on the squared numbers. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2249 if (mpfr_set_emin (2 * (min_exp - 1))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2250 || mpfr_set_emax (2 * (max_exp + 1)))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2251 sorry ("mpfr not configured to handle all floating modes");
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2252
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2253 /* Set up the back-end if requested. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2254 if (!no_backend)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2255 backend_init ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2256
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2257 /* Language-dependent initialization. Returns true on success. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2258 if (lang_dependent_init (main_input_filename))
111
kono
parents: 67
diff changeset
2259 {
kono
parents: 67
diff changeset
2260 /* Initialize yet another pass. */
kono
parents: 67
diff changeset
2261
kono
parents: 67
diff changeset
2262 ggc_protect_identifiers = true;
kono
parents: 67
diff changeset
2263
kono
parents: 67
diff changeset
2264 symtab->initialize ();
kono
parents: 67
diff changeset
2265 init_final (main_input_filename);
kono
parents: 67
diff changeset
2266 coverage_init (aux_base_name);
kono
parents: 67
diff changeset
2267 statistics_init ();
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2268 debuginfo_init ();
111
kono
parents: 67
diff changeset
2269 invoke_plugin_callbacks (PLUGIN_START_UNIT, NULL);
kono
parents: 67
diff changeset
2270
kono
parents: 67
diff changeset
2271 timevar_stop (TV_PHASE_SETUP);
kono
parents: 67
diff changeset
2272
kono
parents: 67
diff changeset
2273 compile_file ();
kono
parents: 67
diff changeset
2274 }
kono
parents: 67
diff changeset
2275 else
kono
parents: 67
diff changeset
2276 {
kono
parents: 67
diff changeset
2277 timevar_stop (TV_PHASE_SETUP);
kono
parents: 67
diff changeset
2278 }
kono
parents: 67
diff changeset
2279
kono
parents: 67
diff changeset
2280 timevar_start (TV_PHASE_FINALIZE);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2281
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2282 finalize (no_backend);
111
kono
parents: 67
diff changeset
2283
kono
parents: 67
diff changeset
2284 timevar_stop (TV_PHASE_FINALIZE);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2285 }
111
kono
parents: 67
diff changeset
2286 }
kono
parents: 67
diff changeset
2287
kono
parents: 67
diff changeset
2288 toplev::toplev (timer *external_timer,
kono
parents: 67
diff changeset
2289 bool init_signals)
kono
parents: 67
diff changeset
2290 : m_use_TV_TOTAL (external_timer == NULL),
kono
parents: 67
diff changeset
2291 m_init_signals (init_signals)
kono
parents: 67
diff changeset
2292 {
kono
parents: 67
diff changeset
2293 if (external_timer)
kono
parents: 67
diff changeset
2294 g_timer = external_timer;
kono
parents: 67
diff changeset
2295 }
kono
parents: 67
diff changeset
2296
kono
parents: 67
diff changeset
2297 toplev::~toplev ()
kono
parents: 67
diff changeset
2298 {
kono
parents: 67
diff changeset
2299 if (g_timer && m_use_TV_TOTAL)
kono
parents: 67
diff changeset
2300 {
kono
parents: 67
diff changeset
2301 g_timer->stop (TV_TOTAL);
kono
parents: 67
diff changeset
2302 g_timer->print (stderr);
kono
parents: 67
diff changeset
2303 delete g_timer;
kono
parents: 67
diff changeset
2304 g_timer = NULL;
kono
parents: 67
diff changeset
2305 }
kono
parents: 67
diff changeset
2306 }
kono
parents: 67
diff changeset
2307
kono
parents: 67
diff changeset
2308 /* Potentially call timevar_init (which will create g_timevars if it
kono
parents: 67
diff changeset
2309 doesn't already exist). */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2310
111
kono
parents: 67
diff changeset
2311 void
kono
parents: 67
diff changeset
2312 toplev::start_timevars ()
kono
parents: 67
diff changeset
2313 {
kono
parents: 67
diff changeset
2314 if (time_report || !quiet_flag || flag_detailed_statistics)
kono
parents: 67
diff changeset
2315 timevar_init ();
kono
parents: 67
diff changeset
2316
kono
parents: 67
diff changeset
2317 timevar_start (TV_TOTAL);
kono
parents: 67
diff changeset
2318 }
kono
parents: 67
diff changeset
2319
kono
parents: 67
diff changeset
2320 /* Handle -fself-test. */
kono
parents: 67
diff changeset
2321
kono
parents: 67
diff changeset
2322 void
kono
parents: 67
diff changeset
2323 toplev::run_self_tests ()
kono
parents: 67
diff changeset
2324 {
kono
parents: 67
diff changeset
2325 if (no_backend)
kono
parents: 67
diff changeset
2326 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2327 error_at (UNKNOWN_LOCATION, "self-tests incompatible with %<-E%>");
111
kono
parents: 67
diff changeset
2328 return;
kono
parents: 67
diff changeset
2329 }
kono
parents: 67
diff changeset
2330 #if CHECKING_P
kono
parents: 67
diff changeset
2331 /* Reset some state. */
kono
parents: 67
diff changeset
2332 input_location = UNKNOWN_LOCATION;
kono
parents: 67
diff changeset
2333 bitmap_obstack_initialize (NULL);
kono
parents: 67
diff changeset
2334
kono
parents: 67
diff changeset
2335 /* Run the tests; any failures will lead to an abort of the process.
kono
parents: 67
diff changeset
2336 Use "make selftests-gdb" to run under the debugger. */
kono
parents: 67
diff changeset
2337 ::selftest::run_tests ();
kono
parents: 67
diff changeset
2338
kono
parents: 67
diff changeset
2339 /* Cleanup. */
kono
parents: 67
diff changeset
2340 bitmap_obstack_release (NULL);
kono
parents: 67
diff changeset
2341 #else
kono
parents: 67
diff changeset
2342 inform (UNKNOWN_LOCATION, "self-tests are not enabled in this build");
kono
parents: 67
diff changeset
2343 #endif /* #if CHECKING_P */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2344 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2345
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2346 /* Entry point of cc1, cc1plus, jc1, f771, etc.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2347 Exit code is FATAL_EXIT_CODE if can't open files or if there were
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2348 any errors, or SUCCESS_EXIT_CODE if compilation succeeded.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2349
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2350 It is not safe to call this function more than once. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2351
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2352 int
111
kono
parents: 67
diff changeset
2353 toplev::main (int argc, char **argv)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2354 {
111
kono
parents: 67
diff changeset
2355 /* Parsing and gimplification sometimes need quite large stack.
kono
parents: 67
diff changeset
2356 Increase stack size limits if possible. */
kono
parents: 67
diff changeset
2357 stack_limit_increase (64 * 1024 * 1024);
kono
parents: 67
diff changeset
2358
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2359 expandargv (&argc, &argv);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2360
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2361 /* Initialization of GCC's environment, and diagnostics. */
111
kono
parents: 67
diff changeset
2362 general_init (argv[0], m_init_signals);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2363
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2364 /* One-off initialization of options that does not need to be
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2365 repeated when options are added for particular functions. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2366 init_options_once ();
111
kono
parents: 67
diff changeset
2367 init_opts_obstack ();
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2368
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2369 /* Initialize global options structures; this must be repeated for
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2370 each structure used for parsing options. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2371 init_options_struct (&global_options, &global_options_set);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2372 lang_hooks.init_options_struct (&global_options);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2373
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2374 /* Init GGC heuristics must be caller after we initialize
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2375 options. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2376 init_ggc_heuristics ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2377
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2378 /* Convert the options to an array. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2379 decode_cmdline_options_to_array_default_mask (argc,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2380 CONST_CAST2 (const char **,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2381 char **, argv),
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2382 &save_decoded_options,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2383 &save_decoded_options_count);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2384
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2385 /* Perform language-specific options initialization. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2386 lang_hooks.init_options (save_decoded_options_count, save_decoded_options);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2387
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2388 /* Parse the options and do minimal processing; basically just
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2389 enough to default flags appropriately. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2390 decode_options (&global_options, &global_options_set,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2391 save_decoded_options, save_decoded_options_count,
111
kono
parents: 67
diff changeset
2392 UNKNOWN_LOCATION, global_dc,
kono
parents: 67
diff changeset
2393 targetm.target_option.override);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2394
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2395 handle_common_deferred_options ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2396
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2397 init_local_tick ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2398
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2399 initialize_plugins ();
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2400
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2401 if (version_flag)
111
kono
parents: 67
diff changeset
2402 print_version (stderr, "", true);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2403
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2404 if (help_flag)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2405 print_plugins_help (stderr, "");
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2406
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2407 /* Exit early if we can (e.g. -help). */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2408 if (!exit_after_options)
111
kono
parents: 67
diff changeset
2409 {
kono
parents: 67
diff changeset
2410 if (m_use_TV_TOTAL)
kono
parents: 67
diff changeset
2411 start_timevars ();
kono
parents: 67
diff changeset
2412 do_compile ();
kono
parents: 67
diff changeset
2413 }
kono
parents: 67
diff changeset
2414
kono
parents: 67
diff changeset
2415 if (warningcount || errorcount || werrorcount)
kono
parents: 67
diff changeset
2416 print_ignored_options ();
kono
parents: 67
diff changeset
2417
kono
parents: 67
diff changeset
2418 if (flag_self_test)
kono
parents: 67
diff changeset
2419 run_self_tests ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2420
111
kono
parents: 67
diff changeset
2421 /* Invoke registered plugin callbacks if any. Some plugins could
kono
parents: 67
diff changeset
2422 emit some diagnostics here. */
kono
parents: 67
diff changeset
2423 invoke_plugin_callbacks (PLUGIN_FINISH, NULL);
kono
parents: 67
diff changeset
2424
kono
parents: 67
diff changeset
2425 if (flag_diagnostics_generate_patch)
kono
parents: 67
diff changeset
2426 {
kono
parents: 67
diff changeset
2427 gcc_assert (global_dc->edit_context_ptr);
kono
parents: 67
diff changeset
2428
kono
parents: 67
diff changeset
2429 pretty_printer pp;
kono
parents: 67
diff changeset
2430 pp_show_color (&pp) = pp_show_color (global_dc->printer);
kono
parents: 67
diff changeset
2431 global_dc->edit_context_ptr->print_diff (&pp, true);
kono
parents: 67
diff changeset
2432 pp_flush (&pp);
kono
parents: 67
diff changeset
2433 }
kono
parents: 67
diff changeset
2434
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
2435 diagnostic_finish (global_dc);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2436
111
kono
parents: 67
diff changeset
2437 finalize_plugins ();
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
2438
111
kono
parents: 67
diff changeset
2439 after_memory_report = true;
kono
parents: 67
diff changeset
2440
kono
parents: 67
diff changeset
2441 if (seen_error () || werrorcount)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2442 return (FATAL_EXIT_CODE);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2443
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2444 return (SUCCESS_EXIT_CODE);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2445 }
111
kono
parents: 67
diff changeset
2446
kono
parents: 67
diff changeset
2447 /* For those that want to, this function aims to clean up enough state that
kono
parents: 67
diff changeset
2448 you can call toplev::main again. */
kono
parents: 67
diff changeset
2449 void
kono
parents: 67
diff changeset
2450 toplev::finalize (void)
kono
parents: 67
diff changeset
2451 {
kono
parents: 67
diff changeset
2452 rtl_initialized = false;
kono
parents: 67
diff changeset
2453 this_target_rtl->target_specific_initialized = false;
kono
parents: 67
diff changeset
2454
kono
parents: 67
diff changeset
2455 /* Needs to be called before cgraph_c_finalize since it uses symtab. */
kono
parents: 67
diff changeset
2456 ipa_reference_c_finalize ();
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2457 ipa_fnsummary_c_finalize ();
111
kono
parents: 67
diff changeset
2458
kono
parents: 67
diff changeset
2459 cgraph_c_finalize ();
kono
parents: 67
diff changeset
2460 cgraphunit_c_finalize ();
kono
parents: 67
diff changeset
2461 dwarf2out_c_finalize ();
kono
parents: 67
diff changeset
2462 gcse_c_finalize ();
kono
parents: 67
diff changeset
2463 ipa_cp_c_finalize ();
kono
parents: 67
diff changeset
2464 ira_costs_c_finalize ();
kono
parents: 67
diff changeset
2465
kono
parents: 67
diff changeset
2466 /* save_decoded_options uses opts_obstack, so these must
kono
parents: 67
diff changeset
2467 be cleaned up together. */
kono
parents: 67
diff changeset
2468 obstack_free (&opts_obstack, NULL);
kono
parents: 67
diff changeset
2469 XDELETEVEC (save_decoded_options);
kono
parents: 67
diff changeset
2470 save_decoded_options = NULL;
kono
parents: 67
diff changeset
2471 save_decoded_options_count = 0;
kono
parents: 67
diff changeset
2472
kono
parents: 67
diff changeset
2473 /* Clean up the context (and pass_manager etc). */
kono
parents: 67
diff changeset
2474 delete g;
kono
parents: 67
diff changeset
2475 g = NULL;
kono
parents: 67
diff changeset
2476
kono
parents: 67
diff changeset
2477 }