lto-streamer.h revision 1.1.1.1.8.2 1 1.1.1.1.8.2 tls /* Data structures and declarations used for reading and writing
2 1.1.1.1.8.2 tls GIMPLE to a file stream.
3 1.1.1.1.8.2 tls
4 1.1.1.1.8.2 tls Copyright (C) 2009, 2010 Free Software Foundation, Inc.
5 1.1.1.1.8.2 tls Contributed by Doug Kwan <dougkwan (at) google.com>
6 1.1.1.1.8.2 tls
7 1.1.1.1.8.2 tls This file is part of GCC.
8 1.1.1.1.8.2 tls
9 1.1.1.1.8.2 tls GCC is free software; you can redistribute it and/or modify it under
10 1.1.1.1.8.2 tls the terms of the GNU General Public License as published by the Free
11 1.1.1.1.8.2 tls Software Foundation; either version 3, or (at your option) any later
12 1.1.1.1.8.2 tls version.
13 1.1.1.1.8.2 tls
14 1.1.1.1.8.2 tls GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 1.1.1.1.8.2 tls WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 1.1.1.1.8.2 tls FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 1.1.1.1.8.2 tls for more details.
18 1.1.1.1.8.2 tls
19 1.1.1.1.8.2 tls You should have received a copy of the GNU General Public License
20 1.1.1.1.8.2 tls along with GCC; see the file COPYING3. If not see
21 1.1.1.1.8.2 tls <http://www.gnu.org/licenses/>. */
22 1.1.1.1.8.2 tls
23 1.1.1.1.8.2 tls #ifndef GCC_LTO_STREAMER_H
24 1.1.1.1.8.2 tls #define GCC_LTO_STREAMER_H
25 1.1.1.1.8.2 tls
26 1.1.1.1.8.2 tls #include "plugin-api.h"
27 1.1.1.1.8.2 tls #include "tree.h"
28 1.1.1.1.8.2 tls #include "gimple.h"
29 1.1.1.1.8.2 tls #include "target.h"
30 1.1.1.1.8.2 tls #include "cgraph.h"
31 1.1.1.1.8.2 tls #include "vec.h"
32 1.1.1.1.8.2 tls #include "vecprim.h"
33 1.1.1.1.8.2 tls
34 1.1.1.1.8.2 tls /* Define when debugging the LTO streamer. This causes the writer
35 1.1.1.1.8.2 tls to output the numeric value for the memory address of the tree node
36 1.1.1.1.8.2 tls being emitted. When debugging a problem in the reader, check the
37 1.1.1.1.8.2 tls original address that the writer was emitting using lto_orig_address_get.
38 1.1.1.1.8.2 tls With this value, set a breakpoint in the writer (e.g., lto_output_tree)
39 1.1.1.1.8.2 tls to trace how the faulty node is being emitted. */
40 1.1.1.1.8.2 tls /* #define LTO_STREAMER_DEBUG 1 */
41 1.1.1.1.8.2 tls
42 1.1.1.1.8.2 tls /* The encoding for a function consists of the following sections:
43 1.1.1.1.8.2 tls
44 1.1.1.1.8.2 tls 1) The header.
45 1.1.1.1.8.2 tls 2) FIELD_DECLS.
46 1.1.1.1.8.2 tls 3) FUNCTION_DECLS.
47 1.1.1.1.8.2 tls 4) global VAR_DECLS.
48 1.1.1.1.8.2 tls 5) type_decls
49 1.1.1.1.8.2 tls 6) types.
50 1.1.1.1.8.2 tls 7) Names for the labels that have names
51 1.1.1.1.8.2 tls 8) The SSA names.
52 1.1.1.1.8.2 tls 9) The control flow graph.
53 1.1.1.1.8.2 tls 10-11)Gimple for local decls.
54 1.1.1.1.8.2 tls 12) Gimple for the function.
55 1.1.1.1.8.2 tls 13) Strings.
56 1.1.1.1.8.2 tls
57 1.1.1.1.8.2 tls 1) THE HEADER.
58 1.1.1.1.8.2 tls 2-6) THE GLOBAL DECLS AND TYPES.
59 1.1.1.1.8.2 tls
60 1.1.1.1.8.2 tls The global decls and types are encoded in the same way. For each
61 1.1.1.1.8.2 tls entry, there is word with the offset within the section to the
62 1.1.1.1.8.2 tls entry.
63 1.1.1.1.8.2 tls
64 1.1.1.1.8.2 tls 7) THE LABEL NAMES.
65 1.1.1.1.8.2 tls
66 1.1.1.1.8.2 tls Since most labels do not have names, this section my be of zero
67 1.1.1.1.8.2 tls length. It consists of an array of string table references, one
68 1.1.1.1.8.2 tls per label. In the lto code, the labels are given either
69 1.1.1.1.8.2 tls positive or negative indexes. the positive ones have names and
70 1.1.1.1.8.2 tls the negative ones do not. The positive index can be used to
71 1.1.1.1.8.2 tls find the name in this array.
72 1.1.1.1.8.2 tls
73 1.1.1.1.8.2 tls 9) THE CFG.
74 1.1.1.1.8.2 tls
75 1.1.1.1.8.2 tls 10) Index into the local decls. Since local decls can have local
76 1.1.1.1.8.2 tls decls inside them, they must be read in randomly in order to
77 1.1.1.1.8.2 tls properly restore them.
78 1.1.1.1.8.2 tls
79 1.1.1.1.8.2 tls 11-12) GIMPLE FOR THE LOCAL DECLS AND THE FUNCTION BODY.
80 1.1.1.1.8.2 tls
81 1.1.1.1.8.2 tls The gimple consists of a set of records.
82 1.1.1.1.8.2 tls
83 1.1.1.1.8.2 tls THE FUNCTION
84 1.1.1.1.8.2 tls
85 1.1.1.1.8.2 tls At the top level of (8) is the function. It consists of five
86 1.1.1.1.8.2 tls pieces:
87 1.1.1.1.8.2 tls
88 1.1.1.1.8.2 tls LTO_function - The tag.
89 1.1.1.1.8.2 tls eh tree - This is all of the exception handling regions
90 1.1.1.1.8.2 tls put out in a post order traversial of the
91 1.1.1.1.8.2 tls tree. Siblings are output as lists terminated
92 1.1.1.1.8.2 tls by a 0. The set of fields matches the fields
93 1.1.1.1.8.2 tls defined in except.c.
94 1.1.1.1.8.2 tls
95 1.1.1.1.8.2 tls last_basic_block - in uleb128 form.
96 1.1.1.1.8.2 tls
97 1.1.1.1.8.2 tls basic blocks - This is the set of basic blocks.
98 1.1.1.1.8.2 tls
99 1.1.1.1.8.2 tls zero - The termination of the basic blocks.
100 1.1.1.1.8.2 tls
101 1.1.1.1.8.2 tls BASIC BLOCKS
102 1.1.1.1.8.2 tls
103 1.1.1.1.8.2 tls There are two forms of basic blocks depending on if they are
104 1.1.1.1.8.2 tls empty or not.
105 1.1.1.1.8.2 tls
106 1.1.1.1.8.2 tls The basic block consists of:
107 1.1.1.1.8.2 tls
108 1.1.1.1.8.2 tls LTO_bb1 or LTO_bb0 - The tag.
109 1.1.1.1.8.2 tls
110 1.1.1.1.8.2 tls bb->index - the index in uleb128 form.
111 1.1.1.1.8.2 tls
112 1.1.1.1.8.2 tls #succs - The number of successors un uleb128 form.
113 1.1.1.1.8.2 tls
114 1.1.1.1.8.2 tls the successors - For each edge, a pair. The first of the
115 1.1.1.1.8.2 tls pair is the index of the successor in
116 1.1.1.1.8.2 tls uleb128 form and the second are the flags in
117 1.1.1.1.8.2 tls uleb128 form.
118 1.1.1.1.8.2 tls
119 1.1.1.1.8.2 tls the statements - A gimple tree, as described above.
120 1.1.1.1.8.2 tls These are only present for LTO_BB1.
121 1.1.1.1.8.2 tls Following each statement is an optional
122 1.1.1.1.8.2 tls exception handling record LTO_eh_region
123 1.1.1.1.8.2 tls which contains the region number (for
124 1.1.1.1.8.2 tls regions >= 0).
125 1.1.1.1.8.2 tls
126 1.1.1.1.8.2 tls zero - This is only present for LTO_BB1 and is used
127 1.1.1.1.8.2 tls to terminate the statements and exception
128 1.1.1.1.8.2 tls regions within this block.
129 1.1.1.1.8.2 tls
130 1.1.1.1.8.2 tls 12) STRINGS
131 1.1.1.1.8.2 tls
132 1.1.1.1.8.2 tls String are represented in the table as pairs, a length in ULEB128
133 1.1.1.1.8.2 tls form followed by the data for the string. */
134 1.1.1.1.8.2 tls
135 1.1.1.1.8.2 tls /* The string that is the prefix on the section names we make for lto.
136 1.1.1.1.8.2 tls For decls the DECL_ASSEMBLER_NAME is appended to make the section
137 1.1.1.1.8.2 tls name for the functions and static_initializers. For other types of
138 1.1.1.1.8.2 tls sections a '.' and the section type are appended. */
139 1.1.1.1.8.2 tls #define LTO_SECTION_NAME_PREFIX ".gnu.lto_"
140 1.1.1.1.8.2 tls
141 1.1.1.1.8.2 tls #define LTO_major_version 1
142 1.1.1.1.8.2 tls #define LTO_minor_version 0
143 1.1.1.1.8.2 tls
144 1.1.1.1.8.2 tls typedef unsigned char lto_decl_flags_t;
145 1.1.1.1.8.2 tls
146 1.1.1.1.8.2 tls
147 1.1.1.1.8.2 tls /* Data structures used to pack values and bitflags into a vector of
148 1.1.1.1.8.2 tls words. Used to stream values of a fixed number of bits in a space
149 1.1.1.1.8.2 tls efficient way. */
150 1.1.1.1.8.2 tls static unsigned const BITS_PER_BITPACK_WORD = HOST_BITS_PER_WIDE_INT;
151 1.1.1.1.8.2 tls
152 1.1.1.1.8.2 tls typedef unsigned HOST_WIDE_INT bitpack_word_t;
153 1.1.1.1.8.2 tls DEF_VEC_I(bitpack_word_t);
154 1.1.1.1.8.2 tls DEF_VEC_ALLOC_I(bitpack_word_t, heap);
155 1.1.1.1.8.2 tls
156 1.1.1.1.8.2 tls struct bitpack_d
157 1.1.1.1.8.2 tls {
158 1.1.1.1.8.2 tls /* Total number of bits packed/unpacked so far. */
159 1.1.1.1.8.2 tls size_t num_bits;
160 1.1.1.1.8.2 tls
161 1.1.1.1.8.2 tls /* Values are stored contiguously, so there may be internal
162 1.1.1.1.8.2 tls fragmentation (words with unused bits). Therefore, we need to
163 1.1.1.1.8.2 tls keep track of the first available bit in the last word of the
164 1.1.1.1.8.2 tls bitpack. */
165 1.1.1.1.8.2 tls size_t first_unused_bit;
166 1.1.1.1.8.2 tls
167 1.1.1.1.8.2 tls /* Vector of words holding the packed values. */
168 1.1.1.1.8.2 tls VEC(bitpack_word_t, heap) *values;
169 1.1.1.1.8.2 tls };
170 1.1.1.1.8.2 tls
171 1.1.1.1.8.2 tls /* Tags representing the various IL objects written to the bytecode file
172 1.1.1.1.8.2 tls (GIMPLE statements, basic blocks, EH regions, tree nodes, etc).
173 1.1.1.1.8.2 tls
174 1.1.1.1.8.2 tls NOTE, when adding new LTO tags, also update lto_tag_name. */
175 1.1.1.1.8.2 tls enum LTO_tags
176 1.1.1.1.8.2 tls {
177 1.1.1.1.8.2 tls LTO_null = 0,
178 1.1.1.1.8.2 tls
179 1.1.1.1.8.2 tls /* Reserve enough entries to fit all the tree and gimple codes handled
180 1.1.1.1.8.2 tls by the streamer. This guarantees that:
181 1.1.1.1.8.2 tls
182 1.1.1.1.8.2 tls 1- Given a tree code C:
183 1.1.1.1.8.2 tls enum LTO_tags tag == C + 1
184 1.1.1.1.8.2 tls
185 1.1.1.1.8.2 tls 2- Given a gimple code C:
186 1.1.1.1.8.2 tls enum LTO_tags tag == C + NUM_TREE_CODES + 1
187 1.1.1.1.8.2 tls
188 1.1.1.1.8.2 tls Conversely, to map between LTO tags and tree/gimple codes, the
189 1.1.1.1.8.2 tls reverse operation must be applied. */
190 1.1.1.1.8.2 tls LTO_bb0 = 1 + NUM_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE,
191 1.1.1.1.8.2 tls LTO_bb1,
192 1.1.1.1.8.2 tls
193 1.1.1.1.8.2 tls /* EH region holding the previous statement. */
194 1.1.1.1.8.2 tls LTO_eh_region,
195 1.1.1.1.8.2 tls
196 1.1.1.1.8.2 tls /* An MD or NORMAL builtin. Only the code and class are streamed out. */
197 1.1.1.1.8.2 tls LTO_builtin_decl,
198 1.1.1.1.8.2 tls
199 1.1.1.1.8.2 tls /* Function body. */
200 1.1.1.1.8.2 tls LTO_function,
201 1.1.1.1.8.2 tls
202 1.1.1.1.8.2 tls /* EH table. */
203 1.1.1.1.8.2 tls LTO_eh_table,
204 1.1.1.1.8.2 tls
205 1.1.1.1.8.2 tls /* EH region types. These mirror enum eh_region_type. */
206 1.1.1.1.8.2 tls LTO_ert_cleanup,
207 1.1.1.1.8.2 tls LTO_ert_try,
208 1.1.1.1.8.2 tls LTO_ert_allowed_exceptions,
209 1.1.1.1.8.2 tls LTO_ert_must_not_throw,
210 1.1.1.1.8.2 tls
211 1.1.1.1.8.2 tls /* EH landing pad. */
212 1.1.1.1.8.2 tls LTO_eh_landing_pad,
213 1.1.1.1.8.2 tls
214 1.1.1.1.8.2 tls /* EH try/catch node. */
215 1.1.1.1.8.2 tls LTO_eh_catch,
216 1.1.1.1.8.2 tls
217 1.1.1.1.8.2 tls /* Special for global streamer. Reference to previously-streamed node. */
218 1.1.1.1.8.2 tls LTO_tree_pickle_reference,
219 1.1.1.1.8.2 tls
220 1.1.1.1.8.2 tls /* A decl which exists only to provide an extra symbol for another var. */
221 1.1.1.1.8.2 tls LTO_var_decl_alias,
222 1.1.1.1.8.2 tls
223 1.1.1.1.8.2 tls /* References to indexable tree nodes. These objects are stored in
224 1.1.1.1.8.2 tls tables that are written separately from the function bodies that
225 1.1.1.1.8.2 tls reference them. This way they can be instantiated even when the
226 1.1.1.1.8.2 tls referencing functions aren't (e.g., during WPA) and it also allows
227 1.1.1.1.8.2 tls functions to be copied from one file to another without having
228 1.1.1.1.8.2 tls to unpickle the body first (the references are location
229 1.1.1.1.8.2 tls independent).
230 1.1.1.1.8.2 tls
231 1.1.1.1.8.2 tls NOTE, do not regroup these values as the grouping is exposed
232 1.1.1.1.8.2 tls in the range checks done in lto_input_tree. */
233 1.1.1.1.8.2 tls LTO_field_decl_ref, /* Do not change. */
234 1.1.1.1.8.2 tls LTO_function_decl_ref,
235 1.1.1.1.8.2 tls LTO_label_decl_ref,
236 1.1.1.1.8.2 tls LTO_namespace_decl_ref,
237 1.1.1.1.8.2 tls LTO_result_decl_ref,
238 1.1.1.1.8.2 tls LTO_ssa_name_ref,
239 1.1.1.1.8.2 tls LTO_type_decl_ref,
240 1.1.1.1.8.2 tls LTO_type_ref,
241 1.1.1.1.8.2 tls LTO_const_decl_ref,
242 1.1.1.1.8.2 tls LTO_imported_decl_ref,
243 1.1.1.1.8.2 tls LTO_global_decl_ref, /* Do not change. */
244 1.1.1.1.8.2 tls
245 1.1.1.1.8.2 tls /* This tag must always be last. */
246 1.1.1.1.8.2 tls LTO_NUM_TAGS
247 1.1.1.1.8.2 tls };
248 1.1.1.1.8.2 tls
249 1.1.1.1.8.2 tls
250 1.1.1.1.8.2 tls /* Set of section types that are in an LTO file. This list will grow
251 1.1.1.1.8.2 tls as the number of IPA passes grows since each IPA pass will need its
252 1.1.1.1.8.2 tls own section type to store its summary information.
253 1.1.1.1.8.2 tls
254 1.1.1.1.8.2 tls When adding a new section type, you must also extend the
255 1.1.1.1.8.2 tls LTO_SECTION_NAME array in lto-section-in.c. */
256 1.1.1.1.8.2 tls enum lto_section_type
257 1.1.1.1.8.2 tls {
258 1.1.1.1.8.2 tls LTO_section_decls = 0,
259 1.1.1.1.8.2 tls LTO_section_function_body,
260 1.1.1.1.8.2 tls LTO_section_static_initializer,
261 1.1.1.1.8.2 tls LTO_section_cgraph,
262 1.1.1.1.8.2 tls LTO_section_jump_functions,
263 1.1.1.1.8.2 tls LTO_section_ipa_pure_const,
264 1.1.1.1.8.2 tls LTO_section_ipa_reference,
265 1.1.1.1.8.2 tls LTO_section_symtab,
266 1.1.1.1.8.2 tls LTO_section_wpa_fixup,
267 1.1.1.1.8.2 tls LTO_section_opts,
268 1.1.1.1.8.2 tls LTO_N_SECTION_TYPES /* Must be last. */
269 1.1.1.1.8.2 tls };
270 1.1.1.1.8.2 tls
271 1.1.1.1.8.2 tls /* Indices to the various function, type and symbol streams. */
272 1.1.1.1.8.2 tls typedef enum
273 1.1.1.1.8.2 tls {
274 1.1.1.1.8.2 tls LTO_DECL_STREAM_TYPE = 0, /* Must be first. */
275 1.1.1.1.8.2 tls LTO_DECL_STREAM_FIELD_DECL,
276 1.1.1.1.8.2 tls LTO_DECL_STREAM_FN_DECL,
277 1.1.1.1.8.2 tls LTO_DECL_STREAM_VAR_DECL,
278 1.1.1.1.8.2 tls LTO_DECL_STREAM_TYPE_DECL,
279 1.1.1.1.8.2 tls LTO_DECL_STREAM_NAMESPACE_DECL,
280 1.1.1.1.8.2 tls LTO_DECL_STREAM_LABEL_DECL,
281 1.1.1.1.8.2 tls LTO_N_DECL_STREAMS
282 1.1.1.1.8.2 tls } lto_decl_stream_e_t;
283 1.1.1.1.8.2 tls
284 1.1.1.1.8.2 tls typedef enum ld_plugin_symbol_resolution ld_plugin_symbol_resolution_t;
285 1.1.1.1.8.2 tls DEF_VEC_I(ld_plugin_symbol_resolution_t);
286 1.1.1.1.8.2 tls DEF_VEC_ALLOC_I(ld_plugin_symbol_resolution_t, heap);
287 1.1.1.1.8.2 tls
288 1.1.1.1.8.2 tls
289 1.1.1.1.8.2 tls /* Macro to define convenience functions for type and decl streams
290 1.1.1.1.8.2 tls in lto_file_decl_data. */
291 1.1.1.1.8.2 tls #define DEFINE_DECL_STREAM_FUNCS(UPPER_NAME, name) \
292 1.1.1.1.8.2 tls static inline tree \
293 1.1.1.1.8.2 tls lto_file_decl_data_get_ ## name (struct lto_file_decl_data *data, \
294 1.1.1.1.8.2 tls unsigned int idx) \
295 1.1.1.1.8.2 tls { \
296 1.1.1.1.8.2 tls struct lto_in_decl_state *state = data->current_decl_state; \
297 1.1.1.1.8.2 tls gcc_assert (idx < state->streams[LTO_DECL_STREAM_## UPPER_NAME].size); \
298 1.1.1.1.8.2 tls return state->streams[LTO_DECL_STREAM_## UPPER_NAME].trees[idx]; \
299 1.1.1.1.8.2 tls } \
300 1.1.1.1.8.2 tls \
301 1.1.1.1.8.2 tls static inline unsigned int \
302 1.1.1.1.8.2 tls lto_file_decl_data_num_ ## name ## s (struct lto_file_decl_data *data) \
303 1.1.1.1.8.2 tls { \
304 1.1.1.1.8.2 tls struct lto_in_decl_state *state = data->current_decl_state; \
305 1.1.1.1.8.2 tls return state->streams[LTO_DECL_STREAM_## UPPER_NAME].size; \
306 1.1.1.1.8.2 tls }
307 1.1.1.1.8.2 tls
308 1.1.1.1.8.2 tls
309 1.1.1.1.8.2 tls /* Return a char pointer to the start of a data stream for an lto pass
310 1.1.1.1.8.2 tls or function. The first parameter is the file data that contains
311 1.1.1.1.8.2 tls the information. The second parameter is the type of information
312 1.1.1.1.8.2 tls to be obtained. The third parameter is the name of the function
313 1.1.1.1.8.2 tls and is only used when finding a function body; otherwise it is
314 1.1.1.1.8.2 tls NULL. The fourth parameter is the length of the data returned. */
315 1.1.1.1.8.2 tls typedef const char* (lto_get_section_data_f) (struct lto_file_decl_data *,
316 1.1.1.1.8.2 tls enum lto_section_type,
317 1.1.1.1.8.2 tls const char *,
318 1.1.1.1.8.2 tls size_t *);
319 1.1.1.1.8.2 tls
320 1.1.1.1.8.2 tls /* Return the data found from the above call. The first three
321 1.1.1.1.8.2 tls parameters are the same as above. The fourth parameter is the data
322 1.1.1.1.8.2 tls itself and the fifth is the lenght of the data. */
323 1.1.1.1.8.2 tls typedef void (lto_free_section_data_f) (struct lto_file_decl_data *,
324 1.1.1.1.8.2 tls enum lto_section_type,
325 1.1.1.1.8.2 tls const char *,
326 1.1.1.1.8.2 tls const char *,
327 1.1.1.1.8.2 tls size_t);
328 1.1.1.1.8.2 tls
329 1.1.1.1.8.2 tls /* Cache of pickled nodes. Used to avoid writing the same node more
330 1.1.1.1.8.2 tls than once. The first time a tree node is streamed out, it is
331 1.1.1.1.8.2 tls entered in this cache. Subsequent references to the same node are
332 1.1.1.1.8.2 tls resolved by looking it up in this cache.
333 1.1.1.1.8.2 tls
334 1.1.1.1.8.2 tls This is used in two ways:
335 1.1.1.1.8.2 tls
336 1.1.1.1.8.2 tls - On the writing side, the first time T is added to STREAMER_CACHE,
337 1.1.1.1.8.2 tls a new reference index is created for T and T is emitted on the
338 1.1.1.1.8.2 tls stream. If T needs to be emitted again to the stream, instead of
339 1.1.1.1.8.2 tls pickling it again, the reference index is emitted.
340 1.1.1.1.8.2 tls
341 1.1.1.1.8.2 tls - On the reading side, the first time T is read from the stream, it
342 1.1.1.1.8.2 tls is reconstructed in memory and a new reference index created for
343 1.1.1.1.8.2 tls T. The reconstructed T is inserted in some array so that when
344 1.1.1.1.8.2 tls the reference index for T is found in the input stream, it can be
345 1.1.1.1.8.2 tls used to look up into the array to get the reconstructed T. */
346 1.1.1.1.8.2 tls struct lto_streamer_cache_d
347 1.1.1.1.8.2 tls {
348 1.1.1.1.8.2 tls /* The mapping between tree nodes and slots into the nodes array. */
349 1.1.1.1.8.2 tls htab_t node_map;
350 1.1.1.1.8.2 tls
351 1.1.1.1.8.2 tls /* Next available slot in the nodes and offsets arrays. */
352 1.1.1.1.8.2 tls unsigned next_slot;
353 1.1.1.1.8.2 tls
354 1.1.1.1.8.2 tls /* The nodes pickled so far. */
355 1.1.1.1.8.2 tls VEC(tree,gc) *nodes;
356 1.1.1.1.8.2 tls
357 1.1.1.1.8.2 tls /* Offset into the stream where the nodes have been written. */
358 1.1.1.1.8.2 tls VEC(unsigned,heap) *offsets;
359 1.1.1.1.8.2 tls };
360 1.1.1.1.8.2 tls
361 1.1.1.1.8.2 tls
362 1.1.1.1.8.2 tls /* Structure used as buffer for reading an LTO file. */
363 1.1.1.1.8.2 tls struct lto_input_block
364 1.1.1.1.8.2 tls {
365 1.1.1.1.8.2 tls const char *data;
366 1.1.1.1.8.2 tls unsigned int p;
367 1.1.1.1.8.2 tls unsigned int len;
368 1.1.1.1.8.2 tls };
369 1.1.1.1.8.2 tls
370 1.1.1.1.8.2 tls #define LTO_INIT_INPUT_BLOCK(BASE,D,P,L) \
371 1.1.1.1.8.2 tls do { \
372 1.1.1.1.8.2 tls BASE.data = D; \
373 1.1.1.1.8.2 tls BASE.p = P; \
374 1.1.1.1.8.2 tls BASE.len = L; \
375 1.1.1.1.8.2 tls } while (0)
376 1.1.1.1.8.2 tls
377 1.1.1.1.8.2 tls #define LTO_INIT_INPUT_BLOCK_PTR(BASE,D,P,L) \
378 1.1.1.1.8.2 tls do { \
379 1.1.1.1.8.2 tls BASE->data = D; \
380 1.1.1.1.8.2 tls BASE->p = P; \
381 1.1.1.1.8.2 tls BASE->len = L; \
382 1.1.1.1.8.2 tls } while (0)
383 1.1.1.1.8.2 tls
384 1.1.1.1.8.2 tls
385 1.1.1.1.8.2 tls /* The is the first part of the record for a function or constructor
386 1.1.1.1.8.2 tls in the .o file. */
387 1.1.1.1.8.2 tls struct lto_header
388 1.1.1.1.8.2 tls {
389 1.1.1.1.8.2 tls int16_t major_version;
390 1.1.1.1.8.2 tls int16_t minor_version;
391 1.1.1.1.8.2 tls enum lto_section_type section_type;
392 1.1.1.1.8.2 tls };
393 1.1.1.1.8.2 tls
394 1.1.1.1.8.2 tls /* The header for a function body. */
395 1.1.1.1.8.2 tls struct lto_function_header
396 1.1.1.1.8.2 tls {
397 1.1.1.1.8.2 tls /* The header for all types of sections. */
398 1.1.1.1.8.2 tls struct lto_header lto_header;
399 1.1.1.1.8.2 tls
400 1.1.1.1.8.2 tls /* Number of labels with names. */
401 1.1.1.1.8.2 tls int32_t num_named_labels;
402 1.1.1.1.8.2 tls
403 1.1.1.1.8.2 tls /* Number of labels without names. */
404 1.1.1.1.8.2 tls int32_t num_unnamed_labels;
405 1.1.1.1.8.2 tls
406 1.1.1.1.8.2 tls /* Size compressed or 0 if not compressed. */
407 1.1.1.1.8.2 tls int32_t compressed_size;
408 1.1.1.1.8.2 tls
409 1.1.1.1.8.2 tls /* Size of names for named labels. */
410 1.1.1.1.8.2 tls int32_t named_label_size;
411 1.1.1.1.8.2 tls
412 1.1.1.1.8.2 tls /* Size of the cfg. */
413 1.1.1.1.8.2 tls int32_t cfg_size;
414 1.1.1.1.8.2 tls
415 1.1.1.1.8.2 tls /* Size of main gimple body of function. */
416 1.1.1.1.8.2 tls int32_t main_size;
417 1.1.1.1.8.2 tls
418 1.1.1.1.8.2 tls /* Size of the string table. */
419 1.1.1.1.8.2 tls int32_t string_size;
420 1.1.1.1.8.2 tls };
421 1.1.1.1.8.2 tls
422 1.1.1.1.8.2 tls
423 1.1.1.1.8.2 tls /* Structure describing a symbol section. */
424 1.1.1.1.8.2 tls struct lto_decl_header
425 1.1.1.1.8.2 tls {
426 1.1.1.1.8.2 tls /* The header for all types of sections. */
427 1.1.1.1.8.2 tls struct lto_header lto_header;
428 1.1.1.1.8.2 tls
429 1.1.1.1.8.2 tls /* Size of region for decl state. */
430 1.1.1.1.8.2 tls int32_t decl_state_size;
431 1.1.1.1.8.2 tls
432 1.1.1.1.8.2 tls /* Number of nodes in globals stream. */
433 1.1.1.1.8.2 tls int32_t num_nodes;
434 1.1.1.1.8.2 tls
435 1.1.1.1.8.2 tls /* Size of region for expressions, decls, types, etc. */
436 1.1.1.1.8.2 tls int32_t main_size;
437 1.1.1.1.8.2 tls
438 1.1.1.1.8.2 tls /* Size of the string table. */
439 1.1.1.1.8.2 tls int32_t string_size;
440 1.1.1.1.8.2 tls };
441 1.1.1.1.8.2 tls
442 1.1.1.1.8.2 tls
443 1.1.1.1.8.2 tls /* Statistics gathered during LTO, WPA and LTRANS. */
444 1.1.1.1.8.2 tls struct lto_stats_d
445 1.1.1.1.8.2 tls {
446 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_input_cgraph_nodes;
447 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_output_cgraph_nodes;
448 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_input_files;
449 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_output_files;
450 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_cgraph_partitions;
451 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT section_size[LTO_N_SECTION_TYPES];
452 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_function_bodies;
453 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_trees[NUM_TREE_CODES];
454 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_output_il_bytes;
455 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_compressed_il_bytes;
456 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_input_il_bytes;
457 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT num_uncompressed_il_bytes;
458 1.1.1.1.8.2 tls };
459 1.1.1.1.8.2 tls
460 1.1.1.1.8.2 tls /* Encoder data structure used to stream callgraph nodes. */
461 1.1.1.1.8.2 tls struct lto_cgraph_encoder_d
462 1.1.1.1.8.2 tls {
463 1.1.1.1.8.2 tls /* Map nodes to reference number. */
464 1.1.1.1.8.2 tls struct pointer_map_t *map;
465 1.1.1.1.8.2 tls
466 1.1.1.1.8.2 tls /* Map reference number to node. */
467 1.1.1.1.8.2 tls VEC(cgraph_node_ptr,heap) *nodes;
468 1.1.1.1.8.2 tls };
469 1.1.1.1.8.2 tls
470 1.1.1.1.8.2 tls typedef struct lto_cgraph_encoder_d *lto_cgraph_encoder_t;
471 1.1.1.1.8.2 tls
472 1.1.1.1.8.2 tls /* Mapping from indices to trees. */
473 1.1.1.1.8.2 tls struct lto_tree_ref_table
474 1.1.1.1.8.2 tls {
475 1.1.1.1.8.2 tls /* Array of referenced trees . */
476 1.1.1.1.8.2 tls tree *trees;
477 1.1.1.1.8.2 tls
478 1.1.1.1.8.2 tls /* Size of array. */
479 1.1.1.1.8.2 tls unsigned int size;
480 1.1.1.1.8.2 tls };
481 1.1.1.1.8.2 tls
482 1.1.1.1.8.2 tls
483 1.1.1.1.8.2 tls /* Mapping between trees and slots in an array. */
484 1.1.1.1.8.2 tls struct lto_decl_slot
485 1.1.1.1.8.2 tls {
486 1.1.1.1.8.2 tls tree t;
487 1.1.1.1.8.2 tls int slot_num;
488 1.1.1.1.8.2 tls };
489 1.1.1.1.8.2 tls
490 1.1.1.1.8.2 tls
491 1.1.1.1.8.2 tls /* The lto_tree_ref_encoder struct is used to encode trees into indices. */
492 1.1.1.1.8.2 tls
493 1.1.1.1.8.2 tls struct lto_tree_ref_encoder
494 1.1.1.1.8.2 tls {
495 1.1.1.1.8.2 tls htab_t tree_hash_table; /* Maps pointers to indices. */
496 1.1.1.1.8.2 tls unsigned int next_index; /* Next available index. */
497 1.1.1.1.8.2 tls VEC(tree,heap) *trees; /* Maps indices to pointers. */
498 1.1.1.1.8.2 tls };
499 1.1.1.1.8.2 tls
500 1.1.1.1.8.2 tls
501 1.1.1.1.8.2 tls /* Structure to hold states of input scope. */
502 1.1.1.1.8.2 tls struct lto_in_decl_state
503 1.1.1.1.8.2 tls {
504 1.1.1.1.8.2 tls /* Array of lto_in_decl_buffers to store type and decls streams. */
505 1.1.1.1.8.2 tls struct lto_tree_ref_table streams[LTO_N_DECL_STREAMS];
506 1.1.1.1.8.2 tls
507 1.1.1.1.8.2 tls /* If this in-decl state is associated with a function. FN_DECL
508 1.1.1.1.8.2 tls point to the FUNCTION_DECL. */
509 1.1.1.1.8.2 tls tree fn_decl;
510 1.1.1.1.8.2 tls };
511 1.1.1.1.8.2 tls
512 1.1.1.1.8.2 tls typedef struct lto_in_decl_state *lto_in_decl_state_ptr;
513 1.1.1.1.8.2 tls
514 1.1.1.1.8.2 tls
515 1.1.1.1.8.2 tls /* The structure that holds all of the vectors of global types,
516 1.1.1.1.8.2 tls decls and cgraph nodes used in the serialization of this file. */
517 1.1.1.1.8.2 tls struct lto_out_decl_state
518 1.1.1.1.8.2 tls {
519 1.1.1.1.8.2 tls /* The buffers contain the sets of decls of various kinds and types we have
520 1.1.1.1.8.2 tls seen so far and the indexes assigned to them. */
521 1.1.1.1.8.2 tls struct lto_tree_ref_encoder streams[LTO_N_DECL_STREAMS];
522 1.1.1.1.8.2 tls
523 1.1.1.1.8.2 tls /* Encoder for cgraph nodes. */
524 1.1.1.1.8.2 tls lto_cgraph_encoder_t cgraph_node_encoder;
525 1.1.1.1.8.2 tls
526 1.1.1.1.8.2 tls /* If this out-decl state belongs to a function, fn_decl points to that
527 1.1.1.1.8.2 tls function. Otherwise, it is NULL. */
528 1.1.1.1.8.2 tls tree fn_decl;
529 1.1.1.1.8.2 tls };
530 1.1.1.1.8.2 tls
531 1.1.1.1.8.2 tls typedef struct lto_out_decl_state *lto_out_decl_state_ptr;
532 1.1.1.1.8.2 tls
533 1.1.1.1.8.2 tls DEF_VEC_P(lto_out_decl_state_ptr);
534 1.1.1.1.8.2 tls DEF_VEC_ALLOC_P(lto_out_decl_state_ptr, heap);
535 1.1.1.1.8.2 tls
536 1.1.1.1.8.2 tls /* One of these is allocated for each object file that being compiled
537 1.1.1.1.8.2 tls by lto. This structure contains the tables that are needed by the
538 1.1.1.1.8.2 tls serialized functions and ipa passes to connect themselves to the
539 1.1.1.1.8.2 tls global types and decls as they are reconstituted. */
540 1.1.1.1.8.2 tls struct lto_file_decl_data
541 1.1.1.1.8.2 tls {
542 1.1.1.1.8.2 tls /* Decl state currently used. */
543 1.1.1.1.8.2 tls struct lto_in_decl_state *current_decl_state;
544 1.1.1.1.8.2 tls
545 1.1.1.1.8.2 tls /* Decl state corresponding to regions outside of any functions
546 1.1.1.1.8.2 tls in the compilation unit. */
547 1.1.1.1.8.2 tls struct lto_in_decl_state *global_decl_state;
548 1.1.1.1.8.2 tls
549 1.1.1.1.8.2 tls /* Table of cgraph nodes present in this file. */
550 1.1.1.1.8.2 tls lto_cgraph_encoder_t cgraph_node_encoder;
551 1.1.1.1.8.2 tls
552 1.1.1.1.8.2 tls /* Hash table maps lto-related section names to location in file. */
553 1.1.1.1.8.2 tls htab_t function_decl_states;
554 1.1.1.1.8.2 tls
555 1.1.1.1.8.2 tls /* The .o file that these offsets relate to. */
556 1.1.1.1.8.2 tls const char *file_name;
557 1.1.1.1.8.2 tls
558 1.1.1.1.8.2 tls /* Nonzero if this file should be recompiled with LTRANS. */
559 1.1.1.1.8.2 tls unsigned needs_ltrans_p : 1;
560 1.1.1.1.8.2 tls
561 1.1.1.1.8.2 tls /* Hash table maps lto-related section names to location in file. */
562 1.1.1.1.8.2 tls htab_t section_hash_table;
563 1.1.1.1.8.2 tls
564 1.1.1.1.8.2 tls /* Hash new name of renamed global declaration to its original name. */
565 1.1.1.1.8.2 tls htab_t renaming_hash_table;
566 1.1.1.1.8.2 tls };
567 1.1.1.1.8.2 tls
568 1.1.1.1.8.2 tls struct lto_char_ptr_base
569 1.1.1.1.8.2 tls {
570 1.1.1.1.8.2 tls char *ptr;
571 1.1.1.1.8.2 tls };
572 1.1.1.1.8.2 tls
573 1.1.1.1.8.2 tls /* An incore byte stream to buffer the various parts of the function.
574 1.1.1.1.8.2 tls The entire structure should be zeroed when created. The record
575 1.1.1.1.8.2 tls consists of a set of blocks. The first sizeof (ptr) bytes are used
576 1.1.1.1.8.2 tls as a chain, and the rest store the bytes to be written. */
577 1.1.1.1.8.2 tls struct lto_output_stream
578 1.1.1.1.8.2 tls {
579 1.1.1.1.8.2 tls /* The pointer to the first block in the stream. */
580 1.1.1.1.8.2 tls struct lto_char_ptr_base * first_block;
581 1.1.1.1.8.2 tls
582 1.1.1.1.8.2 tls /* The pointer to the last and current block in the stream. */
583 1.1.1.1.8.2 tls struct lto_char_ptr_base * current_block;
584 1.1.1.1.8.2 tls
585 1.1.1.1.8.2 tls /* The pointer to where the next char should be written. */
586 1.1.1.1.8.2 tls char * current_pointer;
587 1.1.1.1.8.2 tls
588 1.1.1.1.8.2 tls /* The number of characters left in the current block. */
589 1.1.1.1.8.2 tls unsigned int left_in_block;
590 1.1.1.1.8.2 tls
591 1.1.1.1.8.2 tls /* The block size of the last block allocated. */
592 1.1.1.1.8.2 tls unsigned int block_size;
593 1.1.1.1.8.2 tls
594 1.1.1.1.8.2 tls /* The total number of characters written. */
595 1.1.1.1.8.2 tls unsigned int total_size;
596 1.1.1.1.8.2 tls };
597 1.1.1.1.8.2 tls
598 1.1.1.1.8.2 tls /* The is the first part of the record in an LTO file for many of the
599 1.1.1.1.8.2 tls IPA passes. */
600 1.1.1.1.8.2 tls struct lto_simple_header
601 1.1.1.1.8.2 tls {
602 1.1.1.1.8.2 tls /* The header for all types of sections. */
603 1.1.1.1.8.2 tls struct lto_header lto_header;
604 1.1.1.1.8.2 tls
605 1.1.1.1.8.2 tls /* Size of main gimple body of function. */
606 1.1.1.1.8.2 tls int32_t main_size;
607 1.1.1.1.8.2 tls
608 1.1.1.1.8.2 tls /* Size of main stream when compressed. */
609 1.1.1.1.8.2 tls int32_t compressed_size;
610 1.1.1.1.8.2 tls };
611 1.1.1.1.8.2 tls
612 1.1.1.1.8.2 tls /* A simple output block. This can be used for simple IPA passes that
613 1.1.1.1.8.2 tls do not need more than one stream. */
614 1.1.1.1.8.2 tls struct lto_simple_output_block
615 1.1.1.1.8.2 tls {
616 1.1.1.1.8.2 tls enum lto_section_type section_type;
617 1.1.1.1.8.2 tls struct lto_out_decl_state *decl_state;
618 1.1.1.1.8.2 tls
619 1.1.1.1.8.2 tls /* The stream that the main tree codes are written to. */
620 1.1.1.1.8.2 tls struct lto_output_stream *main_stream;
621 1.1.1.1.8.2 tls };
622 1.1.1.1.8.2 tls
623 1.1.1.1.8.2 tls /* Data structure holding all the data and descriptors used when writing
624 1.1.1.1.8.2 tls an LTO file. */
625 1.1.1.1.8.2 tls struct output_block
626 1.1.1.1.8.2 tls {
627 1.1.1.1.8.2 tls enum lto_section_type section_type;
628 1.1.1.1.8.2 tls struct lto_out_decl_state *decl_state;
629 1.1.1.1.8.2 tls
630 1.1.1.1.8.2 tls /* The stream that the main tree codes are written to. */
631 1.1.1.1.8.2 tls struct lto_output_stream *main_stream;
632 1.1.1.1.8.2 tls
633 1.1.1.1.8.2 tls /* The stream that contains the string table. */
634 1.1.1.1.8.2 tls struct lto_output_stream *string_stream;
635 1.1.1.1.8.2 tls
636 1.1.1.1.8.2 tls /* The stream that contains the cfg. */
637 1.1.1.1.8.2 tls struct lto_output_stream *cfg_stream;
638 1.1.1.1.8.2 tls
639 1.1.1.1.8.2 tls /* The hash table that contains the set of strings we have seen so
640 1.1.1.1.8.2 tls far and the indexes assigned to them. */
641 1.1.1.1.8.2 tls htab_t string_hash_table;
642 1.1.1.1.8.2 tls
643 1.1.1.1.8.2 tls /* The current cgraph_node that we are currently serializing. Null
644 1.1.1.1.8.2 tls if we are serializing something else. */
645 1.1.1.1.8.2 tls struct cgraph_node *cgraph_node;
646 1.1.1.1.8.2 tls
647 1.1.1.1.8.2 tls /* These are the last file and line that were seen in the stream.
648 1.1.1.1.8.2 tls If the current node differs from these, it needs to insert
649 1.1.1.1.8.2 tls something into the stream and fix these up. */
650 1.1.1.1.8.2 tls const char *current_file;
651 1.1.1.1.8.2 tls int current_line;
652 1.1.1.1.8.2 tls int current_col;
653 1.1.1.1.8.2 tls
654 1.1.1.1.8.2 tls /* True if writing globals and types. */
655 1.1.1.1.8.2 tls bool global;
656 1.1.1.1.8.2 tls
657 1.1.1.1.8.2 tls /* Cache of nodes written in this section. */
658 1.1.1.1.8.2 tls struct lto_streamer_cache_d *writer_cache;
659 1.1.1.1.8.2 tls };
660 1.1.1.1.8.2 tls
661 1.1.1.1.8.2 tls
662 1.1.1.1.8.2 tls /* Data and descriptors used when reading from an LTO file. */
663 1.1.1.1.8.2 tls struct data_in
664 1.1.1.1.8.2 tls {
665 1.1.1.1.8.2 tls /* The global decls and types. */
666 1.1.1.1.8.2 tls struct lto_file_decl_data *file_data;
667 1.1.1.1.8.2 tls
668 1.1.1.1.8.2 tls /* All of the labels. */
669 1.1.1.1.8.2 tls tree *labels;
670 1.1.1.1.8.2 tls
671 1.1.1.1.8.2 tls /* The string table. */
672 1.1.1.1.8.2 tls const char *strings;
673 1.1.1.1.8.2 tls
674 1.1.1.1.8.2 tls /* The length of the string table. */
675 1.1.1.1.8.2 tls unsigned int strings_len;
676 1.1.1.1.8.2 tls
677 1.1.1.1.8.2 tls /* Number of named labels. Used to find the index of unnamed labels
678 1.1.1.1.8.2 tls since they share space with the named labels. */
679 1.1.1.1.8.2 tls unsigned int num_named_labels;
680 1.1.1.1.8.2 tls
681 1.1.1.1.8.2 tls /* Number of unnamed labels. */
682 1.1.1.1.8.2 tls unsigned int num_unnamed_labels;
683 1.1.1.1.8.2 tls
684 1.1.1.1.8.2 tls const char *current_file;
685 1.1.1.1.8.2 tls int current_line;
686 1.1.1.1.8.2 tls int current_col;
687 1.1.1.1.8.2 tls
688 1.1.1.1.8.2 tls /* Maps each reference number to the resolution done by the linker. */
689 1.1.1.1.8.2 tls VEC(ld_plugin_symbol_resolution_t,heap) *globals_resolution;
690 1.1.1.1.8.2 tls
691 1.1.1.1.8.2 tls /* Cache of pickled nodes. */
692 1.1.1.1.8.2 tls struct lto_streamer_cache_d *reader_cache;
693 1.1.1.1.8.2 tls };
694 1.1.1.1.8.2 tls
695 1.1.1.1.8.2 tls
696 1.1.1.1.8.2 tls /* In lto-section-in.c */
697 1.1.1.1.8.2 tls extern struct lto_input_block * lto_create_simple_input_block (
698 1.1.1.1.8.2 tls struct lto_file_decl_data *,
699 1.1.1.1.8.2 tls enum lto_section_type, const char **, size_t *);
700 1.1.1.1.8.2 tls extern void
701 1.1.1.1.8.2 tls lto_destroy_simple_input_block (struct lto_file_decl_data *,
702 1.1.1.1.8.2 tls enum lto_section_type,
703 1.1.1.1.8.2 tls struct lto_input_block *, const char *, size_t);
704 1.1.1.1.8.2 tls extern void lto_set_in_hooks (struct lto_file_decl_data **,
705 1.1.1.1.8.2 tls lto_get_section_data_f *,
706 1.1.1.1.8.2 tls lto_free_section_data_f *);
707 1.1.1.1.8.2 tls extern struct lto_file_decl_data **lto_get_file_decl_data (void);
708 1.1.1.1.8.2 tls extern const char *lto_get_section_data (struct lto_file_decl_data *,
709 1.1.1.1.8.2 tls enum lto_section_type,
710 1.1.1.1.8.2 tls const char *, size_t *);
711 1.1.1.1.8.2 tls extern void lto_free_section_data (struct lto_file_decl_data *,
712 1.1.1.1.8.2 tls enum lto_section_type,
713 1.1.1.1.8.2 tls const char *, const char *, size_t);
714 1.1.1.1.8.2 tls extern unsigned char lto_input_1_unsigned (struct lto_input_block *);
715 1.1.1.1.8.2 tls extern unsigned HOST_WIDE_INT lto_input_uleb128 (struct lto_input_block *);
716 1.1.1.1.8.2 tls extern unsigned HOST_WIDEST_INT lto_input_widest_uint_uleb128 (
717 1.1.1.1.8.2 tls struct lto_input_block *);
718 1.1.1.1.8.2 tls extern HOST_WIDE_INT lto_input_sleb128 (struct lto_input_block *);
719 1.1.1.1.8.2 tls extern htab_t lto_create_renaming_table (void);
720 1.1.1.1.8.2 tls extern void lto_record_renamed_decl (struct lto_file_decl_data *,
721 1.1.1.1.8.2 tls const char *, const char *);
722 1.1.1.1.8.2 tls extern const char *lto_get_decl_name_mapping (struct lto_file_decl_data *,
723 1.1.1.1.8.2 tls const char *);
724 1.1.1.1.8.2 tls extern struct lto_in_decl_state *lto_new_in_decl_state (void);
725 1.1.1.1.8.2 tls extern void lto_delete_in_decl_state (struct lto_in_decl_state *);
726 1.1.1.1.8.2 tls extern hashval_t lto_hash_in_decl_state (const void *);
727 1.1.1.1.8.2 tls extern int lto_eq_in_decl_state (const void *, const void *);
728 1.1.1.1.8.2 tls extern struct lto_in_decl_state *lto_get_function_in_decl_state (
729 1.1.1.1.8.2 tls struct lto_file_decl_data *, tree);
730 1.1.1.1.8.2 tls
731 1.1.1.1.8.2 tls /* In lto-section-out.c */
732 1.1.1.1.8.2 tls extern hashval_t lto_hash_decl_slot_node (const void *);
733 1.1.1.1.8.2 tls extern int lto_eq_decl_slot_node (const void *, const void *);
734 1.1.1.1.8.2 tls extern hashval_t lto_hash_type_slot_node (const void *);
735 1.1.1.1.8.2 tls extern int lto_eq_type_slot_node (const void *, const void *);
736 1.1.1.1.8.2 tls extern void lto_begin_section (const char *, bool);
737 1.1.1.1.8.2 tls extern void lto_end_section (void);
738 1.1.1.1.8.2 tls extern void lto_write_stream (struct lto_output_stream *);
739 1.1.1.1.8.2 tls extern void lto_output_1_stream (struct lto_output_stream *, char);
740 1.1.1.1.8.2 tls extern void lto_output_data_stream (struct lto_output_stream *, const void *,
741 1.1.1.1.8.2 tls size_t);
742 1.1.1.1.8.2 tls extern void lto_output_uleb128_stream (struct lto_output_stream *,
743 1.1.1.1.8.2 tls unsigned HOST_WIDE_INT);
744 1.1.1.1.8.2 tls extern void lto_output_widest_uint_uleb128_stream (struct lto_output_stream *,
745 1.1.1.1.8.2 tls unsigned HOST_WIDEST_INT);
746 1.1.1.1.8.2 tls extern void lto_output_sleb128_stream (struct lto_output_stream *,
747 1.1.1.1.8.2 tls HOST_WIDE_INT);
748 1.1.1.1.8.2 tls extern bool lto_output_decl_index (struct lto_output_stream *,
749 1.1.1.1.8.2 tls struct lto_tree_ref_encoder *,
750 1.1.1.1.8.2 tls tree, unsigned int *);
751 1.1.1.1.8.2 tls extern void lto_output_field_decl_index (struct lto_out_decl_state *,
752 1.1.1.1.8.2 tls struct lto_output_stream *, tree);
753 1.1.1.1.8.2 tls extern void lto_output_fn_decl_index (struct lto_out_decl_state *,
754 1.1.1.1.8.2 tls struct lto_output_stream *, tree);
755 1.1.1.1.8.2 tls extern void lto_output_namespace_decl_index (struct lto_out_decl_state *,
756 1.1.1.1.8.2 tls struct lto_output_stream *, tree);
757 1.1.1.1.8.2 tls extern void lto_output_var_decl_index (struct lto_out_decl_state *,
758 1.1.1.1.8.2 tls struct lto_output_stream *, tree);
759 1.1.1.1.8.2 tls extern void lto_output_type_decl_index (struct lto_out_decl_state *,
760 1.1.1.1.8.2 tls struct lto_output_stream *, tree);
761 1.1.1.1.8.2 tls extern void lto_output_type_ref_index (struct lto_out_decl_state *,
762 1.1.1.1.8.2 tls struct lto_output_stream *, tree);
763 1.1.1.1.8.2 tls extern struct lto_simple_output_block *lto_create_simple_output_block (
764 1.1.1.1.8.2 tls enum lto_section_type);
765 1.1.1.1.8.2 tls extern void lto_destroy_simple_output_block (struct lto_simple_output_block *);
766 1.1.1.1.8.2 tls extern struct lto_out_decl_state *lto_new_out_decl_state (void);
767 1.1.1.1.8.2 tls extern void lto_delete_out_decl_state (struct lto_out_decl_state *);
768 1.1.1.1.8.2 tls extern struct lto_out_decl_state *lto_get_out_decl_state (void);
769 1.1.1.1.8.2 tls extern void lto_push_out_decl_state (struct lto_out_decl_state *);
770 1.1.1.1.8.2 tls extern struct lto_out_decl_state *lto_pop_out_decl_state (void);
771 1.1.1.1.8.2 tls extern void lto_record_function_out_decl_state (tree,
772 1.1.1.1.8.2 tls struct lto_out_decl_state *);
773 1.1.1.1.8.2 tls extern void lto_new_extern_inline_states (void);
774 1.1.1.1.8.2 tls extern void lto_delete_extern_inline_states (void);
775 1.1.1.1.8.2 tls extern void lto_force_functions_extern_inline (bitmap decls);
776 1.1.1.1.8.2 tls extern bool lto_forced_extern_inline_p (tree fn_decl);
777 1.1.1.1.8.2 tls
778 1.1.1.1.8.2 tls
779 1.1.1.1.8.2 tls /* In lto-streamer.c. */
780 1.1.1.1.8.2 tls extern const char *lto_tag_name (enum LTO_tags);
781 1.1.1.1.8.2 tls extern bitmap lto_bitmap_alloc (void);
782 1.1.1.1.8.2 tls extern void lto_bitmap_free (bitmap);
783 1.1.1.1.8.2 tls extern char *lto_get_section_name (int, const char *);
784 1.1.1.1.8.2 tls extern void print_lto_report (void);
785 1.1.1.1.8.2 tls extern struct bitpack_d *bitpack_create (void);
786 1.1.1.1.8.2 tls extern void bitpack_delete (struct bitpack_d *);
787 1.1.1.1.8.2 tls extern void bp_pack_value (struct bitpack_d *, bitpack_word_t, unsigned);
788 1.1.1.1.8.2 tls extern bitpack_word_t bp_unpack_value (struct bitpack_d *, unsigned);
789 1.1.1.1.8.2 tls extern bool lto_streamer_cache_insert (struct lto_streamer_cache_d *, tree,
790 1.1.1.1.8.2 tls int *, unsigned *);
791 1.1.1.1.8.2 tls extern bool lto_streamer_cache_insert_at (struct lto_streamer_cache_d *, tree,
792 1.1.1.1.8.2 tls int);
793 1.1.1.1.8.2 tls extern bool lto_streamer_cache_lookup (struct lto_streamer_cache_d *, tree,
794 1.1.1.1.8.2 tls int *);
795 1.1.1.1.8.2 tls extern tree lto_streamer_cache_get (struct lto_streamer_cache_d *, int);
796 1.1.1.1.8.2 tls extern struct lto_streamer_cache_d *lto_streamer_cache_create (void);
797 1.1.1.1.8.2 tls extern void lto_streamer_cache_delete (struct lto_streamer_cache_d *);
798 1.1.1.1.8.2 tls extern void lto_streamer_init (void);
799 1.1.1.1.8.2 tls extern bool gate_lto_out (void);
800 1.1.1.1.8.2 tls #ifdef LTO_STREAMER_DEBUG
801 1.1.1.1.8.2 tls extern void lto_orig_address_map (tree, intptr_t);
802 1.1.1.1.8.2 tls extern intptr_t lto_orig_address_get (tree);
803 1.1.1.1.8.2 tls extern void lto_orig_address_remove (tree);
804 1.1.1.1.8.2 tls #endif
805 1.1.1.1.8.2 tls extern void lto_check_version (int, int);
806 1.1.1.1.8.2 tls
807 1.1.1.1.8.2 tls
808 1.1.1.1.8.2 tls /* In lto-streamer-in.c */
809 1.1.1.1.8.2 tls extern void lto_input_cgraph (struct lto_file_decl_data *, const char *);
810 1.1.1.1.8.2 tls extern void lto_init_reader (void);
811 1.1.1.1.8.2 tls extern tree lto_input_tree (struct lto_input_block *, struct data_in *);
812 1.1.1.1.8.2 tls extern void lto_input_function_body (struct lto_file_decl_data *, tree,
813 1.1.1.1.8.2 tls const char *);
814 1.1.1.1.8.2 tls extern void lto_input_constructors_and_inits (struct lto_file_decl_data *,
815 1.1.1.1.8.2 tls const char *);
816 1.1.1.1.8.2 tls extern struct bitpack_d *lto_input_bitpack (struct lto_input_block *);
817 1.1.1.1.8.2 tls extern void lto_init_reader (void);
818 1.1.1.1.8.2 tls extern struct data_in *lto_data_in_create (struct lto_file_decl_data *,
819 1.1.1.1.8.2 tls const char *, unsigned,
820 1.1.1.1.8.2 tls VEC(ld_plugin_symbol_resolution_t,heap) *);
821 1.1.1.1.8.2 tls extern void lto_data_in_delete (struct data_in *);
822 1.1.1.1.8.2 tls
823 1.1.1.1.8.2 tls
824 1.1.1.1.8.2 tls /* In lto-streamer-out.c */
825 1.1.1.1.8.2 tls extern void lto_register_decl_definition (tree, struct lto_file_decl_data *);
826 1.1.1.1.8.2 tls extern struct output_block *create_output_block (enum lto_section_type);
827 1.1.1.1.8.2 tls extern void destroy_output_block (struct output_block *);
828 1.1.1.1.8.2 tls extern void lto_output_tree (struct output_block *, tree, bool);
829 1.1.1.1.8.2 tls extern void lto_output_bitpack (struct lto_output_stream *, struct bitpack_d *);
830 1.1.1.1.8.2 tls extern void produce_asm (struct output_block *ob, tree fn);
831 1.1.1.1.8.2 tls
832 1.1.1.1.8.2 tls
833 1.1.1.1.8.2 tls /* In lto-cgraph.c */
834 1.1.1.1.8.2 tls struct cgraph_node *lto_cgraph_encoder_deref (lto_cgraph_encoder_t, int);
835 1.1.1.1.8.2 tls int lto_cgraph_encoder_lookup (lto_cgraph_encoder_t, struct cgraph_node *);
836 1.1.1.1.8.2 tls lto_cgraph_encoder_t lto_cgraph_encoder_new (void);
837 1.1.1.1.8.2 tls int lto_cgraph_encoder_encode (lto_cgraph_encoder_t, struct cgraph_node *);
838 1.1.1.1.8.2 tls void lto_cgraph_encoder_delete (lto_cgraph_encoder_t encoder);
839 1.1.1.1.8.2 tls void output_cgraph (cgraph_node_set);
840 1.1.1.1.8.2 tls void input_cgraph (void);
841 1.1.1.1.8.2 tls
842 1.1.1.1.8.2 tls
843 1.1.1.1.8.2 tls /* In lto-symtab.c. */
844 1.1.1.1.8.2 tls extern void lto_symtab_register_decl (tree, ld_plugin_symbol_resolution_t,
845 1.1.1.1.8.2 tls struct lto_file_decl_data *);
846 1.1.1.1.8.2 tls extern void lto_symtab_merge_decls (void);
847 1.1.1.1.8.2 tls extern void lto_symtab_merge_cgraph_nodes (void);
848 1.1.1.1.8.2 tls extern tree lto_symtab_prevailing_decl (tree decl);
849 1.1.1.1.8.2 tls extern enum ld_plugin_symbol_resolution lto_symtab_get_resolution (tree decl);
850 1.1.1.1.8.2 tls
851 1.1.1.1.8.2 tls
852 1.1.1.1.8.2 tls /* In lto-opts.c. */
853 1.1.1.1.8.2 tls extern void lto_register_user_option (size_t, const char *, int, int);
854 1.1.1.1.8.2 tls extern void lto_read_file_options (struct lto_file_decl_data *);
855 1.1.1.1.8.2 tls extern void lto_write_options (void);
856 1.1.1.1.8.2 tls extern void lto_reissue_options (void);
857 1.1.1.1.8.2 tls void lto_clear_user_options (void);
858 1.1.1.1.8.2 tls void lto_clear_file_options (void);
859 1.1.1.1.8.2 tls
860 1.1.1.1.8.2 tls
861 1.1.1.1.8.2 tls /* In lto-wpa-fixup.c */
862 1.1.1.1.8.2 tls void lto_mark_nothrow_fndecl (tree);
863 1.1.1.1.8.2 tls void lto_fixup_nothrow_decls (void);
864 1.1.1.1.8.2 tls
865 1.1.1.1.8.2 tls
866 1.1.1.1.8.2 tls /* Statistics gathered during LTO, WPA and LTRANS. */
867 1.1.1.1.8.2 tls extern struct lto_stats_d lto_stats;
868 1.1.1.1.8.2 tls
869 1.1.1.1.8.2 tls /* Section names corresponding to the values of enum lto_section_type. */
870 1.1.1.1.8.2 tls extern const char *lto_section_name[];
871 1.1.1.1.8.2 tls
872 1.1.1.1.8.2 tls /* Holds all the out decl states of functions output so far in the
873 1.1.1.1.8.2 tls current output file. */
874 1.1.1.1.8.2 tls extern VEC(lto_out_decl_state_ptr, heap) *lto_function_decl_states;
875 1.1.1.1.8.2 tls
876 1.1.1.1.8.2 tls /* Return true if LTO tag TAG corresponds to a tree code. */
877 1.1.1.1.8.2 tls static inline bool
878 1.1.1.1.8.2 tls lto_tag_is_tree_code_p (enum LTO_tags tag)
879 1.1.1.1.8.2 tls {
880 1.1.1.1.8.2 tls return tag > LTO_null && (unsigned) tag <= NUM_TREE_CODES;
881 1.1.1.1.8.2 tls }
882 1.1.1.1.8.2 tls
883 1.1.1.1.8.2 tls
884 1.1.1.1.8.2 tls /* Return true if LTO tag TAG corresponds to a gimple code. */
885 1.1.1.1.8.2 tls static inline bool
886 1.1.1.1.8.2 tls lto_tag_is_gimple_code_p (enum LTO_tags tag)
887 1.1.1.1.8.2 tls {
888 1.1.1.1.8.2 tls return (unsigned) tag >= NUM_TREE_CODES + 1
889 1.1.1.1.8.2 tls && (unsigned) tag < 1 + NUM_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE;
890 1.1.1.1.8.2 tls }
891 1.1.1.1.8.2 tls
892 1.1.1.1.8.2 tls
893 1.1.1.1.8.2 tls /* Return the LTO tag corresponding to gimple code CODE. See enum
894 1.1.1.1.8.2 tls LTO_tags for details on the conversion. */
895 1.1.1.1.8.2 tls static inline enum LTO_tags
896 1.1.1.1.8.2 tls lto_gimple_code_to_tag (enum gimple_code code)
897 1.1.1.1.8.2 tls {
898 1.1.1.1.8.2 tls return (enum LTO_tags) ((unsigned) code + NUM_TREE_CODES + 1);
899 1.1.1.1.8.2 tls }
900 1.1.1.1.8.2 tls
901 1.1.1.1.8.2 tls
902 1.1.1.1.8.2 tls /* Return the GIMPLE code corresponding to TAG. See enum LTO_tags for
903 1.1.1.1.8.2 tls details on the conversion. */
904 1.1.1.1.8.2 tls static inline enum gimple_code
905 1.1.1.1.8.2 tls lto_tag_to_gimple_code (enum LTO_tags tag)
906 1.1.1.1.8.2 tls {
907 1.1.1.1.8.2 tls gcc_assert (lto_tag_is_gimple_code_p (tag));
908 1.1.1.1.8.2 tls return (enum gimple_code) ((unsigned) tag - NUM_TREE_CODES - 1);
909 1.1.1.1.8.2 tls }
910 1.1.1.1.8.2 tls
911 1.1.1.1.8.2 tls
912 1.1.1.1.8.2 tls /* Return the LTO tag corresponding to tree code CODE. See enum
913 1.1.1.1.8.2 tls LTO_tags for details on the conversion. */
914 1.1.1.1.8.2 tls static inline enum LTO_tags
915 1.1.1.1.8.2 tls lto_tree_code_to_tag (enum tree_code code)
916 1.1.1.1.8.2 tls {
917 1.1.1.1.8.2 tls return (enum LTO_tags) ((unsigned) code + 1);
918 1.1.1.1.8.2 tls }
919 1.1.1.1.8.2 tls
920 1.1.1.1.8.2 tls
921 1.1.1.1.8.2 tls /* Return the tree code corresponding to TAG. See enum LTO_tags for
922 1.1.1.1.8.2 tls details on the conversion. */
923 1.1.1.1.8.2 tls static inline enum tree_code
924 1.1.1.1.8.2 tls lto_tag_to_tree_code (enum LTO_tags tag)
925 1.1.1.1.8.2 tls {
926 1.1.1.1.8.2 tls gcc_assert (lto_tag_is_tree_code_p (tag));
927 1.1.1.1.8.2 tls return (enum tree_code) ((unsigned) tag - 1);
928 1.1.1.1.8.2 tls }
929 1.1.1.1.8.2 tls
930 1.1.1.1.8.2 tls
931 1.1.1.1.8.2 tls /* Return true if FILE needs to be compiled with LTRANS. */
932 1.1.1.1.8.2 tls static inline bool
933 1.1.1.1.8.2 tls lto_file_needs_ltrans_p (struct lto_file_decl_data *file)
934 1.1.1.1.8.2 tls {
935 1.1.1.1.8.2 tls return file->needs_ltrans_p != 0;
936 1.1.1.1.8.2 tls }
937 1.1.1.1.8.2 tls
938 1.1.1.1.8.2 tls
939 1.1.1.1.8.2 tls /* Mark FILE to be compiled with LTRANS. */
940 1.1.1.1.8.2 tls static inline void
941 1.1.1.1.8.2 tls lto_mark_file_for_ltrans (struct lto_file_decl_data *file)
942 1.1.1.1.8.2 tls {
943 1.1.1.1.8.2 tls file->needs_ltrans_p = 1;
944 1.1.1.1.8.2 tls }
945 1.1.1.1.8.2 tls
946 1.1.1.1.8.2 tls
947 1.1.1.1.8.2 tls /* Return true if any files in node set SET need to be compiled
948 1.1.1.1.8.2 tls with LTRANS. */
949 1.1.1.1.8.2 tls static inline bool
950 1.1.1.1.8.2 tls cgraph_node_set_needs_ltrans_p (cgraph_node_set set)
951 1.1.1.1.8.2 tls {
952 1.1.1.1.8.2 tls cgraph_node_set_iterator csi;
953 1.1.1.1.8.2 tls
954 1.1.1.1.8.2 tls for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi))
955 1.1.1.1.8.2 tls if (lto_file_needs_ltrans_p (csi_node (csi)->local.lto_file_data))
956 1.1.1.1.8.2 tls return true;
957 1.1.1.1.8.2 tls
958 1.1.1.1.8.2 tls return false;
959 1.1.1.1.8.2 tls }
960 1.1.1.1.8.2 tls
961 1.1.1.1.8.2 tls
962 1.1.1.1.8.2 tls /* Initialize an lto_out_decl_buffer ENCODER. */
963 1.1.1.1.8.2 tls static inline void
964 1.1.1.1.8.2 tls lto_init_tree_ref_encoder (struct lto_tree_ref_encoder *encoder,
965 1.1.1.1.8.2 tls htab_hash hash_fn, htab_eq eq_fn)
966 1.1.1.1.8.2 tls {
967 1.1.1.1.8.2 tls encoder->tree_hash_table = htab_create (37, hash_fn, eq_fn, free);
968 1.1.1.1.8.2 tls encoder->next_index = 0;
969 1.1.1.1.8.2 tls encoder->trees = NULL;
970 1.1.1.1.8.2 tls }
971 1.1.1.1.8.2 tls
972 1.1.1.1.8.2 tls
973 1.1.1.1.8.2 tls /* Destory an lto_tree_ref_encoder ENCODER by freeing its contents. The
974 1.1.1.1.8.2 tls memory used by ENCODER is not freed by this function. */
975 1.1.1.1.8.2 tls static inline void
976 1.1.1.1.8.2 tls lto_destroy_tree_ref_encoder (struct lto_tree_ref_encoder *encoder)
977 1.1.1.1.8.2 tls {
978 1.1.1.1.8.2 tls /* Hash table may be delete already. */
979 1.1.1.1.8.2 tls if (encoder->tree_hash_table)
980 1.1.1.1.8.2 tls htab_delete (encoder->tree_hash_table);
981 1.1.1.1.8.2 tls VEC_free (tree, heap, encoder->trees);
982 1.1.1.1.8.2 tls }
983 1.1.1.1.8.2 tls
984 1.1.1.1.8.2 tls /* Return the number of trees encoded in ENCODER. */
985 1.1.1.1.8.2 tls static inline unsigned int
986 1.1.1.1.8.2 tls lto_tree_ref_encoder_size (struct lto_tree_ref_encoder *encoder)
987 1.1.1.1.8.2 tls {
988 1.1.1.1.8.2 tls return VEC_length (tree, encoder->trees);
989 1.1.1.1.8.2 tls }
990 1.1.1.1.8.2 tls
991 1.1.1.1.8.2 tls /* Return the IDX-th tree in ENCODER. */
992 1.1.1.1.8.2 tls static inline tree
993 1.1.1.1.8.2 tls lto_tree_ref_encoder_get_tree (struct lto_tree_ref_encoder *encoder,
994 1.1.1.1.8.2 tls unsigned int idx)
995 1.1.1.1.8.2 tls {
996 1.1.1.1.8.2 tls return VEC_index (tree, encoder->trees, idx);
997 1.1.1.1.8.2 tls }
998 1.1.1.1.8.2 tls
999 1.1.1.1.8.2 tls
1000 1.1.1.1.8.2 tls /* Return true if LABEL should be emitted in the global context. */
1001 1.1.1.1.8.2 tls static inline bool
1002 1.1.1.1.8.2 tls emit_label_in_global_context_p (tree label)
1003 1.1.1.1.8.2 tls {
1004 1.1.1.1.8.2 tls return DECL_NONLOCAL (label) || FORCED_LABEL (label);
1005 1.1.1.1.8.2 tls }
1006 1.1.1.1.8.2 tls
1007 1.1.1.1.8.2 tls /* Return true if tree node EXPR should be streamed as a builtin. For
1008 1.1.1.1.8.2 tls these nodes, we just emit the class and function code. */
1009 1.1.1.1.8.2 tls static inline bool
1010 1.1.1.1.8.2 tls lto_stream_as_builtin_p (tree expr)
1011 1.1.1.1.8.2 tls {
1012 1.1.1.1.8.2 tls return (TREE_CODE (expr) == FUNCTION_DECL
1013 1.1.1.1.8.2 tls && DECL_IS_BUILTIN (expr)
1014 1.1.1.1.8.2 tls && (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_NORMAL
1015 1.1.1.1.8.2 tls || DECL_BUILT_IN_CLASS (expr) == BUILT_IN_MD));
1016 1.1.1.1.8.2 tls }
1017 1.1.1.1.8.2 tls
1018 1.1.1.1.8.2 tls /* Return true if EXPR is a tree node that can be written to disk. */
1019 1.1.1.1.8.2 tls static inline bool
1020 1.1.1.1.8.2 tls lto_is_streamable (tree expr)
1021 1.1.1.1.8.2 tls {
1022 1.1.1.1.8.2 tls enum tree_code code = TREE_CODE (expr);
1023 1.1.1.1.8.2 tls
1024 1.1.1.1.8.2 tls /* Notice that we reject SSA_NAMEs as well. We only emit the SSA
1025 1.1.1.1.8.2 tls name version in lto_output_tree_ref (see output_ssa_names). */
1026 1.1.1.1.8.2 tls return !is_lang_specific (expr)
1027 1.1.1.1.8.2 tls && code != SSA_NAME
1028 1.1.1.1.8.2 tls && code != CALL_EXPR
1029 1.1.1.1.8.2 tls && code != LANG_TYPE
1030 1.1.1.1.8.2 tls && code != MODIFY_EXPR
1031 1.1.1.1.8.2 tls && code != INIT_EXPR
1032 1.1.1.1.8.2 tls && code != TARGET_EXPR
1033 1.1.1.1.8.2 tls && code != BIND_EXPR
1034 1.1.1.1.8.2 tls && code != WITH_CLEANUP_EXPR
1035 1.1.1.1.8.2 tls && code != STATEMENT_LIST
1036 1.1.1.1.8.2 tls && (code == CASE_LABEL_EXPR
1037 1.1.1.1.8.2 tls || code == DECL_EXPR
1038 1.1.1.1.8.2 tls || TREE_CODE_CLASS (code) != tcc_statement);
1039 1.1.1.1.8.2 tls }
1040 1.1.1.1.8.2 tls
1041 1.1.1.1.8.2 tls DEFINE_DECL_STREAM_FUNCS (TYPE, type)
1042 1.1.1.1.8.2 tls DEFINE_DECL_STREAM_FUNCS (FIELD_DECL, field_decl)
1043 1.1.1.1.8.2 tls DEFINE_DECL_STREAM_FUNCS (FN_DECL, fn_decl)
1044 1.1.1.1.8.2 tls DEFINE_DECL_STREAM_FUNCS (VAR_DECL, var_decl)
1045 1.1.1.1.8.2 tls DEFINE_DECL_STREAM_FUNCS (TYPE_DECL, type_decl)
1046 1.1.1.1.8.2 tls DEFINE_DECL_STREAM_FUNCS (NAMESPACE_DECL, namespace_decl)
1047 1.1.1.1.8.2 tls DEFINE_DECL_STREAM_FUNCS (LABEL_DECL, label_decl)
1048 1.1.1.1.8.2 tls
1049 1.1.1.1.8.2 tls #endif /* GCC_LTO_STREAMER_H */
1050