]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/varasm.c
Update copyright years.
[thirdparty/gcc.git] / gcc / varasm.c
1 /* Output variables, constants and external declarations, for GNU compiler.
2 Copyright (C) 1987-2020 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
19
20
21 /* This file handles generation of all the assembler code
22 *except* the instructions of a function.
23 This includes declarations of variables and their initial values.
24
25 We also output the assembler code for constants stored in memory
26 and are responsible for combining constants with the same value. */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "backend.h"
32 #include "target.h"
33 #include "rtl.h"
34 #include "tree.h"
35 #include "predict.h"
36 #include "memmodel.h"
37 #include "tm_p.h"
38 #include "stringpool.h"
39 #include "regs.h"
40 #include "emit-rtl.h"
41 #include "cgraph.h"
42 #include "diagnostic-core.h"
43 #include "fold-const.h"
44 #include "stor-layout.h"
45 #include "varasm.h"
46 #include "flags.h"
47 #include "stmt.h"
48 #include "expr.h"
49 #include "expmed.h"
50 #include "optabs.h"
51 #include "output.h"
52 #include "langhooks.h"
53 #include "debug.h"
54 #include "common/common-target.h"
55 #include "stringpool.h"
56 #include "attribs.h"
57 #include "asan.h"
58 #include "rtl-iter.h"
59 #include "file-prefix-map.h" /* remap_debug_filename() */
60
61 #ifdef XCOFF_DEBUGGING_INFO
62 #include "xcoffout.h" /* Needed for external data declarations. */
63 #endif
64
65 /* The (assembler) name of the first globally-visible object output. */
66 extern GTY(()) const char *first_global_object_name;
67 extern GTY(()) const char *weak_global_object_name;
68
69 const char *first_global_object_name;
70 const char *weak_global_object_name;
71
72 class addr_const;
73 class constant_descriptor_rtx;
74 struct rtx_constant_pool;
75
76 #define n_deferred_constants (crtl->varasm.deferred_constants)
77
78 /* Number for making the label on the next
79 constant that is stored in memory. */
80
81 static GTY(()) int const_labelno;
82
83 /* Carry information from ASM_DECLARE_OBJECT_NAME
84 to ASM_FINISH_DECLARE_OBJECT. */
85
86 int size_directive_output;
87
88 /* The last decl for which assemble_variable was called,
89 if it did ASM_DECLARE_OBJECT_NAME.
90 If the last call to assemble_variable didn't do that,
91 this holds 0. */
92
93 tree last_assemble_variable_decl;
94
95 /* The following global variable indicates if the first basic block
96 in a function belongs to the cold partition or not. */
97
98 bool first_function_block_is_cold;
99
100 /* Whether we saw any functions with no_split_stack. */
101
102 static bool saw_no_split_stack;
103
104 static const char *strip_reg_name (const char *);
105 static int contains_pointers_p (tree);
106 #ifdef ASM_OUTPUT_EXTERNAL
107 static bool incorporeal_function_p (tree);
108 #endif
109 static void decode_addr_const (tree, class addr_const *);
110 static hashval_t const_hash_1 (const tree);
111 static int compare_constant (const tree, const tree);
112 static void output_constant_def_contents (rtx);
113 static void output_addressed_constants (tree);
114 static unsigned HOST_WIDE_INT output_constant (tree, unsigned HOST_WIDE_INT,
115 unsigned int, bool, bool);
116 static void globalize_decl (tree);
117 static bool decl_readonly_section_1 (enum section_category);
118 #ifdef BSS_SECTION_ASM_OP
119 #ifdef ASM_OUTPUT_ALIGNED_BSS
120 static void asm_output_aligned_bss (FILE *, tree, const char *,
121 unsigned HOST_WIDE_INT, int)
122 ATTRIBUTE_UNUSED;
123 #endif
124 #endif /* BSS_SECTION_ASM_OP */
125 static void mark_weak (tree);
126 static void output_constant_pool (const char *, tree);
127 static void handle_vtv_comdat_section (section *, const_tree);
128 \f
129 /* Well-known sections, each one associated with some sort of *_ASM_OP. */
130 section *text_section;
131 section *data_section;
132 section *readonly_data_section;
133 section *sdata_section;
134 section *ctors_section;
135 section *dtors_section;
136 section *bss_section;
137 section *sbss_section;
138
139 /* Various forms of common section. All are guaranteed to be nonnull. */
140 section *tls_comm_section;
141 section *comm_section;
142 section *lcomm_section;
143
144 /* A SECTION_NOSWITCH section used for declaring global BSS variables.
145 May be null. */
146 section *bss_noswitch_section;
147
148 /* The section that holds the main exception table, when known. The section
149 is set either by the target's init_sections hook or by the first call to
150 switch_to_exception_section. */
151 section *exception_section;
152
153 /* The section that holds the DWARF2 frame unwind information, when known.
154 The section is set either by the target's init_sections hook or by the
155 first call to switch_to_eh_frame_section. */
156 section *eh_frame_section;
157
158 /* asm_out_file's current section. This is NULL if no section has yet
159 been selected or if we lose track of what the current section is. */
160 section *in_section;
161
162 /* True if code for the current function is currently being directed
163 at the cold section. */
164 bool in_cold_section_p;
165
166 /* The following global holds the "function name" for the code in the
167 cold section of a function, if hot/cold function splitting is enabled
168 and there was actually code that went into the cold section. A
169 pseudo function name is needed for the cold section of code for some
170 debugging tools that perform symbolization. */
171 tree cold_function_name = NULL_TREE;
172
173 /* A linked list of all the unnamed sections. */
174 static GTY(()) section *unnamed_sections;
175
176 /* Return a nonzero value if DECL has a section attribute. */
177 #define IN_NAMED_SECTION(DECL) \
178 (VAR_OR_FUNCTION_DECL_P (DECL) && DECL_SECTION_NAME (DECL) != NULL)
179
180 struct section_hasher : ggc_ptr_hash<section>
181 {
182 typedef const char *compare_type;
183
184 static hashval_t hash (section *);
185 static bool equal (section *, const char *);
186 };
187
188 /* Hash table of named sections. */
189 static GTY(()) hash_table<section_hasher> *section_htab;
190
191 struct object_block_hasher : ggc_ptr_hash<object_block>
192 {
193 typedef const section *compare_type;
194
195 static hashval_t hash (object_block *);
196 static bool equal (object_block *, const section *);
197 };
198
199 /* A table of object_blocks, indexed by section. */
200 static GTY(()) hash_table<object_block_hasher> *object_block_htab;
201
202 /* The next number to use for internal anchor labels. */
203 static GTY(()) int anchor_labelno;
204
205 /* A pool of constants that can be shared between functions. */
206 static GTY(()) struct rtx_constant_pool *shared_constant_pool;
207
208 /* Helper routines for maintaining section_htab. */
209
210 bool
211 section_hasher::equal (section *old, const char *new_name)
212 {
213 return strcmp (old->named.name, new_name) == 0;
214 }
215
216 hashval_t
217 section_hasher::hash (section *old)
218 {
219 return htab_hash_string (old->named.name);
220 }
221
222 /* Return a hash value for section SECT. */
223
224 static hashval_t
225 hash_section (section *sect)
226 {
227 if (sect->common.flags & SECTION_NAMED)
228 return htab_hash_string (sect->named.name);
229 return sect->common.flags & ~SECTION_DECLARED;
230 }
231
232 /* Helper routines for maintaining object_block_htab. */
233
234 inline bool
235 object_block_hasher::equal (object_block *old, const section *new_section)
236 {
237 return old->sect == new_section;
238 }
239
240 hashval_t
241 object_block_hasher::hash (object_block *old)
242 {
243 return hash_section (old->sect);
244 }
245
246 /* Return a new unnamed section with the given fields. */
247
248 section *
249 get_unnamed_section (unsigned int flags, void (*callback) (const void *),
250 const void *data)
251 {
252 section *sect;
253
254 sect = ggc_alloc<section> ();
255 sect->unnamed.common.flags = flags | SECTION_UNNAMED;
256 sect->unnamed.callback = callback;
257 sect->unnamed.data = data;
258 sect->unnamed.next = unnamed_sections;
259
260 unnamed_sections = sect;
261 return sect;
262 }
263
264 /* Return a SECTION_NOSWITCH section with the given fields. */
265
266 static section *
267 get_noswitch_section (unsigned int flags, noswitch_section_callback callback)
268 {
269 section *sect;
270
271 sect = ggc_alloc<section> ();
272 sect->noswitch.common.flags = flags | SECTION_NOSWITCH;
273 sect->noswitch.callback = callback;
274
275 return sect;
276 }
277
278 /* Return the named section structure associated with NAME. Create
279 a new section with the given fields if no such structure exists. */
280
281 section *
282 get_section (const char *name, unsigned int flags, tree decl)
283 {
284 section *sect, **slot;
285
286 slot = section_htab->find_slot_with_hash (name, htab_hash_string (name),
287 INSERT);
288 flags |= SECTION_NAMED;
289 if (*slot == NULL)
290 {
291 sect = ggc_alloc<section> ();
292 sect->named.common.flags = flags;
293 sect->named.name = ggc_strdup (name);
294 sect->named.decl = decl;
295 *slot = sect;
296 }
297 else
298 {
299 sect = *slot;
300 /* It is fine if one of the sections has SECTION_NOTYPE as long as
301 the other has none of the contrary flags (see the logic at the end
302 of default_section_type_flags, below). */
303 if (((sect->common.flags ^ flags) & SECTION_NOTYPE)
304 && !((sect->common.flags | flags)
305 & (SECTION_CODE | SECTION_BSS | SECTION_TLS | SECTION_ENTSIZE
306 | (HAVE_COMDAT_GROUP ? SECTION_LINKONCE : 0))))
307 {
308 sect->common.flags |= SECTION_NOTYPE;
309 flags |= SECTION_NOTYPE;
310 }
311 if ((sect->common.flags & ~SECTION_DECLARED) != flags
312 && ((sect->common.flags | flags) & SECTION_OVERRIDE) == 0)
313 {
314 /* It is fine if one of the section flags is
315 SECTION_WRITE | SECTION_RELRO and the other has none of these
316 flags (i.e. read-only) in named sections and either the
317 section hasn't been declared yet or has been declared as writable.
318 In that case just make sure the resulting flags are
319 SECTION_WRITE | SECTION_RELRO, ie. writable only because of
320 relocations. */
321 if (((sect->common.flags ^ flags) & (SECTION_WRITE | SECTION_RELRO))
322 == (SECTION_WRITE | SECTION_RELRO)
323 && (sect->common.flags
324 & ~(SECTION_DECLARED | SECTION_WRITE | SECTION_RELRO))
325 == (flags & ~(SECTION_WRITE | SECTION_RELRO))
326 && ((sect->common.flags & SECTION_DECLARED) == 0
327 || (sect->common.flags & SECTION_WRITE)))
328 {
329 sect->common.flags |= (SECTION_WRITE | SECTION_RELRO);
330 return sect;
331 }
332 /* Sanity check user variables for flag changes. */
333 if (sect->named.decl != NULL
334 && DECL_P (sect->named.decl)
335 && decl != sect->named.decl)
336 {
337 if (decl != NULL && DECL_P (decl))
338 error ("%+qD causes a section type conflict with %qD",
339 decl, sect->named.decl);
340 else
341 error ("section type conflict with %qD", sect->named.decl);
342 inform (DECL_SOURCE_LOCATION (sect->named.decl),
343 "%qD was declared here", sect->named.decl);
344 }
345 else if (decl != NULL && DECL_P (decl))
346 error ("%+qD causes a section type conflict", decl);
347 else
348 error ("section type conflict");
349 /* Make sure we don't error about one section multiple times. */
350 sect->common.flags |= SECTION_OVERRIDE;
351 }
352 }
353 return sect;
354 }
355
356 /* Return true if the current compilation mode benefits from having
357 objects grouped into blocks. */
358
359 static bool
360 use_object_blocks_p (void)
361 {
362 return flag_section_anchors;
363 }
364
365 /* Return the object_block structure for section SECT. Create a new
366 structure if we haven't created one already. Return null if SECT
367 itself is null. Return also null for mergeable sections since
368 section anchors can't be used in mergeable sections anyway,
369 because the linker might move objects around, and using the
370 object blocks infrastructure in that case is both a waste and a
371 maintenance burden. */
372
373 static struct object_block *
374 get_block_for_section (section *sect)
375 {
376 struct object_block *block;
377
378 if (sect == NULL)
379 return NULL;
380
381 if (sect->common.flags & SECTION_MERGE)
382 return NULL;
383
384 object_block **slot
385 = object_block_htab->find_slot_with_hash (sect, hash_section (sect),
386 INSERT);
387 block = *slot;
388 if (block == NULL)
389 {
390 block = ggc_cleared_alloc<object_block> ();
391 block->sect = sect;
392 *slot = block;
393 }
394 return block;
395 }
396
397 /* Create a symbol with label LABEL and place it at byte offset
398 OFFSET in BLOCK. OFFSET can be negative if the symbol's offset
399 is not yet known. LABEL must be a garbage-collected string. */
400
401 static rtx
402 create_block_symbol (const char *label, struct object_block *block,
403 HOST_WIDE_INT offset)
404 {
405 rtx symbol;
406 unsigned int size;
407
408 /* Create the extended SYMBOL_REF. */
409 size = RTX_HDR_SIZE + sizeof (struct block_symbol);
410 symbol = (rtx) ggc_internal_alloc (size);
411
412 /* Initialize the normal SYMBOL_REF fields. */
413 memset (symbol, 0, size);
414 PUT_CODE (symbol, SYMBOL_REF);
415 PUT_MODE (symbol, Pmode);
416 XSTR (symbol, 0) = label;
417 SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_HAS_BLOCK_INFO;
418
419 /* Initialize the block_symbol stuff. */
420 SYMBOL_REF_BLOCK (symbol) = block;
421 SYMBOL_REF_BLOCK_OFFSET (symbol) = offset;
422
423 return symbol;
424 }
425
426 /* Return a section with a particular name and with whatever SECTION_*
427 flags section_type_flags deems appropriate. The name of the section
428 is taken from NAME if nonnull, otherwise it is taken from DECL's
429 DECL_SECTION_NAME. DECL is the decl associated with the section
430 (see the section comment for details) and RELOC is as for
431 section_type_flags. */
432
433 section *
434 get_named_section (tree decl, const char *name, int reloc)
435 {
436 unsigned int flags;
437
438 if (name == NULL)
439 {
440 gcc_assert (decl && DECL_P (decl) && DECL_SECTION_NAME (decl));
441 name = DECL_SECTION_NAME (decl);
442 }
443
444 flags = targetm.section_type_flags (decl, name, reloc);
445 return get_section (name, flags, decl);
446 }
447
448 /* Worker for resolve_unique_section. */
449
450 static bool
451 set_implicit_section (struct symtab_node *n, void *data ATTRIBUTE_UNUSED)
452 {
453 n->implicit_section = true;
454 return false;
455 }
456
457 /* If required, set DECL_SECTION_NAME to a unique name. */
458
459 void
460 resolve_unique_section (tree decl, int reloc ATTRIBUTE_UNUSED,
461 int flag_function_or_data_sections)
462 {
463 if (DECL_SECTION_NAME (decl) == NULL
464 && targetm_common.have_named_sections
465 && (flag_function_or_data_sections
466 || DECL_COMDAT_GROUP (decl)))
467 {
468 targetm.asm_out.unique_section (decl, reloc);
469 if (DECL_SECTION_NAME (decl))
470 symtab_node::get (decl)->call_for_symbol_and_aliases
471 (set_implicit_section, NULL, true);
472 }
473 }
474
475 #ifdef BSS_SECTION_ASM_OP
476
477 #ifdef ASM_OUTPUT_ALIGNED_BSS
478
479 /* Utility function for targets to use in implementing
480 ASM_OUTPUT_ALIGNED_BSS.
481 ??? It is believed that this function will work in most cases so such
482 support is localized here. */
483
484 static void
485 asm_output_aligned_bss (FILE *file, tree decl ATTRIBUTE_UNUSED,
486 const char *name, unsigned HOST_WIDE_INT size,
487 int align)
488 {
489 switch_to_section (bss_section);
490 ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT));
491 #ifdef ASM_DECLARE_OBJECT_NAME
492 last_assemble_variable_decl = decl;
493 ASM_DECLARE_OBJECT_NAME (file, name, decl);
494 #else
495 /* Standard thing is just output label for the object. */
496 ASM_OUTPUT_LABEL (file, name);
497 #endif /* ASM_DECLARE_OBJECT_NAME */
498 ASM_OUTPUT_SKIP (file, size ? size : 1);
499 }
500
501 #endif
502
503 #endif /* BSS_SECTION_ASM_OP */
504
505 #ifndef USE_SELECT_SECTION_FOR_FUNCTIONS
506 /* Return the hot section for function DECL. Return text_section for
507 null DECLs. */
508
509 static section *
510 hot_function_section (tree decl)
511 {
512 if (decl != NULL_TREE
513 && DECL_SECTION_NAME (decl) != NULL
514 && targetm_common.have_named_sections)
515 return get_named_section (decl, NULL, 0);
516 else
517 return text_section;
518 }
519 #endif
520
521 /* Return section for TEXT_SECTION_NAME if DECL or DECL_SECTION_NAME (DECL)
522 is NULL.
523
524 When DECL_SECTION_NAME is non-NULL and it is implicit section and
525 NAMED_SECTION_SUFFIX is non-NULL, then produce section called
526 concatenate the name with NAMED_SECTION_SUFFIX.
527 Otherwise produce "TEXT_SECTION_NAME.IMPLICIT_NAME". */
528
529 section *
530 get_named_text_section (tree decl,
531 const char *text_section_name,
532 const char *named_section_suffix)
533 {
534 if (decl && DECL_SECTION_NAME (decl))
535 {
536 if (named_section_suffix)
537 {
538 const char *dsn = DECL_SECTION_NAME (decl);
539 const char *stripped_name;
540 char *name, *buffer;
541
542 name = (char *) alloca (strlen (dsn) + 1);
543 memcpy (name, dsn,
544 strlen (dsn) + 1);
545
546 stripped_name = targetm.strip_name_encoding (name);
547
548 buffer = ACONCAT ((stripped_name, named_section_suffix, NULL));
549 return get_named_section (decl, buffer, 0);
550 }
551 else if (symtab_node::get (decl)->implicit_section)
552 {
553 const char *name;
554
555 /* Do not try to split gnu_linkonce functions. This gets somewhat
556 slipperly. */
557 if (DECL_COMDAT_GROUP (decl) && !HAVE_COMDAT_GROUP)
558 return NULL;
559 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
560 name = targetm.strip_name_encoding (name);
561 return get_named_section (decl, ACONCAT ((text_section_name, ".",
562 name, NULL)), 0);
563 }
564 else
565 return NULL;
566 }
567 return get_named_section (decl, text_section_name, 0);
568 }
569
570 /* Choose named function section based on its frequency. */
571
572 section *
573 default_function_section (tree decl, enum node_frequency freq,
574 bool startup, bool exit)
575 {
576 #if defined HAVE_LD_EH_GC_SECTIONS && defined HAVE_LD_EH_GC_SECTIONS_BUG
577 /* Old GNU linkers have buggy --gc-section support, which sometimes
578 results in .gcc_except_table* sections being garbage collected. */
579 if (decl
580 && symtab_node::get (decl)->implicit_section)
581 return NULL;
582 #endif
583
584 if (!flag_reorder_functions
585 || !targetm_common.have_named_sections)
586 return NULL;
587 /* Startup code should go to startup subsection unless it is
588 unlikely executed (this happens especially with function splitting
589 where we can split away unnecessary parts of static constructors. */
590 if (startup && freq != NODE_FREQUENCY_UNLIKELY_EXECUTED)
591 {
592 /* During LTO the tp_first_run profiling will naturally place all
593 initialization code first. Using separate section is counter-productive
594 because startup only code may call functions which are no longer
595 startup only. */
596 if (!in_lto_p
597 || !cgraph_node::get (decl)->tp_first_run
598 || !opt_for_fn (decl, flag_profile_reorder_functions))
599 return get_named_text_section (decl, ".text.startup", NULL);
600 else
601 return NULL;
602 }
603
604 /* Similarly for exit. */
605 if (exit && freq != NODE_FREQUENCY_UNLIKELY_EXECUTED)
606 return get_named_text_section (decl, ".text.exit", NULL);
607
608 /* Group cold functions together, similarly for hot code. */
609 switch (freq)
610 {
611 case NODE_FREQUENCY_UNLIKELY_EXECUTED:
612 return get_named_text_section (decl, ".text.unlikely", NULL);
613 case NODE_FREQUENCY_HOT:
614 return get_named_text_section (decl, ".text.hot", NULL);
615 /* FALLTHRU */
616 default:
617 return NULL;
618 }
619 }
620
621 /* Return the section for function DECL.
622
623 If DECL is NULL_TREE, return the text section. We can be passed
624 NULL_TREE under some circumstances by dbxout.c at least.
625
626 If FORCE_COLD is true, return cold function section ignoring
627 the frequency info of cgraph_node. */
628
629 static section *
630 function_section_1 (tree decl, bool force_cold)
631 {
632 section *section = NULL;
633 enum node_frequency freq = NODE_FREQUENCY_NORMAL;
634 bool startup = false, exit = false;
635
636 if (decl)
637 {
638 struct cgraph_node *node = cgraph_node::get (decl);
639
640 if (node)
641 {
642 freq = node->frequency;
643 startup = node->only_called_at_startup;
644 exit = node->only_called_at_exit;
645 }
646 }
647 if (force_cold)
648 freq = NODE_FREQUENCY_UNLIKELY_EXECUTED;
649
650 #ifdef USE_SELECT_SECTION_FOR_FUNCTIONS
651 if (decl != NULL_TREE
652 && DECL_SECTION_NAME (decl) != NULL)
653 {
654 if (targetm.asm_out.function_section)
655 section = targetm.asm_out.function_section (decl, freq,
656 startup, exit);
657 if (section)
658 return section;
659 return get_named_section (decl, NULL, 0);
660 }
661 else
662 return targetm.asm_out.select_section
663 (decl, freq == NODE_FREQUENCY_UNLIKELY_EXECUTED,
664 symtab_node::get (decl)->definition_alignment ());
665 #else
666 if (targetm.asm_out.function_section)
667 section = targetm.asm_out.function_section (decl, freq, startup, exit);
668 if (section)
669 return section;
670 return hot_function_section (decl);
671 #endif
672 }
673
674 /* Return the section for function DECL.
675
676 If DECL is NULL_TREE, return the text section. We can be passed
677 NULL_TREE under some circumstances by dbxout.c at least. */
678
679 section *
680 function_section (tree decl)
681 {
682 /* Handle cases where function splitting code decides
683 to put function entry point into unlikely executed section
684 despite the fact that the function itself is not cold
685 (i.e. it is called rarely but contains a hot loop that is
686 better to live in hot subsection for the code locality). */
687 return function_section_1 (decl,
688 first_function_block_is_cold);
689 }
690
691 /* Return the section for the current function, take IN_COLD_SECTION_P
692 into account. */
693
694 section *
695 current_function_section (void)
696 {
697 return function_section_1 (current_function_decl, in_cold_section_p);
698 }
699
700 /* Tell assembler to switch to unlikely-to-be-executed text section. */
701
702 section *
703 unlikely_text_section (void)
704 {
705 return function_section_1 (current_function_decl, true);
706 }
707
708 /* When called within a function context, return true if the function
709 has been assigned a cold text section and if SECT is that section.
710 When called outside a function context, return true if SECT is the
711 default cold section. */
712
713 bool
714 unlikely_text_section_p (section *sect)
715 {
716 return sect == function_section_1 (current_function_decl, true);
717 }
718
719 /* Switch to the other function partition (if inside of hot section
720 into cold section, otherwise into the hot section). */
721
722 void
723 switch_to_other_text_partition (void)
724 {
725 in_cold_section_p = !in_cold_section_p;
726 switch_to_section (current_function_section ());
727 }
728
729 /* Return the read-only data section associated with function DECL. */
730
731 section *
732 default_function_rodata_section (tree decl)
733 {
734 if (decl != NULL_TREE && DECL_SECTION_NAME (decl))
735 {
736 const char *name = DECL_SECTION_NAME (decl);
737
738 if (DECL_COMDAT_GROUP (decl) && HAVE_COMDAT_GROUP)
739 {
740 const char *dot;
741 size_t len;
742 char* rname;
743
744 dot = strchr (name + 1, '.');
745 if (!dot)
746 dot = name;
747 len = strlen (dot) + 8;
748 rname = (char *) alloca (len);
749
750 strcpy (rname, ".rodata");
751 strcat (rname, dot);
752 return get_section (rname, SECTION_LINKONCE, decl);
753 }
754 /* For .gnu.linkonce.t.foo we want to use .gnu.linkonce.r.foo. */
755 else if (DECL_COMDAT_GROUP (decl)
756 && strncmp (name, ".gnu.linkonce.t.", 16) == 0)
757 {
758 size_t len = strlen (name) + 1;
759 char *rname = (char *) alloca (len);
760
761 memcpy (rname, name, len);
762 rname[14] = 'r';
763 return get_section (rname, SECTION_LINKONCE, decl);
764 }
765 /* For .text.foo we want to use .rodata.foo. */
766 else if (flag_function_sections && flag_data_sections
767 && strncmp (name, ".text.", 6) == 0)
768 {
769 size_t len = strlen (name) + 1;
770 char *rname = (char *) alloca (len + 2);
771
772 memcpy (rname, ".rodata", 7);
773 memcpy (rname + 7, name + 5, len - 5);
774 return get_section (rname, 0, decl);
775 }
776 }
777
778 return readonly_data_section;
779 }
780
781 /* Return the read-only data section associated with function DECL
782 for targets where that section should be always the single
783 readonly data section. */
784
785 section *
786 default_no_function_rodata_section (tree decl ATTRIBUTE_UNUSED)
787 {
788 return readonly_data_section;
789 }
790
791 /* A subroutine of mergeable_string_section and mergeable_constant_section. */
792
793 static const char *
794 function_mergeable_rodata_prefix (void)
795 {
796 section *s = targetm.asm_out.function_rodata_section (current_function_decl);
797 if (SECTION_STYLE (s) == SECTION_NAMED)
798 return s->named.name;
799 else
800 return targetm.asm_out.mergeable_rodata_prefix;
801 }
802
803 /* Return the section to use for string merging. */
804
805 static section *
806 mergeable_string_section (tree decl ATTRIBUTE_UNUSED,
807 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED,
808 unsigned int flags ATTRIBUTE_UNUSED)
809 {
810 HOST_WIDE_INT len;
811
812 if (HAVE_GAS_SHF_MERGE && flag_merge_constants
813 && TREE_CODE (decl) == STRING_CST
814 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
815 && align <= 256
816 && (len = int_size_in_bytes (TREE_TYPE (decl))) > 0
817 && TREE_STRING_LENGTH (decl) == len)
818 {
819 scalar_int_mode mode;
820 unsigned int modesize;
821 const char *str;
822 HOST_WIDE_INT i;
823 int j, unit;
824 const char *prefix = function_mergeable_rodata_prefix ();
825 char *name = (char *) alloca (strlen (prefix) + 30);
826
827 mode = SCALAR_INT_TYPE_MODE (TREE_TYPE (TREE_TYPE (decl)));
828 modesize = GET_MODE_BITSIZE (mode);
829 if (modesize >= 8 && modesize <= 256
830 && (modesize & (modesize - 1)) == 0)
831 {
832 if (align < modesize)
833 align = modesize;
834
835 if (!HAVE_LD_ALIGNED_SHF_MERGE && align > 8)
836 return readonly_data_section;
837
838 str = TREE_STRING_POINTER (decl);
839 unit = GET_MODE_SIZE (mode);
840
841 /* Check for embedded NUL characters. */
842 for (i = 0; i < len; i += unit)
843 {
844 for (j = 0; j < unit; j++)
845 if (str[i + j] != '\0')
846 break;
847 if (j == unit)
848 break;
849 }
850 if (i == len - unit || (unit == 1 && i == len))
851 {
852 sprintf (name, "%s.str%d.%d", prefix,
853 modesize / 8, (int) (align / 8));
854 flags |= (modesize / 8) | SECTION_MERGE | SECTION_STRINGS;
855 return get_section (name, flags, NULL);
856 }
857 }
858 }
859
860 return readonly_data_section;
861 }
862
863 /* Return the section to use for constant merging. */
864
865 section *
866 mergeable_constant_section (machine_mode mode ATTRIBUTE_UNUSED,
867 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED,
868 unsigned int flags ATTRIBUTE_UNUSED)
869 {
870 if (HAVE_GAS_SHF_MERGE && flag_merge_constants
871 && mode != VOIDmode
872 && mode != BLKmode
873 && known_le (GET_MODE_BITSIZE (mode), align)
874 && align >= 8
875 && align <= 256
876 && (align & (align - 1)) == 0
877 && (HAVE_LD_ALIGNED_SHF_MERGE ? 1 : align == 8))
878 {
879 const char *prefix = function_mergeable_rodata_prefix ();
880 char *name = (char *) alloca (strlen (prefix) + 30);
881
882 sprintf (name, "%s.cst%d", prefix, (int) (align / 8));
883 flags |= (align / 8) | SECTION_MERGE;
884 return get_section (name, flags, NULL);
885 }
886 return readonly_data_section;
887 }
888 \f
889 /* Given NAME, a putative register name, discard any customary prefixes. */
890
891 static const char *
892 strip_reg_name (const char *name)
893 {
894 #ifdef REGISTER_PREFIX
895 if (!strncmp (name, REGISTER_PREFIX, strlen (REGISTER_PREFIX)))
896 name += strlen (REGISTER_PREFIX);
897 #endif
898 if (name[0] == '%' || name[0] == '#')
899 name++;
900 return name;
901 }
902 \f
903 /* The user has asked for a DECL to have a particular name. Set (or
904 change) it in such a way that we don't prefix an underscore to
905 it. */
906 void
907 set_user_assembler_name (tree decl, const char *name)
908 {
909 char *starred = (char *) alloca (strlen (name) + 2);
910 starred[0] = '*';
911 strcpy (starred + 1, name);
912 symtab->change_decl_assembler_name (decl, get_identifier (starred));
913 SET_DECL_RTL (decl, NULL_RTX);
914 }
915 \f
916 /* Decode an `asm' spec for a declaration as a register name.
917 Return the register number, or -1 if nothing specified,
918 or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized,
919 or -3 if ASMSPEC is `cc' and is not recognized,
920 or -4 if ASMSPEC is `memory' and is not recognized.
921 Accept an exact spelling or a decimal number.
922 Prefixes such as % are optional. */
923
924 int
925 decode_reg_name_and_count (const char *asmspec, int *pnregs)
926 {
927 /* Presume just one register is clobbered. */
928 *pnregs = 1;
929
930 if (asmspec != 0)
931 {
932 int i;
933
934 /* Get rid of confusing prefixes. */
935 asmspec = strip_reg_name (asmspec);
936
937 /* Allow a decimal number as a "register name". */
938 for (i = strlen (asmspec) - 1; i >= 0; i--)
939 if (! ISDIGIT (asmspec[i]))
940 break;
941 if (asmspec[0] != 0 && i < 0)
942 {
943 i = atoi (asmspec);
944 if (i < FIRST_PSEUDO_REGISTER && i >= 0 && reg_names[i][0])
945 return i;
946 else
947 return -2;
948 }
949
950 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
951 if (reg_names[i][0]
952 && ! strcmp (asmspec, strip_reg_name (reg_names[i])))
953 return i;
954
955 #ifdef OVERLAPPING_REGISTER_NAMES
956 {
957 static const struct
958 {
959 const char *const name;
960 const int number;
961 const int nregs;
962 } table[] = OVERLAPPING_REGISTER_NAMES;
963
964 for (i = 0; i < (int) ARRAY_SIZE (table); i++)
965 if (table[i].name[0]
966 && ! strcmp (asmspec, table[i].name))
967 {
968 *pnregs = table[i].nregs;
969 return table[i].number;
970 }
971 }
972 #endif /* OVERLAPPING_REGISTER_NAMES */
973
974 #ifdef ADDITIONAL_REGISTER_NAMES
975 {
976 static const struct { const char *const name; const int number; } table[]
977 = ADDITIONAL_REGISTER_NAMES;
978
979 for (i = 0; i < (int) ARRAY_SIZE (table); i++)
980 if (table[i].name[0]
981 && ! strcmp (asmspec, table[i].name)
982 && reg_names[table[i].number][0])
983 return table[i].number;
984 }
985 #endif /* ADDITIONAL_REGISTER_NAMES */
986
987 if (!strcmp (asmspec, "memory"))
988 return -4;
989
990 if (!strcmp (asmspec, "cc"))
991 return -3;
992
993 return -2;
994 }
995
996 return -1;
997 }
998
999 int
1000 decode_reg_name (const char *name)
1001 {
1002 int count;
1003 return decode_reg_name_and_count (name, &count);
1004 }
1005
1006 \f
1007 /* Return true if DECL's initializer is suitable for a BSS section. */
1008
1009 bool
1010 bss_initializer_p (const_tree decl, bool named)
1011 {
1012 /* Do not put non-common constants into the .bss section, they belong in
1013 a readonly section, except when NAMED is true. */
1014 return ((!TREE_READONLY (decl) || DECL_COMMON (decl) || named)
1015 && (DECL_INITIAL (decl) == NULL
1016 /* In LTO we have no errors in program; error_mark_node is used
1017 to mark offlined constructors. */
1018 || (DECL_INITIAL (decl) == error_mark_node
1019 && !in_lto_p)
1020 || (flag_zero_initialized_in_bss
1021 && initializer_zerop (DECL_INITIAL (decl)))));
1022 }
1023
1024 /* Compute the alignment of variable specified by DECL.
1025 DONT_OUTPUT_DATA is from assemble_variable. */
1026
1027 void
1028 align_variable (tree decl, bool dont_output_data)
1029 {
1030 unsigned int align = DECL_ALIGN (decl);
1031
1032 /* In the case for initialing an array whose length isn't specified,
1033 where we have not yet been able to do the layout,
1034 figure out the proper alignment now. */
1035 if (dont_output_data && DECL_SIZE (decl) == 0
1036 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
1037 align = MAX (align, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (decl))));
1038
1039 /* Some object file formats have a maximum alignment which they support.
1040 In particular, a.out format supports a maximum alignment of 4. */
1041 if (align > MAX_OFILE_ALIGNMENT)
1042 {
1043 error ("alignment of %q+D is greater than maximum object "
1044 "file alignment %d", decl,
1045 MAX_OFILE_ALIGNMENT/BITS_PER_UNIT);
1046 align = MAX_OFILE_ALIGNMENT;
1047 }
1048
1049 if (! DECL_USER_ALIGN (decl))
1050 {
1051 #ifdef DATA_ABI_ALIGNMENT
1052 unsigned int data_abi_align
1053 = DATA_ABI_ALIGNMENT (TREE_TYPE (decl), align);
1054 /* For backwards compatibility, don't assume the ABI alignment for
1055 TLS variables. */
1056 if (! DECL_THREAD_LOCAL_P (decl) || data_abi_align <= BITS_PER_WORD)
1057 align = data_abi_align;
1058 #endif
1059
1060 /* On some machines, it is good to increase alignment sometimes.
1061 But as DECL_ALIGN is used both for actually emitting the variable
1062 and for code accessing the variable as guaranteed alignment, we
1063 can only increase the alignment if it is a performance optimization
1064 if the references to it must bind to the current definition. */
1065 if (decl_binds_to_current_def_p (decl)
1066 && !DECL_VIRTUAL_P (decl))
1067 {
1068 #ifdef DATA_ALIGNMENT
1069 unsigned int data_align = DATA_ALIGNMENT (TREE_TYPE (decl), align);
1070 /* Don't increase alignment too much for TLS variables - TLS space
1071 is too precious. */
1072 if (! DECL_THREAD_LOCAL_P (decl) || data_align <= BITS_PER_WORD)
1073 align = data_align;
1074 #endif
1075 if (DECL_INITIAL (decl) != 0
1076 /* In LTO we have no errors in program; error_mark_node is used
1077 to mark offlined constructors. */
1078 && (in_lto_p || DECL_INITIAL (decl) != error_mark_node))
1079 {
1080 unsigned int const_align
1081 = targetm.constant_alignment (DECL_INITIAL (decl), align);
1082 /* Don't increase alignment too much for TLS variables - TLS
1083 space is too precious. */
1084 if (! DECL_THREAD_LOCAL_P (decl) || const_align <= BITS_PER_WORD)
1085 align = const_align;
1086 }
1087 }
1088 }
1089
1090 /* Reset the alignment in case we have made it tighter, so we can benefit
1091 from it in get_pointer_alignment. */
1092 SET_DECL_ALIGN (decl, align);
1093 }
1094
1095 /* Return DECL_ALIGN (decl), possibly increased for optimization purposes
1096 beyond what align_variable returned. */
1097
1098 static unsigned int
1099 get_variable_align (tree decl)
1100 {
1101 unsigned int align = DECL_ALIGN (decl);
1102
1103 /* For user aligned vars or static vars align_variable already did
1104 everything. */
1105 if (DECL_USER_ALIGN (decl) || !TREE_PUBLIC (decl))
1106 return align;
1107
1108 #ifdef DATA_ABI_ALIGNMENT
1109 if (DECL_THREAD_LOCAL_P (decl))
1110 align = DATA_ABI_ALIGNMENT (TREE_TYPE (decl), align);
1111 #endif
1112
1113 /* For decls that bind to the current definition, align_variable
1114 did also everything, except for not assuming ABI required alignment
1115 of TLS variables. For other vars, increase the alignment here
1116 as an optimization. */
1117 if (!decl_binds_to_current_def_p (decl))
1118 {
1119 /* On some machines, it is good to increase alignment sometimes. */
1120 #ifdef DATA_ALIGNMENT
1121 unsigned int data_align = DATA_ALIGNMENT (TREE_TYPE (decl), align);
1122 /* Don't increase alignment too much for TLS variables - TLS space
1123 is too precious. */
1124 if (! DECL_THREAD_LOCAL_P (decl) || data_align <= BITS_PER_WORD)
1125 align = data_align;
1126 #endif
1127 if (DECL_INITIAL (decl) != 0
1128 /* In LTO we have no errors in program; error_mark_node is used
1129 to mark offlined constructors. */
1130 && (in_lto_p || DECL_INITIAL (decl) != error_mark_node))
1131 {
1132 unsigned int const_align
1133 = targetm.constant_alignment (DECL_INITIAL (decl), align);
1134 /* Don't increase alignment too much for TLS variables - TLS space
1135 is too precious. */
1136 if (! DECL_THREAD_LOCAL_P (decl) || const_align <= BITS_PER_WORD)
1137 align = const_align;
1138 }
1139 }
1140
1141 return align;
1142 }
1143
1144 /* Return the section into which the given VAR_DECL or CONST_DECL
1145 should be placed. PREFER_NOSWITCH_P is true if a noswitch
1146 section should be used wherever possible. */
1147
1148 section *
1149 get_variable_section (tree decl, bool prefer_noswitch_p)
1150 {
1151 addr_space_t as = ADDR_SPACE_GENERIC;
1152 int reloc;
1153 varpool_node *vnode = varpool_node::get (decl);
1154 if (vnode)
1155 {
1156 vnode = vnode->ultimate_alias_target ();
1157 decl = vnode->decl;
1158 }
1159
1160 if (TREE_TYPE (decl) != error_mark_node)
1161 as = TYPE_ADDR_SPACE (TREE_TYPE (decl));
1162
1163 /* We need the constructor to figure out reloc flag. */
1164 if (vnode)
1165 vnode->get_constructor ();
1166
1167 if (DECL_COMMON (decl))
1168 {
1169 /* If the decl has been given an explicit section name, or it resides
1170 in a non-generic address space, then it isn't common, and shouldn't
1171 be handled as such. */
1172 gcc_assert (DECL_SECTION_NAME (decl) == NULL
1173 && ADDR_SPACE_GENERIC_P (as));
1174 if (DECL_THREAD_LOCAL_P (decl))
1175 return tls_comm_section;
1176 else if (TREE_PUBLIC (decl) && bss_initializer_p (decl))
1177 return comm_section;
1178 }
1179
1180 if (DECL_INITIAL (decl) == error_mark_node)
1181 reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0;
1182 else if (DECL_INITIAL (decl))
1183 reloc = compute_reloc_for_constant (DECL_INITIAL (decl));
1184 else
1185 reloc = 0;
1186
1187 resolve_unique_section (decl, reloc, flag_data_sections);
1188 if (IN_NAMED_SECTION (decl))
1189 {
1190 section *sect = get_named_section (decl, NULL, reloc);
1191
1192 if ((sect->common.flags & SECTION_BSS)
1193 && !bss_initializer_p (decl, true))
1194 {
1195 error_at (DECL_SOURCE_LOCATION (decl),
1196 "only zero initializers are allowed in section %qs",
1197 sect->named.name);
1198 DECL_INITIAL (decl) = error_mark_node;
1199 }
1200 return sect;
1201 }
1202
1203 if (ADDR_SPACE_GENERIC_P (as)
1204 && !DECL_THREAD_LOCAL_P (decl)
1205 && !(prefer_noswitch_p && targetm.have_switchable_bss_sections)
1206 && bss_initializer_p (decl))
1207 {
1208 if (!TREE_PUBLIC (decl)
1209 && !((flag_sanitize & SANITIZE_ADDRESS)
1210 && asan_protect_global (decl)))
1211 return lcomm_section;
1212 if (bss_noswitch_section)
1213 return bss_noswitch_section;
1214 }
1215
1216 return targetm.asm_out.select_section (decl, reloc,
1217 get_variable_align (decl));
1218 }
1219
1220 /* Return the block into which object_block DECL should be placed. */
1221
1222 static struct object_block *
1223 get_block_for_decl (tree decl)
1224 {
1225 section *sect;
1226
1227 if (VAR_P (decl))
1228 {
1229 /* The object must be defined in this translation unit. */
1230 if (DECL_EXTERNAL (decl))
1231 return NULL;
1232
1233 /* There's no point using object blocks for something that is
1234 isolated by definition. */
1235 if (DECL_COMDAT_GROUP (decl))
1236 return NULL;
1237 }
1238
1239 /* We can only calculate block offsets if the decl has a known
1240 constant size. */
1241 if (DECL_SIZE_UNIT (decl) == NULL)
1242 return NULL;
1243 if (!tree_fits_uhwi_p (DECL_SIZE_UNIT (decl)))
1244 return NULL;
1245
1246 /* Find out which section should contain DECL. We cannot put it into
1247 an object block if it requires a standalone definition. */
1248 if (VAR_P (decl))
1249 align_variable (decl, 0);
1250 sect = get_variable_section (decl, true);
1251 if (SECTION_STYLE (sect) == SECTION_NOSWITCH)
1252 return NULL;
1253
1254 return get_block_for_section (sect);
1255 }
1256
1257 /* Make sure block symbol SYMBOL is in block BLOCK. */
1258
1259 static void
1260 change_symbol_block (rtx symbol, struct object_block *block)
1261 {
1262 if (block != SYMBOL_REF_BLOCK (symbol))
1263 {
1264 gcc_assert (SYMBOL_REF_BLOCK_OFFSET (symbol) < 0);
1265 SYMBOL_REF_BLOCK (symbol) = block;
1266 }
1267 }
1268
1269 /* Return true if it is possible to put DECL in an object_block. */
1270
1271 static bool
1272 use_blocks_for_decl_p (tree decl)
1273 {
1274 struct symtab_node *snode;
1275
1276 /* Only data DECLs can be placed into object blocks. */
1277 if (!VAR_P (decl) && TREE_CODE (decl) != CONST_DECL)
1278 return false;
1279
1280 /* DECL_INITIAL (decl) set to decl is a hack used for some decls that
1281 are never used from code directly and we never want object block handling
1282 for those. */
1283 if (DECL_INITIAL (decl) == decl)
1284 return false;
1285
1286 /* If this decl is an alias, then we don't want to emit a
1287 definition. */
1288 if (VAR_P (decl)
1289 && (snode = symtab_node::get (decl)) != NULL
1290 && snode->alias)
1291 return false;
1292
1293 return targetm.use_blocks_for_decl_p (decl);
1294 }
1295
1296 /* Follow the IDENTIFIER_TRANSPARENT_ALIAS chain starting at *ALIAS
1297 until we find an identifier that is not itself a transparent alias.
1298 Modify the alias passed to it by reference (and all aliases on the
1299 way to the ultimate target), such that they do not have to be
1300 followed again, and return the ultimate target of the alias
1301 chain. */
1302
1303 static inline tree
1304 ultimate_transparent_alias_target (tree *alias)
1305 {
1306 tree target = *alias;
1307
1308 if (IDENTIFIER_TRANSPARENT_ALIAS (target))
1309 {
1310 gcc_assert (TREE_CHAIN (target));
1311 target = ultimate_transparent_alias_target (&TREE_CHAIN (target));
1312 gcc_assert (! IDENTIFIER_TRANSPARENT_ALIAS (target)
1313 && ! TREE_CHAIN (target));
1314 *alias = target;
1315 }
1316
1317 return target;
1318 }
1319
1320 /* Create the DECL_RTL for a VAR_DECL or FUNCTION_DECL. DECL should
1321 have static storage duration. In other words, it should not be an
1322 automatic variable, including PARM_DECLs.
1323
1324 There is, however, one exception: this function handles variables
1325 explicitly placed in a particular register by the user.
1326
1327 This is never called for PARM_DECL nodes. */
1328
1329 void
1330 make_decl_rtl (tree decl)
1331 {
1332 const char *name = 0;
1333 int reg_number;
1334 tree id;
1335 rtx x;
1336
1337 /* Check that we are not being given an automatic variable. */
1338 gcc_assert (TREE_CODE (decl) != PARM_DECL
1339 && TREE_CODE (decl) != RESULT_DECL);
1340
1341 /* A weak alias has TREE_PUBLIC set but not the other bits. */
1342 gcc_assert (!VAR_P (decl)
1343 || TREE_STATIC (decl)
1344 || TREE_PUBLIC (decl)
1345 || DECL_EXTERNAL (decl)
1346 || DECL_REGISTER (decl));
1347
1348 /* And that we were not given a type or a label. */
1349 gcc_assert (TREE_CODE (decl) != TYPE_DECL
1350 && TREE_CODE (decl) != LABEL_DECL);
1351
1352 /* For a duplicate declaration, we can be called twice on the
1353 same DECL node. Don't discard the RTL already made. */
1354 if (DECL_RTL_SET_P (decl))
1355 {
1356 /* If the old RTL had the wrong mode, fix the mode. */
1357 x = DECL_RTL (decl);
1358 if (GET_MODE (x) != DECL_MODE (decl))
1359 SET_DECL_RTL (decl, adjust_address_nv (x, DECL_MODE (decl), 0));
1360
1361 if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
1362 return;
1363
1364 /* ??? Another way to do this would be to maintain a hashed
1365 table of such critters. Instead of adding stuff to a DECL
1366 to give certain attributes to it, we could use an external
1367 hash map from DECL to set of attributes. */
1368
1369 /* Let the target reassign the RTL if it wants.
1370 This is necessary, for example, when one machine specific
1371 decl attribute overrides another. */
1372 targetm.encode_section_info (decl, DECL_RTL (decl), false);
1373
1374 /* If the symbol has a SYMBOL_REF_BLOCK field, update it based
1375 on the new decl information. */
1376 if (MEM_P (x)
1377 && GET_CODE (XEXP (x, 0)) == SYMBOL_REF
1378 && SYMBOL_REF_HAS_BLOCK_INFO_P (XEXP (x, 0)))
1379 change_symbol_block (XEXP (x, 0), get_block_for_decl (decl));
1380
1381 return;
1382 }
1383
1384 /* If this variable belongs to the global constant pool, retrieve the
1385 pre-computed RTL or recompute it in LTO mode. */
1386 if (VAR_P (decl) && DECL_IN_CONSTANT_POOL (decl))
1387 {
1388 SET_DECL_RTL (decl, output_constant_def (DECL_INITIAL (decl), 1));
1389 return;
1390 }
1391
1392 id = DECL_ASSEMBLER_NAME (decl);
1393 name = IDENTIFIER_POINTER (id);
1394
1395 if (name[0] != '*' && TREE_CODE (decl) != FUNCTION_DECL
1396 && DECL_REGISTER (decl))
1397 {
1398 error ("register name not specified for %q+D", decl);
1399 }
1400 else if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
1401 {
1402 const char *asmspec = name+1;
1403 machine_mode mode = DECL_MODE (decl);
1404 reg_number = decode_reg_name (asmspec);
1405 /* First detect errors in declaring global registers. */
1406 if (reg_number == -1)
1407 error ("register name not specified for %q+D", decl);
1408 else if (reg_number < 0)
1409 error ("invalid register name for %q+D", decl);
1410 else if (mode == BLKmode)
1411 error ("data type of %q+D isn%'t suitable for a register",
1412 decl);
1413 else if (!in_hard_reg_set_p (accessible_reg_set, mode, reg_number))
1414 error ("the register specified for %q+D cannot be accessed"
1415 " by the current target", decl);
1416 else if (!in_hard_reg_set_p (operand_reg_set, mode, reg_number))
1417 error ("the register specified for %q+D is not general enough"
1418 " to be used as a register variable", decl);
1419 else if (!targetm.hard_regno_mode_ok (reg_number, mode))
1420 error ("register specified for %q+D isn%'t suitable for data type",
1421 decl);
1422 /* Now handle properly declared static register variables. */
1423 else
1424 {
1425 int nregs;
1426
1427 if (DECL_INITIAL (decl) != 0 && TREE_STATIC (decl))
1428 {
1429 DECL_INITIAL (decl) = 0;
1430 error ("global register variable has initial value");
1431 }
1432 if (TREE_THIS_VOLATILE (decl))
1433 warning (OPT_Wvolatile_register_var,
1434 "optimization may eliminate reads and/or "
1435 "writes to register variables");
1436
1437 /* If the user specified one of the eliminables registers here,
1438 e.g., FRAME_POINTER_REGNUM, we don't want to get this variable
1439 confused with that register and be eliminated. This usage is
1440 somewhat suspect... */
1441
1442 SET_DECL_RTL (decl, gen_raw_REG (mode, reg_number));
1443 ORIGINAL_REGNO (DECL_RTL (decl)) = reg_number;
1444 REG_USERVAR_P (DECL_RTL (decl)) = 1;
1445
1446 if (TREE_STATIC (decl))
1447 {
1448 /* Make this register global, so not usable for anything
1449 else. */
1450 #ifdef ASM_DECLARE_REGISTER_GLOBAL
1451 name = IDENTIFIER_POINTER (DECL_NAME (decl));
1452 ASM_DECLARE_REGISTER_GLOBAL (asm_out_file, decl, reg_number, name);
1453 #endif
1454 nregs = hard_regno_nregs (reg_number, mode);
1455 while (nregs > 0)
1456 globalize_reg (decl, reg_number + --nregs);
1457 }
1458
1459 /* As a register variable, it has no section. */
1460 return;
1461 }
1462 /* Avoid internal errors from invalid register
1463 specifications. */
1464 SET_DECL_ASSEMBLER_NAME (decl, NULL_TREE);
1465 DECL_HARD_REGISTER (decl) = 0;
1466 /* Also avoid SSA inconsistencies by pretending this is an external
1467 decl now. */
1468 DECL_EXTERNAL (decl) = 1;
1469 return;
1470 }
1471 /* Now handle ordinary static variables and functions (in memory).
1472 Also handle vars declared register invalidly. */
1473 else if (name[0] == '*')
1474 {
1475 #ifdef REGISTER_PREFIX
1476 if (strlen (REGISTER_PREFIX) != 0)
1477 {
1478 reg_number = decode_reg_name (name);
1479 if (reg_number >= 0 || reg_number == -3)
1480 error ("register name given for non-register variable %q+D", decl);
1481 }
1482 #endif
1483 }
1484
1485 /* Specifying a section attribute on a variable forces it into a
1486 non-.bss section, and thus it cannot be common. */
1487 /* FIXME: In general this code should not be necessary because
1488 visibility pass is doing the same work. But notice_global_symbol
1489 is called early and it needs to make DECL_RTL to get the name.
1490 we take care of recomputing the DECL_RTL after visibility is changed. */
1491 if (VAR_P (decl)
1492 && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))
1493 && DECL_SECTION_NAME (decl) != NULL
1494 && DECL_INITIAL (decl) == NULL_TREE
1495 && DECL_COMMON (decl))
1496 DECL_COMMON (decl) = 0;
1497
1498 /* Variables can't be both common and weak. */
1499 if (VAR_P (decl) && DECL_WEAK (decl))
1500 DECL_COMMON (decl) = 0;
1501
1502 if (use_object_blocks_p () && use_blocks_for_decl_p (decl))
1503 x = create_block_symbol (name, get_block_for_decl (decl), -1);
1504 else
1505 {
1506 machine_mode address_mode = Pmode;
1507 if (TREE_TYPE (decl) != error_mark_node)
1508 {
1509 addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (decl));
1510 address_mode = targetm.addr_space.address_mode (as);
1511 }
1512 x = gen_rtx_SYMBOL_REF (address_mode, name);
1513 }
1514 SYMBOL_REF_WEAK (x) = DECL_WEAK (decl);
1515 SET_SYMBOL_REF_DECL (x, decl);
1516
1517 x = gen_rtx_MEM (DECL_MODE (decl), x);
1518 if (TREE_CODE (decl) != FUNCTION_DECL)
1519 set_mem_attributes (x, decl, 1);
1520 SET_DECL_RTL (decl, x);
1521
1522 /* Optionally set flags or add text to the name to record information
1523 such as that it is a function name.
1524 If the name is changed, the macro ASM_OUTPUT_LABELREF
1525 will have to know how to strip this information. */
1526 targetm.encode_section_info (decl, DECL_RTL (decl), true);
1527 }
1528
1529 /* Like make_decl_rtl, but inhibit creation of new alias sets when
1530 calling make_decl_rtl. Also, reset DECL_RTL before returning the
1531 rtl. */
1532
1533 rtx
1534 make_decl_rtl_for_debug (tree decl)
1535 {
1536 unsigned int save_aliasing_flag;
1537 rtx rtl;
1538
1539 if (DECL_RTL_SET_P (decl))
1540 return DECL_RTL (decl);
1541
1542 /* Kludge alert! Somewhere down the call chain, make_decl_rtl will
1543 call new_alias_set. If running with -fcompare-debug, sometimes
1544 we do not want to create alias sets that will throw the alias
1545 numbers off in the comparison dumps. So... clearing
1546 flag_strict_aliasing will keep new_alias_set() from creating a
1547 new set. */
1548 save_aliasing_flag = flag_strict_aliasing;
1549 flag_strict_aliasing = 0;
1550
1551 rtl = DECL_RTL (decl);
1552 /* Reset DECL_RTL back, as various parts of the compiler expects
1553 DECL_RTL set meaning it is actually going to be output. */
1554 SET_DECL_RTL (decl, NULL);
1555
1556 flag_strict_aliasing = save_aliasing_flag;
1557 return rtl;
1558 }
1559 \f
1560 /* Output a string of literal assembler code
1561 for an `asm' keyword used between functions. */
1562
1563 void
1564 assemble_asm (tree string)
1565 {
1566 const char *p;
1567 app_enable ();
1568
1569 if (TREE_CODE (string) == ADDR_EXPR)
1570 string = TREE_OPERAND (string, 0);
1571
1572 p = TREE_STRING_POINTER (string);
1573 fprintf (asm_out_file, "%s%s\n", p[0] == '\t' ? "" : "\t", p);
1574 }
1575
1576 /* Write the address of the entity given by SYMBOL to SEC. */
1577 void
1578 assemble_addr_to_section (rtx symbol, section *sec)
1579 {
1580 switch_to_section (sec);
1581 assemble_align (POINTER_SIZE);
1582 assemble_integer (symbol, POINTER_SIZE_UNITS, POINTER_SIZE, 1);
1583 }
1584
1585 /* Return the numbered .ctors.N (if CONSTRUCTOR_P) or .dtors.N (if
1586 not) section for PRIORITY. */
1587 section *
1588 get_cdtor_priority_section (int priority, bool constructor_p)
1589 {
1590 /* Buffer conservatively large enough for the full range of a 32-bit
1591 int plus the text below. */
1592 char buf[18];
1593
1594 /* ??? This only works reliably with the GNU linker. */
1595 sprintf (buf, "%s.%.5u",
1596 constructor_p ? ".ctors" : ".dtors",
1597 /* Invert the numbering so the linker puts us in the proper
1598 order; constructors are run from right to left, and the
1599 linker sorts in increasing order. */
1600 MAX_INIT_PRIORITY - priority);
1601 return get_section (buf, SECTION_WRITE, NULL);
1602 }
1603
1604 void
1605 default_named_section_asm_out_destructor (rtx symbol, int priority)
1606 {
1607 section *sec;
1608
1609 if (priority != DEFAULT_INIT_PRIORITY)
1610 sec = get_cdtor_priority_section (priority,
1611 /*constructor_p=*/false);
1612 else
1613 sec = get_section (".dtors", SECTION_WRITE, NULL);
1614
1615 assemble_addr_to_section (symbol, sec);
1616 }
1617
1618 #ifdef DTORS_SECTION_ASM_OP
1619 void
1620 default_dtor_section_asm_out_destructor (rtx symbol,
1621 int priority ATTRIBUTE_UNUSED)
1622 {
1623 assemble_addr_to_section (symbol, dtors_section);
1624 }
1625 #endif
1626
1627 void
1628 default_named_section_asm_out_constructor (rtx symbol, int priority)
1629 {
1630 section *sec;
1631
1632 if (priority != DEFAULT_INIT_PRIORITY)
1633 sec = get_cdtor_priority_section (priority,
1634 /*constructor_p=*/true);
1635 else
1636 sec = get_section (".ctors", SECTION_WRITE, NULL);
1637
1638 assemble_addr_to_section (symbol, sec);
1639 }
1640
1641 #ifdef CTORS_SECTION_ASM_OP
1642 void
1643 default_ctor_section_asm_out_constructor (rtx symbol,
1644 int priority ATTRIBUTE_UNUSED)
1645 {
1646 assemble_addr_to_section (symbol, ctors_section);
1647 }
1648 #endif
1649 \f
1650 /* CONSTANT_POOL_BEFORE_FUNCTION may be defined as an expression with
1651 a nonzero value if the constant pool should be output before the
1652 start of the function, or a zero value if the pool should output
1653 after the end of the function. The default is to put it before the
1654 start. */
1655
1656 #ifndef CONSTANT_POOL_BEFORE_FUNCTION
1657 #define CONSTANT_POOL_BEFORE_FUNCTION 1
1658 #endif
1659
1660 /* DECL is an object (either VAR_DECL or FUNCTION_DECL) which is going
1661 to be output to assembler.
1662 Set first_global_object_name and weak_global_object_name as appropriate. */
1663
1664 void
1665 notice_global_symbol (tree decl)
1666 {
1667 const char **t = &first_global_object_name;
1668
1669 if (first_global_object_name
1670 || !TREE_PUBLIC (decl)
1671 || DECL_EXTERNAL (decl)
1672 || !DECL_NAME (decl)
1673 || (VAR_P (decl) && DECL_HARD_REGISTER (decl))
1674 || (TREE_CODE (decl) != FUNCTION_DECL
1675 && (!VAR_P (decl)
1676 || (DECL_COMMON (decl)
1677 && (DECL_INITIAL (decl) == 0
1678 || DECL_INITIAL (decl) == error_mark_node)))))
1679 return;
1680
1681 /* We win when global object is found, but it is useful to know about weak
1682 symbol as well so we can produce nicer unique names. */
1683 if (DECL_WEAK (decl) || DECL_ONE_ONLY (decl) || flag_shlib)
1684 t = &weak_global_object_name;
1685
1686 if (!*t)
1687 {
1688 tree id = DECL_ASSEMBLER_NAME (decl);
1689 ultimate_transparent_alias_target (&id);
1690 *t = ggc_strdup (targetm.strip_name_encoding (IDENTIFIER_POINTER (id)));
1691 }
1692 }
1693
1694 /* If not using flag_reorder_blocks_and_partition, decide early whether the
1695 current function goes into the cold section, so that targets can use
1696 current_function_section during RTL expansion. DECL describes the
1697 function. */
1698
1699 void
1700 decide_function_section (tree decl)
1701 {
1702 first_function_block_is_cold = false;
1703
1704 if (DECL_SECTION_NAME (decl))
1705 {
1706 struct cgraph_node *node = cgraph_node::get (current_function_decl);
1707 /* Calls to function_section rely on first_function_block_is_cold
1708 being accurate. */
1709 first_function_block_is_cold = (node
1710 && node->frequency
1711 == NODE_FREQUENCY_UNLIKELY_EXECUTED);
1712 }
1713
1714 in_cold_section_p = first_function_block_is_cold;
1715 }
1716
1717 /* Get the function's name, as described by its RTL. This may be
1718 different from the DECL_NAME name used in the source file. */
1719 const char *
1720 get_fnname_from_decl (tree decl)
1721 {
1722 rtx x = DECL_RTL (decl);
1723 gcc_assert (MEM_P (x));
1724 x = XEXP (x, 0);
1725 gcc_assert (GET_CODE (x) == SYMBOL_REF);
1726 return XSTR (x, 0);
1727 }
1728
1729 /* Output assembler code for the constant pool of a function and associated
1730 with defining the name of the function. DECL describes the function.
1731 NAME is the function's name. For the constant pool, we use the current
1732 constant pool data. */
1733
1734 void
1735 assemble_start_function (tree decl, const char *fnname)
1736 {
1737 int align;
1738 char tmp_label[100];
1739 bool hot_label_written = false;
1740
1741 if (crtl->has_bb_partition)
1742 {
1743 ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LHOTB", const_labelno);
1744 crtl->subsections.hot_section_label = ggc_strdup (tmp_label);
1745 ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LCOLDB", const_labelno);
1746 crtl->subsections.cold_section_label = ggc_strdup (tmp_label);
1747 ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LHOTE", const_labelno);
1748 crtl->subsections.hot_section_end_label = ggc_strdup (tmp_label);
1749 ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LCOLDE", const_labelno);
1750 crtl->subsections.cold_section_end_label = ggc_strdup (tmp_label);
1751 const_labelno++;
1752 cold_function_name = NULL_TREE;
1753 }
1754 else
1755 {
1756 crtl->subsections.hot_section_label = NULL;
1757 crtl->subsections.cold_section_label = NULL;
1758 crtl->subsections.hot_section_end_label = NULL;
1759 crtl->subsections.cold_section_end_label = NULL;
1760 }
1761
1762 /* The following code does not need preprocessing in the assembler. */
1763
1764 app_disable ();
1765
1766 if (CONSTANT_POOL_BEFORE_FUNCTION)
1767 output_constant_pool (fnname, decl);
1768
1769 align = symtab_node::get (decl)->definition_alignment ();
1770
1771 /* Make sure the not and cold text (code) sections are properly
1772 aligned. This is necessary here in the case where the function
1773 has both hot and cold sections, because we don't want to re-set
1774 the alignment when the section switch happens mid-function. */
1775
1776 if (crtl->has_bb_partition)
1777 {
1778 first_function_block_is_cold = false;
1779
1780 switch_to_section (unlikely_text_section ());
1781 assemble_align (align);
1782 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.cold_section_label);
1783
1784 /* When the function starts with a cold section, we need to explicitly
1785 align the hot section and write out the hot section label.
1786 But if the current function is a thunk, we do not have a CFG. */
1787 if (!cfun->is_thunk
1788 && BB_PARTITION (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb) == BB_COLD_PARTITION)
1789 {
1790 switch_to_section (text_section);
1791 assemble_align (align);
1792 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.hot_section_label);
1793 hot_label_written = true;
1794 first_function_block_is_cold = true;
1795 }
1796 in_cold_section_p = first_function_block_is_cold;
1797 }
1798
1799
1800 /* Switch to the correct text section for the start of the function. */
1801
1802 switch_to_section (function_section (decl));
1803 if (crtl->has_bb_partition && !hot_label_written)
1804 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.hot_section_label);
1805
1806 /* Tell assembler to move to target machine's alignment for functions. */
1807 align = floor_log2 (align / BITS_PER_UNIT);
1808 if (align > 0)
1809 {
1810 ASM_OUTPUT_ALIGN (asm_out_file, align);
1811 }
1812
1813 /* Handle a user-specified function alignment.
1814 Note that we still need to align to DECL_ALIGN, as above,
1815 because ASM_OUTPUT_MAX_SKIP_ALIGN might not do any alignment at all. */
1816 if (! DECL_USER_ALIGN (decl)
1817 && align_functions.levels[0].log > align
1818 && optimize_function_for_speed_p (cfun))
1819 {
1820 #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
1821 int align_log = align_functions.levels[0].log;
1822 #endif
1823 int max_skip = align_functions.levels[0].maxskip;
1824 if (flag_limit_function_alignment && crtl->max_insn_address > 0
1825 && max_skip >= crtl->max_insn_address)
1826 max_skip = crtl->max_insn_address - 1;
1827
1828 #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
1829 ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file, align_log, max_skip);
1830 if (max_skip == align_functions.levels[0].maxskip)
1831 ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file,
1832 align_functions.levels[1].log,
1833 align_functions.levels[1].maxskip);
1834 #else
1835 ASM_OUTPUT_ALIGN (asm_out_file, align_functions.levels[0].log);
1836 #endif
1837 }
1838
1839 #ifdef ASM_OUTPUT_FUNCTION_PREFIX
1840 ASM_OUTPUT_FUNCTION_PREFIX (asm_out_file, fnname);
1841 #endif
1842
1843 if (!DECL_IGNORED_P (decl))
1844 (*debug_hooks->begin_function) (decl);
1845
1846 /* Make function name accessible from other files, if appropriate. */
1847
1848 if (TREE_PUBLIC (decl))
1849 {
1850 notice_global_symbol (decl);
1851
1852 globalize_decl (decl);
1853
1854 maybe_assemble_visibility (decl);
1855 }
1856
1857 if (DECL_PRESERVE_P (decl))
1858 targetm.asm_out.mark_decl_preserved (fnname);
1859
1860 unsigned HOST_WIDE_INT patch_area_size = function_entry_patch_area_size;
1861 unsigned HOST_WIDE_INT patch_area_entry = function_entry_patch_area_start;
1862
1863 tree patchable_function_entry_attr
1864 = lookup_attribute ("patchable_function_entry", DECL_ATTRIBUTES (decl));
1865 if (patchable_function_entry_attr)
1866 {
1867 tree pp_val = TREE_VALUE (patchable_function_entry_attr);
1868 tree patchable_function_entry_value1 = TREE_VALUE (pp_val);
1869
1870 patch_area_size = tree_to_uhwi (patchable_function_entry_value1);
1871 patch_area_entry = 0;
1872 if (TREE_CHAIN (pp_val) != NULL_TREE)
1873 {
1874 tree patchable_function_entry_value2
1875 = TREE_VALUE (TREE_CHAIN (pp_val));
1876 patch_area_entry = tree_to_uhwi (patchable_function_entry_value2);
1877 }
1878 }
1879
1880 if (patch_area_entry > patch_area_size)
1881 {
1882 if (patch_area_size > 0)
1883 warning (OPT_Wattributes,
1884 "patchable function entry %wu exceeds size %wu",
1885 patch_area_entry, patch_area_size);
1886 patch_area_entry = 0;
1887 }
1888
1889 /* Emit the patching area before the entry label, if any. */
1890 if (patch_area_entry > 0)
1891 targetm.asm_out.print_patchable_function_entry (asm_out_file,
1892 patch_area_entry, true);
1893
1894 /* Do any machine/system dependent processing of the function name. */
1895 #ifdef ASM_DECLARE_FUNCTION_NAME
1896 ASM_DECLARE_FUNCTION_NAME (asm_out_file, fnname, current_function_decl);
1897 #else
1898 /* Standard thing is just output label for the function. */
1899 ASM_OUTPUT_FUNCTION_LABEL (asm_out_file, fnname, current_function_decl);
1900 #endif /* ASM_DECLARE_FUNCTION_NAME */
1901
1902 /* And the area after the label. Record it if we haven't done so yet. */
1903 if (patch_area_size > patch_area_entry)
1904 targetm.asm_out.print_patchable_function_entry (asm_out_file,
1905 patch_area_size
1906 - patch_area_entry,
1907 patch_area_entry == 0);
1908
1909 if (lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (decl)))
1910 saw_no_split_stack = true;
1911 }
1912
1913 /* Output assembler code associated with defining the size of the
1914 function. DECL describes the function. NAME is the function's name. */
1915
1916 void
1917 assemble_end_function (tree decl, const char *fnname ATTRIBUTE_UNUSED)
1918 {
1919 #ifdef ASM_DECLARE_FUNCTION_SIZE
1920 /* We could have switched section in the middle of the function. */
1921 if (crtl->has_bb_partition)
1922 switch_to_section (function_section (decl));
1923 ASM_DECLARE_FUNCTION_SIZE (asm_out_file, fnname, decl);
1924 #endif
1925 if (! CONSTANT_POOL_BEFORE_FUNCTION)
1926 {
1927 output_constant_pool (fnname, decl);
1928 switch_to_section (function_section (decl)); /* need to switch back */
1929 }
1930 /* Output labels for end of hot/cold text sections (to be used by
1931 debug info.) */
1932 if (crtl->has_bb_partition)
1933 {
1934 section *save_text_section;
1935
1936 save_text_section = in_section;
1937 switch_to_section (unlikely_text_section ());
1938 #ifdef ASM_DECLARE_COLD_FUNCTION_SIZE
1939 if (cold_function_name != NULL_TREE)
1940 ASM_DECLARE_COLD_FUNCTION_SIZE (asm_out_file,
1941 IDENTIFIER_POINTER (cold_function_name),
1942 decl);
1943 #endif
1944 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.cold_section_end_label);
1945 if (first_function_block_is_cold)
1946 switch_to_section (text_section);
1947 else
1948 switch_to_section (function_section (decl));
1949 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.hot_section_end_label);
1950 switch_to_section (save_text_section);
1951 }
1952 }
1953 \f
1954 /* Assemble code to leave SIZE bytes of zeros. */
1955
1956 void
1957 assemble_zeros (unsigned HOST_WIDE_INT size)
1958 {
1959 /* Do no output if -fsyntax-only. */
1960 if (flag_syntax_only)
1961 return;
1962
1963 #ifdef ASM_NO_SKIP_IN_TEXT
1964 /* The `space' pseudo in the text section outputs nop insns rather than 0s,
1965 so we must output 0s explicitly in the text section. */
1966 if (ASM_NO_SKIP_IN_TEXT && (in_section->common.flags & SECTION_CODE) != 0)
1967 {
1968 unsigned HOST_WIDE_INT i;
1969 for (i = 0; i < size; i++)
1970 assemble_integer (const0_rtx, 1, BITS_PER_UNIT, 1);
1971 }
1972 else
1973 #endif
1974 if (size > 0)
1975 ASM_OUTPUT_SKIP (asm_out_file, size);
1976 }
1977
1978 /* Assemble an alignment pseudo op for an ALIGN-bit boundary. */
1979
1980 void
1981 assemble_align (unsigned int align)
1982 {
1983 if (align > BITS_PER_UNIT)
1984 {
1985 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
1986 }
1987 }
1988
1989 /* Assemble a string constant with the specified C string as contents. */
1990
1991 void
1992 assemble_string (const char *p, int size)
1993 {
1994 int pos = 0;
1995 int maximum = 2000;
1996
1997 /* If the string is very long, split it up. */
1998
1999 while (pos < size)
2000 {
2001 int thissize = size - pos;
2002 if (thissize > maximum)
2003 thissize = maximum;
2004
2005 ASM_OUTPUT_ASCII (asm_out_file, p, thissize);
2006
2007 pos += thissize;
2008 p += thissize;
2009 }
2010 }
2011
2012 \f
2013 /* A noswitch_section_callback for lcomm_section. */
2014
2015 static bool
2016 emit_local (tree decl ATTRIBUTE_UNUSED,
2017 const char *name ATTRIBUTE_UNUSED,
2018 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
2019 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
2020 {
2021 #if defined ASM_OUTPUT_ALIGNED_DECL_LOCAL
2022 unsigned int align = symtab_node::get (decl)->definition_alignment ();
2023 ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, decl, name,
2024 size, align);
2025 return true;
2026 #elif defined ASM_OUTPUT_ALIGNED_LOCAL
2027 unsigned int align = symtab_node::get (decl)->definition_alignment ();
2028 ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, align);
2029 return true;
2030 #else
2031 ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
2032 return false;
2033 #endif
2034 }
2035
2036 /* A noswitch_section_callback for bss_noswitch_section. */
2037
2038 #if defined ASM_OUTPUT_ALIGNED_BSS
2039 static bool
2040 emit_bss (tree decl ATTRIBUTE_UNUSED,
2041 const char *name ATTRIBUTE_UNUSED,
2042 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
2043 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
2044 {
2045 ASM_OUTPUT_ALIGNED_BSS (asm_out_file, decl, name, size,
2046 get_variable_align (decl));
2047 return true;
2048 }
2049 #endif
2050
2051 /* A noswitch_section_callback for comm_section. */
2052
2053 static bool
2054 emit_common (tree decl ATTRIBUTE_UNUSED,
2055 const char *name ATTRIBUTE_UNUSED,
2056 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
2057 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
2058 {
2059 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
2060 ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, decl, name,
2061 size, get_variable_align (decl));
2062 return true;
2063 #elif defined ASM_OUTPUT_ALIGNED_COMMON
2064 ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, name, size,
2065 get_variable_align (decl));
2066 return true;
2067 #else
2068 ASM_OUTPUT_COMMON (asm_out_file, name, size, rounded);
2069 return false;
2070 #endif
2071 }
2072
2073 /* A noswitch_section_callback for tls_comm_section. */
2074
2075 static bool
2076 emit_tls_common (tree decl ATTRIBUTE_UNUSED,
2077 const char *name ATTRIBUTE_UNUSED,
2078 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
2079 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
2080 {
2081 #ifdef ASM_OUTPUT_TLS_COMMON
2082 ASM_OUTPUT_TLS_COMMON (asm_out_file, decl, name, size);
2083 return true;
2084 #else
2085 sorry ("thread-local COMMON data not implemented");
2086 return true;
2087 #endif
2088 }
2089
2090 /* Assemble DECL given that it belongs in SECTION_NOSWITCH section SECT.
2091 NAME is the name of DECL's SYMBOL_REF. */
2092
2093 static void
2094 assemble_noswitch_variable (tree decl, const char *name, section *sect,
2095 unsigned int align)
2096 {
2097 unsigned HOST_WIDE_INT size, rounded;
2098
2099 size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
2100 rounded = size;
2101
2102 if ((flag_sanitize & SANITIZE_ADDRESS) && asan_protect_global (decl))
2103 size += asan_red_zone_size (size);
2104
2105 /* Don't allocate zero bytes of common,
2106 since that means "undefined external" in the linker. */
2107 if (size == 0)
2108 rounded = 1;
2109
2110 /* Round size up to multiple of BIGGEST_ALIGNMENT bits
2111 so that each uninitialized object starts on such a boundary. */
2112 rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1;
2113 rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
2114 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
2115
2116 if (!sect->noswitch.callback (decl, name, size, rounded)
2117 && (unsigned HOST_WIDE_INT) (align / BITS_PER_UNIT) > rounded)
2118 error ("requested alignment for %q+D is greater than "
2119 "implemented alignment of %wu", decl, rounded);
2120 }
2121
2122 /* A subroutine of assemble_variable. Output the label and contents of
2123 DECL, whose address is a SYMBOL_REF with name NAME. DONT_OUTPUT_DATA
2124 is as for assemble_variable. */
2125
2126 static void
2127 assemble_variable_contents (tree decl, const char *name,
2128 bool dont_output_data, bool merge_strings)
2129 {
2130 /* Do any machine/system dependent processing of the object. */
2131 #ifdef ASM_DECLARE_OBJECT_NAME
2132 last_assemble_variable_decl = decl;
2133 ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl);
2134 #else
2135 /* Standard thing is just output label for the object. */
2136 ASM_OUTPUT_LABEL (asm_out_file, name);
2137 #endif /* ASM_DECLARE_OBJECT_NAME */
2138
2139 if (!dont_output_data)
2140 {
2141 /* Caller is supposed to use varpool_get_constructor when it wants
2142 to output the body. */
2143 gcc_assert (!in_lto_p || DECL_INITIAL (decl) != error_mark_node);
2144 if (DECL_INITIAL (decl)
2145 && DECL_INITIAL (decl) != error_mark_node
2146 && !initializer_zerop (DECL_INITIAL (decl)))
2147 /* Output the actual data. */
2148 output_constant (DECL_INITIAL (decl),
2149 tree_to_uhwi (DECL_SIZE_UNIT (decl)),
2150 get_variable_align (decl),
2151 false, merge_strings);
2152 else
2153 /* Leave space for it. */
2154 assemble_zeros (tree_to_uhwi (DECL_SIZE_UNIT (decl)));
2155 targetm.asm_out.decl_end ();
2156 }
2157 }
2158
2159 /* Write out assembly for the variable DECL, which is not defined in
2160 the current translation unit. */
2161 void
2162 assemble_undefined_decl (tree decl)
2163 {
2164 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
2165 targetm.asm_out.assemble_undefined_decl (asm_out_file, name, decl);
2166 }
2167
2168 /* Assemble everything that is needed for a variable or function declaration.
2169 Not used for automatic variables, and not used for function definitions.
2170 Should not be called for variables of incomplete structure type.
2171
2172 TOP_LEVEL is nonzero if this variable has file scope.
2173 AT_END is nonzero if this is the special handling, at end of compilation,
2174 to define things that have had only tentative definitions.
2175 DONT_OUTPUT_DATA if nonzero means don't actually output the
2176 initial value (that will be done by the caller). */
2177
2178 void
2179 assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED,
2180 int at_end ATTRIBUTE_UNUSED, int dont_output_data)
2181 {
2182 const char *name;
2183 rtx decl_rtl, symbol;
2184 section *sect;
2185 unsigned int align;
2186 bool asan_protected = false;
2187
2188 /* This function is supposed to handle VARIABLES. Ensure we have one. */
2189 gcc_assert (VAR_P (decl));
2190
2191 /* Emulated TLS had better not get this far. */
2192 gcc_checking_assert (targetm.have_tls || !DECL_THREAD_LOCAL_P (decl));
2193
2194 last_assemble_variable_decl = 0;
2195
2196 /* Normally no need to say anything here for external references,
2197 since assemble_external is called by the language-specific code
2198 when a declaration is first seen. */
2199
2200 if (DECL_EXTERNAL (decl))
2201 return;
2202
2203 /* Do nothing for global register variables. */
2204 if (DECL_RTL_SET_P (decl) && REG_P (DECL_RTL (decl)))
2205 {
2206 TREE_ASM_WRITTEN (decl) = 1;
2207 return;
2208 }
2209
2210 /* If type was incomplete when the variable was declared,
2211 see if it is complete now. */
2212
2213 if (DECL_SIZE (decl) == 0)
2214 layout_decl (decl, 0);
2215
2216 /* Still incomplete => don't allocate it; treat the tentative defn
2217 (which is what it must have been) as an `extern' reference. */
2218
2219 if (!dont_output_data && DECL_SIZE (decl) == 0)
2220 {
2221 error ("storage size of %q+D isn%'t known", decl);
2222 TREE_ASM_WRITTEN (decl) = 1;
2223 return;
2224 }
2225
2226 /* The first declaration of a variable that comes through this function
2227 decides whether it is global (in C, has external linkage)
2228 or local (in C, has internal linkage). So do nothing more
2229 if this function has already run. */
2230
2231 if (TREE_ASM_WRITTEN (decl))
2232 return;
2233
2234 /* Make sure targetm.encode_section_info is invoked before we set
2235 ASM_WRITTEN. */
2236 decl_rtl = DECL_RTL (decl);
2237
2238 TREE_ASM_WRITTEN (decl) = 1;
2239
2240 /* Do no output if -fsyntax-only. */
2241 if (flag_syntax_only)
2242 return;
2243
2244 if (! dont_output_data
2245 && ! valid_constant_size_p (DECL_SIZE_UNIT (decl)))
2246 {
2247 error ("size of variable %q+D is too large", decl);
2248 return;
2249 }
2250
2251 gcc_assert (MEM_P (decl_rtl));
2252 gcc_assert (GET_CODE (XEXP (decl_rtl, 0)) == SYMBOL_REF);
2253 symbol = XEXP (decl_rtl, 0);
2254
2255 /* If this symbol belongs to the tree constant pool, output the constant
2256 if it hasn't already been written. */
2257 if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
2258 {
2259 tree decl = SYMBOL_REF_DECL (symbol);
2260 if (!TREE_ASM_WRITTEN (DECL_INITIAL (decl)))
2261 output_constant_def_contents (symbol);
2262 return;
2263 }
2264
2265 app_disable ();
2266
2267 name = XSTR (symbol, 0);
2268 if (TREE_PUBLIC (decl) && DECL_NAME (decl))
2269 notice_global_symbol (decl);
2270
2271 /* Compute the alignment of this data. */
2272
2273 align_variable (decl, dont_output_data);
2274
2275 if ((flag_sanitize & SANITIZE_ADDRESS)
2276 && asan_protect_global (decl))
2277 {
2278 asan_protected = true;
2279 SET_DECL_ALIGN (decl, MAX (DECL_ALIGN (decl),
2280 ASAN_RED_ZONE_SIZE * BITS_PER_UNIT));
2281 }
2282
2283 set_mem_align (decl_rtl, DECL_ALIGN (decl));
2284
2285 align = get_variable_align (decl);
2286
2287 if (TREE_PUBLIC (decl))
2288 maybe_assemble_visibility (decl);
2289
2290 if (DECL_PRESERVE_P (decl))
2291 targetm.asm_out.mark_decl_preserved (name);
2292
2293 /* First make the assembler name(s) global if appropriate. */
2294 sect = get_variable_section (decl, false);
2295 if (TREE_PUBLIC (decl)
2296 && (sect->common.flags & SECTION_COMMON) == 0)
2297 globalize_decl (decl);
2298
2299 /* Output any data that we will need to use the address of. */
2300 if (DECL_INITIAL (decl) && DECL_INITIAL (decl) != error_mark_node)
2301 output_addressed_constants (DECL_INITIAL (decl));
2302
2303 /* dbxout.c needs to know this. */
2304 if (sect && (sect->common.flags & SECTION_CODE) != 0)
2305 DECL_IN_TEXT_SECTION (decl) = 1;
2306
2307 /* If the decl is part of an object_block, make sure that the decl
2308 has been positioned within its block, but do not write out its
2309 definition yet. output_object_blocks will do that later. */
2310 if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol) && SYMBOL_REF_BLOCK (symbol))
2311 {
2312 gcc_assert (!dont_output_data);
2313 place_block_symbol (symbol);
2314 }
2315 else if (SECTION_STYLE (sect) == SECTION_NOSWITCH)
2316 assemble_noswitch_variable (decl, name, sect, align);
2317 else
2318 {
2319 /* Special-case handling of vtv comdat sections. */
2320 if (sect->named.name
2321 && (strcmp (sect->named.name, ".vtable_map_vars") == 0))
2322 handle_vtv_comdat_section (sect, decl);
2323 else
2324 switch_to_section (sect);
2325 if (align > BITS_PER_UNIT)
2326 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
2327 assemble_variable_contents (decl, name, dont_output_data,
2328 (sect->common.flags & SECTION_MERGE)
2329 && (sect->common.flags & SECTION_STRINGS));
2330 if (asan_protected)
2331 {
2332 unsigned HOST_WIDE_INT int size
2333 = tree_to_uhwi (DECL_SIZE_UNIT (decl));
2334 assemble_zeros (asan_red_zone_size (size));
2335 }
2336 }
2337 }
2338
2339
2340 /* Given a function declaration (FN_DECL), this function assembles the
2341 function into the .preinit_array section. */
2342
2343 void
2344 assemble_vtv_preinit_initializer (tree fn_decl)
2345 {
2346 section *sect;
2347 unsigned flags = SECTION_WRITE;
2348 rtx symbol = XEXP (DECL_RTL (fn_decl), 0);
2349
2350 flags |= SECTION_NOTYPE;
2351 sect = get_section (".preinit_array", flags, fn_decl);
2352 switch_to_section (sect);
2353 assemble_addr_to_section (symbol, sect);
2354 }
2355
2356 /* Return 1 if type TYPE contains any pointers. */
2357
2358 static int
2359 contains_pointers_p (tree type)
2360 {
2361 switch (TREE_CODE (type))
2362 {
2363 case POINTER_TYPE:
2364 case REFERENCE_TYPE:
2365 /* I'm not sure whether OFFSET_TYPE needs this treatment,
2366 so I'll play safe and return 1. */
2367 case OFFSET_TYPE:
2368 return 1;
2369
2370 case RECORD_TYPE:
2371 case UNION_TYPE:
2372 case QUAL_UNION_TYPE:
2373 {
2374 tree fields;
2375 /* For a type that has fields, see if the fields have pointers. */
2376 for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
2377 if (TREE_CODE (fields) == FIELD_DECL
2378 && contains_pointers_p (TREE_TYPE (fields)))
2379 return 1;
2380 return 0;
2381 }
2382
2383 case ARRAY_TYPE:
2384 /* An array type contains pointers if its element type does. */
2385 return contains_pointers_p (TREE_TYPE (type));
2386
2387 default:
2388 return 0;
2389 }
2390 }
2391
2392 /* We delay assemble_external processing until
2393 the compilation unit is finalized. This is the best we can do for
2394 right now (i.e. stage 3 of GCC 4.0) - the right thing is to delay
2395 it all the way to final. See PR 17982 for further discussion. */
2396 static GTY(()) tree pending_assemble_externals;
2397
2398 #ifdef ASM_OUTPUT_EXTERNAL
2399 /* Some targets delay some output to final using TARGET_ASM_FILE_END.
2400 As a result, assemble_external can be called after the list of externals
2401 is processed and the pointer set destroyed. */
2402 static bool pending_assemble_externals_processed;
2403
2404 /* Avoid O(external_decls**2) lookups in the pending_assemble_externals
2405 TREE_LIST in assemble_external. */
2406 static hash_set<tree> *pending_assemble_externals_set;
2407
2408 /* True if DECL is a function decl for which no out-of-line copy exists.
2409 It is assumed that DECL's assembler name has been set. */
2410
2411 static bool
2412 incorporeal_function_p (tree decl)
2413 {
2414 if (TREE_CODE (decl) == FUNCTION_DECL && fndecl_built_in_p (decl))
2415 {
2416 const char *name;
2417
2418 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
2419 && ALLOCA_FUNCTION_CODE_P (DECL_FUNCTION_CODE (decl)))
2420 return true;
2421
2422 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
2423 /* Atomic or sync builtins which have survived this far will be
2424 resolved externally and therefore are not incorporeal. */
2425 if (strncmp (name, "__builtin_", 10) == 0)
2426 return true;
2427 }
2428 return false;
2429 }
2430
2431 /* Actually do the tests to determine if this is necessary, and invoke
2432 ASM_OUTPUT_EXTERNAL. */
2433 static void
2434 assemble_external_real (tree decl)
2435 {
2436 rtx rtl = DECL_RTL (decl);
2437
2438 if (MEM_P (rtl) && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF
2439 && !SYMBOL_REF_USED (XEXP (rtl, 0))
2440 && !incorporeal_function_p (decl))
2441 {
2442 /* Some systems do require some output. */
2443 SYMBOL_REF_USED (XEXP (rtl, 0)) = 1;
2444 ASM_OUTPUT_EXTERNAL (asm_out_file, decl, XSTR (XEXP (rtl, 0), 0));
2445 }
2446 }
2447 #endif
2448
2449 void
2450 process_pending_assemble_externals (void)
2451 {
2452 #ifdef ASM_OUTPUT_EXTERNAL
2453 tree list;
2454 for (list = pending_assemble_externals; list; list = TREE_CHAIN (list))
2455 assemble_external_real (TREE_VALUE (list));
2456
2457 pending_assemble_externals = 0;
2458 pending_assemble_externals_processed = true;
2459 delete pending_assemble_externals_set;
2460 #endif
2461 }
2462
2463 /* This TREE_LIST contains any weak symbol declarations waiting
2464 to be emitted. */
2465 static GTY(()) tree weak_decls;
2466
2467 /* Output something to declare an external symbol to the assembler,
2468 and qualifiers such as weakness. (Most assemblers don't need
2469 extern declaration, so we normally output nothing.) Do nothing if
2470 DECL is not external. */
2471
2472 void
2473 assemble_external (tree decl ATTRIBUTE_UNUSED)
2474 {
2475 /* Make sure that the ASM_OUT_FILE is open.
2476 If it's not, we should not be calling this function. */
2477 gcc_assert (asm_out_file);
2478
2479 /* In a perfect world, the following condition would be true.
2480 Sadly, the Go front end emit assembly *from the front end*,
2481 bypassing the call graph. See PR52739. Fix before GCC 4.8. */
2482 #if 0
2483 /* This function should only be called if we are expanding, or have
2484 expanded, to RTL.
2485 Ideally, only final.c would be calling this function, but it is
2486 not clear whether that would break things somehow. See PR 17982
2487 for further discussion. */
2488 gcc_assert (state == EXPANSION
2489 || state == FINISHED);
2490 #endif
2491
2492 if (!DECL_P (decl) || !DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl))
2493 return;
2494
2495 /* We want to output annotation for weak and external symbols at
2496 very last to check if they are references or not. */
2497
2498 if (TARGET_SUPPORTS_WEAK
2499 && DECL_WEAK (decl)
2500 /* TREE_STATIC is a weird and abused creature which is not
2501 generally the right test for whether an entity has been
2502 locally emitted, inlined or otherwise not-really-extern, but
2503 for declarations that can be weak, it happens to be
2504 match. */
2505 && !TREE_STATIC (decl)
2506 && lookup_attribute ("weak", DECL_ATTRIBUTES (decl))
2507 && value_member (decl, weak_decls) == NULL_TREE)
2508 weak_decls = tree_cons (NULL, decl, weak_decls);
2509
2510 #ifdef ASM_OUTPUT_EXTERNAL
2511 if (pending_assemble_externals_processed)
2512 {
2513 assemble_external_real (decl);
2514 return;
2515 }
2516
2517 if (! pending_assemble_externals_set->add (decl))
2518 pending_assemble_externals = tree_cons (NULL, decl,
2519 pending_assemble_externals);
2520 #endif
2521 }
2522
2523 /* Similar, for calling a library function FUN. */
2524
2525 void
2526 assemble_external_libcall (rtx fun)
2527 {
2528 /* Declare library function name external when first used, if nec. */
2529 if (! SYMBOL_REF_USED (fun))
2530 {
2531 SYMBOL_REF_USED (fun) = 1;
2532 targetm.asm_out.external_libcall (fun);
2533 }
2534 }
2535
2536 /* Assemble a label named NAME. */
2537
2538 void
2539 assemble_label (FILE *file, const char *name)
2540 {
2541 ASM_OUTPUT_LABEL (file, name);
2542 }
2543
2544 /* Set the symbol_referenced flag for ID. */
2545 void
2546 mark_referenced (tree id)
2547 {
2548 TREE_SYMBOL_REFERENCED (id) = 1;
2549 }
2550
2551 /* Set the symbol_referenced flag for DECL and notify callgraph. */
2552 void
2553 mark_decl_referenced (tree decl)
2554 {
2555 if (TREE_CODE (decl) == FUNCTION_DECL)
2556 {
2557 /* Extern inline functions don't become needed when referenced.
2558 If we know a method will be emitted in other TU and no new
2559 functions can be marked reachable, just use the external
2560 definition. */
2561 struct cgraph_node *node = cgraph_node::get_create (decl);
2562 if (!DECL_EXTERNAL (decl)
2563 && !node->definition)
2564 node->mark_force_output ();
2565 }
2566 else if (VAR_P (decl))
2567 {
2568 varpool_node *node = varpool_node::get_create (decl);
2569 /* C++ frontend use mark_decl_references to force COMDAT variables
2570 to be output that might appear dead otherwise. */
2571 node->force_output = true;
2572 }
2573 /* else do nothing - we can get various sorts of CST nodes here,
2574 which do not need to be marked. */
2575 }
2576
2577
2578 /* Output to FILE (an assembly file) a reference to NAME. If NAME
2579 starts with a *, the rest of NAME is output verbatim. Otherwise
2580 NAME is transformed in a target-specific way (usually by the
2581 addition of an underscore). */
2582
2583 void
2584 assemble_name_raw (FILE *file, const char *name)
2585 {
2586 if (name[0] == '*')
2587 fputs (&name[1], file);
2588 else
2589 ASM_OUTPUT_LABELREF (file, name);
2590 }
2591
2592 /* Like assemble_name_raw, but should be used when NAME might refer to
2593 an entity that is also represented as a tree (like a function or
2594 variable). If NAME does refer to such an entity, that entity will
2595 be marked as referenced. */
2596
2597 void
2598 assemble_name (FILE *file, const char *name)
2599 {
2600 const char *real_name;
2601 tree id;
2602
2603 real_name = targetm.strip_name_encoding (name);
2604
2605 id = maybe_get_identifier (real_name);
2606 if (id)
2607 {
2608 tree id_orig = id;
2609
2610 mark_referenced (id);
2611 ultimate_transparent_alias_target (&id);
2612 if (id != id_orig)
2613 name = IDENTIFIER_POINTER (id);
2614 gcc_assert (! TREE_CHAIN (id));
2615 }
2616
2617 assemble_name_raw (file, name);
2618 }
2619
2620 /* Allocate SIZE bytes writable static space with a gensym name
2621 and return an RTX to refer to its address. */
2622
2623 rtx
2624 assemble_static_space (unsigned HOST_WIDE_INT size)
2625 {
2626 char name[17];
2627 const char *namestring;
2628 rtx x;
2629
2630 ASM_GENERATE_INTERNAL_LABEL (name, "LF", const_labelno);
2631 ++const_labelno;
2632 namestring = ggc_strdup (name);
2633
2634 x = gen_rtx_SYMBOL_REF (Pmode, namestring);
2635 SYMBOL_REF_FLAGS (x) = SYMBOL_FLAG_LOCAL;
2636
2637 #ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
2638 ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, NULL_TREE, name, size,
2639 BIGGEST_ALIGNMENT);
2640 #else
2641 #ifdef ASM_OUTPUT_ALIGNED_LOCAL
2642 ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, BIGGEST_ALIGNMENT);
2643 #else
2644 {
2645 /* Round size up to multiple of BIGGEST_ALIGNMENT bits
2646 so that each uninitialized object starts on such a boundary. */
2647 /* Variable `rounded' might or might not be used in ASM_OUTPUT_LOCAL. */
2648 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED
2649 = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1)
2650 / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
2651 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
2652 ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
2653 }
2654 #endif
2655 #endif
2656 return x;
2657 }
2658
2659 /* Assemble the static constant template for function entry trampolines.
2660 This is done at most once per compilation.
2661 Returns an RTX for the address of the template. */
2662
2663 static GTY(()) rtx initial_trampoline;
2664
2665 rtx
2666 assemble_trampoline_template (void)
2667 {
2668 char label[256];
2669 const char *name;
2670 int align;
2671 rtx symbol;
2672
2673 gcc_assert (targetm.asm_out.trampoline_template != NULL);
2674
2675 if (initial_trampoline)
2676 return initial_trampoline;
2677
2678 /* By default, put trampoline templates in read-only data section. */
2679
2680 #ifdef TRAMPOLINE_SECTION
2681 switch_to_section (TRAMPOLINE_SECTION);
2682 #else
2683 switch_to_section (readonly_data_section);
2684 #endif
2685
2686 /* Write the assembler code to define one. */
2687 align = floor_log2 (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT);
2688 if (align > 0)
2689 ASM_OUTPUT_ALIGN (asm_out_file, align);
2690
2691 targetm.asm_out.internal_label (asm_out_file, "LTRAMP", 0);
2692 targetm.asm_out.trampoline_template (asm_out_file);
2693
2694 /* Record the rtl to refer to it. */
2695 ASM_GENERATE_INTERNAL_LABEL (label, "LTRAMP", 0);
2696 name = ggc_strdup (label);
2697 symbol = gen_rtx_SYMBOL_REF (Pmode, name);
2698 SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2699
2700 initial_trampoline = gen_const_mem (BLKmode, symbol);
2701 set_mem_align (initial_trampoline, TRAMPOLINE_ALIGNMENT);
2702 set_mem_size (initial_trampoline, TRAMPOLINE_SIZE);
2703
2704 return initial_trampoline;
2705 }
2706 \f
2707 /* A and B are either alignments or offsets. Return the minimum alignment
2708 that may be assumed after adding the two together. */
2709
2710 static inline unsigned
2711 min_align (unsigned int a, unsigned int b)
2712 {
2713 return least_bit_hwi (a | b);
2714 }
2715
2716 /* Return the assembler directive for creating a given kind of integer
2717 object. SIZE is the number of bytes in the object and ALIGNED_P
2718 indicates whether it is known to be aligned. Return NULL if the
2719 assembly dialect has no such directive.
2720
2721 The returned string should be printed at the start of a new line and
2722 be followed immediately by the object's initial value. */
2723
2724 const char *
2725 integer_asm_op (int size, int aligned_p)
2726 {
2727 struct asm_int_op *ops;
2728
2729 if (aligned_p)
2730 ops = &targetm.asm_out.aligned_op;
2731 else
2732 ops = &targetm.asm_out.unaligned_op;
2733
2734 switch (size)
2735 {
2736 case 1:
2737 return targetm.asm_out.byte_op;
2738 case 2:
2739 return ops->hi;
2740 case 3:
2741 return ops->psi;
2742 case 4:
2743 return ops->si;
2744 case 5:
2745 case 6:
2746 case 7:
2747 return ops->pdi;
2748 case 8:
2749 return ops->di;
2750 case 9:
2751 case 10:
2752 case 11:
2753 case 12:
2754 case 13:
2755 case 14:
2756 case 15:
2757 return ops->pti;
2758 case 16:
2759 return ops->ti;
2760 default:
2761 return NULL;
2762 }
2763 }
2764
2765 /* Use directive OP to assemble an integer object X. Print OP at the
2766 start of the line, followed immediately by the value of X. */
2767
2768 void
2769 assemble_integer_with_op (const char *op, rtx x)
2770 {
2771 fputs (op, asm_out_file);
2772 output_addr_const (asm_out_file, x);
2773 fputc ('\n', asm_out_file);
2774 }
2775
2776 /* The default implementation of the asm_out.integer target hook. */
2777
2778 bool
2779 default_assemble_integer (rtx x ATTRIBUTE_UNUSED,
2780 unsigned int size ATTRIBUTE_UNUSED,
2781 int aligned_p ATTRIBUTE_UNUSED)
2782 {
2783 const char *op = integer_asm_op (size, aligned_p);
2784 /* Avoid GAS bugs for large values. Specifically negative values whose
2785 absolute value fits in a bfd_vma, but not in a bfd_signed_vma. */
2786 if (size > UNITS_PER_WORD && size > POINTER_SIZE_UNITS)
2787 return false;
2788 return op && (assemble_integer_with_op (op, x), true);
2789 }
2790
2791 /* Assemble the integer constant X into an object of SIZE bytes. ALIGN is
2792 the alignment of the integer in bits. Return 1 if we were able to output
2793 the constant, otherwise 0. We must be able to output the constant,
2794 if FORCE is nonzero. */
2795
2796 bool
2797 assemble_integer (rtx x, unsigned int size, unsigned int align, int force)
2798 {
2799 int aligned_p;
2800
2801 aligned_p = (align >= MIN (size * BITS_PER_UNIT, BIGGEST_ALIGNMENT));
2802
2803 /* See if the target hook can handle this kind of object. */
2804 if (targetm.asm_out.integer (x, size, aligned_p))
2805 return true;
2806
2807 /* If the object is a multi-byte one, try splitting it up. Split
2808 it into words it if is multi-word, otherwise split it into bytes. */
2809 if (size > 1)
2810 {
2811 machine_mode omode, imode;
2812 unsigned int subalign;
2813 unsigned int subsize, i;
2814 enum mode_class mclass;
2815
2816 subsize = size > UNITS_PER_WORD? UNITS_PER_WORD : 1;
2817 subalign = MIN (align, subsize * BITS_PER_UNIT);
2818 if (GET_CODE (x) == CONST_FIXED)
2819 mclass = GET_MODE_CLASS (GET_MODE (x));
2820 else
2821 mclass = MODE_INT;
2822
2823 omode = mode_for_size (subsize * BITS_PER_UNIT, mclass, 0).require ();
2824 imode = mode_for_size (size * BITS_PER_UNIT, mclass, 0).require ();
2825
2826 for (i = 0; i < size; i += subsize)
2827 {
2828 rtx partial = simplify_subreg (omode, x, imode, i);
2829 if (!partial || !assemble_integer (partial, subsize, subalign, 0))
2830 break;
2831 }
2832 if (i == size)
2833 return true;
2834
2835 /* If we've printed some of it, but not all of it, there's no going
2836 back now. */
2837 gcc_assert (!i);
2838 }
2839
2840 gcc_assert (!force);
2841
2842 return false;
2843 }
2844 \f
2845 /* Assemble the floating-point constant D into an object of size MODE. ALIGN
2846 is the alignment of the constant in bits. If REVERSE is true, D is output
2847 in reverse storage order. */
2848
2849 void
2850 assemble_real (REAL_VALUE_TYPE d, scalar_float_mode mode, unsigned int align,
2851 bool reverse)
2852 {
2853 long data[4] = {0, 0, 0, 0};
2854 int bitsize, nelts, nunits, units_per;
2855 rtx elt;
2856
2857 /* This is hairy. We have a quantity of known size. real_to_target
2858 will put it into an array of *host* longs, 32 bits per element
2859 (even if long is more than 32 bits). We need to determine the
2860 number of array elements that are occupied (nelts) and the number
2861 of *target* min-addressable units that will be occupied in the
2862 object file (nunits). We cannot assume that 32 divides the
2863 mode's bitsize (size * BITS_PER_UNIT) evenly.
2864
2865 size * BITS_PER_UNIT is used here to make sure that padding bits
2866 (which might appear at either end of the value; real_to_target
2867 will include the padding bits in its output array) are included. */
2868
2869 nunits = GET_MODE_SIZE (mode);
2870 bitsize = nunits * BITS_PER_UNIT;
2871 nelts = CEIL (bitsize, 32);
2872 units_per = 32 / BITS_PER_UNIT;
2873
2874 real_to_target (data, &d, mode);
2875
2876 /* Put out the first word with the specified alignment. */
2877 unsigned int chunk_nunits = MIN (nunits, units_per);
2878 if (reverse)
2879 elt = flip_storage_order (SImode, gen_int_mode (data[nelts - 1], SImode));
2880 else
2881 elt = GEN_INT (sext_hwi (data[0], chunk_nunits * BITS_PER_UNIT));
2882 assemble_integer (elt, chunk_nunits, align, 1);
2883 nunits -= chunk_nunits;
2884
2885 /* Subsequent words need only 32-bit alignment. */
2886 align = min_align (align, 32);
2887
2888 for (int i = 1; i < nelts; i++)
2889 {
2890 chunk_nunits = MIN (nunits, units_per);
2891 if (reverse)
2892 elt = flip_storage_order (SImode,
2893 gen_int_mode (data[nelts - 1 - i], SImode));
2894 else
2895 elt = GEN_INT (sext_hwi (data[i], chunk_nunits * BITS_PER_UNIT));
2896 assemble_integer (elt, chunk_nunits, align, 1);
2897 nunits -= chunk_nunits;
2898 }
2899 }
2900 \f
2901 /* Given an expression EXP with a constant value,
2902 reduce it to the sum of an assembler symbol and an integer.
2903 Store them both in the structure *VALUE.
2904 EXP must be reducible. */
2905
2906 class addr_const {
2907 public:
2908 rtx base;
2909 poly_int64 offset;
2910 };
2911
2912 static void
2913 decode_addr_const (tree exp, class addr_const *value)
2914 {
2915 tree target = TREE_OPERAND (exp, 0);
2916 poly_int64 offset = 0;
2917 rtx x;
2918
2919 while (1)
2920 {
2921 poly_int64 bytepos;
2922 if (TREE_CODE (target) == COMPONENT_REF
2923 && poly_int_tree_p (byte_position (TREE_OPERAND (target, 1)),
2924 &bytepos))
2925 {
2926 offset += bytepos;
2927 target = TREE_OPERAND (target, 0);
2928 }
2929 else if (TREE_CODE (target) == ARRAY_REF
2930 || TREE_CODE (target) == ARRAY_RANGE_REF)
2931 {
2932 /* Truncate big offset. */
2933 offset
2934 += (TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (target)))
2935 * wi::to_poly_widest (TREE_OPERAND (target, 1)).force_shwi ());
2936 target = TREE_OPERAND (target, 0);
2937 }
2938 else if (TREE_CODE (target) == MEM_REF
2939 && TREE_CODE (TREE_OPERAND (target, 0)) == ADDR_EXPR)
2940 {
2941 offset += mem_ref_offset (target).force_shwi ();
2942 target = TREE_OPERAND (TREE_OPERAND (target, 0), 0);
2943 }
2944 else if (TREE_CODE (target) == INDIRECT_REF
2945 && TREE_CODE (TREE_OPERAND (target, 0)) == NOP_EXPR
2946 && TREE_CODE (TREE_OPERAND (TREE_OPERAND (target, 0), 0))
2947 == ADDR_EXPR)
2948 target = TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (target, 0), 0), 0);
2949 else
2950 break;
2951 }
2952
2953 switch (TREE_CODE (target))
2954 {
2955 case VAR_DECL:
2956 case FUNCTION_DECL:
2957 x = DECL_RTL (target);
2958 break;
2959
2960 case LABEL_DECL:
2961 x = gen_rtx_MEM (FUNCTION_MODE,
2962 gen_rtx_LABEL_REF (Pmode, force_label_rtx (target)));
2963 break;
2964
2965 case REAL_CST:
2966 case FIXED_CST:
2967 case STRING_CST:
2968 case COMPLEX_CST:
2969 case CONSTRUCTOR:
2970 case INTEGER_CST:
2971 x = lookup_constant_def (target);
2972 /* Should have been added by output_addressed_constants. */
2973 gcc_assert (x);
2974 break;
2975
2976 case INDIRECT_REF:
2977 /* This deals with absolute addresses. */
2978 offset += tree_to_shwi (TREE_OPERAND (target, 0));
2979 x = gen_rtx_MEM (QImode,
2980 gen_rtx_SYMBOL_REF (Pmode, "origin of addresses"));
2981 break;
2982
2983 case COMPOUND_LITERAL_EXPR:
2984 gcc_assert (COMPOUND_LITERAL_EXPR_DECL (target));
2985 x = DECL_RTL (COMPOUND_LITERAL_EXPR_DECL (target));
2986 break;
2987
2988 default:
2989 gcc_unreachable ();
2990 }
2991
2992 gcc_assert (MEM_P (x));
2993 x = XEXP (x, 0);
2994
2995 value->base = x;
2996 value->offset = offset;
2997 }
2998 \f
2999 static GTY(()) hash_table<tree_descriptor_hasher> *const_desc_htab;
3000
3001 static void maybe_output_constant_def_contents (struct constant_descriptor_tree *, int);
3002
3003 /* Constant pool accessor function. */
3004
3005 hash_table<tree_descriptor_hasher> *
3006 constant_pool_htab (void)
3007 {
3008 return const_desc_htab;
3009 }
3010
3011 /* Compute a hash code for a constant expression. */
3012
3013 hashval_t
3014 tree_descriptor_hasher::hash (constant_descriptor_tree *ptr)
3015 {
3016 return ptr->hash;
3017 }
3018
3019 static hashval_t
3020 const_hash_1 (const tree exp)
3021 {
3022 const char *p;
3023 hashval_t hi;
3024 int len, i;
3025 enum tree_code code = TREE_CODE (exp);
3026
3027 /* Either set P and LEN to the address and len of something to hash and
3028 exit the switch or return a value. */
3029
3030 switch (code)
3031 {
3032 case INTEGER_CST:
3033 p = (char *) &TREE_INT_CST_ELT (exp, 0);
3034 len = TREE_INT_CST_NUNITS (exp) * sizeof (HOST_WIDE_INT);
3035 break;
3036
3037 case REAL_CST:
3038 return real_hash (TREE_REAL_CST_PTR (exp));
3039
3040 case FIXED_CST:
3041 return fixed_hash (TREE_FIXED_CST_PTR (exp));
3042
3043 case STRING_CST:
3044 p = TREE_STRING_POINTER (exp);
3045 len = TREE_STRING_LENGTH (exp);
3046 break;
3047
3048 case COMPLEX_CST:
3049 return (const_hash_1 (TREE_REALPART (exp)) * 5
3050 + const_hash_1 (TREE_IMAGPART (exp)));
3051
3052 case VECTOR_CST:
3053 {
3054 hi = 7 + VECTOR_CST_NPATTERNS (exp);
3055 hi = hi * 563 + VECTOR_CST_NELTS_PER_PATTERN (exp);
3056 unsigned int count = vector_cst_encoded_nelts (exp);
3057 for (unsigned int i = 0; i < count; ++i)
3058 hi = hi * 563 + const_hash_1 (VECTOR_CST_ENCODED_ELT (exp, i));
3059 return hi;
3060 }
3061
3062 case CONSTRUCTOR:
3063 {
3064 unsigned HOST_WIDE_INT idx;
3065 tree value;
3066
3067 hi = 5 + int_size_in_bytes (TREE_TYPE (exp));
3068
3069 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, value)
3070 if (value)
3071 hi = hi * 603 + const_hash_1 (value);
3072
3073 return hi;
3074 }
3075
3076 case ADDR_EXPR:
3077 if (CONSTANT_CLASS_P (TREE_OPERAND (exp, 0)))
3078 return const_hash_1 (TREE_OPERAND (exp, 0));
3079
3080 /* Fallthru. */
3081 case FDESC_EXPR:
3082 {
3083 class addr_const value;
3084
3085 decode_addr_const (exp, &value);
3086 switch (GET_CODE (value.base))
3087 {
3088 case SYMBOL_REF:
3089 /* Don't hash the address of the SYMBOL_REF;
3090 only use the offset and the symbol name. */
3091 hi = value.offset.coeffs[0];
3092 p = XSTR (value.base, 0);
3093 for (i = 0; p[i] != 0; i++)
3094 hi = ((hi * 613) + (unsigned) (p[i]));
3095 break;
3096
3097 case LABEL_REF:
3098 hi = (value.offset.coeffs[0]
3099 + CODE_LABEL_NUMBER (label_ref_label (value.base)) * 13);
3100 break;
3101
3102 default:
3103 gcc_unreachable ();
3104 }
3105 }
3106 return hi;
3107
3108 case PLUS_EXPR:
3109 case POINTER_PLUS_EXPR:
3110 case MINUS_EXPR:
3111 return (const_hash_1 (TREE_OPERAND (exp, 0)) * 9
3112 + const_hash_1 (TREE_OPERAND (exp, 1)));
3113
3114 CASE_CONVERT:
3115 return const_hash_1 (TREE_OPERAND (exp, 0)) * 7 + 2;
3116
3117 default:
3118 /* A language specific constant. Just hash the code. */
3119 return code;
3120 }
3121
3122 /* Compute hashing function. */
3123 hi = len;
3124 for (i = 0; i < len; i++)
3125 hi = ((hi * 613) + (unsigned) (p[i]));
3126
3127 return hi;
3128 }
3129
3130 /* Wrapper of compare_constant, for the htab interface. */
3131 bool
3132 tree_descriptor_hasher::equal (constant_descriptor_tree *c1,
3133 constant_descriptor_tree *c2)
3134 {
3135 if (c1->hash != c2->hash)
3136 return 0;
3137 return compare_constant (c1->value, c2->value);
3138 }
3139
3140 /* Compare t1 and t2, and return 1 only if they are known to result in
3141 the same bit pattern on output. */
3142
3143 static int
3144 compare_constant (const tree t1, const tree t2)
3145 {
3146 enum tree_code typecode;
3147
3148 if (t1 == NULL_TREE)
3149 return t2 == NULL_TREE;
3150 if (t2 == NULL_TREE)
3151 return 0;
3152
3153 if (TREE_CODE (t1) != TREE_CODE (t2))
3154 return 0;
3155
3156 switch (TREE_CODE (t1))
3157 {
3158 case INTEGER_CST:
3159 /* Integer constants are the same only if the same width of type. */
3160 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
3161 return 0;
3162 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
3163 return 0;
3164 return tree_int_cst_equal (t1, t2);
3165
3166 case REAL_CST:
3167 /* Real constants are the same only if the same width of type. In
3168 addition to the same width, we need to check whether the modes are the
3169 same. There might be two floating point modes that are the same size
3170 but have different representations, such as the PowerPC that has 2
3171 different 128-bit floating point types (IBM extended double and IEEE
3172 128-bit floating point). */
3173 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
3174 return 0;
3175 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
3176 return 0;
3177 return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
3178
3179 case FIXED_CST:
3180 /* Fixed constants are the same only if the same width of type. */
3181 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
3182 return 0;
3183
3184 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
3185
3186 case STRING_CST:
3187 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
3188 || int_size_in_bytes (TREE_TYPE (t1))
3189 != int_size_in_bytes (TREE_TYPE (t2)))
3190 return 0;
3191
3192 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3193 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3194 TREE_STRING_LENGTH (t1)));
3195
3196 case COMPLEX_CST:
3197 return (compare_constant (TREE_REALPART (t1), TREE_REALPART (t2))
3198 && compare_constant (TREE_IMAGPART (t1), TREE_IMAGPART (t2)));
3199
3200 case VECTOR_CST:
3201 {
3202 if (VECTOR_CST_NPATTERNS (t1)
3203 != VECTOR_CST_NPATTERNS (t2))
3204 return 0;
3205
3206 if (VECTOR_CST_NELTS_PER_PATTERN (t1)
3207 != VECTOR_CST_NELTS_PER_PATTERN (t2))
3208 return 0;
3209
3210 unsigned int count = vector_cst_encoded_nelts (t1);
3211 for (unsigned int i = 0; i < count; ++i)
3212 if (!compare_constant (VECTOR_CST_ENCODED_ELT (t1, i),
3213 VECTOR_CST_ENCODED_ELT (t2, i)))
3214 return 0;
3215
3216 return 1;
3217 }
3218
3219 case CONSTRUCTOR:
3220 {
3221 vec<constructor_elt, va_gc> *v1, *v2;
3222 unsigned HOST_WIDE_INT idx;
3223
3224 typecode = TREE_CODE (TREE_TYPE (t1));
3225 if (typecode != TREE_CODE (TREE_TYPE (t2)))
3226 return 0;
3227
3228 if (typecode == ARRAY_TYPE)
3229 {
3230 HOST_WIDE_INT size_1 = int_size_in_bytes (TREE_TYPE (t1));
3231 /* For arrays, check that mode, size and storage order match. */
3232 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
3233 || size_1 == -1
3234 || size_1 != int_size_in_bytes (TREE_TYPE (t2))
3235 || TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (t1))
3236 != TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (t2)))
3237 return 0;
3238 }
3239 else
3240 {
3241 /* For record and union constructors, require exact type
3242 equality. */
3243 if (TREE_TYPE (t1) != TREE_TYPE (t2))
3244 return 0;
3245 }
3246
3247 v1 = CONSTRUCTOR_ELTS (t1);
3248 v2 = CONSTRUCTOR_ELTS (t2);
3249 if (vec_safe_length (v1) != vec_safe_length (v2))
3250 return 0;
3251
3252 for (idx = 0; idx < vec_safe_length (v1); ++idx)
3253 {
3254 constructor_elt *c1 = &(*v1)[idx];
3255 constructor_elt *c2 = &(*v2)[idx];
3256
3257 /* Check that each value is the same... */
3258 if (!compare_constant (c1->value, c2->value))
3259 return 0;
3260 /* ... and that they apply to the same fields! */
3261 if (typecode == ARRAY_TYPE)
3262 {
3263 if (!compare_constant (c1->index, c2->index))
3264 return 0;
3265 }
3266 else
3267 {
3268 if (c1->index != c2->index)
3269 return 0;
3270 }
3271 }
3272
3273 return 1;
3274 }
3275
3276 case ADDR_EXPR:
3277 case FDESC_EXPR:
3278 {
3279 class addr_const value1, value2;
3280 enum rtx_code code;
3281 int ret;
3282
3283 decode_addr_const (t1, &value1);
3284 decode_addr_const (t2, &value2);
3285
3286 if (maybe_ne (value1.offset, value2.offset))
3287 return 0;
3288
3289 code = GET_CODE (value1.base);
3290 if (code != GET_CODE (value2.base))
3291 return 0;
3292
3293 switch (code)
3294 {
3295 case SYMBOL_REF:
3296 ret = (strcmp (XSTR (value1.base, 0), XSTR (value2.base, 0)) == 0);
3297 break;
3298
3299 case LABEL_REF:
3300 ret = (CODE_LABEL_NUMBER (label_ref_label (value1.base))
3301 == CODE_LABEL_NUMBER (label_ref_label (value2.base)));
3302 break;
3303
3304 default:
3305 gcc_unreachable ();
3306 }
3307 return ret;
3308 }
3309
3310 case PLUS_EXPR:
3311 case POINTER_PLUS_EXPR:
3312 case MINUS_EXPR:
3313 case RANGE_EXPR:
3314 return (compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
3315 && compare_constant (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
3316
3317 CASE_CONVERT:
3318 case VIEW_CONVERT_EXPR:
3319 return compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3320
3321 default:
3322 return 0;
3323 }
3324
3325 gcc_unreachable ();
3326 }
3327 \f
3328 /* Return the section into which constant EXP should be placed. */
3329
3330 static section *
3331 get_constant_section (tree exp, unsigned int align)
3332 {
3333 return targetm.asm_out.select_section (exp,
3334 compute_reloc_for_constant (exp),
3335 align);
3336 }
3337
3338 /* Return the size of constant EXP in bytes. */
3339
3340 static HOST_WIDE_INT
3341 get_constant_size (tree exp)
3342 {
3343 HOST_WIDE_INT size;
3344
3345 size = int_size_in_bytes (TREE_TYPE (exp));
3346 gcc_checking_assert (size >= 0);
3347 gcc_checking_assert (TREE_CODE (exp) != STRING_CST
3348 || size >= TREE_STRING_LENGTH (exp));
3349 return size;
3350 }
3351
3352 /* Subroutine of output_constant_def:
3353 No constant equal to EXP is known to have been output.
3354 Make a constant descriptor to enter EXP in the hash table.
3355 Assign the label number and construct RTL to refer to the
3356 constant's location in memory.
3357 Caller is responsible for updating the hash table. */
3358
3359 static struct constant_descriptor_tree *
3360 build_constant_desc (tree exp)
3361 {
3362 struct constant_descriptor_tree *desc;
3363 rtx symbol, rtl;
3364 char label[256];
3365 int labelno;
3366 tree decl;
3367
3368 desc = ggc_alloc<constant_descriptor_tree> ();
3369 desc->value = exp;
3370
3371 /* Create a string containing the label name, in LABEL. */
3372 labelno = const_labelno++;
3373 ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno);
3374
3375 /* Construct the VAR_DECL associated with the constant. */
3376 decl = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (label),
3377 TREE_TYPE (exp));
3378 DECL_ARTIFICIAL (decl) = 1;
3379 DECL_IGNORED_P (decl) = 1;
3380 TREE_READONLY (decl) = 1;
3381 TREE_STATIC (decl) = 1;
3382 TREE_ADDRESSABLE (decl) = 1;
3383 /* We don't set the RTL yet as this would cause varpool to assume that the
3384 variable is referenced. Moreover, it would just be dropped in LTO mode.
3385 Instead we set the flag that will be recognized in make_decl_rtl. */
3386 DECL_IN_CONSTANT_POOL (decl) = 1;
3387 DECL_INITIAL (decl) = desc->value;
3388 /* ??? targetm.constant_alignment hasn't been updated for vector types on
3389 most architectures so use DATA_ALIGNMENT as well, except for strings. */
3390 if (TREE_CODE (exp) == STRING_CST)
3391 SET_DECL_ALIGN (decl, targetm.constant_alignment (exp, DECL_ALIGN (decl)));
3392 else
3393 {
3394 align_variable (decl, 0);
3395 if (DECL_ALIGN (decl) < GET_MODE_ALIGNMENT (DECL_MODE (decl))
3396 && ((optab_handler (movmisalign_optab, DECL_MODE (decl))
3397 != CODE_FOR_nothing)
3398 || targetm.slow_unaligned_access (DECL_MODE (decl),
3399 DECL_ALIGN (decl))))
3400 SET_DECL_ALIGN (decl, GET_MODE_ALIGNMENT (DECL_MODE (decl)));
3401 }
3402
3403 /* Now construct the SYMBOL_REF and the MEM. */
3404 if (use_object_blocks_p ())
3405 {
3406 int align = (TREE_CODE (decl) == CONST_DECL
3407 || (VAR_P (decl) && DECL_IN_CONSTANT_POOL (decl))
3408 ? DECL_ALIGN (decl)
3409 : symtab_node::get (decl)->definition_alignment ());
3410 section *sect = get_constant_section (exp, align);
3411 symbol = create_block_symbol (ggc_strdup (label),
3412 get_block_for_section (sect), -1);
3413 }
3414 else
3415 symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
3416 SYMBOL_REF_FLAGS (symbol) |= SYMBOL_FLAG_LOCAL;
3417 SET_SYMBOL_REF_DECL (symbol, decl);
3418 TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1;
3419
3420 rtl = gen_const_mem (TYPE_MODE (TREE_TYPE (exp)), symbol);
3421 set_mem_attributes (rtl, exp, 1);
3422 set_mem_alias_set (rtl, 0);
3423
3424 /* Putting EXP into the literal pool might have imposed a different
3425 alignment which should be visible in the RTX as well. */
3426 set_mem_align (rtl, DECL_ALIGN (decl));
3427
3428 /* We cannot share RTX'es in pool entries.
3429 Mark this piece of RTL as required for unsharing. */
3430 RTX_FLAG (rtl, used) = 1;
3431
3432 /* Set flags or add text to the name to record information, such as
3433 that it is a local symbol. If the name is changed, the macro
3434 ASM_OUTPUT_LABELREF will have to know how to strip this
3435 information. This call might invalidate our local variable
3436 SYMBOL; we can't use it afterward. */
3437 targetm.encode_section_info (exp, rtl, true);
3438
3439 desc->rtl = rtl;
3440
3441 return desc;
3442 }
3443
3444 /* Subroutine of output_constant_def and tree_output_constant_def:
3445 Add a constant to the hash table that tracks which constants
3446 already have labels. */
3447
3448 static constant_descriptor_tree *
3449 add_constant_to_table (tree exp)
3450 {
3451 /* The hash table methods may call output_constant_def for addressed
3452 constants, so handle them first. */
3453 output_addressed_constants (exp);
3454
3455 /* Sanity check to catch recursive insertion. */
3456 static bool inserting;
3457 gcc_assert (!inserting);
3458 inserting = true;
3459
3460 /* Look up EXP in the table of constant descriptors. If we didn't
3461 find it, create a new one. */
3462 struct constant_descriptor_tree key;
3463 key.value = exp;
3464 key.hash = const_hash_1 (exp);
3465 constant_descriptor_tree **loc
3466 = const_desc_htab->find_slot_with_hash (&key, key.hash, INSERT);
3467
3468 inserting = false;
3469
3470 struct constant_descriptor_tree *desc = *loc;
3471 if (!desc)
3472 {
3473 desc = build_constant_desc (exp);
3474 desc->hash = key.hash;
3475 *loc = desc;
3476 }
3477
3478 return desc;
3479 }
3480
3481 /* Return an rtx representing a reference to constant data in memory
3482 for the constant expression EXP.
3483
3484 If assembler code for such a constant has already been output,
3485 return an rtx to refer to it.
3486 Otherwise, output such a constant in memory
3487 and generate an rtx for it.
3488
3489 If DEFER is nonzero, this constant can be deferred and output only
3490 if referenced in the function after all optimizations.
3491
3492 `const_desc_table' records which constants already have label strings. */
3493
3494 rtx
3495 output_constant_def (tree exp, int defer)
3496 {
3497 struct constant_descriptor_tree *desc = add_constant_to_table (exp);
3498 maybe_output_constant_def_contents (desc, defer);
3499 return desc->rtl;
3500 }
3501
3502 /* Subroutine of output_constant_def: Decide whether or not we need to
3503 output the constant DESC now, and if so, do it. */
3504 static void
3505 maybe_output_constant_def_contents (struct constant_descriptor_tree *desc,
3506 int defer)
3507 {
3508 rtx symbol = XEXP (desc->rtl, 0);
3509 tree exp = desc->value;
3510
3511 if (flag_syntax_only)
3512 return;
3513
3514 if (TREE_ASM_WRITTEN (exp))
3515 /* Already output; don't do it again. */
3516 return;
3517
3518 /* We can always defer constants as long as the context allows
3519 doing so. */
3520 if (defer)
3521 {
3522 /* Increment n_deferred_constants if it exists. It needs to be at
3523 least as large as the number of constants actually referred to
3524 by the function. If it's too small we'll stop looking too early
3525 and fail to emit constants; if it's too large we'll only look
3526 through the entire function when we could have stopped earlier. */
3527 if (cfun)
3528 n_deferred_constants++;
3529 return;
3530 }
3531
3532 output_constant_def_contents (symbol);
3533 }
3534
3535 /* Subroutine of output_constant_def_contents. Output the definition
3536 of constant EXP, which is pointed to by label LABEL. ALIGN is the
3537 constant's alignment in bits. */
3538
3539 static void
3540 assemble_constant_contents (tree exp, const char *label, unsigned int align,
3541 bool merge_strings)
3542 {
3543 HOST_WIDE_INT size;
3544
3545 size = get_constant_size (exp);
3546
3547 /* Do any machine/system dependent processing of the constant. */
3548 targetm.asm_out.declare_constant_name (asm_out_file, label, exp, size);
3549
3550 /* Output the value of EXP. */
3551 output_constant (exp, size, align, false, merge_strings);
3552
3553 targetm.asm_out.decl_end ();
3554 }
3555
3556 /* We must output the constant data referred to by SYMBOL; do so. */
3557
3558 static void
3559 output_constant_def_contents (rtx symbol)
3560 {
3561 tree decl = SYMBOL_REF_DECL (symbol);
3562 tree exp = DECL_INITIAL (decl);
3563 bool asan_protected = false;
3564
3565 /* Make sure any other constants whose addresses appear in EXP
3566 are assigned label numbers. */
3567 output_addressed_constants (exp);
3568
3569 /* We are no longer deferring this constant. */
3570 TREE_ASM_WRITTEN (decl) = TREE_ASM_WRITTEN (exp) = 1;
3571
3572 if ((flag_sanitize & SANITIZE_ADDRESS)
3573 && TREE_CODE (exp) == STRING_CST
3574 && asan_protect_global (exp))
3575 {
3576 asan_protected = true;
3577 SET_DECL_ALIGN (decl, MAX (DECL_ALIGN (decl),
3578 ASAN_RED_ZONE_SIZE * BITS_PER_UNIT));
3579 }
3580
3581 /* If the constant is part of an object block, make sure that the
3582 decl has been positioned within its block, but do not write out
3583 its definition yet. output_object_blocks will do that later. */
3584 if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol) && SYMBOL_REF_BLOCK (symbol))
3585 place_block_symbol (symbol);
3586 else
3587 {
3588 int align = (TREE_CODE (decl) == CONST_DECL
3589 || (VAR_P (decl) && DECL_IN_CONSTANT_POOL (decl))
3590 ? DECL_ALIGN (decl)
3591 : symtab_node::get (decl)->definition_alignment ());
3592 section *sect = get_constant_section (exp, align);
3593 switch_to_section (sect);
3594 if (align > BITS_PER_UNIT)
3595 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
3596 assemble_constant_contents (exp, XSTR (symbol, 0), align,
3597 (sect->common.flags & SECTION_MERGE)
3598 && (sect->common.flags & SECTION_STRINGS));
3599 if (asan_protected)
3600 {
3601 HOST_WIDE_INT size = get_constant_size (exp);
3602 assemble_zeros (asan_red_zone_size (size));
3603 }
3604 }
3605 }
3606
3607 /* Look up EXP in the table of constant descriptors. Return the rtl
3608 if it has been emitted, else null. */
3609
3610 rtx
3611 lookup_constant_def (tree exp)
3612 {
3613 struct constant_descriptor_tree key;
3614
3615 key.value = exp;
3616 key.hash = const_hash_1 (exp);
3617 constant_descriptor_tree *desc
3618 = const_desc_htab->find_with_hash (&key, key.hash);
3619
3620 return (desc ? desc->rtl : NULL_RTX);
3621 }
3622
3623 /* Return a tree representing a reference to constant data in memory
3624 for the constant expression EXP.
3625
3626 This is the counterpart of output_constant_def at the Tree level. */
3627
3628 tree
3629 tree_output_constant_def (tree exp)
3630 {
3631 struct constant_descriptor_tree *desc = add_constant_to_table (exp);
3632 tree decl = SYMBOL_REF_DECL (XEXP (desc->rtl, 0));
3633 varpool_node::finalize_decl (decl);
3634 return decl;
3635 }
3636 \f
3637 class GTY((chain_next ("%h.next"), for_user)) constant_descriptor_rtx {
3638 public:
3639 class constant_descriptor_rtx *next;
3640 rtx mem;
3641 rtx sym;
3642 rtx constant;
3643 HOST_WIDE_INT offset;
3644 hashval_t hash;
3645 fixed_size_mode mode;
3646 unsigned int align;
3647 int labelno;
3648 int mark;
3649 };
3650
3651 struct const_rtx_desc_hasher : ggc_ptr_hash<constant_descriptor_rtx>
3652 {
3653 static hashval_t hash (constant_descriptor_rtx *);
3654 static bool equal (constant_descriptor_rtx *, constant_descriptor_rtx *);
3655 };
3656
3657 /* Used in the hash tables to avoid outputting the same constant
3658 twice. Unlike 'struct constant_descriptor_tree', RTX constants
3659 are output once per function, not once per file. */
3660 /* ??? Only a few targets need per-function constant pools. Most
3661 can use one per-file pool. Should add a targetm bit to tell the
3662 difference. */
3663
3664 struct GTY(()) rtx_constant_pool {
3665 /* Pointers to first and last constant in pool, as ordered by offset. */
3666 class constant_descriptor_rtx *first;
3667 class constant_descriptor_rtx *last;
3668
3669 /* Hash facility for making memory-constants from constant rtl-expressions.
3670 It is used on RISC machines where immediate integer arguments and
3671 constant addresses are restricted so that such constants must be stored
3672 in memory. */
3673 hash_table<const_rtx_desc_hasher> *const_rtx_htab;
3674
3675 /* Current offset in constant pool (does not include any
3676 machine-specific header). */
3677 HOST_WIDE_INT offset;
3678 };
3679
3680 /* Hash and compare functions for const_rtx_htab. */
3681
3682 hashval_t
3683 const_rtx_desc_hasher::hash (constant_descriptor_rtx *desc)
3684 {
3685 return desc->hash;
3686 }
3687
3688 bool
3689 const_rtx_desc_hasher::equal (constant_descriptor_rtx *x,
3690 constant_descriptor_rtx *y)
3691 {
3692 if (x->mode != y->mode)
3693 return 0;
3694 return rtx_equal_p (x->constant, y->constant);
3695 }
3696
3697 /* Hash one component of a constant. */
3698
3699 static hashval_t
3700 const_rtx_hash_1 (const_rtx x)
3701 {
3702 unsigned HOST_WIDE_INT hwi;
3703 machine_mode mode;
3704 enum rtx_code code;
3705 hashval_t h;
3706 int i;
3707
3708 code = GET_CODE (x);
3709 mode = GET_MODE (x);
3710 h = (hashval_t) code * 1048573 + mode;
3711
3712 switch (code)
3713 {
3714 case CONST_INT:
3715 hwi = INTVAL (x);
3716
3717 fold_hwi:
3718 {
3719 int shift = sizeof (hashval_t) * CHAR_BIT;
3720 const int n = sizeof (HOST_WIDE_INT) / sizeof (hashval_t);
3721
3722 h ^= (hashval_t) hwi;
3723 for (i = 1; i < n; ++i)
3724 {
3725 hwi >>= shift;
3726 h ^= (hashval_t) hwi;
3727 }
3728 }
3729 break;
3730
3731 case CONST_WIDE_INT:
3732 hwi = 0;
3733 {
3734 for (i = 0; i < CONST_WIDE_INT_NUNITS (x); i++)
3735 hwi ^= CONST_WIDE_INT_ELT (x, i);
3736 goto fold_hwi;
3737 }
3738
3739 case CONST_DOUBLE:
3740 if (TARGET_SUPPORTS_WIDE_INT == 0 && mode == VOIDmode)
3741 {
3742 hwi = CONST_DOUBLE_LOW (x) ^ CONST_DOUBLE_HIGH (x);
3743 goto fold_hwi;
3744 }
3745 else
3746 h ^= real_hash (CONST_DOUBLE_REAL_VALUE (x));
3747 break;
3748
3749 case CONST_FIXED:
3750 h ^= fixed_hash (CONST_FIXED_VALUE (x));
3751 break;
3752
3753 case SYMBOL_REF:
3754 h ^= htab_hash_string (XSTR (x, 0));
3755 break;
3756
3757 case LABEL_REF:
3758 h = h * 251 + CODE_LABEL_NUMBER (label_ref_label (x));
3759 break;
3760
3761 case UNSPEC:
3762 case UNSPEC_VOLATILE:
3763 h = h * 251 + XINT (x, 1);
3764 break;
3765
3766 default:
3767 break;
3768 }
3769
3770 return h;
3771 }
3772
3773 /* Compute a hash value for X, which should be a constant. */
3774
3775 static hashval_t
3776 const_rtx_hash (rtx x)
3777 {
3778 hashval_t h = 0;
3779 subrtx_iterator::array_type array;
3780 FOR_EACH_SUBRTX (iter, array, x, ALL)
3781 h = h * 509 + const_rtx_hash_1 (*iter);
3782 return h;
3783 }
3784
3785 \f
3786 /* Create and return a new rtx constant pool. */
3787
3788 static struct rtx_constant_pool *
3789 create_constant_pool (void)
3790 {
3791 struct rtx_constant_pool *pool;
3792
3793 pool = ggc_alloc<rtx_constant_pool> ();
3794 pool->const_rtx_htab = hash_table<const_rtx_desc_hasher>::create_ggc (31);
3795 pool->first = NULL;
3796 pool->last = NULL;
3797 pool->offset = 0;
3798 return pool;
3799 }
3800
3801 /* Initialize constant pool hashing for a new function. */
3802
3803 void
3804 init_varasm_status (void)
3805 {
3806 crtl->varasm.pool = create_constant_pool ();
3807 crtl->varasm.deferred_constants = 0;
3808 }
3809 \f
3810 /* Given a MINUS expression, simplify it if both sides
3811 include the same symbol. */
3812
3813 rtx
3814 simplify_subtraction (rtx x)
3815 {
3816 rtx r = simplify_rtx (x);
3817 return r ? r : x;
3818 }
3819 \f
3820 /* Given a constant rtx X, make (or find) a memory constant for its value
3821 and return a MEM rtx to refer to it in memory. IN_MODE is the mode
3822 of X. */
3823
3824 rtx
3825 force_const_mem (machine_mode in_mode, rtx x)
3826 {
3827 class constant_descriptor_rtx *desc, tmp;
3828 struct rtx_constant_pool *pool;
3829 char label[256];
3830 rtx def, symbol;
3831 hashval_t hash;
3832 unsigned int align;
3833 constant_descriptor_rtx **slot;
3834 fixed_size_mode mode;
3835
3836 /* We can't force variable-sized objects to memory. */
3837 if (!is_a <fixed_size_mode> (in_mode, &mode))
3838 return NULL_RTX;
3839
3840 /* If we're not allowed to drop X into the constant pool, don't. */
3841 if (targetm.cannot_force_const_mem (mode, x))
3842 return NULL_RTX;
3843
3844 /* Record that this function has used a constant pool entry. */
3845 crtl->uses_const_pool = 1;
3846
3847 /* Decide which pool to use. */
3848 pool = (targetm.use_blocks_for_constant_p (mode, x)
3849 ? shared_constant_pool
3850 : crtl->varasm.pool);
3851
3852 /* Lookup the value in the hashtable. */
3853 tmp.constant = x;
3854 tmp.mode = mode;
3855 hash = const_rtx_hash (x);
3856 slot = pool->const_rtx_htab->find_slot_with_hash (&tmp, hash, INSERT);
3857 desc = *slot;
3858
3859 /* If the constant was already present, return its memory. */
3860 if (desc)
3861 return copy_rtx (desc->mem);
3862
3863 /* Otherwise, create a new descriptor. */
3864 desc = ggc_alloc<constant_descriptor_rtx> ();
3865 *slot = desc;
3866
3867 /* Align the location counter as required by EXP's data type. */
3868 machine_mode align_mode = (mode == VOIDmode ? word_mode : mode);
3869 align = targetm.static_rtx_alignment (align_mode);
3870
3871 pool->offset += (align / BITS_PER_UNIT) - 1;
3872 pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
3873
3874 desc->next = NULL;
3875 desc->constant = copy_rtx (tmp.constant);
3876 desc->offset = pool->offset;
3877 desc->hash = hash;
3878 desc->mode = mode;
3879 desc->align = align;
3880 desc->labelno = const_labelno;
3881 desc->mark = 0;
3882
3883 pool->offset += GET_MODE_SIZE (mode);
3884 if (pool->last)
3885 pool->last->next = desc;
3886 else
3887 pool->first = pool->last = desc;
3888 pool->last = desc;
3889
3890 /* Create a string containing the label name, in LABEL. */
3891 ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno);
3892 ++const_labelno;
3893
3894 /* Construct the SYMBOL_REF. Make sure to mark it as belonging to
3895 the constants pool. */
3896 if (use_object_blocks_p () && targetm.use_blocks_for_constant_p (mode, x))
3897 {
3898 section *sect = targetm.asm_out.select_rtx_section (mode, x, align);
3899 symbol = create_block_symbol (ggc_strdup (label),
3900 get_block_for_section (sect), -1);
3901 }
3902 else
3903 symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
3904 desc->sym = symbol;
3905 SYMBOL_REF_FLAGS (symbol) |= SYMBOL_FLAG_LOCAL;
3906 CONSTANT_POOL_ADDRESS_P (symbol) = 1;
3907 SET_SYMBOL_REF_CONSTANT (symbol, desc);
3908
3909 /* Construct the MEM. */
3910 desc->mem = def = gen_const_mem (mode, symbol);
3911 set_mem_align (def, align);
3912
3913 /* If we're dropping a label to the constant pool, make sure we
3914 don't delete it. */
3915 if (GET_CODE (x) == LABEL_REF)
3916 LABEL_PRESERVE_P (XEXP (x, 0)) = 1;
3917
3918 return copy_rtx (def);
3919 }
3920 \f
3921 /* Given a constant pool SYMBOL_REF, return the corresponding constant. */
3922
3923 rtx
3924 get_pool_constant (const_rtx addr)
3925 {
3926 return SYMBOL_REF_CONSTANT (addr)->constant;
3927 }
3928
3929 /* Given a constant pool SYMBOL_REF, return the corresponding constant
3930 and whether it has been output or not. */
3931
3932 rtx
3933 get_pool_constant_mark (rtx addr, bool *pmarked)
3934 {
3935 class constant_descriptor_rtx *desc;
3936
3937 desc = SYMBOL_REF_CONSTANT (addr);
3938 *pmarked = (desc->mark != 0);
3939 return desc->constant;
3940 }
3941
3942 /* Similar, return the mode. */
3943
3944 fixed_size_mode
3945 get_pool_mode (const_rtx addr)
3946 {
3947 return SYMBOL_REF_CONSTANT (addr)->mode;
3948 }
3949
3950 /* Return TRUE if and only if the constant pool has no entries. Note
3951 that even entries we might end up choosing not to emit are counted
3952 here, so there is the potential for missed optimizations. */
3953
3954 bool
3955 constant_pool_empty_p (void)
3956 {
3957 return crtl->varasm.pool->first == NULL;
3958 }
3959 \f
3960 /* Worker function for output_constant_pool_1. Emit assembly for X
3961 in MODE with known alignment ALIGN. */
3962
3963 static void
3964 output_constant_pool_2 (fixed_size_mode mode, rtx x, unsigned int align)
3965 {
3966 switch (GET_MODE_CLASS (mode))
3967 {
3968 case MODE_FLOAT:
3969 case MODE_DECIMAL_FLOAT:
3970 {
3971 gcc_assert (CONST_DOUBLE_AS_FLOAT_P (x));
3972 assemble_real (*CONST_DOUBLE_REAL_VALUE (x),
3973 as_a <scalar_float_mode> (mode), align, false);
3974 break;
3975 }
3976
3977 case MODE_INT:
3978 case MODE_PARTIAL_INT:
3979 case MODE_FRACT:
3980 case MODE_UFRACT:
3981 case MODE_ACCUM:
3982 case MODE_UACCUM:
3983 assemble_integer (x, GET_MODE_SIZE (mode), align, 1);
3984 break;
3985
3986 case MODE_VECTOR_BOOL:
3987 {
3988 gcc_assert (GET_CODE (x) == CONST_VECTOR);
3989
3990 /* Pick the smallest integer mode that contains at least one
3991 whole element. Often this is byte_mode and contains more
3992 than one element. */
3993 unsigned int nelts = GET_MODE_NUNITS (mode);
3994 unsigned int elt_bits = GET_MODE_BITSIZE (mode) / nelts;
3995 unsigned int int_bits = MAX (elt_bits, BITS_PER_UNIT);
3996 scalar_int_mode int_mode = int_mode_for_size (int_bits, 0).require ();
3997
3998 /* Build the constant up one integer at a time. */
3999 unsigned int elts_per_int = int_bits / elt_bits;
4000 for (unsigned int i = 0; i < nelts; i += elts_per_int)
4001 {
4002 unsigned HOST_WIDE_INT value = 0;
4003 unsigned int limit = MIN (nelts - i, elts_per_int);
4004 for (unsigned int j = 0; j < limit; ++j)
4005 if (INTVAL (CONST_VECTOR_ELT (x, i + j)) != 0)
4006 value |= 1 << (j * elt_bits);
4007 output_constant_pool_2 (int_mode, gen_int_mode (value, int_mode),
4008 i != 0 ? MIN (align, int_bits) : align);
4009 }
4010 break;
4011 }
4012 case MODE_VECTOR_FLOAT:
4013 case MODE_VECTOR_INT:
4014 case MODE_VECTOR_FRACT:
4015 case MODE_VECTOR_UFRACT:
4016 case MODE_VECTOR_ACCUM:
4017 case MODE_VECTOR_UACCUM:
4018 {
4019 int i, units;
4020 scalar_mode submode = GET_MODE_INNER (mode);
4021 unsigned int subalign = MIN (align, GET_MODE_BITSIZE (submode));
4022
4023 gcc_assert (GET_CODE (x) == CONST_VECTOR);
4024 units = GET_MODE_NUNITS (mode);
4025
4026 for (i = 0; i < units; i++)
4027 {
4028 rtx elt = CONST_VECTOR_ELT (x, i);
4029 output_constant_pool_2 (submode, elt, i ? subalign : align);
4030 }
4031 }
4032 break;
4033
4034 default:
4035 gcc_unreachable ();
4036 }
4037 }
4038
4039 /* Worker function for output_constant_pool. Emit constant DESC,
4040 giving it ALIGN bits of alignment. */
4041
4042 static void
4043 output_constant_pool_1 (class constant_descriptor_rtx *desc,
4044 unsigned int align)
4045 {
4046 rtx x, tmp;
4047
4048 x = desc->constant;
4049
4050 /* See if X is a LABEL_REF (or a CONST referring to a LABEL_REF)
4051 whose CODE_LABEL has been deleted. This can occur if a jump table
4052 is eliminated by optimization. If so, write a constant of zero
4053 instead. Note that this can also happen by turning the
4054 CODE_LABEL into a NOTE. */
4055 /* ??? This seems completely and utterly wrong. Certainly it's
4056 not true for NOTE_INSN_DELETED_LABEL, but I disbelieve proper
4057 functioning even with rtx_insn::deleted and friends. */
4058
4059 tmp = x;
4060 switch (GET_CODE (tmp))
4061 {
4062 case CONST:
4063 if (GET_CODE (XEXP (tmp, 0)) != PLUS
4064 || GET_CODE (XEXP (XEXP (tmp, 0), 0)) != LABEL_REF)
4065 break;
4066 tmp = XEXP (XEXP (tmp, 0), 0);
4067 /* FALLTHRU */
4068
4069 case LABEL_REF:
4070 {
4071 rtx_insn *insn = label_ref_label (tmp);
4072 gcc_assert (!insn->deleted ());
4073 gcc_assert (!NOTE_P (insn)
4074 || NOTE_KIND (insn) != NOTE_INSN_DELETED);
4075 break;
4076 }
4077
4078 default:
4079 break;
4080 }
4081
4082 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
4083 ASM_OUTPUT_SPECIAL_POOL_ENTRY (asm_out_file, x, desc->mode,
4084 align, desc->labelno, done);
4085 #endif
4086
4087 assemble_align (align);
4088
4089 /* Output the label. */
4090 targetm.asm_out.internal_label (asm_out_file, "LC", desc->labelno);
4091
4092 /* Output the data.
4093 Pass actual alignment value while emitting string constant to asm code
4094 as function 'output_constant_pool_1' explicitly passes the alignment as 1
4095 assuming that the data is already aligned which prevents the generation
4096 of fix-up table entries. */
4097 output_constant_pool_2 (desc->mode, x, desc->align);
4098
4099 /* Make sure all constants in SECTION_MERGE and not SECTION_STRINGS
4100 sections have proper size. */
4101 if (align > GET_MODE_BITSIZE (desc->mode)
4102 && in_section
4103 && (in_section->common.flags & SECTION_MERGE))
4104 assemble_align (align);
4105
4106 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
4107 done:
4108 #endif
4109 return;
4110 }
4111
4112 /* Recompute the offsets of entries in POOL, and the overall size of
4113 POOL. Do this after calling mark_constant_pool to ensure that we
4114 are computing the offset values for the pool which we will actually
4115 emit. */
4116
4117 static void
4118 recompute_pool_offsets (struct rtx_constant_pool *pool)
4119 {
4120 class constant_descriptor_rtx *desc;
4121 pool->offset = 0;
4122
4123 for (desc = pool->first; desc ; desc = desc->next)
4124 if (desc->mark)
4125 {
4126 /* Recalculate offset. */
4127 unsigned int align = desc->align;
4128 pool->offset += (align / BITS_PER_UNIT) - 1;
4129 pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
4130 desc->offset = pool->offset;
4131 pool->offset += GET_MODE_SIZE (desc->mode);
4132 }
4133 }
4134
4135 /* Mark all constants that are referenced by SYMBOL_REFs in X.
4136 Emit referenced deferred strings. */
4137
4138 static void
4139 mark_constants_in_pattern (rtx insn)
4140 {
4141 subrtx_iterator::array_type array;
4142 FOR_EACH_SUBRTX (iter, array, PATTERN (insn), ALL)
4143 {
4144 const_rtx x = *iter;
4145 if (GET_CODE (x) == SYMBOL_REF)
4146 {
4147 if (CONSTANT_POOL_ADDRESS_P (x))
4148 {
4149 class constant_descriptor_rtx *desc = SYMBOL_REF_CONSTANT (x);
4150 if (desc->mark == 0)
4151 {
4152 desc->mark = 1;
4153 iter.substitute (desc->constant);
4154 }
4155 }
4156 else if (TREE_CONSTANT_POOL_ADDRESS_P (x))
4157 {
4158 tree decl = SYMBOL_REF_DECL (x);
4159 if (!TREE_ASM_WRITTEN (DECL_INITIAL (decl)))
4160 {
4161 n_deferred_constants--;
4162 output_constant_def_contents (CONST_CAST_RTX (x));
4163 }
4164 }
4165 }
4166 }
4167 }
4168
4169 /* Look through appropriate parts of INSN, marking all entries in the
4170 constant pool which are actually being used. Entries that are only
4171 referenced by other constants are also marked as used. Emit
4172 deferred strings that are used. */
4173
4174 static void
4175 mark_constants (rtx_insn *insn)
4176 {
4177 if (!INSN_P (insn))
4178 return;
4179
4180 /* Insns may appear inside a SEQUENCE. Only check the patterns of
4181 insns, not any notes that may be attached. We don't want to mark
4182 a constant just because it happens to appear in a REG_EQUIV note. */
4183 if (rtx_sequence *seq = dyn_cast <rtx_sequence *> (PATTERN (insn)))
4184 {
4185 int i, n = seq->len ();
4186 for (i = 0; i < n; ++i)
4187 {
4188 rtx subinsn = seq->element (i);
4189 if (INSN_P (subinsn))
4190 mark_constants_in_pattern (subinsn);
4191 }
4192 }
4193 else
4194 mark_constants_in_pattern (insn);
4195 }
4196
4197 /* Look through the instructions for this function, and mark all the
4198 entries in POOL which are actually being used. Emit deferred constants
4199 which have indeed been used. */
4200
4201 static void
4202 mark_constant_pool (void)
4203 {
4204 rtx_insn *insn;
4205
4206 if (!crtl->uses_const_pool && n_deferred_constants == 0)
4207 return;
4208
4209 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
4210 mark_constants (insn);
4211 }
4212
4213 /* Write all the constants in POOL. */
4214
4215 static void
4216 output_constant_pool_contents (struct rtx_constant_pool *pool)
4217 {
4218 class constant_descriptor_rtx *desc;
4219
4220 for (desc = pool->first; desc ; desc = desc->next)
4221 if (desc->mark)
4222 {
4223 /* If the constant is part of an object_block, make sure that
4224 the constant has been positioned within its block, but do not
4225 write out its definition yet. output_object_blocks will do
4226 that later. */
4227 if (SYMBOL_REF_HAS_BLOCK_INFO_P (desc->sym)
4228 && SYMBOL_REF_BLOCK (desc->sym))
4229 place_block_symbol (desc->sym);
4230 else
4231 {
4232 switch_to_section (targetm.asm_out.select_rtx_section
4233 (desc->mode, desc->constant, desc->align));
4234 output_constant_pool_1 (desc, desc->align);
4235 }
4236 }
4237 }
4238
4239 /* Mark all constants that are used in the current function, then write
4240 out the function's private constant pool. */
4241
4242 static void
4243 output_constant_pool (const char *fnname ATTRIBUTE_UNUSED,
4244 tree fndecl ATTRIBUTE_UNUSED)
4245 {
4246 struct rtx_constant_pool *pool = crtl->varasm.pool;
4247
4248 /* It is possible for gcc to call force_const_mem and then to later
4249 discard the instructions which refer to the constant. In such a
4250 case we do not need to output the constant. */
4251 mark_constant_pool ();
4252
4253 /* Having marked the constant pool entries we'll actually emit, we
4254 now need to rebuild the offset information, which may have become
4255 stale. */
4256 recompute_pool_offsets (pool);
4257
4258 #ifdef ASM_OUTPUT_POOL_PROLOGUE
4259 ASM_OUTPUT_POOL_PROLOGUE (asm_out_file, fnname, fndecl, pool->offset);
4260 #endif
4261
4262 output_constant_pool_contents (pool);
4263
4264 #ifdef ASM_OUTPUT_POOL_EPILOGUE
4265 ASM_OUTPUT_POOL_EPILOGUE (asm_out_file, fnname, fndecl, pool->offset);
4266 #endif
4267 }
4268 \f
4269 /* Write the contents of the shared constant pool. */
4270
4271 void
4272 output_shared_constant_pool (void)
4273 {
4274 output_constant_pool_contents (shared_constant_pool);
4275 }
4276 \f
4277 /* Determine what kind of relocations EXP may need. */
4278
4279 int
4280 compute_reloc_for_constant (tree exp)
4281 {
4282 int reloc = 0, reloc2;
4283 tree tem;
4284
4285 switch (TREE_CODE (exp))
4286 {
4287 case ADDR_EXPR:
4288 case FDESC_EXPR:
4289 /* Go inside any operations that get_inner_reference can handle and see
4290 if what's inside is a constant: no need to do anything here for
4291 addresses of variables or functions. */
4292 for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
4293 tem = TREE_OPERAND (tem, 0))
4294 ;
4295
4296 if (TREE_CODE (tem) == MEM_REF
4297 && TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR)
4298 {
4299 reloc = compute_reloc_for_constant (TREE_OPERAND (tem, 0));
4300 break;
4301 }
4302
4303 if (!targetm.binds_local_p (tem))
4304 reloc |= 2;
4305 else
4306 reloc |= 1;
4307 break;
4308
4309 case PLUS_EXPR:
4310 case POINTER_PLUS_EXPR:
4311 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
4312 reloc |= compute_reloc_for_constant (TREE_OPERAND (exp, 1));
4313 break;
4314
4315 case MINUS_EXPR:
4316 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
4317 reloc2 = compute_reloc_for_constant (TREE_OPERAND (exp, 1));
4318 /* The difference of two local labels is computable at link time. */
4319 if (reloc == 1 && reloc2 == 1)
4320 reloc = 0;
4321 else
4322 reloc |= reloc2;
4323 break;
4324
4325 CASE_CONVERT:
4326 case VIEW_CONVERT_EXPR:
4327 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
4328 break;
4329
4330 case CONSTRUCTOR:
4331 {
4332 unsigned HOST_WIDE_INT idx;
4333 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
4334 if (tem != 0)
4335 reloc |= compute_reloc_for_constant (tem);
4336 }
4337 break;
4338
4339 default:
4340 break;
4341 }
4342 return reloc;
4343 }
4344
4345 /* Find all the constants whose addresses are referenced inside of EXP,
4346 and make sure assembler code with a label has been output for each one.
4347 Indicate whether an ADDR_EXPR has been encountered. */
4348
4349 static void
4350 output_addressed_constants (tree exp)
4351 {
4352 tree tem;
4353
4354 switch (TREE_CODE (exp))
4355 {
4356 case ADDR_EXPR:
4357 case FDESC_EXPR:
4358 /* Go inside any operations that get_inner_reference can handle and see
4359 if what's inside is a constant: no need to do anything here for
4360 addresses of variables or functions. */
4361 for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
4362 tem = TREE_OPERAND (tem, 0))
4363 ;
4364
4365 /* If we have an initialized CONST_DECL, retrieve the initializer. */
4366 if (TREE_CODE (tem) == CONST_DECL && DECL_INITIAL (tem))
4367 tem = DECL_INITIAL (tem);
4368
4369 if (CONSTANT_CLASS_P (tem) || TREE_CODE (tem) == CONSTRUCTOR)
4370 output_constant_def (tem, 0);
4371
4372 if (TREE_CODE (tem) == MEM_REF)
4373 output_addressed_constants (TREE_OPERAND (tem, 0));
4374 break;
4375
4376 case PLUS_EXPR:
4377 case POINTER_PLUS_EXPR:
4378 case MINUS_EXPR:
4379 output_addressed_constants (TREE_OPERAND (exp, 1));
4380 gcc_fallthrough ();
4381
4382 CASE_CONVERT:
4383 case VIEW_CONVERT_EXPR:
4384 output_addressed_constants (TREE_OPERAND (exp, 0));
4385 break;
4386
4387 case CONSTRUCTOR:
4388 {
4389 unsigned HOST_WIDE_INT idx;
4390 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
4391 if (tem != 0)
4392 output_addressed_constants (tem);
4393 }
4394 break;
4395
4396 default:
4397 break;
4398 }
4399 }
4400 \f
4401 /* Whether a constructor CTOR is a valid static constant initializer if all
4402 its elements are. This used to be internal to initializer_constant_valid_p
4403 and has been exposed to let other functions like categorize_ctor_elements
4404 evaluate the property while walking a constructor for other purposes. */
4405
4406 bool
4407 constructor_static_from_elts_p (const_tree ctor)
4408 {
4409 return (TREE_CONSTANT (ctor)
4410 && (TREE_CODE (TREE_TYPE (ctor)) == UNION_TYPE
4411 || TREE_CODE (TREE_TYPE (ctor)) == RECORD_TYPE
4412 || TREE_CODE (TREE_TYPE (ctor)) == ARRAY_TYPE));
4413 }
4414
4415 static tree initializer_constant_valid_p_1 (tree value, tree endtype,
4416 tree *cache);
4417
4418 /* A subroutine of initializer_constant_valid_p. VALUE is a MINUS_EXPR,
4419 PLUS_EXPR or POINTER_PLUS_EXPR. This looks for cases of VALUE
4420 which are valid when ENDTYPE is an integer of any size; in
4421 particular, this does not accept a pointer minus a constant. This
4422 returns null_pointer_node if the VALUE is an absolute constant
4423 which can be used to initialize a static variable. Otherwise it
4424 returns NULL. */
4425
4426 static tree
4427 narrowing_initializer_constant_valid_p (tree value, tree endtype, tree *cache)
4428 {
4429 tree op0, op1;
4430
4431 if (!INTEGRAL_TYPE_P (endtype))
4432 return NULL_TREE;
4433
4434 op0 = TREE_OPERAND (value, 0);
4435 op1 = TREE_OPERAND (value, 1);
4436
4437 /* Like STRIP_NOPS except allow the operand mode to widen. This
4438 works around a feature of fold that simplifies (int)(p1 - p2) to
4439 ((int)p1 - (int)p2) under the theory that the narrower operation
4440 is cheaper. */
4441
4442 while (CONVERT_EXPR_P (op0)
4443 || TREE_CODE (op0) == NON_LVALUE_EXPR)
4444 {
4445 tree inner = TREE_OPERAND (op0, 0);
4446 if (inner == error_mark_node
4447 || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
4448 || (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (op0)))
4449 > GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (inner)))))
4450 break;
4451 op0 = inner;
4452 }
4453
4454 while (CONVERT_EXPR_P (op1)
4455 || TREE_CODE (op1) == NON_LVALUE_EXPR)
4456 {
4457 tree inner = TREE_OPERAND (op1, 0);
4458 if (inner == error_mark_node
4459 || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
4460 || (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (op1)))
4461 > GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (inner)))))
4462 break;
4463 op1 = inner;
4464 }
4465
4466 op0 = initializer_constant_valid_p_1 (op0, endtype, cache);
4467 if (!op0)
4468 return NULL_TREE;
4469
4470 op1 = initializer_constant_valid_p_1 (op1, endtype,
4471 cache ? cache + 2 : NULL);
4472 /* Both initializers must be known. */
4473 if (op1)
4474 {
4475 if (op0 == op1
4476 && (op0 == null_pointer_node
4477 || TREE_CODE (value) == MINUS_EXPR))
4478 return null_pointer_node;
4479
4480 /* Support differences between labels. */
4481 if (TREE_CODE (op0) == LABEL_DECL
4482 && TREE_CODE (op1) == LABEL_DECL)
4483 return null_pointer_node;
4484
4485 if (TREE_CODE (op0) == STRING_CST
4486 && TREE_CODE (op1) == STRING_CST
4487 && operand_equal_p (op0, op1, 1))
4488 return null_pointer_node;
4489 }
4490
4491 return NULL_TREE;
4492 }
4493
4494 /* Helper function of initializer_constant_valid_p.
4495 Return nonzero if VALUE is a valid constant-valued expression
4496 for use in initializing a static variable; one that can be an
4497 element of a "constant" initializer.
4498
4499 Return null_pointer_node if the value is absolute;
4500 if it is relocatable, return the variable that determines the relocation.
4501 We assume that VALUE has been folded as much as possible;
4502 therefore, we do not need to check for such things as
4503 arithmetic-combinations of integers.
4504
4505 Use CACHE (pointer to 2 tree values) for caching if non-NULL. */
4506
4507 static tree
4508 initializer_constant_valid_p_1 (tree value, tree endtype, tree *cache)
4509 {
4510 tree ret;
4511
4512 switch (TREE_CODE (value))
4513 {
4514 case CONSTRUCTOR:
4515 if (constructor_static_from_elts_p (value))
4516 {
4517 unsigned HOST_WIDE_INT idx;
4518 tree elt;
4519 bool absolute = true;
4520
4521 if (cache && cache[0] == value)
4522 return cache[1];
4523 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (value), idx, elt)
4524 {
4525 tree reloc;
4526 reloc = initializer_constant_valid_p_1 (elt, TREE_TYPE (elt),
4527 NULL);
4528 if (!reloc
4529 /* An absolute value is required with reverse SSO. */
4530 || (reloc != null_pointer_node
4531 && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (value))
4532 && !AGGREGATE_TYPE_P (TREE_TYPE (elt))))
4533 {
4534 if (cache)
4535 {
4536 cache[0] = value;
4537 cache[1] = NULL_TREE;
4538 }
4539 return NULL_TREE;
4540 }
4541 if (reloc != null_pointer_node)
4542 absolute = false;
4543 }
4544 /* For a non-absolute relocation, there is no single
4545 variable that can be "the variable that determines the
4546 relocation." */
4547 if (cache)
4548 {
4549 cache[0] = value;
4550 cache[1] = absolute ? null_pointer_node : error_mark_node;
4551 }
4552 return absolute ? null_pointer_node : error_mark_node;
4553 }
4554
4555 return TREE_STATIC (value) ? null_pointer_node : NULL_TREE;
4556
4557 case INTEGER_CST:
4558 case VECTOR_CST:
4559 case REAL_CST:
4560 case FIXED_CST:
4561 case STRING_CST:
4562 case COMPLEX_CST:
4563 return null_pointer_node;
4564
4565 case ADDR_EXPR:
4566 case FDESC_EXPR:
4567 {
4568 tree op0 = staticp (TREE_OPERAND (value, 0));
4569 if (op0)
4570 {
4571 /* "&(*a).f" is like unto pointer arithmetic. If "a" turns out
4572 to be a constant, this is old-skool offsetof-like nonsense. */
4573 if (TREE_CODE (op0) == INDIRECT_REF
4574 && TREE_CONSTANT (TREE_OPERAND (op0, 0)))
4575 return null_pointer_node;
4576 /* Taking the address of a nested function involves a trampoline,
4577 unless we don't need or want one. */
4578 if (TREE_CODE (op0) == FUNCTION_DECL
4579 && DECL_STATIC_CHAIN (op0)
4580 && !TREE_NO_TRAMPOLINE (value))
4581 return NULL_TREE;
4582 /* "&{...}" requires a temporary to hold the constructed
4583 object. */
4584 if (TREE_CODE (op0) == CONSTRUCTOR)
4585 return NULL_TREE;
4586 }
4587 return op0;
4588 }
4589
4590 case NON_LVALUE_EXPR:
4591 return initializer_constant_valid_p_1 (TREE_OPERAND (value, 0),
4592 endtype, cache);
4593
4594 case VIEW_CONVERT_EXPR:
4595 {
4596 tree src = TREE_OPERAND (value, 0);
4597 tree src_type = TREE_TYPE (src);
4598 tree dest_type = TREE_TYPE (value);
4599
4600 /* Allow view-conversions from aggregate to non-aggregate type only
4601 if the bit pattern is fully preserved afterwards; otherwise, the
4602 RTL expander won't be able to apply a subsequent transformation
4603 to the underlying constructor. */
4604 if (AGGREGATE_TYPE_P (src_type) && !AGGREGATE_TYPE_P (dest_type))
4605 {
4606 if (TYPE_MODE (endtype) == TYPE_MODE (dest_type))
4607 return initializer_constant_valid_p_1 (src, endtype, cache);
4608 else
4609 return NULL_TREE;
4610 }
4611
4612 /* Allow all other kinds of view-conversion. */
4613 return initializer_constant_valid_p_1 (src, endtype, cache);
4614 }
4615
4616 CASE_CONVERT:
4617 {
4618 tree src = TREE_OPERAND (value, 0);
4619 tree src_type = TREE_TYPE (src);
4620 tree dest_type = TREE_TYPE (value);
4621
4622 /* Allow conversions between pointer types, floating-point
4623 types, and offset types. */
4624 if ((POINTER_TYPE_P (dest_type) && POINTER_TYPE_P (src_type))
4625 || (FLOAT_TYPE_P (dest_type) && FLOAT_TYPE_P (src_type))
4626 || (TREE_CODE (dest_type) == OFFSET_TYPE
4627 && TREE_CODE (src_type) == OFFSET_TYPE))
4628 return initializer_constant_valid_p_1 (src, endtype, cache);
4629
4630 /* Allow length-preserving conversions between integer types. */
4631 if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type)
4632 && (TYPE_PRECISION (dest_type) == TYPE_PRECISION (src_type)))
4633 return initializer_constant_valid_p_1 (src, endtype, cache);
4634
4635 /* Allow conversions between other integer types only if
4636 explicit value. Don't allow sign-extension to a type larger
4637 than word and pointer, there aren't relocations that would
4638 allow to sign extend it to a wider type. */
4639 if (INTEGRAL_TYPE_P (dest_type)
4640 && INTEGRAL_TYPE_P (src_type)
4641 && (TYPE_UNSIGNED (src_type)
4642 || TYPE_PRECISION (dest_type) <= TYPE_PRECISION (src_type)
4643 || TYPE_PRECISION (dest_type) <= BITS_PER_WORD
4644 || TYPE_PRECISION (dest_type) <= POINTER_SIZE))
4645 {
4646 tree inner = initializer_constant_valid_p_1 (src, endtype, cache);
4647 if (inner == null_pointer_node)
4648 return null_pointer_node;
4649 break;
4650 }
4651
4652 /* Allow (int) &foo provided int is as wide as a pointer. */
4653 if (INTEGRAL_TYPE_P (dest_type) && POINTER_TYPE_P (src_type)
4654 && (TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type)))
4655 return initializer_constant_valid_p_1 (src, endtype, cache);
4656
4657 /* Likewise conversions from int to pointers, but also allow
4658 conversions from 0. */
4659 if ((POINTER_TYPE_P (dest_type)
4660 || TREE_CODE (dest_type) == OFFSET_TYPE)
4661 && INTEGRAL_TYPE_P (src_type))
4662 {
4663 if (TREE_CODE (src) == INTEGER_CST
4664 && TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type))
4665 return null_pointer_node;
4666 if (integer_zerop (src))
4667 return null_pointer_node;
4668 else if (TYPE_PRECISION (dest_type) <= TYPE_PRECISION (src_type))
4669 return initializer_constant_valid_p_1 (src, endtype, cache);
4670 }
4671
4672 /* Allow conversions to struct or union types if the value
4673 inside is okay. */
4674 if (TREE_CODE (dest_type) == RECORD_TYPE
4675 || TREE_CODE (dest_type) == UNION_TYPE)
4676 return initializer_constant_valid_p_1 (src, endtype, cache);
4677 }
4678 break;
4679
4680 case POINTER_PLUS_EXPR:
4681 case PLUS_EXPR:
4682 /* Any valid floating-point constants will have been folded by now;
4683 with -frounding-math we hit this with addition of two constants. */
4684 if (TREE_CODE (endtype) == REAL_TYPE)
4685 return NULL_TREE;
4686 if (cache && cache[0] == value)
4687 return cache[1];
4688 if (! INTEGRAL_TYPE_P (endtype)
4689 || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value)))
4690 {
4691 tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };
4692 tree valid0
4693 = initializer_constant_valid_p_1 (TREE_OPERAND (value, 0),
4694 endtype, ncache);
4695 tree valid1
4696 = initializer_constant_valid_p_1 (TREE_OPERAND (value, 1),
4697 endtype, ncache + 2);
4698 /* If either term is absolute, use the other term's relocation. */
4699 if (valid0 == null_pointer_node)
4700 ret = valid1;
4701 else if (valid1 == null_pointer_node)
4702 ret = valid0;
4703 /* Support narrowing pointer differences. */
4704 else
4705 ret = narrowing_initializer_constant_valid_p (value, endtype,
4706 ncache);
4707 }
4708 else
4709 /* Support narrowing pointer differences. */
4710 ret = narrowing_initializer_constant_valid_p (value, endtype, NULL);
4711 if (cache)
4712 {
4713 cache[0] = value;
4714 cache[1] = ret;
4715 }
4716 return ret;
4717
4718 case POINTER_DIFF_EXPR:
4719 case MINUS_EXPR:
4720 if (TREE_CODE (endtype) == REAL_TYPE)
4721 return NULL_TREE;
4722 if (cache && cache[0] == value)
4723 return cache[1];
4724 if (! INTEGRAL_TYPE_P (endtype)
4725 || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value)))
4726 {
4727 tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };
4728 tree valid0
4729 = initializer_constant_valid_p_1 (TREE_OPERAND (value, 0),
4730 endtype, ncache);
4731 tree valid1
4732 = initializer_constant_valid_p_1 (TREE_OPERAND (value, 1),
4733 endtype, ncache + 2);
4734 /* Win if second argument is absolute. */
4735 if (valid1 == null_pointer_node)
4736 ret = valid0;
4737 /* Win if both arguments have the same relocation.
4738 Then the value is absolute. */
4739 else if (valid0 == valid1 && valid0 != 0)
4740 ret = null_pointer_node;
4741 /* Since GCC guarantees that string constants are unique in the
4742 generated code, a subtraction between two copies of the same
4743 constant string is absolute. */
4744 else if (valid0 && TREE_CODE (valid0) == STRING_CST
4745 && valid1 && TREE_CODE (valid1) == STRING_CST
4746 && operand_equal_p (valid0, valid1, 1))
4747 ret = null_pointer_node;
4748 /* Support narrowing differences. */
4749 else
4750 ret = narrowing_initializer_constant_valid_p (value, endtype,
4751 ncache);
4752 }
4753 else
4754 /* Support narrowing differences. */
4755 ret = narrowing_initializer_constant_valid_p (value, endtype, NULL);
4756 if (cache)
4757 {
4758 cache[0] = value;
4759 cache[1] = ret;
4760 }
4761 return ret;
4762
4763 default:
4764 break;
4765 }
4766
4767 return NULL_TREE;
4768 }
4769
4770 /* Return nonzero if VALUE is a valid constant-valued expression
4771 for use in initializing a static variable; one that can be an
4772 element of a "constant" initializer.
4773
4774 Return null_pointer_node if the value is absolute;
4775 if it is relocatable, return the variable that determines the relocation.
4776 We assume that VALUE has been folded as much as possible;
4777 therefore, we do not need to check for such things as
4778 arithmetic-combinations of integers. */
4779 tree
4780 initializer_constant_valid_p (tree value, tree endtype, bool reverse)
4781 {
4782 tree reloc = initializer_constant_valid_p_1 (value, endtype, NULL);
4783
4784 /* An absolute value is required with reverse storage order. */
4785 if (reloc
4786 && reloc != null_pointer_node
4787 && reverse
4788 && !AGGREGATE_TYPE_P (endtype)
4789 && !VECTOR_TYPE_P (endtype))
4790 reloc = NULL_TREE;
4791
4792 return reloc;
4793 }
4794 \f
4795 /* Return true if VALUE is a valid constant-valued expression
4796 for use in initializing a static bit-field; one that can be
4797 an element of a "constant" initializer. */
4798
4799 bool
4800 initializer_constant_valid_for_bitfield_p (tree value)
4801 {
4802 /* For bitfields we support integer constants or possibly nested aggregates
4803 of such. */
4804 switch (TREE_CODE (value))
4805 {
4806 case CONSTRUCTOR:
4807 {
4808 unsigned HOST_WIDE_INT idx;
4809 tree elt;
4810
4811 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (value), idx, elt)
4812 if (!initializer_constant_valid_for_bitfield_p (elt))
4813 return false;
4814 return true;
4815 }
4816
4817 case INTEGER_CST:
4818 case REAL_CST:
4819 return true;
4820
4821 case VIEW_CONVERT_EXPR:
4822 case NON_LVALUE_EXPR:
4823 return
4824 initializer_constant_valid_for_bitfield_p (TREE_OPERAND (value, 0));
4825
4826 default:
4827 break;
4828 }
4829
4830 return false;
4831 }
4832
4833 /* Check if a STRING_CST fits into the field.
4834 Tolerate only the case when the NUL termination
4835 does not fit into the field. */
4836
4837 static bool
4838 check_string_literal (tree string, unsigned HOST_WIDE_INT size)
4839 {
4840 tree type = TREE_TYPE (string);
4841 tree eltype = TREE_TYPE (type);
4842 unsigned HOST_WIDE_INT elts = tree_to_uhwi (TYPE_SIZE_UNIT (eltype));
4843 unsigned HOST_WIDE_INT mem_size = tree_to_uhwi (TYPE_SIZE_UNIT (type));
4844 int len = TREE_STRING_LENGTH (string);
4845
4846 if (elts != 1 && elts != 2 && elts != 4)
4847 return false;
4848 if (len < 0 || len % elts != 0)
4849 return false;
4850 if (size < (unsigned)len)
4851 return false;
4852 if (mem_size != size)
4853 return false;
4854 return true;
4855 }
4856
4857 /* output_constructor outer state of relevance in recursive calls, typically
4858 for nested aggregate bitfields. */
4859
4860 struct oc_outer_state {
4861 unsigned int bit_offset; /* current position in ... */
4862 int byte; /* ... the outer byte buffer. */
4863 };
4864
4865 static unsigned HOST_WIDE_INT
4866 output_constructor (tree, unsigned HOST_WIDE_INT, unsigned int, bool,
4867 oc_outer_state *);
4868
4869 /* Output assembler code for constant EXP, with no label.
4870 This includes the pseudo-op such as ".int" or ".byte", and a newline.
4871 Assumes output_addressed_constants has been done on EXP already.
4872
4873 Generate at least SIZE bytes of assembler data, padding at the end
4874 with zeros if necessary. SIZE must always be specified. The returned
4875 value is the actual number of bytes of assembler data generated, which
4876 may be bigger than SIZE if the object contains a variable length field.
4877
4878 SIZE is important for structure constructors,
4879 since trailing members may have been omitted from the constructor.
4880 It is also important for initialization of arrays from string constants
4881 since the full length of the string constant might not be wanted.
4882 It is also needed for initialization of unions, where the initializer's
4883 type is just one member, and that may not be as long as the union.
4884
4885 There a case in which we would fail to output exactly SIZE bytes:
4886 for a structure constructor that wants to produce more than SIZE bytes.
4887 But such constructors will never be generated for any possible input.
4888
4889 ALIGN is the alignment of the data in bits.
4890
4891 If REVERSE is true, EXP is output in reverse storage order. */
4892
4893 static unsigned HOST_WIDE_INT
4894 output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align,
4895 bool reverse, bool merge_strings)
4896 {
4897 enum tree_code code;
4898 unsigned HOST_WIDE_INT thissize;
4899 rtx cst;
4900
4901 if (size == 0 || flag_syntax_only)
4902 return size;
4903
4904 /* See if we're trying to initialize a pointer in a non-default mode
4905 to the address of some declaration somewhere. If the target says
4906 the mode is valid for pointers, assume the target has a way of
4907 resolving it. */
4908 if (TREE_CODE (exp) == NOP_EXPR
4909 && POINTER_TYPE_P (TREE_TYPE (exp))
4910 && targetm.addr_space.valid_pointer_mode
4911 (SCALAR_INT_TYPE_MODE (TREE_TYPE (exp)),
4912 TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)))))
4913 {
4914 tree saved_type = TREE_TYPE (exp);
4915
4916 /* Peel off any intermediate conversions-to-pointer for valid
4917 pointer modes. */
4918 while (TREE_CODE (exp) == NOP_EXPR
4919 && POINTER_TYPE_P (TREE_TYPE (exp))
4920 && targetm.addr_space.valid_pointer_mode
4921 (SCALAR_INT_TYPE_MODE (TREE_TYPE (exp)),
4922 TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)))))
4923 exp = TREE_OPERAND (exp, 0);
4924
4925 /* If what we're left with is the address of something, we can
4926 convert the address to the final type and output it that
4927 way. */
4928 if (TREE_CODE (exp) == ADDR_EXPR)
4929 exp = build1 (ADDR_EXPR, saved_type, TREE_OPERAND (exp, 0));
4930 /* Likewise for constant ints. */
4931 else if (TREE_CODE (exp) == INTEGER_CST)
4932 exp = fold_convert (saved_type, exp);
4933
4934 }
4935
4936 /* Eliminate any conversions since we'll be outputting the underlying
4937 constant. */
4938 while (CONVERT_EXPR_P (exp)
4939 || TREE_CODE (exp) == NON_LVALUE_EXPR
4940 || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
4941 {
4942 HOST_WIDE_INT type_size = int_size_in_bytes (TREE_TYPE (exp));
4943 HOST_WIDE_INT op_size = int_size_in_bytes (TREE_TYPE (TREE_OPERAND (exp, 0)));
4944
4945 /* Make sure eliminating the conversion is really a no-op, except with
4946 VIEW_CONVERT_EXPRs to allow for wild Ada unchecked conversions and
4947 union types to allow for Ada unchecked unions. */
4948 if (type_size > op_size
4949 && TREE_CODE (exp) != VIEW_CONVERT_EXPR
4950 && TREE_CODE (TREE_TYPE (exp)) != UNION_TYPE)
4951 /* Keep the conversion. */
4952 break;
4953 else
4954 exp = TREE_OPERAND (exp, 0);
4955 }
4956
4957 code = TREE_CODE (TREE_TYPE (exp));
4958 thissize = int_size_in_bytes (TREE_TYPE (exp));
4959
4960 /* Allow a constructor with no elements for any data type.
4961 This means to fill the space with zeros. */
4962 if (TREE_CODE (exp) == CONSTRUCTOR
4963 && vec_safe_is_empty (CONSTRUCTOR_ELTS (exp)))
4964 {
4965 assemble_zeros (size);
4966 return size;
4967 }
4968
4969 if (TREE_CODE (exp) == FDESC_EXPR)
4970 {
4971 #ifdef ASM_OUTPUT_FDESC
4972 HOST_WIDE_INT part = tree_to_shwi (TREE_OPERAND (exp, 1));
4973 tree decl = TREE_OPERAND (exp, 0);
4974 ASM_OUTPUT_FDESC (asm_out_file, decl, part);
4975 #else
4976 gcc_unreachable ();
4977 #endif
4978 return size;
4979 }
4980
4981 /* Now output the underlying data. If we've handling the padding, return.
4982 Otherwise, break and ensure SIZE is the size written. */
4983 switch (code)
4984 {
4985 case BOOLEAN_TYPE:
4986 case INTEGER_TYPE:
4987 case ENUMERAL_TYPE:
4988 case POINTER_TYPE:
4989 case REFERENCE_TYPE:
4990 case OFFSET_TYPE:
4991 case FIXED_POINT_TYPE:
4992 case NULLPTR_TYPE:
4993 cst = expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
4994 if (reverse)
4995 cst = flip_storage_order (TYPE_MODE (TREE_TYPE (exp)), cst);
4996 if (!assemble_integer (cst, MIN (size, thissize), align, 0))
4997 error ("initializer for integer/fixed-point value is too complicated");
4998 break;
4999
5000 case REAL_TYPE:
5001 if (TREE_CODE (exp) != REAL_CST)
5002 error ("initializer for floating value is not a floating constant");
5003 else
5004 assemble_real (TREE_REAL_CST (exp),
5005 SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (exp)),
5006 align, reverse);
5007 break;
5008
5009 case COMPLEX_TYPE:
5010 output_constant (TREE_REALPART (exp), thissize / 2, align,
5011 reverse, false);
5012 output_constant (TREE_IMAGPART (exp), thissize / 2,
5013 min_align (align, BITS_PER_UNIT * (thissize / 2)),
5014 reverse, false);
5015 break;
5016
5017 case ARRAY_TYPE:
5018 case VECTOR_TYPE:
5019 switch (TREE_CODE (exp))
5020 {
5021 case CONSTRUCTOR:
5022 return output_constructor (exp, size, align, reverse, NULL);
5023 case STRING_CST:
5024 thissize = (unsigned HOST_WIDE_INT)TREE_STRING_LENGTH (exp);
5025 if (merge_strings
5026 && (thissize == 0
5027 || TREE_STRING_POINTER (exp) [thissize - 1] != '\0'))
5028 thissize++;
5029 gcc_checking_assert (check_string_literal (exp, size));
5030 assemble_string (TREE_STRING_POINTER (exp), thissize);
5031 break;
5032 case VECTOR_CST:
5033 {
5034 scalar_mode inner = SCALAR_TYPE_MODE (TREE_TYPE (TREE_TYPE (exp)));
5035 unsigned int nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
5036 int elt_size = GET_MODE_SIZE (inner);
5037 output_constant (VECTOR_CST_ELT (exp, 0), elt_size, align,
5038 reverse, false);
5039 thissize = elt_size;
5040 /* Static constants must have a fixed size. */
5041 unsigned int nunits = VECTOR_CST_NELTS (exp).to_constant ();
5042 for (unsigned int i = 1; i < nunits; i++)
5043 {
5044 output_constant (VECTOR_CST_ELT (exp, i), elt_size, nalign,
5045 reverse, false);
5046 thissize += elt_size;
5047 }
5048 break;
5049 }
5050 default:
5051 gcc_unreachable ();
5052 }
5053 break;
5054
5055 case RECORD_TYPE:
5056 case UNION_TYPE:
5057 gcc_assert (TREE_CODE (exp) == CONSTRUCTOR);
5058 return output_constructor (exp, size, align, reverse, NULL);
5059
5060 case ERROR_MARK:
5061 return 0;
5062
5063 default:
5064 gcc_unreachable ();
5065 }
5066
5067 if (size > thissize)
5068 assemble_zeros (size - thissize);
5069
5070 return size;
5071 }
5072 \f
5073 /* Subroutine of output_constructor, used for computing the size of
5074 arrays of unspecified length. VAL must be a CONSTRUCTOR of an array
5075 type with an unspecified upper bound. */
5076
5077 static unsigned HOST_WIDE_INT
5078 array_size_for_constructor (tree val)
5079 {
5080 tree max_index;
5081 unsigned HOST_WIDE_INT cnt;
5082 tree index, value, tmp;
5083 offset_int i;
5084
5085 /* This code used to attempt to handle string constants that are not
5086 arrays of single-bytes, but nothing else does, so there's no point in
5087 doing it here. */
5088 if (TREE_CODE (val) == STRING_CST)
5089 return TREE_STRING_LENGTH (val);
5090
5091 max_index = NULL_TREE;
5092 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (val), cnt, index, value)
5093 {
5094 if (TREE_CODE (index) == RANGE_EXPR)
5095 index = TREE_OPERAND (index, 1);
5096 if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
5097 max_index = index;
5098 }
5099
5100 if (max_index == NULL_TREE)
5101 return 0;
5102
5103 /* Compute the total number of array elements. */
5104 tmp = TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)));
5105 i = wi::to_offset (max_index) - wi::to_offset (tmp) + 1;
5106
5107 /* Multiply by the array element unit size to find number of bytes. */
5108 i *= wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (val))));
5109
5110 gcc_assert (wi::fits_uhwi_p (i));
5111 return i.to_uhwi ();
5112 }
5113
5114 /* Other datastructures + helpers for output_constructor. */
5115
5116 /* output_constructor local state to support interaction with helpers. */
5117
5118 struct oc_local_state {
5119
5120 /* Received arguments. */
5121 tree exp; /* Constructor expression. */
5122 tree type; /* Type of constructor expression. */
5123 unsigned HOST_WIDE_INT size; /* # bytes to output - pad if necessary. */
5124 unsigned int align; /* Known initial alignment. */
5125 tree min_index; /* Lower bound if specified for an array. */
5126
5127 /* Output processing state. */
5128 HOST_WIDE_INT total_bytes; /* # bytes output so far / current position. */
5129 int byte; /* Part of a bitfield byte yet to be output. */
5130 int last_relative_index; /* Implicit or explicit index of the last
5131 array element output within a bitfield. */
5132 bool byte_buffer_in_use; /* Whether BYTE is in use. */
5133 bool reverse; /* Whether reverse storage order is in use. */
5134
5135 /* Current element. */
5136 tree field; /* Current field decl in a record. */
5137 tree val; /* Current element value. */
5138 tree index; /* Current element index. */
5139
5140 };
5141
5142 /* Helper for output_constructor. From the current LOCAL state, output a
5143 RANGE_EXPR element. */
5144
5145 static void
5146 output_constructor_array_range (oc_local_state *local)
5147 {
5148 unsigned HOST_WIDE_INT fieldsize
5149 = int_size_in_bytes (TREE_TYPE (local->type));
5150
5151 HOST_WIDE_INT lo_index
5152 = tree_to_shwi (TREE_OPERAND (local->index, 0));
5153 HOST_WIDE_INT hi_index
5154 = tree_to_shwi (TREE_OPERAND (local->index, 1));
5155 HOST_WIDE_INT index;
5156
5157 unsigned int align2
5158 = min_align (local->align, fieldsize * BITS_PER_UNIT);
5159
5160 for (index = lo_index; index <= hi_index; index++)
5161 {
5162 /* Output the element's initial value. */
5163 if (local->val == NULL_TREE)
5164 assemble_zeros (fieldsize);
5165 else
5166 fieldsize = output_constant (local->val, fieldsize, align2,
5167 local->reverse, false);
5168
5169 /* Count its size. */
5170 local->total_bytes += fieldsize;
5171 }
5172 }
5173
5174 /* Helper for output_constructor. From the current LOCAL state, output a
5175 field element that is not true bitfield or part of an outer one. */
5176
5177 static void
5178 output_constructor_regular_field (oc_local_state *local)
5179 {
5180 /* Field size and position. Since this structure is static, we know the
5181 positions are constant. */
5182 unsigned HOST_WIDE_INT fieldsize;
5183 HOST_WIDE_INT fieldpos;
5184
5185 unsigned int align2;
5186
5187 /* Output any buffered-up bit-fields preceding this element. */
5188 if (local->byte_buffer_in_use)
5189 {
5190 assemble_integer (GEN_INT (local->byte), 1, BITS_PER_UNIT, 1);
5191 local->total_bytes++;
5192 local->byte_buffer_in_use = false;
5193 }
5194
5195 if (local->index != NULL_TREE)
5196 {
5197 /* Perform the index calculation in modulo arithmetic but
5198 sign-extend the result because Ada has negative DECL_FIELD_OFFSETs
5199 but we are using an unsigned sizetype. */
5200 unsigned prec = TYPE_PRECISION (sizetype);
5201 offset_int idx = wi::sext (wi::to_offset (local->index)
5202 - wi::to_offset (local->min_index), prec);
5203 fieldpos = (idx * wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (local->val))))
5204 .to_short_addr ();
5205 }
5206 else if (local->field != NULL_TREE)
5207 fieldpos = int_byte_position (local->field);
5208 else
5209 fieldpos = 0;
5210
5211 /* Advance to offset of this element.
5212 Note no alignment needed in an array, since that is guaranteed
5213 if each element has the proper size. */
5214 if (local->field != NULL_TREE || local->index != NULL_TREE)
5215 {
5216 if (fieldpos > local->total_bytes)
5217 {
5218 assemble_zeros (fieldpos - local->total_bytes);
5219 local->total_bytes = fieldpos;
5220 }
5221 else
5222 /* Must not go backwards. */
5223 gcc_assert (fieldpos == local->total_bytes);
5224 }
5225
5226 /* Find the alignment of this element. */
5227 align2 = min_align (local->align, BITS_PER_UNIT * fieldpos);
5228
5229 /* Determine size this element should occupy. */
5230 if (local->field)
5231 {
5232 fieldsize = 0;
5233
5234 /* If this is an array with an unspecified upper bound,
5235 the initializer determines the size. */
5236 /* ??? This ought to only checked if DECL_SIZE_UNIT is NULL,
5237 but we cannot do this until the deprecated support for
5238 initializing zero-length array members is removed. */
5239 if (TREE_CODE (TREE_TYPE (local->field)) == ARRAY_TYPE
5240 && (!TYPE_DOMAIN (TREE_TYPE (local->field))
5241 || !TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (local->field)))))
5242 {
5243 fieldsize = array_size_for_constructor (local->val);
5244 /* Given a non-empty initialization, this field had better
5245 be last. Given a flexible array member, the next field
5246 on the chain is a TYPE_DECL of the enclosing struct. */
5247 const_tree next = DECL_CHAIN (local->field);
5248 gcc_assert (!fieldsize || !next || TREE_CODE (next) != FIELD_DECL);
5249 tree size = TYPE_SIZE_UNIT (TREE_TYPE (local->val));
5250 gcc_checking_assert (compare_tree_int (size, fieldsize) == 0);
5251 }
5252 else
5253 fieldsize = tree_to_uhwi (DECL_SIZE_UNIT (local->field));
5254 }
5255 else
5256 fieldsize = int_size_in_bytes (TREE_TYPE (local->type));
5257
5258 /* Output the element's initial value. */
5259 if (local->val == NULL_TREE)
5260 assemble_zeros (fieldsize);
5261 else
5262 fieldsize = output_constant (local->val, fieldsize, align2,
5263 local->reverse, false);
5264
5265 /* Count its size. */
5266 local->total_bytes += fieldsize;
5267 }
5268
5269 /* Helper for output_constructor. From the LOCAL state, output an element
5270 that is a true bitfield or part of an outer one. BIT_OFFSET is the offset
5271 from the start of a possibly ongoing outer byte buffer. */
5272
5273 static void
5274 output_constructor_bitfield (oc_local_state *local, unsigned int bit_offset)
5275 {
5276 /* Bit size of this element. */
5277 HOST_WIDE_INT ebitsize
5278 = (local->field
5279 ? tree_to_uhwi (DECL_SIZE (local->field))
5280 : tree_to_uhwi (TYPE_SIZE (TREE_TYPE (local->type))));
5281
5282 /* Relative index of this element if this is an array component. */
5283 HOST_WIDE_INT relative_index
5284 = (!local->field
5285 ? (local->index
5286 ? (tree_to_shwi (local->index)
5287 - tree_to_shwi (local->min_index))
5288 : local->last_relative_index + 1)
5289 : 0);
5290
5291 /* Bit position of this element from the start of the containing
5292 constructor. */
5293 HOST_WIDE_INT constructor_relative_ebitpos
5294 = (local->field
5295 ? int_bit_position (local->field)
5296 : ebitsize * relative_index);
5297
5298 /* Bit position of this element from the start of a possibly ongoing
5299 outer byte buffer. */
5300 HOST_WIDE_INT byte_relative_ebitpos
5301 = bit_offset + constructor_relative_ebitpos;
5302
5303 /* From the start of a possibly ongoing outer byte buffer, offsets to
5304 the first bit of this element and to the first bit past the end of
5305 this element. */
5306 HOST_WIDE_INT next_offset = byte_relative_ebitpos;
5307 HOST_WIDE_INT end_offset = byte_relative_ebitpos + ebitsize;
5308
5309 local->last_relative_index = relative_index;
5310
5311 if (local->val == NULL_TREE)
5312 local->val = integer_zero_node;
5313
5314 while (TREE_CODE (local->val) == VIEW_CONVERT_EXPR
5315 || TREE_CODE (local->val) == NON_LVALUE_EXPR)
5316 local->val = TREE_OPERAND (local->val, 0);
5317
5318 if (TREE_CODE (local->val) != INTEGER_CST
5319 && TREE_CODE (local->val) != CONSTRUCTOR)
5320 {
5321 error ("invalid initial value for member %qE", DECL_NAME (local->field));
5322 return;
5323 }
5324
5325 /* If this field does not start in this (or next) byte, skip some bytes. */
5326 if (next_offset / BITS_PER_UNIT != local->total_bytes)
5327 {
5328 /* Output remnant of any bit field in previous bytes. */
5329 if (local->byte_buffer_in_use)
5330 {
5331 assemble_integer (GEN_INT (local->byte), 1, BITS_PER_UNIT, 1);
5332 local->total_bytes++;
5333 local->byte_buffer_in_use = false;
5334 }
5335
5336 /* If still not at proper byte, advance to there. */
5337 if (next_offset / BITS_PER_UNIT != local->total_bytes)
5338 {
5339 gcc_assert (next_offset / BITS_PER_UNIT >= local->total_bytes);
5340 assemble_zeros (next_offset / BITS_PER_UNIT - local->total_bytes);
5341 local->total_bytes = next_offset / BITS_PER_UNIT;
5342 }
5343 }
5344
5345 /* Set up the buffer if necessary. */
5346 if (!local->byte_buffer_in_use)
5347 {
5348 local->byte = 0;
5349 if (ebitsize > 0)
5350 local->byte_buffer_in_use = true;
5351 }
5352
5353 /* If this is nested constructor, recurse passing the bit offset and the
5354 pending data, then retrieve the new pending data afterwards. */
5355 if (TREE_CODE (local->val) == CONSTRUCTOR)
5356 {
5357 oc_outer_state temp_state;
5358 temp_state.bit_offset = next_offset % BITS_PER_UNIT;
5359 temp_state.byte = local->byte;
5360 local->total_bytes
5361 += output_constructor (local->val, 0, 0, local->reverse, &temp_state);
5362 local->byte = temp_state.byte;
5363 return;
5364 }
5365
5366 /* Otherwise, we must split the element into pieces that fall within
5367 separate bytes, and combine each byte with previous or following
5368 bit-fields. */
5369 while (next_offset < end_offset)
5370 {
5371 int this_time;
5372 int shift;
5373 unsigned HOST_WIDE_INT value;
5374 HOST_WIDE_INT next_byte = next_offset / BITS_PER_UNIT;
5375 HOST_WIDE_INT next_bit = next_offset % BITS_PER_UNIT;
5376
5377 /* Advance from byte to byte within this element when necessary. */
5378 while (next_byte != local->total_bytes)
5379 {
5380 assemble_integer (GEN_INT (local->byte), 1, BITS_PER_UNIT, 1);
5381 local->total_bytes++;
5382 local->byte = 0;
5383 }
5384
5385 /* Number of bits we can process at once (all part of the same byte). */
5386 this_time = MIN (end_offset - next_offset, BITS_PER_UNIT - next_bit);
5387 if (local->reverse ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN)
5388 {
5389 /* For big-endian data, take the most significant bits (of the
5390 bits that are significant) first and put them into bytes from
5391 the most significant end. */
5392 shift = end_offset - next_offset - this_time;
5393
5394 /* Don't try to take a bunch of bits that cross
5395 the word boundary in the INTEGER_CST. We can
5396 only select bits from one element. */
5397 if ((shift / HOST_BITS_PER_WIDE_INT)
5398 != ((shift + this_time - 1) / HOST_BITS_PER_WIDE_INT))
5399 {
5400 const int end = shift + this_time - 1;
5401 shift = end & -HOST_BITS_PER_WIDE_INT;
5402 this_time = end - shift + 1;
5403 }
5404
5405 /* Now get the bits we want to insert. */
5406 value = wi::extract_uhwi (wi::to_widest (local->val),
5407 shift, this_time);
5408
5409 /* Get the result. This works only when:
5410 1 <= this_time <= HOST_BITS_PER_WIDE_INT. */
5411 local->byte |= value << (BITS_PER_UNIT - this_time - next_bit);
5412 }
5413 else
5414 {
5415 /* On little-endian machines, take the least significant bits of
5416 the value first and pack them starting at the least significant
5417 bits of the bytes. */
5418 shift = next_offset - byte_relative_ebitpos;
5419
5420 /* Don't try to take a bunch of bits that cross
5421 the word boundary in the INTEGER_CST. We can
5422 only select bits from one element. */
5423 if ((shift / HOST_BITS_PER_WIDE_INT)
5424 != ((shift + this_time - 1) / HOST_BITS_PER_WIDE_INT))
5425 this_time
5426 = HOST_BITS_PER_WIDE_INT - (shift & (HOST_BITS_PER_WIDE_INT - 1));
5427
5428 /* Now get the bits we want to insert. */
5429 value = wi::extract_uhwi (wi::to_widest (local->val),
5430 shift, this_time);
5431
5432 /* Get the result. This works only when:
5433 1 <= this_time <= HOST_BITS_PER_WIDE_INT. */
5434 local->byte |= value << next_bit;
5435 }
5436
5437 next_offset += this_time;
5438 local->byte_buffer_in_use = true;
5439 }
5440 }
5441
5442 /* Subroutine of output_constant, used for CONSTRUCTORs (aggregate constants).
5443 Generate at least SIZE bytes, padding if necessary. OUTER designates the
5444 caller output state of relevance in recursive invocations. */
5445
5446 static unsigned HOST_WIDE_INT
5447 output_constructor (tree exp, unsigned HOST_WIDE_INT size, unsigned int align,
5448 bool reverse, oc_outer_state *outer)
5449 {
5450 unsigned HOST_WIDE_INT cnt;
5451 constructor_elt *ce;
5452 oc_local_state local;
5453
5454 /* Setup our local state to communicate with helpers. */
5455 local.exp = exp;
5456 local.type = TREE_TYPE (exp);
5457 local.size = size;
5458 local.align = align;
5459 if (TREE_CODE (local.type) == ARRAY_TYPE && TYPE_DOMAIN (local.type))
5460 local.min_index = TYPE_MIN_VALUE (TYPE_DOMAIN (local.type));
5461 else
5462 local.min_index = integer_zero_node;
5463
5464 local.total_bytes = 0;
5465 local.byte_buffer_in_use = outer != NULL;
5466 local.byte = outer ? outer->byte : 0;
5467 local.last_relative_index = -1;
5468 /* The storage order is specified for every aggregate type. */
5469 if (AGGREGATE_TYPE_P (local.type))
5470 local.reverse = TYPE_REVERSE_STORAGE_ORDER (local.type);
5471 else
5472 local.reverse = reverse;
5473
5474 gcc_assert (HOST_BITS_PER_WIDE_INT >= BITS_PER_UNIT);
5475
5476 /* As CE goes through the elements of the constant, FIELD goes through the
5477 structure fields if the constant is a structure. If the constant is a
5478 union, we override this by getting the field from the TREE_LIST element.
5479 But the constant could also be an array. Then FIELD is zero.
5480
5481 There is always a maximum of one element in the chain LINK for unions
5482 (even if the initializer in a source program incorrectly contains
5483 more one). */
5484
5485 if (TREE_CODE (local.type) == RECORD_TYPE)
5486 local.field = TYPE_FIELDS (local.type);
5487 else
5488 local.field = NULL_TREE;
5489
5490 for (cnt = 0;
5491 vec_safe_iterate (CONSTRUCTOR_ELTS (exp), cnt, &ce);
5492 cnt++, local.field = local.field ? DECL_CHAIN (local.field) : 0)
5493 {
5494 local.val = ce->value;
5495 local.index = NULL_TREE;
5496
5497 /* The element in a union constructor specifies the proper field
5498 or index. */
5499 if (RECORD_OR_UNION_TYPE_P (local.type) && ce->index != NULL_TREE)
5500 local.field = ce->index;
5501
5502 else if (TREE_CODE (local.type) == ARRAY_TYPE)
5503 local.index = ce->index;
5504
5505 if (local.field && flag_verbose_asm)
5506 fprintf (asm_out_file, "%s %s:\n",
5507 ASM_COMMENT_START,
5508 DECL_NAME (local.field)
5509 ? IDENTIFIER_POINTER (DECL_NAME (local.field))
5510 : "<anonymous>");
5511
5512 /* Eliminate the marker that makes a cast not be an lvalue. */
5513 if (local.val != NULL_TREE)
5514 STRIP_NOPS (local.val);
5515
5516 /* Output the current element, using the appropriate helper ... */
5517
5518 /* For an array slice not part of an outer bitfield. */
5519 if (!outer
5520 && local.index != NULL_TREE
5521 && TREE_CODE (local.index) == RANGE_EXPR)
5522 output_constructor_array_range (&local);
5523
5524 /* For a field that is neither a true bitfield nor part of an outer one,
5525 known to be at least byte aligned and multiple-of-bytes long. */
5526 else if (!outer
5527 && (local.field == NULL_TREE
5528 || !CONSTRUCTOR_BITFIELD_P (local.field)))
5529 output_constructor_regular_field (&local);
5530
5531 /* For a true bitfield or part of an outer one. Only INTEGER_CSTs are
5532 supported for scalar fields, so we may need to convert first. */
5533 else
5534 {
5535 if (TREE_CODE (local.val) == REAL_CST)
5536 local.val
5537 = fold_unary (VIEW_CONVERT_EXPR,
5538 build_nonstandard_integer_type
5539 (TYPE_PRECISION (TREE_TYPE (local.val)), 0),
5540 local.val);
5541 output_constructor_bitfield (&local, outer ? outer->bit_offset : 0);
5542 }
5543 }
5544
5545 /* If we are not at toplevel, save the pending data for our caller.
5546 Otherwise output the pending data and padding zeros as needed. */
5547 if (outer)
5548 outer->byte = local.byte;
5549 else
5550 {
5551 if (local.byte_buffer_in_use)
5552 {
5553 assemble_integer (GEN_INT (local.byte), 1, BITS_PER_UNIT, 1);
5554 local.total_bytes++;
5555 }
5556
5557 if ((unsigned HOST_WIDE_INT)local.total_bytes < local.size)
5558 {
5559 assemble_zeros (local.size - local.total_bytes);
5560 local.total_bytes = local.size;
5561 }
5562 }
5563
5564 return local.total_bytes;
5565 }
5566
5567 /* Mark DECL as weak. */
5568
5569 static void
5570 mark_weak (tree decl)
5571 {
5572 if (DECL_WEAK (decl))
5573 return;
5574
5575 struct symtab_node *n = symtab_node::get (decl);
5576 if (n && n->refuse_visibility_changes)
5577 error ("%+qD declared weak after being used", decl);
5578 DECL_WEAK (decl) = 1;
5579
5580 if (DECL_RTL_SET_P (decl)
5581 && MEM_P (DECL_RTL (decl))
5582 && XEXP (DECL_RTL (decl), 0)
5583 && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF)
5584 SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1;
5585 }
5586
5587 /* Merge weak status between NEWDECL and OLDDECL. */
5588
5589 void
5590 merge_weak (tree newdecl, tree olddecl)
5591 {
5592 if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
5593 {
5594 if (DECL_WEAK (newdecl) && TARGET_SUPPORTS_WEAK)
5595 {
5596 tree *pwd;
5597 /* We put the NEWDECL on the weak_decls list at some point
5598 and OLDDECL as well. Keep just OLDDECL on the list. */
5599 for (pwd = &weak_decls; *pwd; pwd = &TREE_CHAIN (*pwd))
5600 if (TREE_VALUE (*pwd) == newdecl)
5601 {
5602 *pwd = TREE_CHAIN (*pwd);
5603 break;
5604 }
5605 }
5606 return;
5607 }
5608
5609 if (DECL_WEAK (newdecl))
5610 {
5611 tree wd;
5612
5613 /* NEWDECL is weak, but OLDDECL is not. */
5614
5615 /* If we already output the OLDDECL, we're in trouble; we can't
5616 go back and make it weak. This should never happen in
5617 unit-at-a-time compilation. */
5618 gcc_assert (!TREE_ASM_WRITTEN (olddecl));
5619
5620 /* If we've already generated rtl referencing OLDDECL, we may
5621 have done so in a way that will not function properly with
5622 a weak symbol. Again in unit-at-a-time this should be
5623 impossible. */
5624 gcc_assert (!TREE_USED (olddecl)
5625 || !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)));
5626
5627 /* PR 49899: You cannot convert a static function into a weak, public function. */
5628 if (! TREE_PUBLIC (olddecl) && TREE_PUBLIC (newdecl))
5629 error ("weak declaration of %q+D being applied to a already "
5630 "existing, static definition", newdecl);
5631
5632 if (TARGET_SUPPORTS_WEAK)
5633 {
5634 /* We put the NEWDECL on the weak_decls list at some point.
5635 Replace it with the OLDDECL. */
5636 for (wd = weak_decls; wd; wd = TREE_CHAIN (wd))
5637 if (TREE_VALUE (wd) == newdecl)
5638 {
5639 TREE_VALUE (wd) = olddecl;
5640 break;
5641 }
5642 /* We may not find the entry on the list. If NEWDECL is a
5643 weak alias, then we will have already called
5644 globalize_decl to remove the entry; in that case, we do
5645 not need to do anything. */
5646 }
5647
5648 /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping. */
5649 mark_weak (olddecl);
5650 }
5651 else
5652 /* OLDDECL was weak, but NEWDECL was not explicitly marked as
5653 weak. Just update NEWDECL to indicate that it's weak too. */
5654 mark_weak (newdecl);
5655 }
5656
5657 /* Declare DECL to be a weak symbol. */
5658
5659 void
5660 declare_weak (tree decl)
5661 {
5662 gcc_assert (TREE_CODE (decl) != FUNCTION_DECL || !TREE_ASM_WRITTEN (decl));
5663 if (! TREE_PUBLIC (decl))
5664 {
5665 error ("weak declaration of %q+D must be public", decl);
5666 return;
5667 }
5668 else if (!TARGET_SUPPORTS_WEAK)
5669 warning (0, "weak declaration of %q+D not supported", decl);
5670
5671 mark_weak (decl);
5672 if (!lookup_attribute ("weak", DECL_ATTRIBUTES (decl)))
5673 DECL_ATTRIBUTES (decl)
5674 = tree_cons (get_identifier ("weak"), NULL, DECL_ATTRIBUTES (decl));
5675 }
5676
5677 static void
5678 weak_finish_1 (tree decl)
5679 {
5680 #if defined (ASM_WEAKEN_DECL) || defined (ASM_WEAKEN_LABEL)
5681 const char *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5682 #endif
5683
5684 if (! TREE_USED (decl))
5685 return;
5686
5687 #ifdef ASM_WEAKEN_DECL
5688 ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL);
5689 #else
5690 #ifdef ASM_WEAKEN_LABEL
5691 ASM_WEAKEN_LABEL (asm_out_file, name);
5692 #else
5693 #ifdef ASM_OUTPUT_WEAK_ALIAS
5694 {
5695 static bool warn_once = 0;
5696 if (! warn_once)
5697 {
5698 warning (0, "only weak aliases are supported in this configuration");
5699 warn_once = 1;
5700 }
5701 return;
5702 }
5703 #endif
5704 #endif
5705 #endif
5706 }
5707
5708 /* Fiven an assembly name, find the decl it is associated with. */
5709 static tree
5710 find_decl (tree target)
5711 {
5712 symtab_node *node = symtab_node::get_for_asmname (target);
5713 if (node)
5714 return node->decl;
5715 return NULL_TREE;
5716 }
5717
5718 /* This TREE_LIST contains weakref targets. */
5719
5720 static GTY(()) tree weakref_targets;
5721
5722 /* Emit any pending weak declarations. */
5723
5724 void
5725 weak_finish (void)
5726 {
5727 tree t;
5728
5729 for (t = weakref_targets; t; t = TREE_CHAIN (t))
5730 {
5731 tree alias_decl = TREE_PURPOSE (t);
5732 tree target = ultimate_transparent_alias_target (&TREE_VALUE (t));
5733
5734 if (! TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (alias_decl))
5735 || TREE_SYMBOL_REFERENCED (target))
5736 /* Remove alias_decl from the weak list, but leave entries for
5737 the target alone. */
5738 target = NULL_TREE;
5739 #ifndef ASM_OUTPUT_WEAKREF
5740 else if (! TREE_SYMBOL_REFERENCED (target))
5741 {
5742 /* Use ASM_WEAKEN_LABEL only if ASM_WEAKEN_DECL is not
5743 defined, otherwise we and weak_finish_1 would use
5744 different macros. */
5745 # if defined ASM_WEAKEN_LABEL && ! defined ASM_WEAKEN_DECL
5746 ASM_WEAKEN_LABEL (asm_out_file, IDENTIFIER_POINTER (target));
5747 # else
5748 tree decl = find_decl (target);
5749
5750 if (! decl)
5751 {
5752 decl = build_decl (DECL_SOURCE_LOCATION (alias_decl),
5753 TREE_CODE (alias_decl), target,
5754 TREE_TYPE (alias_decl));
5755
5756 DECL_EXTERNAL (decl) = 1;
5757 TREE_PUBLIC (decl) = 1;
5758 DECL_ARTIFICIAL (decl) = 1;
5759 TREE_NOTHROW (decl) = TREE_NOTHROW (alias_decl);
5760 TREE_USED (decl) = 1;
5761 }
5762
5763 weak_finish_1 (decl);
5764 # endif
5765 }
5766 #endif
5767
5768 {
5769 tree *p;
5770 tree t2;
5771
5772 /* Remove the alias and the target from the pending weak list
5773 so that we do not emit any .weak directives for the former,
5774 nor multiple .weak directives for the latter. */
5775 for (p = &weak_decls; (t2 = *p) ; )
5776 {
5777 if (TREE_VALUE (t2) == alias_decl
5778 || target == DECL_ASSEMBLER_NAME (TREE_VALUE (t2)))
5779 *p = TREE_CHAIN (t2);
5780 else
5781 p = &TREE_CHAIN (t2);
5782 }
5783
5784 /* Remove other weakrefs to the same target, to speed things up. */
5785 for (p = &TREE_CHAIN (t); (t2 = *p) ; )
5786 {
5787 if (target == ultimate_transparent_alias_target (&TREE_VALUE (t2)))
5788 *p = TREE_CHAIN (t2);
5789 else
5790 p = &TREE_CHAIN (t2);
5791 }
5792 }
5793 }
5794
5795 for (t = weak_decls; t; t = TREE_CHAIN (t))
5796 {
5797 tree decl = TREE_VALUE (t);
5798
5799 weak_finish_1 (decl);
5800 }
5801 }
5802
5803 /* Emit the assembly bits to indicate that DECL is globally visible. */
5804
5805 static void
5806 globalize_decl (tree decl)
5807 {
5808
5809 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
5810 if (DECL_WEAK (decl))
5811 {
5812 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
5813 tree *p, t;
5814
5815 #ifdef ASM_WEAKEN_DECL
5816 ASM_WEAKEN_DECL (asm_out_file, decl, name, 0);
5817 #else
5818 ASM_WEAKEN_LABEL (asm_out_file, name);
5819 #endif
5820
5821 /* Remove this function from the pending weak list so that
5822 we do not emit multiple .weak directives for it. */
5823 for (p = &weak_decls; (t = *p) ; )
5824 {
5825 if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
5826 *p = TREE_CHAIN (t);
5827 else
5828 p = &TREE_CHAIN (t);
5829 }
5830
5831 /* Remove weakrefs to the same target from the pending weakref
5832 list, for the same reason. */
5833 for (p = &weakref_targets; (t = *p) ; )
5834 {
5835 if (DECL_ASSEMBLER_NAME (decl)
5836 == ultimate_transparent_alias_target (&TREE_VALUE (t)))
5837 *p = TREE_CHAIN (t);
5838 else
5839 p = &TREE_CHAIN (t);
5840 }
5841
5842 return;
5843 }
5844 #endif
5845
5846 targetm.asm_out.globalize_decl_name (asm_out_file, decl);
5847 }
5848
5849 vec<alias_pair, va_gc> *alias_pairs;
5850
5851 /* Output the assembler code for a define (equate) using ASM_OUTPUT_DEF
5852 or ASM_OUTPUT_DEF_FROM_DECLS. The function defines the symbol whose
5853 tree node is DECL to have the value of the tree node TARGET. */
5854
5855 void
5856 do_assemble_alias (tree decl, tree target)
5857 {
5858 tree id;
5859
5860 /* Emulated TLS had better not get this var. */
5861 gcc_assert (!(!targetm.have_tls
5862 && VAR_P (decl)
5863 && DECL_THREAD_LOCAL_P (decl)));
5864
5865 if (TREE_ASM_WRITTEN (decl))
5866 return;
5867
5868 id = DECL_ASSEMBLER_NAME (decl);
5869 ultimate_transparent_alias_target (&id);
5870 ultimate_transparent_alias_target (&target);
5871
5872 /* We must force creation of DECL_RTL for debug info generation, even though
5873 we don't use it here. */
5874 make_decl_rtl (decl);
5875
5876 TREE_ASM_WRITTEN (decl) = 1;
5877 TREE_ASM_WRITTEN (DECL_ASSEMBLER_NAME (decl)) = 1;
5878 TREE_ASM_WRITTEN (id) = 1;
5879
5880 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5881 {
5882 if (!TREE_SYMBOL_REFERENCED (target))
5883 weakref_targets = tree_cons (decl, target, weakref_targets);
5884
5885 #ifdef ASM_OUTPUT_WEAKREF
5886 ASM_OUTPUT_WEAKREF (asm_out_file, decl,
5887 IDENTIFIER_POINTER (id),
5888 IDENTIFIER_POINTER (target));
5889 #else
5890 if (!TARGET_SUPPORTS_WEAK)
5891 {
5892 error_at (DECL_SOURCE_LOCATION (decl),
5893 "weakref is not supported in this configuration");
5894 return;
5895 }
5896 #endif
5897 return;
5898 }
5899
5900 #ifdef ASM_OUTPUT_DEF
5901 tree orig_decl = decl;
5902
5903 /* Make name accessible from other files, if appropriate. */
5904
5905 if (TREE_PUBLIC (decl) || TREE_PUBLIC (orig_decl))
5906 {
5907 globalize_decl (decl);
5908 maybe_assemble_visibility (decl);
5909 }
5910 if (TREE_CODE (decl) == FUNCTION_DECL
5911 && cgraph_node::get (decl)->ifunc_resolver)
5912 {
5913 #if defined (ASM_OUTPUT_TYPE_DIRECTIVE)
5914 if (targetm.has_ifunc_p ())
5915 ASM_OUTPUT_TYPE_DIRECTIVE
5916 (asm_out_file, IDENTIFIER_POINTER (id),
5917 IFUNC_ASM_TYPE);
5918 else
5919 #endif
5920 error_at (DECL_SOURCE_LOCATION (decl),
5921 "%qs is not supported on this target", "ifunc");
5922 }
5923
5924 # ifdef ASM_OUTPUT_DEF_FROM_DECLS
5925 ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
5926 # else
5927 ASM_OUTPUT_DEF (asm_out_file,
5928 IDENTIFIER_POINTER (id),
5929 IDENTIFIER_POINTER (target));
5930 # endif
5931 #elif defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
5932 {
5933 const char *name;
5934 tree *p, t;
5935
5936 name = IDENTIFIER_POINTER (id);
5937 # ifdef ASM_WEAKEN_DECL
5938 ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target));
5939 # else
5940 ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target));
5941 # endif
5942 /* Remove this function from the pending weak list so that
5943 we do not emit multiple .weak directives for it. */
5944 for (p = &weak_decls; (t = *p) ; )
5945 if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t))
5946 || id == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
5947 *p = TREE_CHAIN (t);
5948 else
5949 p = &TREE_CHAIN (t);
5950
5951 /* Remove weakrefs to the same target from the pending weakref
5952 list, for the same reason. */
5953 for (p = &weakref_targets; (t = *p) ; )
5954 {
5955 if (id == ultimate_transparent_alias_target (&TREE_VALUE (t)))
5956 *p = TREE_CHAIN (t);
5957 else
5958 p = &TREE_CHAIN (t);
5959 }
5960 }
5961 #endif
5962 }
5963
5964 /* Output .symver directive. */
5965
5966 void
5967 do_assemble_symver (tree decl, tree target)
5968 {
5969 tree id = DECL_ASSEMBLER_NAME (decl);
5970 ultimate_transparent_alias_target (&id);
5971 ultimate_transparent_alias_target (&target);
5972 #ifdef ASM_OUTPUT_SYMVER_DIRECTIVE
5973 ASM_OUTPUT_SYMVER_DIRECTIVE (asm_out_file,
5974 IDENTIFIER_POINTER (target),
5975 IDENTIFIER_POINTER (id));
5976 #else
5977 error ("symver is only supported on ELF platforms");
5978 #endif
5979 }
5980
5981 /* Emit an assembler directive to make the symbol for DECL an alias to
5982 the symbol for TARGET. */
5983
5984 void
5985 assemble_alias (tree decl, tree target)
5986 {
5987 tree target_decl;
5988
5989 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5990 {
5991 tree alias = DECL_ASSEMBLER_NAME (decl);
5992
5993 ultimate_transparent_alias_target (&target);
5994
5995 if (alias == target)
5996 error ("%qs symbol %q+D ultimately targets itself", "weakref", decl);
5997 if (TREE_PUBLIC (decl))
5998 error ("%qs symbol %q+D must have static linkage", "weakref", decl);
5999 }
6000 else
6001 {
6002 #if !defined (ASM_OUTPUT_DEF)
6003 # if !defined(ASM_OUTPUT_WEAK_ALIAS) && !defined (ASM_WEAKEN_DECL)
6004 error_at (DECL_SOURCE_LOCATION (decl),
6005 "alias definitions not supported in this configuration");
6006 TREE_ASM_WRITTEN (decl) = 1;
6007 return;
6008 # else
6009 if (!DECL_WEAK (decl))
6010 {
6011 /* NB: ifunc_resolver isn't set when an error is detected. */
6012 if (TREE_CODE (decl) == FUNCTION_DECL
6013 && lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl)))
6014 error_at (DECL_SOURCE_LOCATION (decl),
6015 "%qs is not supported in this configuration", "ifunc");
6016 else
6017 error_at (DECL_SOURCE_LOCATION (decl),
6018 "only weak aliases are supported in this configuration");
6019 TREE_ASM_WRITTEN (decl) = 1;
6020 return;
6021 }
6022 # endif
6023 #endif
6024 }
6025 TREE_USED (decl) = 1;
6026
6027 /* Allow aliases to aliases. */
6028 if (TREE_CODE (decl) == FUNCTION_DECL)
6029 cgraph_node::get_create (decl)->alias = true;
6030 else
6031 varpool_node::get_create (decl)->alias = true;
6032
6033 /* If the target has already been emitted, we don't have to queue the
6034 alias. This saves a tad of memory. */
6035 if (symtab->global_info_ready)
6036 target_decl = find_decl (target);
6037 else
6038 target_decl= NULL;
6039 if ((target_decl && TREE_ASM_WRITTEN (target_decl))
6040 || symtab->state >= EXPANSION)
6041 do_assemble_alias (decl, target);
6042 else
6043 {
6044 alias_pair p = {decl, target};
6045 vec_safe_push (alias_pairs, p);
6046 }
6047 }
6048
6049 /* Record and output a table of translations from original function
6050 to its transaction aware clone. Note that tm_pure functions are
6051 considered to be their own clone. */
6052
6053 struct tm_clone_hasher : ggc_cache_ptr_hash<tree_map>
6054 {
6055 static hashval_t hash (tree_map *m) { return tree_map_hash (m); }
6056 static bool equal (tree_map *a, tree_map *b) { return tree_map_eq (a, b); }
6057
6058 static int
6059 keep_cache_entry (tree_map *&e)
6060 {
6061 return ggc_marked_p (e->base.from);
6062 }
6063 };
6064
6065 static GTY((cache)) hash_table<tm_clone_hasher> *tm_clone_hash;
6066
6067 void
6068 record_tm_clone_pair (tree o, tree n)
6069 {
6070 struct tree_map **slot, *h;
6071
6072 if (tm_clone_hash == NULL)
6073 tm_clone_hash = hash_table<tm_clone_hasher>::create_ggc (32);
6074
6075 h = ggc_alloc<tree_map> ();
6076 h->hash = htab_hash_pointer (o);
6077 h->base.from = o;
6078 h->to = n;
6079
6080 slot = tm_clone_hash->find_slot_with_hash (h, h->hash, INSERT);
6081 *slot = h;
6082 }
6083
6084 tree
6085 get_tm_clone_pair (tree o)
6086 {
6087 if (tm_clone_hash)
6088 {
6089 struct tree_map *h, in;
6090
6091 in.base.from = o;
6092 in.hash = htab_hash_pointer (o);
6093 h = tm_clone_hash->find_with_hash (&in, in.hash);
6094 if (h)
6095 return h->to;
6096 }
6097 return NULL_TREE;
6098 }
6099
6100 struct tm_alias_pair
6101 {
6102 unsigned int uid;
6103 tree from;
6104 tree to;
6105 };
6106
6107
6108 /* Dump the actual pairs to the .tm_clone_table section. */
6109
6110 static void
6111 dump_tm_clone_pairs (vec<tm_alias_pair> tm_alias_pairs)
6112 {
6113 unsigned i;
6114 tm_alias_pair *p;
6115 bool switched = false;
6116
6117 FOR_EACH_VEC_ELT (tm_alias_pairs, i, p)
6118 {
6119 tree src = p->from;
6120 tree dst = p->to;
6121 struct cgraph_node *src_n = cgraph_node::get (src);
6122 struct cgraph_node *dst_n = cgraph_node::get (dst);
6123
6124 /* The function ipa_tm_create_version() marks the clone as needed if
6125 the original function was needed. But we also mark the clone as
6126 needed if we ever called the clone indirectly through
6127 TM_GETTMCLONE. If neither of these are true, we didn't generate
6128 a clone, and we didn't call it indirectly... no sense keeping it
6129 in the clone table. */
6130 if (!dst_n || !dst_n->definition)
6131 continue;
6132
6133 /* This covers the case where we have optimized the original
6134 function away, and only access the transactional clone. */
6135 if (!src_n || !src_n->definition)
6136 continue;
6137
6138 if (!switched)
6139 {
6140 switch_to_section (targetm.asm_out.tm_clone_table_section ());
6141 assemble_align (POINTER_SIZE);
6142 switched = true;
6143 }
6144
6145 assemble_integer (XEXP (DECL_RTL (src), 0),
6146 POINTER_SIZE_UNITS, POINTER_SIZE, 1);
6147 assemble_integer (XEXP (DECL_RTL (dst), 0),
6148 POINTER_SIZE_UNITS, POINTER_SIZE, 1);
6149 }
6150 }
6151
6152 /* Provide a default for the tm_clone_table section. */
6153
6154 section *
6155 default_clone_table_section (void)
6156 {
6157 return get_named_section (NULL, ".tm_clone_table", 3);
6158 }
6159
6160 /* Helper comparison function for qsorting by the DECL_UID stored in
6161 alias_pair->emitted_diags. */
6162
6163 static int
6164 tm_alias_pair_cmp (const void *x, const void *y)
6165 {
6166 const tm_alias_pair *p1 = (const tm_alias_pair *) x;
6167 const tm_alias_pair *p2 = (const tm_alias_pair *) y;
6168 if (p1->uid < p2->uid)
6169 return -1;
6170 if (p1->uid > p2->uid)
6171 return 1;
6172 return 0;
6173 }
6174
6175 void
6176 finish_tm_clone_pairs (void)
6177 {
6178 vec<tm_alias_pair> tm_alias_pairs = vNULL;
6179
6180 if (tm_clone_hash == NULL)
6181 return;
6182
6183 /* We need a determenistic order for the .tm_clone_table, otherwise
6184 we will get bootstrap comparison failures, so dump the hash table
6185 to a vector, sort it, and dump the vector. */
6186
6187 /* Dump the hashtable to a vector. */
6188 tree_map *map;
6189 hash_table<tm_clone_hasher>::iterator iter;
6190 FOR_EACH_HASH_TABLE_ELEMENT (*tm_clone_hash, map, tree_map *, iter)
6191 {
6192 tm_alias_pair p = {DECL_UID (map->base.from), map->base.from, map->to};
6193 tm_alias_pairs.safe_push (p);
6194 }
6195 /* Sort it. */
6196 tm_alias_pairs.qsort (tm_alias_pair_cmp);
6197
6198 /* Dump it. */
6199 dump_tm_clone_pairs (tm_alias_pairs);
6200
6201 tm_clone_hash->empty ();
6202 tm_clone_hash = NULL;
6203 tm_alias_pairs.release ();
6204 }
6205
6206
6207 /* Emit an assembler directive to set symbol for DECL visibility to
6208 the visibility type VIS, which must not be VISIBILITY_DEFAULT. */
6209
6210 void
6211 default_assemble_visibility (tree decl ATTRIBUTE_UNUSED,
6212 int vis ATTRIBUTE_UNUSED)
6213 {
6214 #ifdef HAVE_GAS_HIDDEN
6215 static const char * const visibility_types[] = {
6216 NULL, "protected", "hidden", "internal"
6217 };
6218
6219 const char *name, *type;
6220 tree id;
6221
6222 id = DECL_ASSEMBLER_NAME (decl);
6223 ultimate_transparent_alias_target (&id);
6224 name = IDENTIFIER_POINTER (id);
6225
6226 type = visibility_types[vis];
6227
6228 fprintf (asm_out_file, "\t.%s\t", type);
6229 assemble_name (asm_out_file, name);
6230 fprintf (asm_out_file, "\n");
6231 #else
6232 if (!DECL_ARTIFICIAL (decl))
6233 warning (OPT_Wattributes, "visibility attribute not supported "
6234 "in this configuration; ignored");
6235 #endif
6236 }
6237
6238 /* A helper function to call assemble_visibility when needed for a decl. */
6239
6240 int
6241 maybe_assemble_visibility (tree decl)
6242 {
6243 enum symbol_visibility vis = DECL_VISIBILITY (decl);
6244 if (vis != VISIBILITY_DEFAULT)
6245 {
6246 targetm.asm_out.assemble_visibility (decl, vis);
6247 return 1;
6248 }
6249 else
6250 return 0;
6251 }
6252
6253 /* Returns 1 if the target configuration supports defining public symbols
6254 so that one of them will be chosen at link time instead of generating a
6255 multiply-defined symbol error, whether through the use of weak symbols or
6256 a target-specific mechanism for having duplicates discarded. */
6257
6258 int
6259 supports_one_only (void)
6260 {
6261 if (SUPPORTS_ONE_ONLY)
6262 return 1;
6263 return TARGET_SUPPORTS_WEAK;
6264 }
6265
6266 /* Set up DECL as a public symbol that can be defined in multiple
6267 translation units without generating a linker error. */
6268
6269 void
6270 make_decl_one_only (tree decl, tree comdat_group)
6271 {
6272 struct symtab_node *symbol;
6273 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
6274
6275 TREE_PUBLIC (decl) = 1;
6276
6277 if (VAR_P (decl))
6278 symbol = varpool_node::get_create (decl);
6279 else
6280 symbol = cgraph_node::get_create (decl);
6281
6282 if (SUPPORTS_ONE_ONLY)
6283 {
6284 #ifdef MAKE_DECL_ONE_ONLY
6285 MAKE_DECL_ONE_ONLY (decl);
6286 #endif
6287 symbol->set_comdat_group (comdat_group);
6288 }
6289 else if (VAR_P (decl)
6290 && (DECL_INITIAL (decl) == 0
6291 || (!in_lto_p && DECL_INITIAL (decl) == error_mark_node)))
6292 DECL_COMMON (decl) = 1;
6293 else
6294 {
6295 gcc_assert (TARGET_SUPPORTS_WEAK);
6296 DECL_WEAK (decl) = 1;
6297 }
6298 }
6299
6300 void
6301 init_varasm_once (void)
6302 {
6303 section_htab = hash_table<section_hasher>::create_ggc (31);
6304 object_block_htab = hash_table<object_block_hasher>::create_ggc (31);
6305 const_desc_htab = hash_table<tree_descriptor_hasher>::create_ggc (1009);
6306
6307 shared_constant_pool = create_constant_pool ();
6308
6309 #ifdef TEXT_SECTION_ASM_OP
6310 text_section = get_unnamed_section (SECTION_CODE, output_section_asm_op,
6311 TEXT_SECTION_ASM_OP);
6312 #endif
6313
6314 #ifdef DATA_SECTION_ASM_OP
6315 data_section = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
6316 DATA_SECTION_ASM_OP);
6317 #endif
6318
6319 #ifdef SDATA_SECTION_ASM_OP
6320 sdata_section = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
6321 SDATA_SECTION_ASM_OP);
6322 #endif
6323
6324 #ifdef READONLY_DATA_SECTION_ASM_OP
6325 readonly_data_section = get_unnamed_section (0, output_section_asm_op,
6326 READONLY_DATA_SECTION_ASM_OP);
6327 #endif
6328
6329 #ifdef CTORS_SECTION_ASM_OP
6330 ctors_section = get_unnamed_section (0, output_section_asm_op,
6331 CTORS_SECTION_ASM_OP);
6332 #endif
6333
6334 #ifdef DTORS_SECTION_ASM_OP
6335 dtors_section = get_unnamed_section (0, output_section_asm_op,
6336 DTORS_SECTION_ASM_OP);
6337 #endif
6338
6339 #ifdef BSS_SECTION_ASM_OP
6340 bss_section = get_unnamed_section (SECTION_WRITE | SECTION_BSS,
6341 output_section_asm_op,
6342 BSS_SECTION_ASM_OP);
6343 #endif
6344
6345 #ifdef SBSS_SECTION_ASM_OP
6346 sbss_section = get_unnamed_section (SECTION_WRITE | SECTION_BSS,
6347 output_section_asm_op,
6348 SBSS_SECTION_ASM_OP);
6349 #endif
6350
6351 tls_comm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
6352 | SECTION_COMMON, emit_tls_common);
6353 lcomm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
6354 | SECTION_COMMON, emit_local);
6355 comm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
6356 | SECTION_COMMON, emit_common);
6357
6358 #if defined ASM_OUTPUT_ALIGNED_BSS
6359 bss_noswitch_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS,
6360 emit_bss);
6361 #endif
6362
6363 targetm.asm_out.init_sections ();
6364
6365 if (readonly_data_section == NULL)
6366 readonly_data_section = text_section;
6367
6368 #ifdef ASM_OUTPUT_EXTERNAL
6369 pending_assemble_externals_set = new hash_set<tree>;
6370 #endif
6371 }
6372
6373 enum tls_model
6374 decl_default_tls_model (const_tree decl)
6375 {
6376 enum tls_model kind;
6377 bool is_local;
6378
6379 is_local = targetm.binds_local_p (decl);
6380 if (!flag_shlib)
6381 {
6382 if (is_local)
6383 kind = TLS_MODEL_LOCAL_EXEC;
6384 else
6385 kind = TLS_MODEL_INITIAL_EXEC;
6386 }
6387
6388 /* Local dynamic is inefficient when we're not combining the
6389 parts of the address. */
6390 else if (optimize && is_local)
6391 kind = TLS_MODEL_LOCAL_DYNAMIC;
6392 else
6393 kind = TLS_MODEL_GLOBAL_DYNAMIC;
6394 if (kind < flag_tls_default)
6395 kind = flag_tls_default;
6396
6397 return kind;
6398 }
6399
6400 /* Select a set of attributes for section NAME based on the properties
6401 of DECL and whether or not RELOC indicates that DECL's initializer
6402 might contain runtime relocations.
6403
6404 We make the section read-only and executable for a function decl,
6405 read-only for a const data decl, and writable for a non-const data decl. */
6406
6407 unsigned int
6408 default_section_type_flags (tree decl, const char *name, int reloc)
6409 {
6410 unsigned int flags;
6411
6412 if (decl && TREE_CODE (decl) == FUNCTION_DECL)
6413 flags = SECTION_CODE;
6414 else if (decl)
6415 {
6416 enum section_category category
6417 = categorize_decl_for_section (decl, reloc);
6418 if (decl_readonly_section_1 (category))
6419 flags = 0;
6420 else if (category == SECCAT_DATA_REL_RO
6421 || category == SECCAT_DATA_REL_RO_LOCAL)
6422 flags = SECTION_WRITE | SECTION_RELRO;
6423 else
6424 flags = SECTION_WRITE;
6425 }
6426 else
6427 {
6428 flags = SECTION_WRITE;
6429 if (strcmp (name, ".data.rel.ro") == 0
6430 || strcmp (name, ".data.rel.ro.local") == 0)
6431 flags |= SECTION_RELRO;
6432 }
6433
6434 if (decl && DECL_P (decl) && DECL_COMDAT_GROUP (decl))
6435 flags |= SECTION_LINKONCE;
6436
6437 if (strcmp (name, ".vtable_map_vars") == 0)
6438 flags |= SECTION_LINKONCE;
6439
6440 if (decl && VAR_P (decl) && DECL_THREAD_LOCAL_P (decl))
6441 flags |= SECTION_TLS | SECTION_WRITE;
6442
6443 if (strcmp (name, ".bss") == 0
6444 || strncmp (name, ".bss.", 5) == 0
6445 || strncmp (name, ".gnu.linkonce.b.", 16) == 0
6446 || strcmp (name, ".persistent.bss") == 0
6447 || strcmp (name, ".sbss") == 0
6448 || strncmp (name, ".sbss.", 6) == 0
6449 || strncmp (name, ".gnu.linkonce.sb.", 17) == 0)
6450 flags |= SECTION_BSS;
6451
6452 if (strcmp (name, ".tdata") == 0
6453 || strncmp (name, ".tdata.", 7) == 0
6454 || strncmp (name, ".gnu.linkonce.td.", 17) == 0)
6455 flags |= SECTION_TLS;
6456
6457 if (strcmp (name, ".tbss") == 0
6458 || strncmp (name, ".tbss.", 6) == 0
6459 || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
6460 flags |= SECTION_TLS | SECTION_BSS;
6461
6462 if (strcmp (name, ".noinit") == 0)
6463 flags |= SECTION_WRITE | SECTION_BSS | SECTION_NOTYPE;
6464
6465 /* Various sections have special ELF types that the assembler will
6466 assign by default based on the name. They are neither SHT_PROGBITS
6467 nor SHT_NOBITS, so when changing sections we don't want to print a
6468 section type (@progbits or @nobits). Rather than duplicating the
6469 assembler's knowledge of what those special name patterns are, just
6470 let the assembler choose the type if we don't know a specific
6471 reason to set it to something other than the default. SHT_PROGBITS
6472 is the default for sections whose name is not specially known to
6473 the assembler, so it does no harm to leave the choice to the
6474 assembler when @progbits is the best thing we know to use. If
6475 someone is silly enough to emit code or TLS variables to one of
6476 these sections, then don't handle them specially.
6477
6478 default_elf_asm_named_section (below) handles the BSS, TLS, ENTSIZE, and
6479 LINKONCE cases when NOTYPE is not set, so leave those to its logic. */
6480 if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS | SECTION_ENTSIZE))
6481 && !(HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE)))
6482 flags |= SECTION_NOTYPE;
6483
6484 return flags;
6485 }
6486
6487 /* Return true if the target supports some form of global BSS,
6488 either through bss_noswitch_section, or by selecting a BSS
6489 section in TARGET_ASM_SELECT_SECTION. */
6490
6491 bool
6492 have_global_bss_p (void)
6493 {
6494 return bss_noswitch_section || targetm.have_switchable_bss_sections;
6495 }
6496
6497 /* Output assembly to switch to section NAME with attribute FLAGS.
6498 Four variants for common object file formats. */
6499
6500 void
6501 default_no_named_section (const char *name ATTRIBUTE_UNUSED,
6502 unsigned int flags ATTRIBUTE_UNUSED,
6503 tree decl ATTRIBUTE_UNUSED)
6504 {
6505 /* Some object formats don't support named sections at all. The
6506 front-end should already have flagged this as an error. */
6507 gcc_unreachable ();
6508 }
6509
6510 #ifndef TLS_SECTION_ASM_FLAG
6511 #define TLS_SECTION_ASM_FLAG 'T'
6512 #endif
6513
6514 void
6515 default_elf_asm_named_section (const char *name, unsigned int flags,
6516 tree decl)
6517 {
6518 char flagchars[11], *f = flagchars;
6519 unsigned int numeric_value = 0;
6520
6521 /* If we have already declared this section, we can use an
6522 abbreviated form to switch back to it -- unless this section is
6523 part of a COMDAT groups, in which case GAS requires the full
6524 declaration every time. */
6525 if (!(HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
6526 && (flags & SECTION_DECLARED))
6527 {
6528 fprintf (asm_out_file, "\t.section\t%s\n", name);
6529 return;
6530 }
6531
6532 /* If we have a machine specific flag, then use the numeric value to pass
6533 this on to GAS. */
6534 if (targetm.asm_out.elf_flags_numeric (flags, &numeric_value))
6535 snprintf (f, sizeof (flagchars), "0x%08x", numeric_value);
6536 else
6537 {
6538 if (!(flags & SECTION_DEBUG))
6539 *f++ = 'a';
6540 #if HAVE_GAS_SECTION_EXCLUDE
6541 if (flags & SECTION_EXCLUDE)
6542 *f++ = 'e';
6543 #endif
6544 if (flags & SECTION_WRITE)
6545 *f++ = 'w';
6546 if (flags & SECTION_CODE)
6547 *f++ = 'x';
6548 if (flags & SECTION_SMALL)
6549 *f++ = 's';
6550 if (flags & SECTION_MERGE)
6551 *f++ = 'M';
6552 if (flags & SECTION_STRINGS)
6553 *f++ = 'S';
6554 if (flags & SECTION_TLS)
6555 *f++ = TLS_SECTION_ASM_FLAG;
6556 if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
6557 *f++ = 'G';
6558 #ifdef MACH_DEP_SECTION_ASM_FLAG
6559 if (flags & SECTION_MACH_DEP)
6560 *f++ = MACH_DEP_SECTION_ASM_FLAG;
6561 #endif
6562 *f = '\0';
6563 }
6564
6565 fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
6566
6567 /* default_section_type_flags (above) knows which flags need special
6568 handling here, and sets NOTYPE when none of these apply so that the
6569 assembler's logic for default types can apply to user-chosen
6570 section names. */
6571 if (!(flags & SECTION_NOTYPE))
6572 {
6573 const char *type;
6574 const char *format;
6575
6576 if (flags & SECTION_BSS)
6577 type = "nobits";
6578 else
6579 type = "progbits";
6580
6581 format = ",@%s";
6582 /* On platforms that use "@" as the assembly comment character,
6583 use "%" instead. */
6584 if (strcmp (ASM_COMMENT_START, "@") == 0)
6585 format = ",%%%s";
6586 fprintf (asm_out_file, format, type);
6587
6588 if (flags & SECTION_ENTSIZE)
6589 fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
6590 if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
6591 {
6592 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6593 fprintf (asm_out_file, ",%s,comdat", IDENTIFIER_POINTER (decl));
6594 else
6595 fprintf (asm_out_file, ",%s,comdat",
6596 IDENTIFIER_POINTER (DECL_COMDAT_GROUP (decl)));
6597 }
6598 }
6599
6600 putc ('\n', asm_out_file);
6601 }
6602
6603 void
6604 default_coff_asm_named_section (const char *name, unsigned int flags,
6605 tree decl ATTRIBUTE_UNUSED)
6606 {
6607 char flagchars[8], *f = flagchars;
6608
6609 if (flags & SECTION_WRITE)
6610 *f++ = 'w';
6611 if (flags & SECTION_CODE)
6612 *f++ = 'x';
6613 *f = '\0';
6614
6615 fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
6616 }
6617
6618 void
6619 default_pe_asm_named_section (const char *name, unsigned int flags,
6620 tree decl)
6621 {
6622 default_coff_asm_named_section (name, flags, decl);
6623
6624 if (flags & SECTION_LINKONCE)
6625 {
6626 /* Functions may have been compiled at various levels of
6627 optimization so we can't use `same_size' here.
6628 Instead, have the linker pick one. */
6629 fprintf (asm_out_file, "\t.linkonce %s\n",
6630 (flags & SECTION_CODE ? "discard" : "same_size"));
6631 }
6632 }
6633 \f
6634 /* The lame default section selector. */
6635
6636 section *
6637 default_select_section (tree decl, int reloc,
6638 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
6639 {
6640 if (DECL_P (decl))
6641 {
6642 if (decl_readonly_section (decl, reloc))
6643 return readonly_data_section;
6644 }
6645 else if (TREE_CODE (decl) == CONSTRUCTOR)
6646 {
6647 if (! ((flag_pic && reloc)
6648 || !TREE_READONLY (decl)
6649 || TREE_SIDE_EFFECTS (decl)
6650 || !TREE_CONSTANT (decl)))
6651 return readonly_data_section;
6652 }
6653 else if (TREE_CODE (decl) == STRING_CST)
6654 return readonly_data_section;
6655 else if (! (flag_pic && reloc))
6656 return readonly_data_section;
6657
6658 return data_section;
6659 }
6660
6661 enum section_category
6662 categorize_decl_for_section (const_tree decl, int reloc)
6663 {
6664 enum section_category ret;
6665
6666 if (TREE_CODE (decl) == FUNCTION_DECL)
6667 return SECCAT_TEXT;
6668 else if (TREE_CODE (decl) == STRING_CST)
6669 {
6670 if ((flag_sanitize & SANITIZE_ADDRESS)
6671 && asan_protect_global (CONST_CAST_TREE (decl)))
6672 /* or !flag_merge_constants */
6673 return SECCAT_RODATA;
6674 else
6675 return SECCAT_RODATA_MERGE_STR;
6676 }
6677 else if (VAR_P (decl))
6678 {
6679 tree d = CONST_CAST_TREE (decl);
6680 if (bss_initializer_p (decl))
6681 ret = SECCAT_BSS;
6682 else if (! TREE_READONLY (decl)
6683 || TREE_SIDE_EFFECTS (decl)
6684 || (DECL_INITIAL (decl)
6685 && ! TREE_CONSTANT (DECL_INITIAL (decl))))
6686 {
6687 /* Here the reloc_rw_mask is not testing whether the section should
6688 be read-only or not, but whether the dynamic link will have to
6689 do something. If so, we wish to segregate the data in order to
6690 minimize cache misses inside the dynamic linker. */
6691 if (reloc & targetm.asm_out.reloc_rw_mask ())
6692 ret = reloc == 1 ? SECCAT_DATA_REL_LOCAL : SECCAT_DATA_REL;
6693 else
6694 ret = SECCAT_DATA;
6695 }
6696 else if (reloc & targetm.asm_out.reloc_rw_mask ())
6697 ret = reloc == 1 ? SECCAT_DATA_REL_RO_LOCAL : SECCAT_DATA_REL_RO;
6698 else if (reloc || flag_merge_constants < 2
6699 || ((flag_sanitize & SANITIZE_ADDRESS)
6700 /* PR 81697: for architectures that use section anchors we
6701 need to ignore DECL_RTL_SET_P (decl) for string constants
6702 inside this asan_protect_global call because otherwise
6703 we'll wrongly put them into SECCAT_RODATA_MERGE_CONST
6704 section, set DECL_RTL (decl) later on and add DECL to
6705 protected globals via successive asan_protect_global
6706 calls. In this scenario we'll end up with wrong
6707 alignment of these strings at runtime and possible ASan
6708 false positives. */
6709 && asan_protect_global (d, use_object_blocks_p ()
6710 && use_blocks_for_decl_p (d))))
6711 /* C and C++ don't allow different variables to share the same
6712 location. -fmerge-all-constants allows even that (at the
6713 expense of not conforming). */
6714 ret = SECCAT_RODATA;
6715 else if (DECL_INITIAL (decl)
6716 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
6717 ret = SECCAT_RODATA_MERGE_STR_INIT;
6718 else
6719 ret = SECCAT_RODATA_MERGE_CONST;
6720 }
6721 else if (TREE_CODE (decl) == CONSTRUCTOR)
6722 {
6723 if ((reloc & targetm.asm_out.reloc_rw_mask ())
6724 || TREE_SIDE_EFFECTS (decl)
6725 || ! TREE_CONSTANT (decl))
6726 ret = SECCAT_DATA;
6727 else
6728 ret = SECCAT_RODATA;
6729 }
6730 else
6731 ret = SECCAT_RODATA;
6732
6733 /* There are no read-only thread-local sections. */
6734 if (VAR_P (decl) && DECL_THREAD_LOCAL_P (decl))
6735 {
6736 /* Note that this would be *just* SECCAT_BSS, except that there's
6737 no concept of a read-only thread-local-data section. */
6738 if (ret == SECCAT_BSS
6739 || DECL_INITIAL (decl) == NULL
6740 || (flag_zero_initialized_in_bss
6741 && initializer_zerop (DECL_INITIAL (decl))))
6742 ret = SECCAT_TBSS;
6743 else
6744 ret = SECCAT_TDATA;
6745 }
6746
6747 /* If the target uses small data sections, select it. */
6748 else if (targetm.in_small_data_p (decl))
6749 {
6750 if (ret == SECCAT_BSS)
6751 ret = SECCAT_SBSS;
6752 else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
6753 ret = SECCAT_SRODATA;
6754 else
6755 ret = SECCAT_SDATA;
6756 }
6757
6758 return ret;
6759 }
6760
6761 static bool
6762 decl_readonly_section_1 (enum section_category category)
6763 {
6764 switch (category)
6765 {
6766 case SECCAT_RODATA:
6767 case SECCAT_RODATA_MERGE_STR:
6768 case SECCAT_RODATA_MERGE_STR_INIT:
6769 case SECCAT_RODATA_MERGE_CONST:
6770 case SECCAT_SRODATA:
6771 return true;
6772 default:
6773 return false;
6774 }
6775 }
6776
6777 bool
6778 decl_readonly_section (const_tree decl, int reloc)
6779 {
6780 return decl_readonly_section_1 (categorize_decl_for_section (decl, reloc));
6781 }
6782
6783 /* Select a section based on the above categorization. */
6784
6785 section *
6786 default_elf_select_section (tree decl, int reloc,
6787 unsigned HOST_WIDE_INT align)
6788 {
6789 const char *sname;
6790
6791 switch (categorize_decl_for_section (decl, reloc))
6792 {
6793 case SECCAT_TEXT:
6794 /* We're not supposed to be called on FUNCTION_DECLs. */
6795 gcc_unreachable ();
6796 case SECCAT_RODATA:
6797 return readonly_data_section;
6798 case SECCAT_RODATA_MERGE_STR:
6799 return mergeable_string_section (decl, align, 0);
6800 case SECCAT_RODATA_MERGE_STR_INIT:
6801 return mergeable_string_section (DECL_INITIAL (decl), align, 0);
6802 case SECCAT_RODATA_MERGE_CONST:
6803 return mergeable_constant_section (DECL_MODE (decl), align, 0);
6804 case SECCAT_SRODATA:
6805 sname = ".sdata2";
6806 break;
6807 case SECCAT_DATA:
6808 return data_section;
6809 case SECCAT_DATA_REL:
6810 sname = ".data.rel";
6811 break;
6812 case SECCAT_DATA_REL_LOCAL:
6813 sname = ".data.rel.local";
6814 break;
6815 case SECCAT_DATA_REL_RO:
6816 sname = ".data.rel.ro";
6817 break;
6818 case SECCAT_DATA_REL_RO_LOCAL:
6819 sname = ".data.rel.ro.local";
6820 break;
6821 case SECCAT_SDATA:
6822 sname = ".sdata";
6823 break;
6824 case SECCAT_TDATA:
6825 sname = ".tdata";
6826 break;
6827 case SECCAT_BSS:
6828 if (DECL_P (decl)
6829 && lookup_attribute ("noinit", DECL_ATTRIBUTES (decl)) != NULL_TREE)
6830 {
6831 sname = ".noinit";
6832 break;
6833 }
6834
6835 if (bss_section)
6836 return bss_section;
6837 sname = ".bss";
6838 break;
6839 case SECCAT_SBSS:
6840 sname = ".sbss";
6841 break;
6842 case SECCAT_TBSS:
6843 sname = ".tbss";
6844 break;
6845 default:
6846 gcc_unreachable ();
6847 }
6848
6849 return get_named_section (decl, sname, reloc);
6850 }
6851
6852 /* Construct a unique section name based on the decl name and the
6853 categorization performed above. */
6854
6855 void
6856 default_unique_section (tree decl, int reloc)
6857 {
6858 /* We only need to use .gnu.linkonce if we don't have COMDAT groups. */
6859 bool one_only = DECL_ONE_ONLY (decl) && !HAVE_COMDAT_GROUP;
6860 const char *prefix, *name, *linkonce;
6861 char *string;
6862 tree id;
6863
6864 switch (categorize_decl_for_section (decl, reloc))
6865 {
6866 case SECCAT_TEXT:
6867 prefix = one_only ? ".t" : ".text";
6868 break;
6869 case SECCAT_RODATA:
6870 case SECCAT_RODATA_MERGE_STR:
6871 case SECCAT_RODATA_MERGE_STR_INIT:
6872 case SECCAT_RODATA_MERGE_CONST:
6873 prefix = one_only ? ".r" : ".rodata";
6874 break;
6875 case SECCAT_SRODATA:
6876 prefix = one_only ? ".s2" : ".sdata2";
6877 break;
6878 case SECCAT_DATA:
6879 prefix = one_only ? ".d" : ".data";
6880 break;
6881 case SECCAT_DATA_REL:
6882 prefix = one_only ? ".d.rel" : ".data.rel";
6883 break;
6884 case SECCAT_DATA_REL_LOCAL:
6885 prefix = one_only ? ".d.rel.local" : ".data.rel.local";
6886 break;
6887 case SECCAT_DATA_REL_RO:
6888 prefix = one_only ? ".d.rel.ro" : ".data.rel.ro";
6889 break;
6890 case SECCAT_DATA_REL_RO_LOCAL:
6891 prefix = one_only ? ".d.rel.ro.local" : ".data.rel.ro.local";
6892 break;
6893 case SECCAT_SDATA:
6894 prefix = one_only ? ".s" : ".sdata";
6895 break;
6896 case SECCAT_BSS:
6897 prefix = one_only ? ".b" : ".bss";
6898 break;
6899 case SECCAT_SBSS:
6900 prefix = one_only ? ".sb" : ".sbss";
6901 break;
6902 case SECCAT_TDATA:
6903 prefix = one_only ? ".td" : ".tdata";
6904 break;
6905 case SECCAT_TBSS:
6906 prefix = one_only ? ".tb" : ".tbss";
6907 break;
6908 default:
6909 gcc_unreachable ();
6910 }
6911
6912 id = DECL_ASSEMBLER_NAME (decl);
6913 ultimate_transparent_alias_target (&id);
6914 name = IDENTIFIER_POINTER (id);
6915 name = targetm.strip_name_encoding (name);
6916
6917 /* If we're using one_only, then there needs to be a .gnu.linkonce
6918 prefix to the section name. */
6919 linkonce = one_only ? ".gnu.linkonce" : "";
6920
6921 string = ACONCAT ((linkonce, prefix, ".", name, NULL));
6922
6923 set_decl_section_name (decl, string);
6924 }
6925
6926 /* Subroutine of compute_reloc_for_rtx for leaf rtxes. */
6927
6928 static int
6929 compute_reloc_for_rtx_1 (const_rtx x)
6930 {
6931 switch (GET_CODE (x))
6932 {
6933 case SYMBOL_REF:
6934 return SYMBOL_REF_LOCAL_P (x) ? 1 : 2;
6935 case LABEL_REF:
6936 return 1;
6937 default:
6938 return 0;
6939 }
6940 }
6941
6942 /* Like compute_reloc_for_constant, except for an RTX. The return value
6943 is a mask for which bit 1 indicates a global relocation, and bit 0
6944 indicates a local relocation. */
6945
6946 static int
6947 compute_reloc_for_rtx (const_rtx x)
6948 {
6949 switch (GET_CODE (x))
6950 {
6951 case SYMBOL_REF:
6952 case LABEL_REF:
6953 return compute_reloc_for_rtx_1 (x);
6954
6955 case CONST:
6956 {
6957 int reloc = 0;
6958 subrtx_iterator::array_type array;
6959 FOR_EACH_SUBRTX (iter, array, x, ALL)
6960 reloc |= compute_reloc_for_rtx_1 (*iter);
6961 return reloc;
6962 }
6963
6964 default:
6965 return 0;
6966 }
6967 }
6968
6969 section *
6970 default_select_rtx_section (machine_mode mode ATTRIBUTE_UNUSED,
6971 rtx x,
6972 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
6973 {
6974 if (compute_reloc_for_rtx (x) & targetm.asm_out.reloc_rw_mask ())
6975 return data_section;
6976 else
6977 return readonly_data_section;
6978 }
6979
6980 section *
6981 default_elf_select_rtx_section (machine_mode mode, rtx x,
6982 unsigned HOST_WIDE_INT align)
6983 {
6984 int reloc = compute_reloc_for_rtx (x);
6985
6986 /* ??? Handle small data here somehow. */
6987
6988 if (reloc & targetm.asm_out.reloc_rw_mask ())
6989 {
6990 if (reloc == 1)
6991 return get_named_section (NULL, ".data.rel.ro.local", 1);
6992 else
6993 return get_named_section (NULL, ".data.rel.ro", 3);
6994 }
6995
6996 return mergeable_constant_section (mode, align, 0);
6997 }
6998
6999 /* Set the generally applicable flags on the SYMBOL_REF for EXP. */
7000
7001 void
7002 default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
7003 {
7004 rtx symbol;
7005 int flags;
7006
7007 /* Careful not to prod global register variables. */
7008 if (!MEM_P (rtl))
7009 return;
7010 symbol = XEXP (rtl, 0);
7011 if (GET_CODE (symbol) != SYMBOL_REF)
7012 return;
7013
7014 flags = SYMBOL_REF_FLAGS (symbol) & SYMBOL_FLAG_HAS_BLOCK_INFO;
7015 if (TREE_CODE (decl) == FUNCTION_DECL)
7016 flags |= SYMBOL_FLAG_FUNCTION;
7017 if (targetm.binds_local_p (decl))
7018 flags |= SYMBOL_FLAG_LOCAL;
7019 if (VAR_P (decl) && DECL_THREAD_LOCAL_P (decl))
7020 flags |= DECL_TLS_MODEL (decl) << SYMBOL_FLAG_TLS_SHIFT;
7021 else if (targetm.in_small_data_p (decl))
7022 flags |= SYMBOL_FLAG_SMALL;
7023 /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names? Without
7024 being PUBLIC, the thing *must* be defined in this translation unit.
7025 Prevent this buglet from being propagated into rtl code as well. */
7026 if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
7027 flags |= SYMBOL_FLAG_EXTERNAL;
7028
7029 SYMBOL_REF_FLAGS (symbol) = flags;
7030 }
7031
7032 /* By default, we do nothing for encode_section_info, so we need not
7033 do anything but discard the '*' marker. */
7034
7035 const char *
7036 default_strip_name_encoding (const char *str)
7037 {
7038 return str + (*str == '*');
7039 }
7040
7041 #ifdef ASM_OUTPUT_DEF
7042 /* The default implementation of TARGET_ASM_OUTPUT_ANCHOR. Define the
7043 anchor relative to ".", the current section position. */
7044
7045 void
7046 default_asm_output_anchor (rtx symbol)
7047 {
7048 char buffer[100];
7049
7050 sprintf (buffer, "*. + " HOST_WIDE_INT_PRINT_DEC,
7051 SYMBOL_REF_BLOCK_OFFSET (symbol));
7052 ASM_OUTPUT_DEF (asm_out_file, XSTR (symbol, 0), buffer);
7053 }
7054 #endif
7055
7056 /* The default implementation of TARGET_USE_ANCHORS_FOR_SYMBOL_P. */
7057
7058 bool
7059 default_use_anchors_for_symbol_p (const_rtx symbol)
7060 {
7061 tree decl;
7062 section *sect = SYMBOL_REF_BLOCK (symbol)->sect;
7063
7064 /* This function should only be called with non-zero SYMBOL_REF_BLOCK,
7065 furthermore get_block_for_section should not create object blocks
7066 for mergeable sections. */
7067 gcc_checking_assert (sect && !(sect->common.flags & SECTION_MERGE));
7068
7069 /* Don't use anchors for small data sections. The small data register
7070 acts as an anchor for such sections. */
7071 if (sect->common.flags & SECTION_SMALL)
7072 return false;
7073
7074 decl = SYMBOL_REF_DECL (symbol);
7075 if (decl && DECL_P (decl))
7076 {
7077 /* Don't use section anchors for decls that might be defined or
7078 usurped by other modules. */
7079 if (TREE_PUBLIC (decl) && !decl_binds_to_current_def_p (decl))
7080 return false;
7081
7082 /* Don't use section anchors for decls that will be placed in a
7083 small data section. */
7084 /* ??? Ideally, this check would be redundant with the SECTION_SMALL
7085 one above. The problem is that we only use SECTION_SMALL for
7086 sections that should be marked as small in the section directive. */
7087 if (targetm.in_small_data_p (decl))
7088 return false;
7089
7090 /* Don't use section anchors for decls that won't fit inside a single
7091 anchor range to reduce the amount of instructions required to refer
7092 to the entire declaration. */
7093 if (DECL_SIZE_UNIT (decl) == NULL_TREE
7094 || !tree_fits_uhwi_p (DECL_SIZE_UNIT (decl))
7095 || (tree_to_uhwi (DECL_SIZE_UNIT (decl))
7096 >= (unsigned HOST_WIDE_INT) targetm.max_anchor_offset))
7097 return false;
7098
7099 }
7100 return true;
7101 }
7102
7103 /* Return true when RESOLUTION indicate that symbol will be bound to the
7104 definition provided by current .o file. */
7105
7106 static bool
7107 resolution_to_local_definition_p (enum ld_plugin_symbol_resolution resolution)
7108 {
7109 return (resolution == LDPR_PREVAILING_DEF
7110 || resolution == LDPR_PREVAILING_DEF_IRONLY_EXP
7111 || resolution == LDPR_PREVAILING_DEF_IRONLY);
7112 }
7113
7114 /* Return true when RESOLUTION indicate that symbol will be bound locally
7115 within current executable or DSO. */
7116
7117 static bool
7118 resolution_local_p (enum ld_plugin_symbol_resolution resolution)
7119 {
7120 return (resolution == LDPR_PREVAILING_DEF
7121 || resolution == LDPR_PREVAILING_DEF_IRONLY
7122 || resolution == LDPR_PREVAILING_DEF_IRONLY_EXP
7123 || resolution == LDPR_PREEMPTED_REG
7124 || resolution == LDPR_PREEMPTED_IR
7125 || resolution == LDPR_RESOLVED_IR
7126 || resolution == LDPR_RESOLVED_EXEC);
7127 }
7128
7129 /* COMMON_LOCAL_P is true means that the linker can guarantee that an
7130 uninitialized common symbol in the executable will still be defined
7131 (through COPY relocation) in the executable. */
7132
7133 bool
7134 default_binds_local_p_3 (const_tree exp, bool shlib, bool weak_dominate,
7135 bool extern_protected_data, bool common_local_p)
7136 {
7137 /* A non-decl is an entry in the constant pool. */
7138 if (!DECL_P (exp))
7139 return true;
7140
7141 /* Weakrefs may not bind locally, even though the weakref itself is always
7142 static and therefore local. Similarly, the resolver for ifunc functions
7143 might resolve to a non-local function.
7144 FIXME: We can resolve the weakref case more curefuly by looking at the
7145 weakref alias. */
7146 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp))
7147 || (TREE_CODE (exp) == FUNCTION_DECL
7148 && cgraph_node::get (exp)
7149 && cgraph_node::get (exp)->ifunc_resolver))
7150 return false;
7151
7152 /* Static variables are always local. */
7153 if (! TREE_PUBLIC (exp))
7154 return true;
7155
7156 /* With resolution file in hand, take look into resolutions.
7157 We can't just return true for resolved_locally symbols,
7158 because dynamic linking might overwrite symbols
7159 in shared libraries. */
7160 bool resolved_locally = false;
7161
7162 bool uninited_common = (DECL_COMMON (exp)
7163 && (DECL_INITIAL (exp) == NULL
7164 || (!in_lto_p
7165 && DECL_INITIAL (exp) == error_mark_node)));
7166
7167 /* A non-external variable is defined locally only if it isn't
7168 uninitialized COMMON variable or common_local_p is true. */
7169 bool defined_locally = (!DECL_EXTERNAL (exp)
7170 && (!uninited_common || common_local_p));
7171 if (symtab_node *node = symtab_node::get (exp))
7172 {
7173 if (node->in_other_partition)
7174 defined_locally = true;
7175 if (node->can_be_discarded_p ())
7176 ;
7177 else if (resolution_to_local_definition_p (node->resolution))
7178 defined_locally = resolved_locally = true;
7179 else if (resolution_local_p (node->resolution))
7180 resolved_locally = true;
7181 }
7182 if (defined_locally && weak_dominate && !shlib)
7183 resolved_locally = true;
7184
7185 /* Undefined weak symbols are never defined locally. */
7186 if (DECL_WEAK (exp) && !defined_locally)
7187 return false;
7188
7189 /* A symbol is local if the user has said explicitly that it will be,
7190 or if we have a definition for the symbol. We cannot infer visibility
7191 for undefined symbols. */
7192 if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT
7193 && (TREE_CODE (exp) == FUNCTION_DECL
7194 || !extern_protected_data
7195 || DECL_VISIBILITY (exp) != VISIBILITY_PROTECTED)
7196 && (DECL_VISIBILITY_SPECIFIED (exp) || defined_locally))
7197 return true;
7198
7199 /* If PIC, then assume that any global name can be overridden by
7200 symbols resolved from other modules. */
7201 if (shlib)
7202 return false;
7203
7204 /* Variables defined outside this object might not be local. */
7205 if (DECL_EXTERNAL (exp) && !resolved_locally)
7206 return false;
7207
7208 /* Non-dominant weak symbols are not defined locally. */
7209 if (DECL_WEAK (exp) && !resolved_locally)
7210 return false;
7211
7212 /* Uninitialized COMMON variable may be unified with symbols
7213 resolved from other modules. */
7214 if (uninited_common && !resolved_locally)
7215 return false;
7216
7217 /* Otherwise we're left with initialized (or non-common) global data
7218 which is of necessity defined locally. */
7219 return true;
7220 }
7221
7222 /* Assume ELF-ish defaults, since that's pretty much the most liberal
7223 wrt cross-module name binding. */
7224
7225 bool
7226 default_binds_local_p (const_tree exp)
7227 {
7228 return default_binds_local_p_3 (exp, flag_shlib != 0, true, false, false);
7229 }
7230
7231 /* Similar to default_binds_local_p, but common symbol may be local and
7232 extern protected data is non-local. */
7233
7234 bool
7235 default_binds_local_p_2 (const_tree exp)
7236 {
7237 return default_binds_local_p_3 (exp, flag_shlib != 0, true, true,
7238 !flag_pic);
7239 }
7240
7241 bool
7242 default_binds_local_p_1 (const_tree exp, int shlib)
7243 {
7244 return default_binds_local_p_3 (exp, shlib != 0, false, false, false);
7245 }
7246
7247 /* Return true when references to DECL must bind to current definition in
7248 final executable.
7249
7250 The condition is usually equivalent to whether the function binds to the
7251 current module (shared library or executable), that is to binds_local_p.
7252 We use this fact to avoid need for another target hook and implement
7253 the logic using binds_local_p and just special cases where
7254 decl_binds_to_current_def_p is stronger than binds_local_p. In particular
7255 the weak definitions (that can be overwritten at linktime by other
7256 definition from different object file) and when resolution info is available
7257 we simply use the knowledge passed to us by linker plugin. */
7258 bool
7259 decl_binds_to_current_def_p (const_tree decl)
7260 {
7261 gcc_assert (DECL_P (decl));
7262 if (!targetm.binds_local_p (decl))
7263 return false;
7264 if (!TREE_PUBLIC (decl))
7265 return true;
7266
7267 /* When resolution is available, just use it. */
7268 if (symtab_node *node = symtab_node::get (decl))
7269 {
7270 if (node->resolution != LDPR_UNKNOWN
7271 && !node->can_be_discarded_p ())
7272 return resolution_to_local_definition_p (node->resolution);
7273 }
7274
7275 /* Otherwise we have to assume the worst for DECL_WEAK (hidden weaks
7276 binds locally but still can be overwritten), DECL_COMMON (can be merged
7277 with a non-common definition somewhere in the same module) or
7278 DECL_EXTERNAL.
7279 This rely on fact that binds_local_p behave as decl_replaceable_p
7280 for all other declaration types. */
7281 if (DECL_WEAK (decl))
7282 return false;
7283 if (DECL_COMMON (decl)
7284 && (DECL_INITIAL (decl) == NULL
7285 || (!in_lto_p && DECL_INITIAL (decl) == error_mark_node)))
7286 return false;
7287 if (DECL_EXTERNAL (decl))
7288 return false;
7289 return true;
7290 }
7291
7292 /* A replaceable function or variable is one which may be replaced
7293 at link-time with an entirely different definition, provided that the
7294 replacement has the same type. For example, functions declared
7295 with __attribute__((weak)) on most systems are replaceable.
7296
7297 COMDAT functions are not replaceable, since all definitions of the
7298 function must be equivalent. It is important that COMDAT functions
7299 not be treated as replaceable so that use of C++ template
7300 instantiations is not penalized. */
7301
7302 bool
7303 decl_replaceable_p (tree decl)
7304 {
7305 gcc_assert (DECL_P (decl));
7306 if (!TREE_PUBLIC (decl) || DECL_COMDAT (decl))
7307 return false;
7308 if (!flag_semantic_interposition
7309 && !DECL_WEAK (decl))
7310 return false;
7311 return !decl_binds_to_current_def_p (decl);
7312 }
7313
7314 /* Default function to output code that will globalize a label. A
7315 target must define GLOBAL_ASM_OP or provide its own function to
7316 globalize a label. */
7317 #ifdef GLOBAL_ASM_OP
7318 void
7319 default_globalize_label (FILE * stream, const char *name)
7320 {
7321 fputs (GLOBAL_ASM_OP, stream);
7322 assemble_name (stream, name);
7323 putc ('\n', stream);
7324 }
7325 #endif /* GLOBAL_ASM_OP */
7326
7327 /* Default function to output code that will globalize a declaration. */
7328 void
7329 default_globalize_decl_name (FILE * stream, tree decl)
7330 {
7331 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
7332 targetm.asm_out.globalize_label (stream, name);
7333 }
7334
7335 /* Default function to output a label for unwind information. The
7336 default is to do nothing. A target that needs nonlocal labels for
7337 unwind information must provide its own function to do this. */
7338 void
7339 default_emit_unwind_label (FILE * stream ATTRIBUTE_UNUSED,
7340 tree decl ATTRIBUTE_UNUSED,
7341 int for_eh ATTRIBUTE_UNUSED,
7342 int empty ATTRIBUTE_UNUSED)
7343 {
7344 }
7345
7346 /* Default function to output a label to divide up the exception table.
7347 The default is to do nothing. A target that needs/wants to divide
7348 up the table must provide it's own function to do this. */
7349 void
7350 default_emit_except_table_label (FILE * stream ATTRIBUTE_UNUSED)
7351 {
7352 }
7353
7354 /* This is how to output an internal numbered label where PREFIX is
7355 the class of label and LABELNO is the number within the class. */
7356
7357 void
7358 default_generate_internal_label (char *buf, const char *prefix,
7359 unsigned long labelno)
7360 {
7361 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
7362 }
7363
7364 /* This is how to output an internal numbered label where PREFIX is
7365 the class of label and LABELNO is the number within the class. */
7366
7367 void
7368 default_internal_label (FILE *stream, const char *prefix,
7369 unsigned long labelno)
7370 {
7371 char *const buf = (char *) alloca (40 + strlen (prefix));
7372 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
7373 ASM_OUTPUT_INTERNAL_LABEL (stream, buf);
7374 }
7375
7376
7377 /* The default implementation of ASM_DECLARE_CONSTANT_NAME. */
7378
7379 void
7380 default_asm_declare_constant_name (FILE *file, const char *name,
7381 const_tree exp ATTRIBUTE_UNUSED,
7382 HOST_WIDE_INT size ATTRIBUTE_UNUSED)
7383 {
7384 assemble_label (file, name);
7385 }
7386
7387 /* This is the default behavior at the beginning of a file. It's
7388 controlled by two other target-hook toggles. */
7389 void
7390 default_file_start (void)
7391 {
7392 if (targetm.asm_file_start_app_off
7393 && !(flag_verbose_asm || flag_debug_asm || flag_dump_rtl_in_asm))
7394 fputs (ASM_APP_OFF, asm_out_file);
7395
7396 if (targetm.asm_file_start_file_directive)
7397 {
7398 /* LTO produced units have no meaningful main_input_filename. */
7399 if (in_lto_p)
7400 output_file_directive (asm_out_file, "<artificial>");
7401 else
7402 output_file_directive (asm_out_file, main_input_filename);
7403 }
7404 }
7405
7406 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
7407 which emits a special section directive used to indicate whether or
7408 not this object file needs an executable stack. This is primarily
7409 a GNU extension to ELF but could be used on other targets. */
7410
7411 int trampolines_created;
7412
7413 void
7414 file_end_indicate_exec_stack (void)
7415 {
7416 unsigned int flags = SECTION_DEBUG;
7417 if (trampolines_created)
7418 flags |= SECTION_CODE;
7419
7420 switch_to_section (get_section (".note.GNU-stack", flags, NULL));
7421 }
7422
7423 /* Emit a special section directive to indicate that this object file
7424 was compiled with -fsplit-stack. This is used to let the linker
7425 detect calls between split-stack code and non-split-stack code, so
7426 that it can modify the split-stack code to allocate a sufficiently
7427 large stack. We emit another special section if there are any
7428 functions in this file which have the no_split_stack attribute, to
7429 prevent the linker from warning about being unable to convert the
7430 functions if they call non-split-stack code. */
7431
7432 void
7433 file_end_indicate_split_stack (void)
7434 {
7435 if (flag_split_stack)
7436 {
7437 switch_to_section (get_section (".note.GNU-split-stack", SECTION_DEBUG,
7438 NULL));
7439 if (saw_no_split_stack)
7440 switch_to_section (get_section (".note.GNU-no-split-stack",
7441 SECTION_DEBUG, NULL));
7442 }
7443 }
7444
7445 /* Output DIRECTIVE (a C string) followed by a newline. This is used as
7446 a get_unnamed_section callback. */
7447
7448 void
7449 output_section_asm_op (const void *directive)
7450 {
7451 fprintf (asm_out_file, "%s\n", (const char *) directive);
7452 }
7453
7454 /* Emit assembly code to switch to section NEW_SECTION. Do nothing if
7455 the current section is NEW_SECTION. */
7456
7457 void
7458 switch_to_section (section *new_section)
7459 {
7460 if (in_section == new_section)
7461 return;
7462
7463 if (new_section->common.flags & SECTION_FORGET)
7464 in_section = NULL;
7465 else
7466 in_section = new_section;
7467
7468 switch (SECTION_STYLE (new_section))
7469 {
7470 case SECTION_NAMED:
7471 targetm.asm_out.named_section (new_section->named.name,
7472 new_section->named.common.flags,
7473 new_section->named.decl);
7474 break;
7475
7476 case SECTION_UNNAMED:
7477 new_section->unnamed.callback (new_section->unnamed.data);
7478 break;
7479
7480 case SECTION_NOSWITCH:
7481 gcc_unreachable ();
7482 break;
7483 }
7484
7485 new_section->common.flags |= SECTION_DECLARED;
7486 }
7487
7488 /* If block symbol SYMBOL has not yet been assigned an offset, place
7489 it at the end of its block. */
7490
7491 void
7492 place_block_symbol (rtx symbol)
7493 {
7494 unsigned HOST_WIDE_INT size, mask, offset;
7495 class constant_descriptor_rtx *desc;
7496 unsigned int alignment;
7497 struct object_block *block;
7498 tree decl;
7499
7500 gcc_assert (SYMBOL_REF_BLOCK (symbol));
7501 if (SYMBOL_REF_BLOCK_OFFSET (symbol) >= 0)
7502 return;
7503
7504 /* Work out the symbol's size and alignment. */
7505 if (CONSTANT_POOL_ADDRESS_P (symbol))
7506 {
7507 desc = SYMBOL_REF_CONSTANT (symbol);
7508 alignment = desc->align;
7509 size = GET_MODE_SIZE (desc->mode);
7510 }
7511 else if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
7512 {
7513 decl = SYMBOL_REF_DECL (symbol);
7514 gcc_checking_assert (DECL_IN_CONSTANT_POOL (decl));
7515 alignment = DECL_ALIGN (decl);
7516 size = get_constant_size (DECL_INITIAL (decl));
7517 if ((flag_sanitize & SANITIZE_ADDRESS)
7518 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
7519 && asan_protect_global (DECL_INITIAL (decl)))
7520 {
7521 size += asan_red_zone_size (size);
7522 alignment = MAX (alignment,
7523 ASAN_RED_ZONE_SIZE * BITS_PER_UNIT);
7524 }
7525 }
7526 else
7527 {
7528 struct symtab_node *snode;
7529 decl = SYMBOL_REF_DECL (symbol);
7530
7531 snode = symtab_node::get (decl);
7532 if (snode->alias)
7533 {
7534 rtx target = DECL_RTL (snode->ultimate_alias_target ()->decl);
7535
7536 gcc_assert (MEM_P (target)
7537 && GET_CODE (XEXP (target, 0)) == SYMBOL_REF
7538 && SYMBOL_REF_HAS_BLOCK_INFO_P (XEXP (target, 0)));
7539 target = XEXP (target, 0);
7540 place_block_symbol (target);
7541 SYMBOL_REF_BLOCK_OFFSET (symbol) = SYMBOL_REF_BLOCK_OFFSET (target);
7542 return;
7543 }
7544 alignment = get_variable_align (decl);
7545 size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
7546 if ((flag_sanitize & SANITIZE_ADDRESS)
7547 && asan_protect_global (decl))
7548 {
7549 size += asan_red_zone_size (size);
7550 alignment = MAX (alignment,
7551 ASAN_RED_ZONE_SIZE * BITS_PER_UNIT);
7552 }
7553 }
7554
7555 /* Calculate the object's offset from the start of the block. */
7556 block = SYMBOL_REF_BLOCK (symbol);
7557 mask = alignment / BITS_PER_UNIT - 1;
7558 offset = (block->size + mask) & ~mask;
7559 SYMBOL_REF_BLOCK_OFFSET (symbol) = offset;
7560
7561 /* Record the block's new alignment and size. */
7562 block->alignment = MAX (block->alignment, alignment);
7563 block->size = offset + size;
7564
7565 vec_safe_push (block->objects, symbol);
7566 }
7567
7568 /* Return the anchor that should be used to address byte offset OFFSET
7569 from the first object in BLOCK. MODEL is the TLS model used
7570 to access it. */
7571
7572 rtx
7573 get_section_anchor (struct object_block *block, HOST_WIDE_INT offset,
7574 enum tls_model model)
7575 {
7576 char label[100];
7577 unsigned int begin, middle, end;
7578 unsigned HOST_WIDE_INT min_offset, max_offset, range, bias, delta;
7579 rtx anchor;
7580
7581 /* Work out the anchor's offset. Use an offset of 0 for the first
7582 anchor so that we don't pessimize the case where we take the address
7583 of a variable at the beginning of the block. This is particularly
7584 useful when a block has only one variable assigned to it.
7585
7586 We try to place anchors RANGE bytes apart, so there can then be
7587 anchors at +/-RANGE, +/-2 * RANGE, and so on, up to the limits of
7588 a ptr_mode offset. With some target settings, the lowest such
7589 anchor might be out of range for the lowest ptr_mode offset;
7590 likewise the highest anchor for the highest offset. Use anchors
7591 at the extreme ends of the ptr_mode range in such cases.
7592
7593 All arithmetic uses unsigned integers in order to avoid
7594 signed overflow. */
7595 max_offset = (unsigned HOST_WIDE_INT) targetm.max_anchor_offset;
7596 min_offset = (unsigned HOST_WIDE_INT) targetm.min_anchor_offset;
7597 range = max_offset - min_offset + 1;
7598 if (range == 0)
7599 offset = 0;
7600 else
7601 {
7602 bias = HOST_WIDE_INT_1U << (GET_MODE_BITSIZE (ptr_mode) - 1);
7603 if (offset < 0)
7604 {
7605 delta = -(unsigned HOST_WIDE_INT) offset + max_offset;
7606 delta -= delta % range;
7607 if (delta > bias)
7608 delta = bias;
7609 offset = (HOST_WIDE_INT) (-delta);
7610 }
7611 else
7612 {
7613 delta = (unsigned HOST_WIDE_INT) offset - min_offset;
7614 delta -= delta % range;
7615 if (delta > bias - 1)
7616 delta = bias - 1;
7617 offset = (HOST_WIDE_INT) delta;
7618 }
7619 }
7620
7621 /* Do a binary search to see if there's already an anchor we can use.
7622 Set BEGIN to the new anchor's index if not. */
7623 begin = 0;
7624 end = vec_safe_length (block->anchors);
7625 while (begin != end)
7626 {
7627 middle = (end + begin) / 2;
7628 anchor = (*block->anchors)[middle];
7629 if (SYMBOL_REF_BLOCK_OFFSET (anchor) > offset)
7630 end = middle;
7631 else if (SYMBOL_REF_BLOCK_OFFSET (anchor) < offset)
7632 begin = middle + 1;
7633 else if (SYMBOL_REF_TLS_MODEL (anchor) > model)
7634 end = middle;
7635 else if (SYMBOL_REF_TLS_MODEL (anchor) < model)
7636 begin = middle + 1;
7637 else
7638 return anchor;
7639 }
7640
7641 /* Create a new anchor with a unique label. */
7642 ASM_GENERATE_INTERNAL_LABEL (label, "LANCHOR", anchor_labelno++);
7643 anchor = create_block_symbol (ggc_strdup (label), block, offset);
7644 SYMBOL_REF_FLAGS (anchor) |= SYMBOL_FLAG_LOCAL | SYMBOL_FLAG_ANCHOR;
7645 SYMBOL_REF_FLAGS (anchor) |= model << SYMBOL_FLAG_TLS_SHIFT;
7646
7647 /* Insert it at index BEGIN. */
7648 vec_safe_insert (block->anchors, begin, anchor);
7649 return anchor;
7650 }
7651
7652 /* Output the objects in BLOCK. */
7653
7654 static void
7655 output_object_block (struct object_block *block)
7656 {
7657 class constant_descriptor_rtx *desc;
7658 unsigned int i;
7659 HOST_WIDE_INT offset;
7660 tree decl;
7661 rtx symbol;
7662
7663 if (!block->objects)
7664 return;
7665
7666 /* Switch to the section and make sure that the first byte is
7667 suitably aligned. */
7668 /* Special case VTV comdat sections similar to assemble_variable. */
7669 if (SECTION_STYLE (block->sect) == SECTION_NAMED
7670 && block->sect->named.name
7671 && (strcmp (block->sect->named.name, ".vtable_map_vars") == 0))
7672 handle_vtv_comdat_section (block->sect, block->sect->named.decl);
7673 else
7674 switch_to_section (block->sect);
7675
7676 gcc_checking_assert (!(block->sect->common.flags & SECTION_MERGE));
7677 assemble_align (block->alignment);
7678
7679 /* Define the values of all anchors relative to the current section
7680 position. */
7681 FOR_EACH_VEC_SAFE_ELT (block->anchors, i, symbol)
7682 targetm.asm_out.output_anchor (symbol);
7683
7684 /* Output the objects themselves. */
7685 offset = 0;
7686 FOR_EACH_VEC_ELT (*block->objects, i, symbol)
7687 {
7688 /* Move to the object's offset, padding with zeros if necessary. */
7689 assemble_zeros (SYMBOL_REF_BLOCK_OFFSET (symbol) - offset);
7690 offset = SYMBOL_REF_BLOCK_OFFSET (symbol);
7691 if (CONSTANT_POOL_ADDRESS_P (symbol))
7692 {
7693 desc = SYMBOL_REF_CONSTANT (symbol);
7694 /* Pass 1 for align as we have already laid out everything in the block.
7695 So aligning shouldn't be necessary. */
7696 output_constant_pool_1 (desc, 1);
7697 offset += GET_MODE_SIZE (desc->mode);
7698 }
7699 else if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
7700 {
7701 HOST_WIDE_INT size;
7702 decl = SYMBOL_REF_DECL (symbol);
7703 assemble_constant_contents (DECL_INITIAL (decl), XSTR (symbol, 0),
7704 DECL_ALIGN (decl), false);
7705
7706 size = get_constant_size (DECL_INITIAL (decl));
7707 offset += size;
7708 if ((flag_sanitize & SANITIZE_ADDRESS)
7709 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
7710 && asan_protect_global (DECL_INITIAL (decl)))
7711 {
7712 size = asan_red_zone_size (size);
7713 assemble_zeros (size);
7714 offset += size;
7715 }
7716 }
7717 else
7718 {
7719 HOST_WIDE_INT size;
7720 decl = SYMBOL_REF_DECL (symbol);
7721 assemble_variable_contents (decl, XSTR (symbol, 0), false, false);
7722 size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
7723 offset += size;
7724 if ((flag_sanitize & SANITIZE_ADDRESS)
7725 && asan_protect_global (decl))
7726 {
7727 size = asan_red_zone_size (size);
7728 assemble_zeros (size);
7729 offset += size;
7730 }
7731 }
7732 }
7733 }
7734
7735 /* A callback for qsort to compare object_blocks. */
7736
7737 static int
7738 output_object_block_compare (const void *x, const void *y)
7739 {
7740 object_block *p1 = *(object_block * const*)x;
7741 object_block *p2 = *(object_block * const*)y;
7742
7743 if (p1->sect->common.flags & SECTION_NAMED
7744 && !(p2->sect->common.flags & SECTION_NAMED))
7745 return 1;
7746
7747 if (!(p1->sect->common.flags & SECTION_NAMED)
7748 && p2->sect->common.flags & SECTION_NAMED)
7749 return -1;
7750
7751 if (p1->sect->common.flags & SECTION_NAMED
7752 && p2->sect->common.flags & SECTION_NAMED)
7753 return strcmp (p1->sect->named.name, p2->sect->named.name);
7754
7755 unsigned f1 = p1->sect->common.flags;
7756 unsigned f2 = p2->sect->common.flags;
7757 if (f1 == f2)
7758 return 0;
7759 return f1 < f2 ? -1 : 1;
7760 }
7761
7762 /* Output the definitions of all object_blocks. */
7763
7764 void
7765 output_object_blocks (void)
7766 {
7767 vec<object_block *, va_heap> v;
7768 v.create (object_block_htab->elements ());
7769 object_block *obj;
7770 hash_table<object_block_hasher>::iterator hi;
7771
7772 FOR_EACH_HASH_TABLE_ELEMENT (*object_block_htab, obj, object_block *, hi)
7773 v.quick_push (obj);
7774
7775 /* Sort them in order to output them in a deterministic manner,
7776 otherwise we may get .rodata sections in different orders with
7777 and without -g. */
7778 v.qsort (output_object_block_compare);
7779 unsigned i;
7780 FOR_EACH_VEC_ELT (v, i, obj)
7781 output_object_block (obj);
7782
7783 v.release ();
7784 }
7785
7786 /* This function provides a possible implementation of the
7787 TARGET_ASM_RECORD_GCC_SWITCHES target hook for ELF targets. When triggered
7788 by -frecord-gcc-switches it creates a new mergeable, string section in the
7789 assembler output file called TARGET_ASM_RECORD_GCC_SWITCHES_SECTION which
7790 contains the switches in ASCII format.
7791
7792 FIXME: This code does not correctly handle double quote characters
7793 that appear inside strings, (it strips them rather than preserving them).
7794 FIXME: ASM_OUTPUT_ASCII, as defined in config/elfos.h will not emit NUL
7795 characters - instead it treats them as sub-string separators. Since
7796 we want to emit NUL strings terminators into the object file we have to use
7797 ASM_OUTPUT_SKIP. */
7798
7799 int
7800 elf_record_gcc_switches (print_switch_type type, const char * name)
7801 {
7802 switch (type)
7803 {
7804 case SWITCH_TYPE_PASSED:
7805 ASM_OUTPUT_ASCII (asm_out_file, name, strlen (name));
7806 ASM_OUTPUT_SKIP (asm_out_file, HOST_WIDE_INT_1U);
7807 break;
7808
7809 case SWITCH_TYPE_DESCRIPTIVE:
7810 if (name == NULL)
7811 {
7812 /* Distinguish between invocations where name is NULL. */
7813 static bool started = false;
7814
7815 if (!started)
7816 {
7817 section * sec;
7818
7819 sec = get_section (targetm.asm_out.record_gcc_switches_section,
7820 SECTION_DEBUG
7821 | SECTION_MERGE
7822 | SECTION_STRINGS
7823 | (SECTION_ENTSIZE & 1),
7824 NULL);
7825 switch_to_section (sec);
7826 started = true;
7827 }
7828 }
7829
7830 default:
7831 break;
7832 }
7833
7834 /* The return value is currently ignored by the caller, but must be 0.
7835 For -fverbose-asm the return value would be the number of characters
7836 emitted into the assembler file. */
7837 return 0;
7838 }
7839
7840 /* Emit text to declare externally defined symbols. It is needed to
7841 properly support non-default visibility. */
7842 void
7843 default_elf_asm_output_external (FILE *file ATTRIBUTE_UNUSED,
7844 tree decl,
7845 const char *name ATTRIBUTE_UNUSED)
7846 {
7847 /* We output the name if and only if TREE_SYMBOL_REFERENCED is
7848 set in order to avoid putting out names that are never really
7849 used. Always output visibility specified in the source. */
7850 if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
7851 && (DECL_VISIBILITY_SPECIFIED (decl)
7852 || targetm.binds_local_p (decl)))
7853 maybe_assemble_visibility (decl);
7854 }
7855
7856 /* The default hook for TARGET_ASM_OUTPUT_SOURCE_FILENAME. */
7857
7858 void
7859 default_asm_output_source_filename (FILE *file, const char *name)
7860 {
7861 #ifdef ASM_OUTPUT_SOURCE_FILENAME
7862 ASM_OUTPUT_SOURCE_FILENAME (file, name);
7863 #else
7864 fprintf (file, "\t.file\t");
7865 output_quoted_string (file, name);
7866 putc ('\n', file);
7867 #endif
7868 }
7869
7870 /* Output a file name in the form wanted by System V. */
7871
7872 void
7873 output_file_directive (FILE *asm_file, const char *input_name)
7874 {
7875 int len;
7876 const char *na;
7877
7878 if (input_name == NULL)
7879 input_name = "<stdin>";
7880 else
7881 input_name = remap_debug_filename (input_name);
7882
7883 len = strlen (input_name);
7884 na = input_name + len;
7885
7886 /* NA gets INPUT_NAME sans directory names. */
7887 while (na > input_name)
7888 {
7889 if (IS_DIR_SEPARATOR (na[-1]))
7890 break;
7891 na--;
7892 }
7893
7894 targetm.asm_out.output_source_filename (asm_file, na);
7895 }
7896
7897 /* Create a DEBUG_EXPR_DECL / DEBUG_EXPR pair from RTL expression
7898 EXP. */
7899 rtx
7900 make_debug_expr_from_rtl (const_rtx exp)
7901 {
7902 tree ddecl = make_node (DEBUG_EXPR_DECL), type;
7903 machine_mode mode = GET_MODE (exp);
7904 rtx dval;
7905
7906 DECL_ARTIFICIAL (ddecl) = 1;
7907 if (REG_P (exp) && REG_EXPR (exp))
7908 type = TREE_TYPE (REG_EXPR (exp));
7909 else if (MEM_P (exp) && MEM_EXPR (exp))
7910 type = TREE_TYPE (MEM_EXPR (exp));
7911 else
7912 type = NULL_TREE;
7913 if (type && TYPE_MODE (type) == mode)
7914 TREE_TYPE (ddecl) = type;
7915 else
7916 TREE_TYPE (ddecl) = lang_hooks.types.type_for_mode (mode, 1);
7917 SET_DECL_MODE (ddecl, mode);
7918 dval = gen_rtx_DEBUG_EXPR (mode);
7919 DEBUG_EXPR_TREE_DECL (dval) = ddecl;
7920 SET_DECL_RTL (ddecl, dval);
7921 return dval;
7922 }
7923
7924 #ifdef ELF_ASCII_ESCAPES
7925 /* Default ASM_OUTPUT_LIMITED_STRING for ELF targets. */
7926
7927 void
7928 default_elf_asm_output_limited_string (FILE *f, const char *s)
7929 {
7930 int escape;
7931 unsigned char c;
7932
7933 fputs (STRING_ASM_OP, f);
7934 putc ('"', f);
7935 while (*s != '\0')
7936 {
7937 c = *s;
7938 escape = ELF_ASCII_ESCAPES[c];
7939 switch (escape)
7940 {
7941 case 0:
7942 putc (c, f);
7943 break;
7944 case 1:
7945 putc ('\\', f);
7946 putc ('0'+((c>>6)&7), f);
7947 putc ('0'+((c>>3)&7), f);
7948 putc ('0'+(c&7), f);
7949 break;
7950 default:
7951 putc ('\\', f);
7952 putc (escape, f);
7953 break;
7954 }
7955 s++;
7956 }
7957 putc ('\"', f);
7958 putc ('\n', f);
7959 }
7960
7961 /* Default ASM_OUTPUT_ASCII for ELF targets. */
7962
7963 void
7964 default_elf_asm_output_ascii (FILE *f, const char *s, unsigned int len)
7965 {
7966 const char *limit = s + len;
7967 const char *last_null = NULL;
7968 unsigned bytes_in_chunk = 0;
7969 unsigned char c;
7970 int escape;
7971
7972 for (; s < limit; s++)
7973 {
7974 const char *p;
7975
7976 if (bytes_in_chunk >= 60)
7977 {
7978 putc ('\"', f);
7979 putc ('\n', f);
7980 bytes_in_chunk = 0;
7981 }
7982
7983 if (s > last_null)
7984 {
7985 for (p = s; p < limit && *p != '\0'; p++)
7986 continue;
7987 last_null = p;
7988 }
7989 else
7990 p = last_null;
7991
7992 if (p < limit && (p - s) <= (long) ELF_STRING_LIMIT)
7993 {
7994 if (bytes_in_chunk > 0)
7995 {
7996 putc ('\"', f);
7997 putc ('\n', f);
7998 bytes_in_chunk = 0;
7999 }
8000
8001 default_elf_asm_output_limited_string (f, s);
8002 s = p;
8003 }
8004 else
8005 {
8006 if (bytes_in_chunk == 0)
8007 fputs (ASCII_DATA_ASM_OP "\"", f);
8008
8009 c = *s;
8010 escape = ELF_ASCII_ESCAPES[c];
8011 switch (escape)
8012 {
8013 case 0:
8014 putc (c, f);
8015 bytes_in_chunk++;
8016 break;
8017 case 1:
8018 putc ('\\', f);
8019 putc ('0'+((c>>6)&7), f);
8020 putc ('0'+((c>>3)&7), f);
8021 putc ('0'+(c&7), f);
8022 bytes_in_chunk += 4;
8023 break;
8024 default:
8025 putc ('\\', f);
8026 putc (escape, f);
8027 bytes_in_chunk += 2;
8028 break;
8029 }
8030
8031 }
8032 }
8033
8034 if (bytes_in_chunk > 0)
8035 {
8036 putc ('\"', f);
8037 putc ('\n', f);
8038 }
8039 }
8040 #endif
8041
8042 static GTY(()) section *elf_init_array_section;
8043 static GTY(()) section *elf_fini_array_section;
8044
8045 static section *
8046 get_elf_initfini_array_priority_section (int priority,
8047 bool constructor_p)
8048 {
8049 section *sec;
8050 if (priority != DEFAULT_INIT_PRIORITY)
8051 {
8052 char buf[18];
8053 sprintf (buf, "%s.%.5u",
8054 constructor_p ? ".init_array" : ".fini_array",
8055 priority);
8056 sec = get_section (buf, SECTION_WRITE | SECTION_NOTYPE, NULL_TREE);
8057 }
8058 else
8059 {
8060 if (constructor_p)
8061 {
8062 if (elf_init_array_section == NULL)
8063 elf_init_array_section
8064 = get_section (".init_array",
8065 SECTION_WRITE | SECTION_NOTYPE, NULL_TREE);
8066 sec = elf_init_array_section;
8067 }
8068 else
8069 {
8070 if (elf_fini_array_section == NULL)
8071 elf_fini_array_section
8072 = get_section (".fini_array",
8073 SECTION_WRITE | SECTION_NOTYPE, NULL_TREE);
8074 sec = elf_fini_array_section;
8075 }
8076 }
8077 return sec;
8078 }
8079
8080 /* Use .init_array section for constructors. */
8081
8082 void
8083 default_elf_init_array_asm_out_constructor (rtx symbol, int priority)
8084 {
8085 section *sec = get_elf_initfini_array_priority_section (priority,
8086 true);
8087 assemble_addr_to_section (symbol, sec);
8088 }
8089
8090 /* Use .fini_array section for destructors. */
8091
8092 void
8093 default_elf_fini_array_asm_out_destructor (rtx symbol, int priority)
8094 {
8095 section *sec = get_elf_initfini_array_priority_section (priority,
8096 false);
8097 assemble_addr_to_section (symbol, sec);
8098 }
8099
8100 /* Default TARGET_ASM_OUTPUT_IDENT hook.
8101
8102 This is a bit of a cheat. The real default is a no-op, but this
8103 hook is the default for all targets with a .ident directive. */
8104
8105 void
8106 default_asm_output_ident_directive (const char *ident_str)
8107 {
8108 const char *ident_asm_op = "\t.ident\t";
8109
8110 /* If we are still in the front end, do not write out the string
8111 to asm_out_file. Instead, add a fake top-level asm statement.
8112 This allows the front ends to use this hook without actually
8113 writing to asm_out_file, to handle #ident or Pragma Ident. */
8114 if (symtab->state == PARSING)
8115 {
8116 char *buf = ACONCAT ((ident_asm_op, "\"", ident_str, "\"\n", NULL));
8117 symtab->finalize_toplevel_asm (build_string (strlen (buf), buf));
8118 }
8119 else
8120 fprintf (asm_out_file, "%s\"%s\"\n", ident_asm_op, ident_str);
8121 }
8122
8123
8124 /* This function ensures that vtable_map variables are not only
8125 in the comdat section, but that each variable has its own unique
8126 comdat name. Without this the variables end up in the same section
8127 with a single comdat name.
8128
8129 FIXME: resolve_unique_section needs to deal better with
8130 decls with both DECL_SECTION_NAME and DECL_ONE_ONLY. Once
8131 that is fixed, this if-else statement can be replaced with
8132 a single call to "switch_to_section (sect)". */
8133
8134 static void
8135 handle_vtv_comdat_section (section *sect, const_tree decl ATTRIBUTE_UNUSED)
8136 {
8137 #if defined (OBJECT_FORMAT_ELF)
8138 targetm.asm_out.named_section (sect->named.name,
8139 sect->named.common.flags
8140 | SECTION_LINKONCE,
8141 DECL_NAME (decl));
8142 in_section = sect;
8143 #else
8144 /* Neither OBJECT_FORMAT_PE, nor OBJECT_FORMAT_COFF is set here.
8145 Therefore the following check is used.
8146 In case a the target is PE or COFF a comdat group section
8147 is created, e.g. .vtable_map_vars$foo. The linker places
8148 everything in .vtable_map_vars at the end.
8149
8150 A fix could be made in
8151 gcc/config/i386/winnt.c: i386_pe_unique_section. */
8152 if (TARGET_PECOFF)
8153 {
8154 char *name;
8155
8156 if (TREE_CODE (DECL_NAME (decl)) == IDENTIFIER_NODE)
8157 name = ACONCAT ((sect->named.name, "$",
8158 IDENTIFIER_POINTER (DECL_NAME (decl)), NULL));
8159 else
8160 name = ACONCAT ((sect->named.name, "$",
8161 IDENTIFIER_POINTER (DECL_COMDAT_GROUP (DECL_NAME (decl))),
8162 NULL));
8163
8164 targetm.asm_out.named_section (name,
8165 sect->named.common.flags
8166 | SECTION_LINKONCE,
8167 DECL_NAME (decl));
8168 in_section = sect;
8169 }
8170 else
8171 switch_to_section (sect);
8172 #endif
8173 }
8174
8175 #include "gt-varasm.h"