annotate gcc/toplev.c @ 138:fc828634a951

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