]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/varasm.c
[committed][RISC-V] Fix nearbyint failure on rv32 and formatting nits
[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 short patch_area_size = crtl->patch_area_size;
1861 unsigned short patch_area_entry = crtl->patch_area_entry;
1862
1863 /* Emit the patching area before the entry label, if any. */
1864 if (patch_area_entry > 0)
1865 targetm.asm_out.print_patchable_function_entry (asm_out_file,
1866 patch_area_entry, true);
1867
1868 /* Do any machine/system dependent processing of the function name. */
1869 #ifdef ASM_DECLARE_FUNCTION_NAME
1870 ASM_DECLARE_FUNCTION_NAME (asm_out_file, fnname, current_function_decl);
1871 #else
1872 /* Standard thing is just output label for the function. */
1873 ASM_OUTPUT_FUNCTION_LABEL (asm_out_file, fnname, current_function_decl);
1874 #endif /* ASM_DECLARE_FUNCTION_NAME */
1875
1876 /* And the area after the label. Record it if we haven't done so yet. */
1877 if (patch_area_size > patch_area_entry)
1878 targetm.asm_out.print_patchable_function_entry (asm_out_file,
1879 patch_area_size
1880 - patch_area_entry,
1881 patch_area_entry == 0);
1882
1883 if (lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (decl)))
1884 saw_no_split_stack = true;
1885 }
1886
1887 /* Output assembler code associated with defining the size of the
1888 function. DECL describes the function. NAME is the function's name. */
1889
1890 void
1891 assemble_end_function (tree decl, const char *fnname ATTRIBUTE_UNUSED)
1892 {
1893 #ifdef ASM_DECLARE_FUNCTION_SIZE
1894 /* We could have switched section in the middle of the function. */
1895 if (crtl->has_bb_partition)
1896 switch_to_section (function_section (decl));
1897 ASM_DECLARE_FUNCTION_SIZE (asm_out_file, fnname, decl);
1898 #endif
1899 if (! CONSTANT_POOL_BEFORE_FUNCTION)
1900 {
1901 output_constant_pool (fnname, decl);
1902 switch_to_section (function_section (decl)); /* need to switch back */
1903 }
1904 /* Output labels for end of hot/cold text sections (to be used by
1905 debug info.) */
1906 if (crtl->has_bb_partition)
1907 {
1908 section *save_text_section;
1909
1910 save_text_section = in_section;
1911 switch_to_section (unlikely_text_section ());
1912 #ifdef ASM_DECLARE_COLD_FUNCTION_SIZE
1913 if (cold_function_name != NULL_TREE)
1914 ASM_DECLARE_COLD_FUNCTION_SIZE (asm_out_file,
1915 IDENTIFIER_POINTER (cold_function_name),
1916 decl);
1917 #endif
1918 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.cold_section_end_label);
1919 if (first_function_block_is_cold)
1920 switch_to_section (text_section);
1921 else
1922 switch_to_section (function_section (decl));
1923 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.hot_section_end_label);
1924 switch_to_section (save_text_section);
1925 }
1926 }
1927 \f
1928 /* Assemble code to leave SIZE bytes of zeros. */
1929
1930 void
1931 assemble_zeros (unsigned HOST_WIDE_INT size)
1932 {
1933 /* Do no output if -fsyntax-only. */
1934 if (flag_syntax_only)
1935 return;
1936
1937 #ifdef ASM_NO_SKIP_IN_TEXT
1938 /* The `space' pseudo in the text section outputs nop insns rather than 0s,
1939 so we must output 0s explicitly in the text section. */
1940 if (ASM_NO_SKIP_IN_TEXT && (in_section->common.flags & SECTION_CODE) != 0)
1941 {
1942 unsigned HOST_WIDE_INT i;
1943 for (i = 0; i < size; i++)
1944 assemble_integer (const0_rtx, 1, BITS_PER_UNIT, 1);
1945 }
1946 else
1947 #endif
1948 if (size > 0)
1949 ASM_OUTPUT_SKIP (asm_out_file, size);
1950 }
1951
1952 /* Assemble an alignment pseudo op for an ALIGN-bit boundary. */
1953
1954 void
1955 assemble_align (unsigned int align)
1956 {
1957 if (align > BITS_PER_UNIT)
1958 {
1959 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
1960 }
1961 }
1962
1963 /* Assemble a string constant with the specified C string as contents. */
1964
1965 void
1966 assemble_string (const char *p, int size)
1967 {
1968 int pos = 0;
1969 int maximum = 2000;
1970
1971 /* If the string is very long, split it up. */
1972
1973 while (pos < size)
1974 {
1975 int thissize = size - pos;
1976 if (thissize > maximum)
1977 thissize = maximum;
1978
1979 ASM_OUTPUT_ASCII (asm_out_file, p, thissize);
1980
1981 pos += thissize;
1982 p += thissize;
1983 }
1984 }
1985
1986 \f
1987 /* A noswitch_section_callback for lcomm_section. */
1988
1989 static bool
1990 emit_local (tree decl ATTRIBUTE_UNUSED,
1991 const char *name ATTRIBUTE_UNUSED,
1992 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
1993 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
1994 {
1995 #if defined ASM_OUTPUT_ALIGNED_DECL_LOCAL
1996 unsigned int align = symtab_node::get (decl)->definition_alignment ();
1997 ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, decl, name,
1998 size, align);
1999 return true;
2000 #elif defined ASM_OUTPUT_ALIGNED_LOCAL
2001 unsigned int align = symtab_node::get (decl)->definition_alignment ();
2002 ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, align);
2003 return true;
2004 #else
2005 ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
2006 return false;
2007 #endif
2008 }
2009
2010 /* A noswitch_section_callback for bss_noswitch_section. */
2011
2012 #if defined ASM_OUTPUT_ALIGNED_BSS
2013 static bool
2014 emit_bss (tree decl ATTRIBUTE_UNUSED,
2015 const char *name ATTRIBUTE_UNUSED,
2016 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
2017 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
2018 {
2019 ASM_OUTPUT_ALIGNED_BSS (asm_out_file, decl, name, size,
2020 get_variable_align (decl));
2021 return true;
2022 }
2023 #endif
2024
2025 /* A noswitch_section_callback for comm_section. */
2026
2027 static bool
2028 emit_common (tree decl ATTRIBUTE_UNUSED,
2029 const char *name ATTRIBUTE_UNUSED,
2030 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
2031 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
2032 {
2033 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
2034 ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, decl, name,
2035 size, get_variable_align (decl));
2036 return true;
2037 #elif defined ASM_OUTPUT_ALIGNED_COMMON
2038 ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, name, size,
2039 get_variable_align (decl));
2040 return true;
2041 #else
2042 ASM_OUTPUT_COMMON (asm_out_file, name, size, rounded);
2043 return false;
2044 #endif
2045 }
2046
2047 /* A noswitch_section_callback for tls_comm_section. */
2048
2049 static bool
2050 emit_tls_common (tree decl ATTRIBUTE_UNUSED,
2051 const char *name ATTRIBUTE_UNUSED,
2052 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
2053 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
2054 {
2055 #ifdef ASM_OUTPUT_TLS_COMMON
2056 ASM_OUTPUT_TLS_COMMON (asm_out_file, decl, name, size);
2057 return true;
2058 #else
2059 sorry ("thread-local COMMON data not implemented");
2060 return true;
2061 #endif
2062 }
2063
2064 /* Assemble DECL given that it belongs in SECTION_NOSWITCH section SECT.
2065 NAME is the name of DECL's SYMBOL_REF. */
2066
2067 static void
2068 assemble_noswitch_variable (tree decl, const char *name, section *sect,
2069 unsigned int align)
2070 {
2071 unsigned HOST_WIDE_INT size, rounded;
2072
2073 size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
2074 rounded = size;
2075
2076 if ((flag_sanitize & SANITIZE_ADDRESS) && asan_protect_global (decl))
2077 size += asan_red_zone_size (size);
2078
2079 /* Don't allocate zero bytes of common,
2080 since that means "undefined external" in the linker. */
2081 if (size == 0)
2082 rounded = 1;
2083
2084 /* Round size up to multiple of BIGGEST_ALIGNMENT bits
2085 so that each uninitialized object starts on such a boundary. */
2086 rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1;
2087 rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
2088 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
2089
2090 if (!sect->noswitch.callback (decl, name, size, rounded)
2091 && (unsigned HOST_WIDE_INT) (align / BITS_PER_UNIT) > rounded)
2092 error ("requested alignment for %q+D is greater than "
2093 "implemented alignment of %wu", decl, rounded);
2094 }
2095
2096 /* A subroutine of assemble_variable. Output the label and contents of
2097 DECL, whose address is a SYMBOL_REF with name NAME. DONT_OUTPUT_DATA
2098 is as for assemble_variable. */
2099
2100 static void
2101 assemble_variable_contents (tree decl, const char *name,
2102 bool dont_output_data, bool merge_strings)
2103 {
2104 /* Do any machine/system dependent processing of the object. */
2105 #ifdef ASM_DECLARE_OBJECT_NAME
2106 last_assemble_variable_decl = decl;
2107 ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl);
2108 #else
2109 /* Standard thing is just output label for the object. */
2110 ASM_OUTPUT_LABEL (asm_out_file, name);
2111 #endif /* ASM_DECLARE_OBJECT_NAME */
2112
2113 if (!dont_output_data)
2114 {
2115 /* Caller is supposed to use varpool_get_constructor when it wants
2116 to output the body. */
2117 gcc_assert (!in_lto_p || DECL_INITIAL (decl) != error_mark_node);
2118 if (DECL_INITIAL (decl)
2119 && DECL_INITIAL (decl) != error_mark_node
2120 && !initializer_zerop (DECL_INITIAL (decl)))
2121 /* Output the actual data. */
2122 output_constant (DECL_INITIAL (decl),
2123 tree_to_uhwi (DECL_SIZE_UNIT (decl)),
2124 get_variable_align (decl),
2125 false, merge_strings);
2126 else
2127 /* Leave space for it. */
2128 assemble_zeros (tree_to_uhwi (DECL_SIZE_UNIT (decl)));
2129 targetm.asm_out.decl_end ();
2130 }
2131 }
2132
2133 /* Write out assembly for the variable DECL, which is not defined in
2134 the current translation unit. */
2135 void
2136 assemble_undefined_decl (tree decl)
2137 {
2138 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
2139 targetm.asm_out.assemble_undefined_decl (asm_out_file, name, decl);
2140 }
2141
2142 /* Assemble everything that is needed for a variable or function declaration.
2143 Not used for automatic variables, and not used for function definitions.
2144 Should not be called for variables of incomplete structure type.
2145
2146 TOP_LEVEL is nonzero if this variable has file scope.
2147 AT_END is nonzero if this is the special handling, at end of compilation,
2148 to define things that have had only tentative definitions.
2149 DONT_OUTPUT_DATA if nonzero means don't actually output the
2150 initial value (that will be done by the caller). */
2151
2152 void
2153 assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED,
2154 int at_end ATTRIBUTE_UNUSED, int dont_output_data)
2155 {
2156 const char *name;
2157 rtx decl_rtl, symbol;
2158 section *sect;
2159 unsigned int align;
2160 bool asan_protected = false;
2161
2162 /* This function is supposed to handle VARIABLES. Ensure we have one. */
2163 gcc_assert (VAR_P (decl));
2164
2165 /* Emulated TLS had better not get this far. */
2166 gcc_checking_assert (targetm.have_tls || !DECL_THREAD_LOCAL_P (decl));
2167
2168 last_assemble_variable_decl = 0;
2169
2170 /* Normally no need to say anything here for external references,
2171 since assemble_external is called by the language-specific code
2172 when a declaration is first seen. */
2173
2174 if (DECL_EXTERNAL (decl))
2175 return;
2176
2177 /* Do nothing for global register variables. */
2178 if (DECL_RTL_SET_P (decl) && REG_P (DECL_RTL (decl)))
2179 {
2180 TREE_ASM_WRITTEN (decl) = 1;
2181 return;
2182 }
2183
2184 /* If type was incomplete when the variable was declared,
2185 see if it is complete now. */
2186
2187 if (DECL_SIZE (decl) == 0)
2188 layout_decl (decl, 0);
2189
2190 /* Still incomplete => don't allocate it; treat the tentative defn
2191 (which is what it must have been) as an `extern' reference. */
2192
2193 if (!dont_output_data && DECL_SIZE (decl) == 0)
2194 {
2195 error ("storage size of %q+D isn%'t known", decl);
2196 TREE_ASM_WRITTEN (decl) = 1;
2197 return;
2198 }
2199
2200 /* The first declaration of a variable that comes through this function
2201 decides whether it is global (in C, has external linkage)
2202 or local (in C, has internal linkage). So do nothing more
2203 if this function has already run. */
2204
2205 if (TREE_ASM_WRITTEN (decl))
2206 return;
2207
2208 /* Make sure targetm.encode_section_info is invoked before we set
2209 ASM_WRITTEN. */
2210 decl_rtl = DECL_RTL (decl);
2211
2212 TREE_ASM_WRITTEN (decl) = 1;
2213
2214 /* Do no output if -fsyntax-only. */
2215 if (flag_syntax_only)
2216 return;
2217
2218 if (! dont_output_data
2219 && ! valid_constant_size_p (DECL_SIZE_UNIT (decl)))
2220 {
2221 error ("size of variable %q+D is too large", decl);
2222 return;
2223 }
2224
2225 gcc_assert (MEM_P (decl_rtl));
2226 gcc_assert (GET_CODE (XEXP (decl_rtl, 0)) == SYMBOL_REF);
2227 symbol = XEXP (decl_rtl, 0);
2228
2229 /* If this symbol belongs to the tree constant pool, output the constant
2230 if it hasn't already been written. */
2231 if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
2232 {
2233 tree decl = SYMBOL_REF_DECL (symbol);
2234 if (!TREE_ASM_WRITTEN (DECL_INITIAL (decl)))
2235 output_constant_def_contents (symbol);
2236 return;
2237 }
2238
2239 app_disable ();
2240
2241 name = XSTR (symbol, 0);
2242 if (TREE_PUBLIC (decl) && DECL_NAME (decl))
2243 notice_global_symbol (decl);
2244
2245 /* Compute the alignment of this data. */
2246
2247 align_variable (decl, dont_output_data);
2248
2249 if ((flag_sanitize & SANITIZE_ADDRESS)
2250 && asan_protect_global (decl))
2251 {
2252 asan_protected = true;
2253 SET_DECL_ALIGN (decl, MAX (DECL_ALIGN (decl),
2254 ASAN_RED_ZONE_SIZE * BITS_PER_UNIT));
2255 }
2256
2257 set_mem_align (decl_rtl, DECL_ALIGN (decl));
2258
2259 align = get_variable_align (decl);
2260
2261 if (TREE_PUBLIC (decl))
2262 maybe_assemble_visibility (decl);
2263
2264 if (DECL_PRESERVE_P (decl))
2265 targetm.asm_out.mark_decl_preserved (name);
2266
2267 /* First make the assembler name(s) global if appropriate. */
2268 sect = get_variable_section (decl, false);
2269 if (TREE_PUBLIC (decl)
2270 && (sect->common.flags & SECTION_COMMON) == 0)
2271 globalize_decl (decl);
2272
2273 /* Output any data that we will need to use the address of. */
2274 if (DECL_INITIAL (decl) && DECL_INITIAL (decl) != error_mark_node)
2275 output_addressed_constants (DECL_INITIAL (decl));
2276
2277 /* dbxout.c needs to know this. */
2278 if (sect && (sect->common.flags & SECTION_CODE) != 0)
2279 DECL_IN_TEXT_SECTION (decl) = 1;
2280
2281 /* If the decl is part of an object_block, make sure that the decl
2282 has been positioned within its block, but do not write out its
2283 definition yet. output_object_blocks will do that later. */
2284 if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol) && SYMBOL_REF_BLOCK (symbol))
2285 {
2286 gcc_assert (!dont_output_data);
2287 place_block_symbol (symbol);
2288 }
2289 else if (SECTION_STYLE (sect) == SECTION_NOSWITCH)
2290 assemble_noswitch_variable (decl, name, sect, align);
2291 else
2292 {
2293 /* Special-case handling of vtv comdat sections. */
2294 if (sect->named.name
2295 && (strcmp (sect->named.name, ".vtable_map_vars") == 0))
2296 handle_vtv_comdat_section (sect, decl);
2297 else
2298 switch_to_section (sect);
2299 if (align > BITS_PER_UNIT)
2300 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
2301 assemble_variable_contents (decl, name, dont_output_data,
2302 (sect->common.flags & SECTION_MERGE)
2303 && (sect->common.flags & SECTION_STRINGS));
2304 if (asan_protected)
2305 {
2306 unsigned HOST_WIDE_INT int size
2307 = tree_to_uhwi (DECL_SIZE_UNIT (decl));
2308 assemble_zeros (asan_red_zone_size (size));
2309 }
2310 }
2311 }
2312
2313
2314 /* Given a function declaration (FN_DECL), this function assembles the
2315 function into the .preinit_array section. */
2316
2317 void
2318 assemble_vtv_preinit_initializer (tree fn_decl)
2319 {
2320 section *sect;
2321 unsigned flags = SECTION_WRITE;
2322 rtx symbol = XEXP (DECL_RTL (fn_decl), 0);
2323
2324 flags |= SECTION_NOTYPE;
2325 sect = get_section (".preinit_array", flags, fn_decl);
2326 switch_to_section (sect);
2327 assemble_addr_to_section (symbol, sect);
2328 }
2329
2330 /* Return 1 if type TYPE contains any pointers. */
2331
2332 static int
2333 contains_pointers_p (tree type)
2334 {
2335 switch (TREE_CODE (type))
2336 {
2337 case POINTER_TYPE:
2338 case REFERENCE_TYPE:
2339 /* I'm not sure whether OFFSET_TYPE needs this treatment,
2340 so I'll play safe and return 1. */
2341 case OFFSET_TYPE:
2342 return 1;
2343
2344 case RECORD_TYPE:
2345 case UNION_TYPE:
2346 case QUAL_UNION_TYPE:
2347 {
2348 tree fields;
2349 /* For a type that has fields, see if the fields have pointers. */
2350 for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
2351 if (TREE_CODE (fields) == FIELD_DECL
2352 && contains_pointers_p (TREE_TYPE (fields)))
2353 return 1;
2354 return 0;
2355 }
2356
2357 case ARRAY_TYPE:
2358 /* An array type contains pointers if its element type does. */
2359 return contains_pointers_p (TREE_TYPE (type));
2360
2361 default:
2362 return 0;
2363 }
2364 }
2365
2366 /* We delay assemble_external processing until
2367 the compilation unit is finalized. This is the best we can do for
2368 right now (i.e. stage 3 of GCC 4.0) - the right thing is to delay
2369 it all the way to final. See PR 17982 for further discussion. */
2370 static GTY(()) tree pending_assemble_externals;
2371
2372 #ifdef ASM_OUTPUT_EXTERNAL
2373 /* Some targets delay some output to final using TARGET_ASM_FILE_END.
2374 As a result, assemble_external can be called after the list of externals
2375 is processed and the pointer set destroyed. */
2376 static bool pending_assemble_externals_processed;
2377
2378 /* Avoid O(external_decls**2) lookups in the pending_assemble_externals
2379 TREE_LIST in assemble_external. */
2380 static hash_set<tree> *pending_assemble_externals_set;
2381
2382 /* True if DECL is a function decl for which no out-of-line copy exists.
2383 It is assumed that DECL's assembler name has been set. */
2384
2385 static bool
2386 incorporeal_function_p (tree decl)
2387 {
2388 if (TREE_CODE (decl) == FUNCTION_DECL && fndecl_built_in_p (decl))
2389 {
2390 const char *name;
2391
2392 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
2393 && ALLOCA_FUNCTION_CODE_P (DECL_FUNCTION_CODE (decl)))
2394 return true;
2395
2396 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
2397 /* Atomic or sync builtins which have survived this far will be
2398 resolved externally and therefore are not incorporeal. */
2399 if (strncmp (name, "__builtin_", 10) == 0)
2400 return true;
2401 }
2402 return false;
2403 }
2404
2405 /* Actually do the tests to determine if this is necessary, and invoke
2406 ASM_OUTPUT_EXTERNAL. */
2407 static void
2408 assemble_external_real (tree decl)
2409 {
2410 rtx rtl = DECL_RTL (decl);
2411
2412 if (MEM_P (rtl) && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF
2413 && !SYMBOL_REF_USED (XEXP (rtl, 0))
2414 && !incorporeal_function_p (decl))
2415 {
2416 /* Some systems do require some output. */
2417 SYMBOL_REF_USED (XEXP (rtl, 0)) = 1;
2418 ASM_OUTPUT_EXTERNAL (asm_out_file, decl, XSTR (XEXP (rtl, 0), 0));
2419 }
2420 }
2421 #endif
2422
2423 void
2424 process_pending_assemble_externals (void)
2425 {
2426 #ifdef ASM_OUTPUT_EXTERNAL
2427 tree list;
2428 for (list = pending_assemble_externals; list; list = TREE_CHAIN (list))
2429 assemble_external_real (TREE_VALUE (list));
2430
2431 pending_assemble_externals = 0;
2432 pending_assemble_externals_processed = true;
2433 delete pending_assemble_externals_set;
2434 #endif
2435 }
2436
2437 /* This TREE_LIST contains any weak symbol declarations waiting
2438 to be emitted. */
2439 static GTY(()) tree weak_decls;
2440
2441 /* Output something to declare an external symbol to the assembler,
2442 and qualifiers such as weakness. (Most assemblers don't need
2443 extern declaration, so we normally output nothing.) Do nothing if
2444 DECL is not external. */
2445
2446 void
2447 assemble_external (tree decl ATTRIBUTE_UNUSED)
2448 {
2449 /* Make sure that the ASM_OUT_FILE is open.
2450 If it's not, we should not be calling this function. */
2451 gcc_assert (asm_out_file);
2452
2453 /* In a perfect world, the following condition would be true.
2454 Sadly, the Go front end emit assembly *from the front end*,
2455 bypassing the call graph. See PR52739. Fix before GCC 4.8. */
2456 #if 0
2457 /* This function should only be called if we are expanding, or have
2458 expanded, to RTL.
2459 Ideally, only final.c would be calling this function, but it is
2460 not clear whether that would break things somehow. See PR 17982
2461 for further discussion. */
2462 gcc_assert (state == EXPANSION
2463 || state == FINISHED);
2464 #endif
2465
2466 if (!DECL_P (decl) || !DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl))
2467 return;
2468
2469 /* We want to output annotation for weak and external symbols at
2470 very last to check if they are references or not. */
2471
2472 if (TARGET_SUPPORTS_WEAK
2473 && DECL_WEAK (decl)
2474 /* TREE_STATIC is a weird and abused creature which is not
2475 generally the right test for whether an entity has been
2476 locally emitted, inlined or otherwise not-really-extern, but
2477 for declarations that can be weak, it happens to be
2478 match. */
2479 && !TREE_STATIC (decl)
2480 && lookup_attribute ("weak", DECL_ATTRIBUTES (decl))
2481 && value_member (decl, weak_decls) == NULL_TREE)
2482 weak_decls = tree_cons (NULL, decl, weak_decls);
2483
2484 #ifdef ASM_OUTPUT_EXTERNAL
2485 if (pending_assemble_externals_processed)
2486 {
2487 assemble_external_real (decl);
2488 return;
2489 }
2490
2491 if (! pending_assemble_externals_set->add (decl))
2492 pending_assemble_externals = tree_cons (NULL, decl,
2493 pending_assemble_externals);
2494 #endif
2495 }
2496
2497 /* Similar, for calling a library function FUN. */
2498
2499 void
2500 assemble_external_libcall (rtx fun)
2501 {
2502 /* Declare library function name external when first used, if nec. */
2503 if (! SYMBOL_REF_USED (fun))
2504 {
2505 SYMBOL_REF_USED (fun) = 1;
2506 targetm.asm_out.external_libcall (fun);
2507 }
2508 }
2509
2510 /* Assemble a label named NAME. */
2511
2512 void
2513 assemble_label (FILE *file, const char *name)
2514 {
2515 ASM_OUTPUT_LABEL (file, name);
2516 }
2517
2518 /* Set the symbol_referenced flag for ID. */
2519 void
2520 mark_referenced (tree id)
2521 {
2522 TREE_SYMBOL_REFERENCED (id) = 1;
2523 }
2524
2525 /* Set the symbol_referenced flag for DECL and notify callgraph. */
2526 void
2527 mark_decl_referenced (tree decl)
2528 {
2529 if (TREE_CODE (decl) == FUNCTION_DECL)
2530 {
2531 /* Extern inline functions don't become needed when referenced.
2532 If we know a method will be emitted in other TU and no new
2533 functions can be marked reachable, just use the external
2534 definition. */
2535 struct cgraph_node *node = cgraph_node::get_create (decl);
2536 if (!DECL_EXTERNAL (decl)
2537 && !node->definition)
2538 node->mark_force_output ();
2539 }
2540 else if (VAR_P (decl))
2541 {
2542 varpool_node *node = varpool_node::get_create (decl);
2543 /* C++ frontend use mark_decl_references to force COMDAT variables
2544 to be output that might appear dead otherwise. */
2545 node->force_output = true;
2546 }
2547 /* else do nothing - we can get various sorts of CST nodes here,
2548 which do not need to be marked. */
2549 }
2550
2551
2552 /* Output to FILE (an assembly file) a reference to NAME. If NAME
2553 starts with a *, the rest of NAME is output verbatim. Otherwise
2554 NAME is transformed in a target-specific way (usually by the
2555 addition of an underscore). */
2556
2557 void
2558 assemble_name_raw (FILE *file, const char *name)
2559 {
2560 if (name[0] == '*')
2561 fputs (&name[1], file);
2562 else
2563 ASM_OUTPUT_LABELREF (file, name);
2564 }
2565
2566 /* Return NAME that should actually be emitted, looking through
2567 transparent aliases. If NAME refers to an entity that is also
2568 represented as a tree (like a function or variable), mark the entity
2569 as referenced. */
2570 const char *
2571 assemble_name_resolve (const char *name)
2572 {
2573 const char *real_name = targetm.strip_name_encoding (name);
2574 tree id = maybe_get_identifier (real_name);
2575
2576 if (id)
2577 {
2578 tree id_orig = id;
2579
2580 mark_referenced (id);
2581 ultimate_transparent_alias_target (&id);
2582 if (id != id_orig)
2583 name = IDENTIFIER_POINTER (id);
2584 gcc_assert (! TREE_CHAIN (id));
2585 }
2586
2587 return name;
2588 }
2589
2590 /* Like assemble_name_raw, but should be used when NAME might refer to
2591 an entity that is also represented as a tree (like a function or
2592 variable). If NAME does refer to such an entity, that entity will
2593 be marked as referenced. */
2594
2595 void
2596 assemble_name (FILE *file, const char *name)
2597 {
2598 assemble_name_raw (file, assemble_name_resolve (name));
2599 }
2600
2601 /* Allocate SIZE bytes writable static space with a gensym name
2602 and return an RTX to refer to its address. */
2603
2604 rtx
2605 assemble_static_space (unsigned HOST_WIDE_INT size)
2606 {
2607 char name[17];
2608 const char *namestring;
2609 rtx x;
2610
2611 ASM_GENERATE_INTERNAL_LABEL (name, "LF", const_labelno);
2612 ++const_labelno;
2613 namestring = ggc_strdup (name);
2614
2615 x = gen_rtx_SYMBOL_REF (Pmode, namestring);
2616 SYMBOL_REF_FLAGS (x) = SYMBOL_FLAG_LOCAL;
2617
2618 #ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
2619 ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, NULL_TREE, name, size,
2620 BIGGEST_ALIGNMENT);
2621 #else
2622 #ifdef ASM_OUTPUT_ALIGNED_LOCAL
2623 ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, BIGGEST_ALIGNMENT);
2624 #else
2625 {
2626 /* Round size up to multiple of BIGGEST_ALIGNMENT bits
2627 so that each uninitialized object starts on such a boundary. */
2628 /* Variable `rounded' might or might not be used in ASM_OUTPUT_LOCAL. */
2629 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED
2630 = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1)
2631 / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
2632 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
2633 ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
2634 }
2635 #endif
2636 #endif
2637 return x;
2638 }
2639
2640 /* Assemble the static constant template for function entry trampolines.
2641 This is done at most once per compilation.
2642 Returns an RTX for the address of the template. */
2643
2644 static GTY(()) rtx initial_trampoline;
2645
2646 rtx
2647 assemble_trampoline_template (void)
2648 {
2649 char label[256];
2650 const char *name;
2651 int align;
2652 rtx symbol;
2653
2654 gcc_assert (targetm.asm_out.trampoline_template != NULL);
2655
2656 if (initial_trampoline)
2657 return initial_trampoline;
2658
2659 /* By default, put trampoline templates in read-only data section. */
2660
2661 #ifdef TRAMPOLINE_SECTION
2662 switch_to_section (TRAMPOLINE_SECTION);
2663 #else
2664 switch_to_section (readonly_data_section);
2665 #endif
2666
2667 /* Write the assembler code to define one. */
2668 align = floor_log2 (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT);
2669 if (align > 0)
2670 ASM_OUTPUT_ALIGN (asm_out_file, align);
2671
2672 targetm.asm_out.internal_label (asm_out_file, "LTRAMP", 0);
2673 targetm.asm_out.trampoline_template (asm_out_file);
2674
2675 /* Record the rtl to refer to it. */
2676 ASM_GENERATE_INTERNAL_LABEL (label, "LTRAMP", 0);
2677 name = ggc_strdup (label);
2678 symbol = gen_rtx_SYMBOL_REF (Pmode, name);
2679 SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2680
2681 initial_trampoline = gen_const_mem (BLKmode, symbol);
2682 set_mem_align (initial_trampoline, TRAMPOLINE_ALIGNMENT);
2683 set_mem_size (initial_trampoline, TRAMPOLINE_SIZE);
2684
2685 return initial_trampoline;
2686 }
2687 \f
2688 /* A and B are either alignments or offsets. Return the minimum alignment
2689 that may be assumed after adding the two together. */
2690
2691 static inline unsigned
2692 min_align (unsigned int a, unsigned int b)
2693 {
2694 return least_bit_hwi (a | b);
2695 }
2696
2697 /* Return the assembler directive for creating a given kind of integer
2698 object. SIZE is the number of bytes in the object and ALIGNED_P
2699 indicates whether it is known to be aligned. Return NULL if the
2700 assembly dialect has no such directive.
2701
2702 The returned string should be printed at the start of a new line and
2703 be followed immediately by the object's initial value. */
2704
2705 const char *
2706 integer_asm_op (int size, int aligned_p)
2707 {
2708 struct asm_int_op *ops;
2709
2710 if (aligned_p)
2711 ops = &targetm.asm_out.aligned_op;
2712 else
2713 ops = &targetm.asm_out.unaligned_op;
2714
2715 switch (size)
2716 {
2717 case 1:
2718 return targetm.asm_out.byte_op;
2719 case 2:
2720 return ops->hi;
2721 case 3:
2722 return ops->psi;
2723 case 4:
2724 return ops->si;
2725 case 5:
2726 case 6:
2727 case 7:
2728 return ops->pdi;
2729 case 8:
2730 return ops->di;
2731 case 9:
2732 case 10:
2733 case 11:
2734 case 12:
2735 case 13:
2736 case 14:
2737 case 15:
2738 return ops->pti;
2739 case 16:
2740 return ops->ti;
2741 default:
2742 return NULL;
2743 }
2744 }
2745
2746 /* Use directive OP to assemble an integer object X. Print OP at the
2747 start of the line, followed immediately by the value of X. */
2748
2749 void
2750 assemble_integer_with_op (const char *op, rtx x)
2751 {
2752 fputs (op, asm_out_file);
2753 output_addr_const (asm_out_file, x);
2754 fputc ('\n', asm_out_file);
2755 }
2756
2757 /* The default implementation of the asm_out.integer target hook. */
2758
2759 bool
2760 default_assemble_integer (rtx x ATTRIBUTE_UNUSED,
2761 unsigned int size ATTRIBUTE_UNUSED,
2762 int aligned_p ATTRIBUTE_UNUSED)
2763 {
2764 const char *op = integer_asm_op (size, aligned_p);
2765 /* Avoid GAS bugs for large values. Specifically negative values whose
2766 absolute value fits in a bfd_vma, but not in a bfd_signed_vma. */
2767 if (size > UNITS_PER_WORD && size > POINTER_SIZE_UNITS)
2768 return false;
2769 return op && (assemble_integer_with_op (op, x), true);
2770 }
2771
2772 /* Assemble the integer constant X into an object of SIZE bytes. ALIGN is
2773 the alignment of the integer in bits. Return 1 if we were able to output
2774 the constant, otherwise 0. We must be able to output the constant,
2775 if FORCE is nonzero. */
2776
2777 bool
2778 assemble_integer (rtx x, unsigned int size, unsigned int align, int force)
2779 {
2780 int aligned_p;
2781
2782 aligned_p = (align >= MIN (size * BITS_PER_UNIT, BIGGEST_ALIGNMENT));
2783
2784 /* See if the target hook can handle this kind of object. */
2785 if (targetm.asm_out.integer (x, size, aligned_p))
2786 return true;
2787
2788 /* If the object is a multi-byte one, try splitting it up. Split
2789 it into words it if is multi-word, otherwise split it into bytes. */
2790 if (size > 1)
2791 {
2792 machine_mode omode, imode;
2793 unsigned int subalign;
2794 unsigned int subsize, i;
2795 enum mode_class mclass;
2796
2797 subsize = size > UNITS_PER_WORD? UNITS_PER_WORD : 1;
2798 subalign = MIN (align, subsize * BITS_PER_UNIT);
2799 if (GET_CODE (x) == CONST_FIXED)
2800 mclass = GET_MODE_CLASS (GET_MODE (x));
2801 else
2802 mclass = MODE_INT;
2803
2804 omode = mode_for_size (subsize * BITS_PER_UNIT, mclass, 0).require ();
2805 imode = mode_for_size (size * BITS_PER_UNIT, mclass, 0).require ();
2806
2807 for (i = 0; i < size; i += subsize)
2808 {
2809 rtx partial = simplify_subreg (omode, x, imode, i);
2810 if (!partial || !assemble_integer (partial, subsize, subalign, 0))
2811 break;
2812 }
2813 if (i == size)
2814 return true;
2815
2816 /* If we've printed some of it, but not all of it, there's no going
2817 back now. */
2818 gcc_assert (!i);
2819 }
2820
2821 gcc_assert (!force);
2822
2823 return false;
2824 }
2825 \f
2826 /* Assemble the floating-point constant D into an object of size MODE. ALIGN
2827 is the alignment of the constant in bits. If REVERSE is true, D is output
2828 in reverse storage order. */
2829
2830 void
2831 assemble_real (REAL_VALUE_TYPE d, scalar_float_mode mode, unsigned int align,
2832 bool reverse)
2833 {
2834 long data[4] = {0, 0, 0, 0};
2835 int bitsize, nelts, nunits, units_per;
2836 rtx elt;
2837
2838 /* This is hairy. We have a quantity of known size. real_to_target
2839 will put it into an array of *host* longs, 32 bits per element
2840 (even if long is more than 32 bits). We need to determine the
2841 number of array elements that are occupied (nelts) and the number
2842 of *target* min-addressable units that will be occupied in the
2843 object file (nunits). We cannot assume that 32 divides the
2844 mode's bitsize (size * BITS_PER_UNIT) evenly.
2845
2846 size * BITS_PER_UNIT is used here to make sure that padding bits
2847 (which might appear at either end of the value; real_to_target
2848 will include the padding bits in its output array) are included. */
2849
2850 nunits = GET_MODE_SIZE (mode);
2851 bitsize = nunits * BITS_PER_UNIT;
2852 nelts = CEIL (bitsize, 32);
2853 units_per = 32 / BITS_PER_UNIT;
2854
2855 real_to_target (data, &d, mode);
2856
2857 /* Put out the first word with the specified alignment. */
2858 unsigned int chunk_nunits = MIN (nunits, units_per);
2859 if (reverse)
2860 elt = flip_storage_order (SImode, gen_int_mode (data[nelts - 1], SImode));
2861 else
2862 elt = GEN_INT (sext_hwi (data[0], chunk_nunits * BITS_PER_UNIT));
2863 assemble_integer (elt, chunk_nunits, align, 1);
2864 nunits -= chunk_nunits;
2865
2866 /* Subsequent words need only 32-bit alignment. */
2867 align = min_align (align, 32);
2868
2869 for (int i = 1; i < nelts; i++)
2870 {
2871 chunk_nunits = MIN (nunits, units_per);
2872 if (reverse)
2873 elt = flip_storage_order (SImode,
2874 gen_int_mode (data[nelts - 1 - i], SImode));
2875 else
2876 elt = GEN_INT (sext_hwi (data[i], chunk_nunits * BITS_PER_UNIT));
2877 assemble_integer (elt, chunk_nunits, align, 1);
2878 nunits -= chunk_nunits;
2879 }
2880 }
2881 \f
2882 /* Given an expression EXP with a constant value,
2883 reduce it to the sum of an assembler symbol and an integer.
2884 Store them both in the structure *VALUE.
2885 EXP must be reducible. */
2886
2887 class addr_const {
2888 public:
2889 rtx base;
2890 poly_int64 offset;
2891 };
2892
2893 static void
2894 decode_addr_const (tree exp, class addr_const *value)
2895 {
2896 tree target = TREE_OPERAND (exp, 0);
2897 poly_int64 offset = 0;
2898 rtx x;
2899
2900 while (1)
2901 {
2902 poly_int64 bytepos;
2903 if (TREE_CODE (target) == COMPONENT_REF
2904 && poly_int_tree_p (byte_position (TREE_OPERAND (target, 1)),
2905 &bytepos))
2906 {
2907 offset += bytepos;
2908 target = TREE_OPERAND (target, 0);
2909 }
2910 else if (TREE_CODE (target) == ARRAY_REF
2911 || TREE_CODE (target) == ARRAY_RANGE_REF)
2912 {
2913 /* Truncate big offset. */
2914 offset
2915 += (TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (target)))
2916 * wi::to_poly_widest (TREE_OPERAND (target, 1)).force_shwi ());
2917 target = TREE_OPERAND (target, 0);
2918 }
2919 else if (TREE_CODE (target) == MEM_REF
2920 && TREE_CODE (TREE_OPERAND (target, 0)) == ADDR_EXPR)
2921 {
2922 offset += mem_ref_offset (target).force_shwi ();
2923 target = TREE_OPERAND (TREE_OPERAND (target, 0), 0);
2924 }
2925 else if (TREE_CODE (target) == INDIRECT_REF
2926 && TREE_CODE (TREE_OPERAND (target, 0)) == NOP_EXPR
2927 && TREE_CODE (TREE_OPERAND (TREE_OPERAND (target, 0), 0))
2928 == ADDR_EXPR)
2929 target = TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (target, 0), 0), 0);
2930 else
2931 break;
2932 }
2933
2934 switch (TREE_CODE (target))
2935 {
2936 case VAR_DECL:
2937 case FUNCTION_DECL:
2938 x = DECL_RTL (target);
2939 break;
2940
2941 case LABEL_DECL:
2942 x = gen_rtx_MEM (FUNCTION_MODE,
2943 gen_rtx_LABEL_REF (Pmode, force_label_rtx (target)));
2944 break;
2945
2946 case REAL_CST:
2947 case FIXED_CST:
2948 case STRING_CST:
2949 case COMPLEX_CST:
2950 case CONSTRUCTOR:
2951 case INTEGER_CST:
2952 x = lookup_constant_def (target);
2953 /* Should have been added by output_addressed_constants. */
2954 gcc_assert (x);
2955 break;
2956
2957 case INDIRECT_REF:
2958 /* This deals with absolute addresses. */
2959 offset += tree_to_shwi (TREE_OPERAND (target, 0));
2960 x = gen_rtx_MEM (QImode,
2961 gen_rtx_SYMBOL_REF (Pmode, "origin of addresses"));
2962 break;
2963
2964 case COMPOUND_LITERAL_EXPR:
2965 gcc_assert (COMPOUND_LITERAL_EXPR_DECL (target));
2966 x = DECL_RTL (COMPOUND_LITERAL_EXPR_DECL (target));
2967 break;
2968
2969 default:
2970 gcc_unreachable ();
2971 }
2972
2973 gcc_assert (MEM_P (x));
2974 x = XEXP (x, 0);
2975
2976 value->base = x;
2977 value->offset = offset;
2978 }
2979 \f
2980 static GTY(()) hash_table<tree_descriptor_hasher> *const_desc_htab;
2981
2982 static void maybe_output_constant_def_contents (struct constant_descriptor_tree *, int);
2983
2984 /* Constant pool accessor function. */
2985
2986 hash_table<tree_descriptor_hasher> *
2987 constant_pool_htab (void)
2988 {
2989 return const_desc_htab;
2990 }
2991
2992 /* Compute a hash code for a constant expression. */
2993
2994 hashval_t
2995 tree_descriptor_hasher::hash (constant_descriptor_tree *ptr)
2996 {
2997 return ptr->hash;
2998 }
2999
3000 static hashval_t
3001 const_hash_1 (const tree exp)
3002 {
3003 const char *p;
3004 hashval_t hi;
3005 int len, i;
3006 enum tree_code code = TREE_CODE (exp);
3007
3008 /* Either set P and LEN to the address and len of something to hash and
3009 exit the switch or return a value. */
3010
3011 switch (code)
3012 {
3013 case INTEGER_CST:
3014 p = (char *) &TREE_INT_CST_ELT (exp, 0);
3015 len = TREE_INT_CST_NUNITS (exp) * sizeof (HOST_WIDE_INT);
3016 break;
3017
3018 case REAL_CST:
3019 return real_hash (TREE_REAL_CST_PTR (exp));
3020
3021 case FIXED_CST:
3022 return fixed_hash (TREE_FIXED_CST_PTR (exp));
3023
3024 case STRING_CST:
3025 p = TREE_STRING_POINTER (exp);
3026 len = TREE_STRING_LENGTH (exp);
3027 break;
3028
3029 case COMPLEX_CST:
3030 return (const_hash_1 (TREE_REALPART (exp)) * 5
3031 + const_hash_1 (TREE_IMAGPART (exp)));
3032
3033 case VECTOR_CST:
3034 {
3035 hi = 7 + VECTOR_CST_NPATTERNS (exp);
3036 hi = hi * 563 + VECTOR_CST_NELTS_PER_PATTERN (exp);
3037 unsigned int count = vector_cst_encoded_nelts (exp);
3038 for (unsigned int i = 0; i < count; ++i)
3039 hi = hi * 563 + const_hash_1 (VECTOR_CST_ENCODED_ELT (exp, i));
3040 return hi;
3041 }
3042
3043 case CONSTRUCTOR:
3044 {
3045 unsigned HOST_WIDE_INT idx;
3046 tree value;
3047
3048 hi = 5 + int_size_in_bytes (TREE_TYPE (exp));
3049
3050 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, value)
3051 if (value)
3052 hi = hi * 603 + const_hash_1 (value);
3053
3054 return hi;
3055 }
3056
3057 case ADDR_EXPR:
3058 if (CONSTANT_CLASS_P (TREE_OPERAND (exp, 0)))
3059 return const_hash_1 (TREE_OPERAND (exp, 0));
3060
3061 /* Fallthru. */
3062 case FDESC_EXPR:
3063 {
3064 class addr_const value;
3065
3066 decode_addr_const (exp, &value);
3067 switch (GET_CODE (value.base))
3068 {
3069 case SYMBOL_REF:
3070 /* Don't hash the address of the SYMBOL_REF;
3071 only use the offset and the symbol name. */
3072 hi = value.offset.coeffs[0];
3073 p = XSTR (value.base, 0);
3074 for (i = 0; p[i] != 0; i++)
3075 hi = ((hi * 613) + (unsigned) (p[i]));
3076 break;
3077
3078 case LABEL_REF:
3079 hi = (value.offset.coeffs[0]
3080 + CODE_LABEL_NUMBER (label_ref_label (value.base)) * 13);
3081 break;
3082
3083 default:
3084 gcc_unreachable ();
3085 }
3086 }
3087 return hi;
3088
3089 case PLUS_EXPR:
3090 case POINTER_PLUS_EXPR:
3091 case MINUS_EXPR:
3092 return (const_hash_1 (TREE_OPERAND (exp, 0)) * 9
3093 + const_hash_1 (TREE_OPERAND (exp, 1)));
3094
3095 CASE_CONVERT:
3096 return const_hash_1 (TREE_OPERAND (exp, 0)) * 7 + 2;
3097
3098 default:
3099 /* A language specific constant. Just hash the code. */
3100 return code;
3101 }
3102
3103 /* Compute hashing function. */
3104 hi = len;
3105 for (i = 0; i < len; i++)
3106 hi = ((hi * 613) + (unsigned) (p[i]));
3107
3108 return hi;
3109 }
3110
3111 /* Wrapper of compare_constant, for the htab interface. */
3112 bool
3113 tree_descriptor_hasher::equal (constant_descriptor_tree *c1,
3114 constant_descriptor_tree *c2)
3115 {
3116 if (c1->hash != c2->hash)
3117 return 0;
3118 return compare_constant (c1->value, c2->value);
3119 }
3120
3121 /* Compare t1 and t2, and return 1 only if they are known to result in
3122 the same bit pattern on output. */
3123
3124 static int
3125 compare_constant (const tree t1, const tree t2)
3126 {
3127 enum tree_code typecode;
3128
3129 if (t1 == NULL_TREE)
3130 return t2 == NULL_TREE;
3131 if (t2 == NULL_TREE)
3132 return 0;
3133
3134 if (TREE_CODE (t1) != TREE_CODE (t2))
3135 return 0;
3136
3137 switch (TREE_CODE (t1))
3138 {
3139 case INTEGER_CST:
3140 /* Integer constants are the same only if the same width of type. */
3141 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
3142 return 0;
3143 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
3144 return 0;
3145 return tree_int_cst_equal (t1, t2);
3146
3147 case REAL_CST:
3148 /* Real constants are the same only if the same width of type. In
3149 addition to the same width, we need to check whether the modes are the
3150 same. There might be two floating point modes that are the same size
3151 but have different representations, such as the PowerPC that has 2
3152 different 128-bit floating point types (IBM extended double and IEEE
3153 128-bit floating point). */
3154 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
3155 return 0;
3156 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
3157 return 0;
3158 return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
3159
3160 case FIXED_CST:
3161 /* Fixed constants are the same only if the same width of type. */
3162 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
3163 return 0;
3164
3165 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
3166
3167 case STRING_CST:
3168 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
3169 || int_size_in_bytes (TREE_TYPE (t1))
3170 != int_size_in_bytes (TREE_TYPE (t2)))
3171 return 0;
3172
3173 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3174 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3175 TREE_STRING_LENGTH (t1)));
3176
3177 case COMPLEX_CST:
3178 return (compare_constant (TREE_REALPART (t1), TREE_REALPART (t2))
3179 && compare_constant (TREE_IMAGPART (t1), TREE_IMAGPART (t2)));
3180
3181 case VECTOR_CST:
3182 {
3183 if (VECTOR_CST_NPATTERNS (t1)
3184 != VECTOR_CST_NPATTERNS (t2))
3185 return 0;
3186
3187 if (VECTOR_CST_NELTS_PER_PATTERN (t1)
3188 != VECTOR_CST_NELTS_PER_PATTERN (t2))
3189 return 0;
3190
3191 unsigned int count = vector_cst_encoded_nelts (t1);
3192 for (unsigned int i = 0; i < count; ++i)
3193 if (!compare_constant (VECTOR_CST_ENCODED_ELT (t1, i),
3194 VECTOR_CST_ENCODED_ELT (t2, i)))
3195 return 0;
3196
3197 return 1;
3198 }
3199
3200 case CONSTRUCTOR:
3201 {
3202 vec<constructor_elt, va_gc> *v1, *v2;
3203 unsigned HOST_WIDE_INT idx;
3204
3205 typecode = TREE_CODE (TREE_TYPE (t1));
3206 if (typecode != TREE_CODE (TREE_TYPE (t2)))
3207 return 0;
3208
3209 if (typecode == ARRAY_TYPE)
3210 {
3211 HOST_WIDE_INT size_1 = int_size_in_bytes (TREE_TYPE (t1));
3212 /* For arrays, check that mode, size and storage order match. */
3213 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
3214 || size_1 == -1
3215 || size_1 != int_size_in_bytes (TREE_TYPE (t2))
3216 || TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (t1))
3217 != TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (t2)))
3218 return 0;
3219 }
3220 else
3221 {
3222 /* For record and union constructors, require exact type
3223 equality. */
3224 if (TREE_TYPE (t1) != TREE_TYPE (t2))
3225 return 0;
3226 }
3227
3228 v1 = CONSTRUCTOR_ELTS (t1);
3229 v2 = CONSTRUCTOR_ELTS (t2);
3230 if (vec_safe_length (v1) != vec_safe_length (v2))
3231 return 0;
3232
3233 for (idx = 0; idx < vec_safe_length (v1); ++idx)
3234 {
3235 constructor_elt *c1 = &(*v1)[idx];
3236 constructor_elt *c2 = &(*v2)[idx];
3237
3238 /* Check that each value is the same... */
3239 if (!compare_constant (c1->value, c2->value))
3240 return 0;
3241 /* ... and that they apply to the same fields! */
3242 if (typecode == ARRAY_TYPE)
3243 {
3244 if (!compare_constant (c1->index, c2->index))
3245 return 0;
3246 }
3247 else
3248 {
3249 if (c1->index != c2->index)
3250 return 0;
3251 }
3252 }
3253
3254 return 1;
3255 }
3256
3257 case ADDR_EXPR:
3258 case FDESC_EXPR:
3259 {
3260 class addr_const value1, value2;
3261 enum rtx_code code;
3262 int ret;
3263
3264 decode_addr_const (t1, &value1);
3265 decode_addr_const (t2, &value2);
3266
3267 if (maybe_ne (value1.offset, value2.offset))
3268 return 0;
3269
3270 code = GET_CODE (value1.base);
3271 if (code != GET_CODE (value2.base))
3272 return 0;
3273
3274 switch (code)
3275 {
3276 case SYMBOL_REF:
3277 ret = (strcmp (XSTR (value1.base, 0), XSTR (value2.base, 0)) == 0);
3278 break;
3279
3280 case LABEL_REF:
3281 ret = (CODE_LABEL_NUMBER (label_ref_label (value1.base))
3282 == CODE_LABEL_NUMBER (label_ref_label (value2.base)));
3283 break;
3284
3285 default:
3286 gcc_unreachable ();
3287 }
3288 return ret;
3289 }
3290
3291 case PLUS_EXPR:
3292 case POINTER_PLUS_EXPR:
3293 case MINUS_EXPR:
3294 case RANGE_EXPR:
3295 return (compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
3296 && compare_constant (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
3297
3298 CASE_CONVERT:
3299 case VIEW_CONVERT_EXPR:
3300 return compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3301
3302 default:
3303 return 0;
3304 }
3305
3306 gcc_unreachable ();
3307 }
3308 \f
3309 /* Return the section into which constant EXP should be placed. */
3310
3311 static section *
3312 get_constant_section (tree exp, unsigned int align)
3313 {
3314 return targetm.asm_out.select_section (exp,
3315 compute_reloc_for_constant (exp),
3316 align);
3317 }
3318
3319 /* Return the size of constant EXP in bytes. */
3320
3321 static HOST_WIDE_INT
3322 get_constant_size (tree exp)
3323 {
3324 HOST_WIDE_INT size;
3325
3326 size = int_size_in_bytes (TREE_TYPE (exp));
3327 gcc_checking_assert (size >= 0);
3328 gcc_checking_assert (TREE_CODE (exp) != STRING_CST
3329 || size >= TREE_STRING_LENGTH (exp));
3330 return size;
3331 }
3332
3333 /* Subroutine of output_constant_def:
3334 No constant equal to EXP is known to have been output.
3335 Make a constant descriptor to enter EXP in the hash table.
3336 Assign the label number and construct RTL to refer to the
3337 constant's location in memory.
3338 Caller is responsible for updating the hash table. */
3339
3340 static struct constant_descriptor_tree *
3341 build_constant_desc (tree exp)
3342 {
3343 struct constant_descriptor_tree *desc;
3344 rtx symbol, rtl;
3345 char label[256];
3346 int labelno;
3347 tree decl;
3348
3349 desc = ggc_alloc<constant_descriptor_tree> ();
3350 desc->value = exp;
3351
3352 /* Create a string containing the label name, in LABEL. */
3353 labelno = const_labelno++;
3354 ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno);
3355
3356 /* Construct the VAR_DECL associated with the constant. */
3357 decl = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (label),
3358 TREE_TYPE (exp));
3359 DECL_ARTIFICIAL (decl) = 1;
3360 DECL_IGNORED_P (decl) = 1;
3361 TREE_READONLY (decl) = 1;
3362 TREE_STATIC (decl) = 1;
3363 TREE_ADDRESSABLE (decl) = 1;
3364 /* We don't set the RTL yet as this would cause varpool to assume that the
3365 variable is referenced. Moreover, it would just be dropped in LTO mode.
3366 Instead we set the flag that will be recognized in make_decl_rtl. */
3367 DECL_IN_CONSTANT_POOL (decl) = 1;
3368 DECL_INITIAL (decl) = desc->value;
3369 /* ??? targetm.constant_alignment hasn't been updated for vector types on
3370 most architectures so use DATA_ALIGNMENT as well, except for strings. */
3371 if (TREE_CODE (exp) == STRING_CST)
3372 SET_DECL_ALIGN (decl, targetm.constant_alignment (exp, DECL_ALIGN (decl)));
3373 else
3374 {
3375 align_variable (decl, 0);
3376 if (DECL_ALIGN (decl) < GET_MODE_ALIGNMENT (DECL_MODE (decl))
3377 && ((optab_handler (movmisalign_optab, DECL_MODE (decl))
3378 != CODE_FOR_nothing)
3379 || targetm.slow_unaligned_access (DECL_MODE (decl),
3380 DECL_ALIGN (decl))))
3381 SET_DECL_ALIGN (decl, GET_MODE_ALIGNMENT (DECL_MODE (decl)));
3382 }
3383
3384 /* Now construct the SYMBOL_REF and the MEM. */
3385 if (use_object_blocks_p ())
3386 {
3387 int align = (TREE_CODE (decl) == CONST_DECL
3388 || (VAR_P (decl) && DECL_IN_CONSTANT_POOL (decl))
3389 ? DECL_ALIGN (decl)
3390 : symtab_node::get (decl)->definition_alignment ());
3391 section *sect = get_constant_section (exp, align);
3392 symbol = create_block_symbol (ggc_strdup (label),
3393 get_block_for_section (sect), -1);
3394 }
3395 else
3396 symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
3397 SYMBOL_REF_FLAGS (symbol) |= SYMBOL_FLAG_LOCAL;
3398 SET_SYMBOL_REF_DECL (symbol, decl);
3399 TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1;
3400
3401 rtl = gen_const_mem (TYPE_MODE (TREE_TYPE (exp)), symbol);
3402 set_mem_attributes (rtl, exp, 1);
3403 set_mem_alias_set (rtl, 0);
3404
3405 /* Putting EXP into the literal pool might have imposed a different
3406 alignment which should be visible in the RTX as well. */
3407 set_mem_align (rtl, DECL_ALIGN (decl));
3408
3409 /* We cannot share RTX'es in pool entries.
3410 Mark this piece of RTL as required for unsharing. */
3411 RTX_FLAG (rtl, used) = 1;
3412
3413 /* Set flags or add text to the name to record information, such as
3414 that it is a local symbol. If the name is changed, the macro
3415 ASM_OUTPUT_LABELREF will have to know how to strip this
3416 information. This call might invalidate our local variable
3417 SYMBOL; we can't use it afterward. */
3418 targetm.encode_section_info (exp, rtl, true);
3419
3420 desc->rtl = rtl;
3421
3422 return desc;
3423 }
3424
3425 /* Subroutine of output_constant_def and tree_output_constant_def:
3426 Add a constant to the hash table that tracks which constants
3427 already have labels. */
3428
3429 static constant_descriptor_tree *
3430 add_constant_to_table (tree exp)
3431 {
3432 /* The hash table methods may call output_constant_def for addressed
3433 constants, so handle them first. */
3434 output_addressed_constants (exp);
3435
3436 /* Sanity check to catch recursive insertion. */
3437 static bool inserting;
3438 gcc_assert (!inserting);
3439 inserting = true;
3440
3441 /* Look up EXP in the table of constant descriptors. If we didn't
3442 find it, create a new one. */
3443 struct constant_descriptor_tree key;
3444 key.value = exp;
3445 key.hash = const_hash_1 (exp);
3446 constant_descriptor_tree **loc
3447 = const_desc_htab->find_slot_with_hash (&key, key.hash, INSERT);
3448
3449 inserting = false;
3450
3451 struct constant_descriptor_tree *desc = *loc;
3452 if (!desc)
3453 {
3454 desc = build_constant_desc (exp);
3455 desc->hash = key.hash;
3456 *loc = desc;
3457 }
3458
3459 return desc;
3460 }
3461
3462 /* Return an rtx representing a reference to constant data in memory
3463 for the constant expression EXP.
3464
3465 If assembler code for such a constant has already been output,
3466 return an rtx to refer to it.
3467 Otherwise, output such a constant in memory
3468 and generate an rtx for it.
3469
3470 If DEFER is nonzero, this constant can be deferred and output only
3471 if referenced in the function after all optimizations.
3472
3473 `const_desc_table' records which constants already have label strings. */
3474
3475 rtx
3476 output_constant_def (tree exp, int defer)
3477 {
3478 struct constant_descriptor_tree *desc = add_constant_to_table (exp);
3479 maybe_output_constant_def_contents (desc, defer);
3480 return desc->rtl;
3481 }
3482
3483 /* Subroutine of output_constant_def: Decide whether or not we need to
3484 output the constant DESC now, and if so, do it. */
3485 static void
3486 maybe_output_constant_def_contents (struct constant_descriptor_tree *desc,
3487 int defer)
3488 {
3489 rtx symbol = XEXP (desc->rtl, 0);
3490 tree exp = desc->value;
3491
3492 if (flag_syntax_only)
3493 return;
3494
3495 if (TREE_ASM_WRITTEN (exp))
3496 /* Already output; don't do it again. */
3497 return;
3498
3499 /* We can always defer constants as long as the context allows
3500 doing so. */
3501 if (defer)
3502 {
3503 /* Increment n_deferred_constants if it exists. It needs to be at
3504 least as large as the number of constants actually referred to
3505 by the function. If it's too small we'll stop looking too early
3506 and fail to emit constants; if it's too large we'll only look
3507 through the entire function when we could have stopped earlier. */
3508 if (cfun)
3509 n_deferred_constants++;
3510 return;
3511 }
3512
3513 output_constant_def_contents (symbol);
3514 }
3515
3516 /* Subroutine of output_constant_def_contents. Output the definition
3517 of constant EXP, which is pointed to by label LABEL. ALIGN is the
3518 constant's alignment in bits. */
3519
3520 static void
3521 assemble_constant_contents (tree exp, const char *label, unsigned int align,
3522 bool merge_strings)
3523 {
3524 HOST_WIDE_INT size;
3525
3526 size = get_constant_size (exp);
3527
3528 /* Do any machine/system dependent processing of the constant. */
3529 targetm.asm_out.declare_constant_name (asm_out_file, label, exp, size);
3530
3531 /* Output the value of EXP. */
3532 output_constant (exp, size, align, false, merge_strings);
3533
3534 targetm.asm_out.decl_end ();
3535 }
3536
3537 /* We must output the constant data referred to by SYMBOL; do so. */
3538
3539 static void
3540 output_constant_def_contents (rtx symbol)
3541 {
3542 tree decl = SYMBOL_REF_DECL (symbol);
3543 tree exp = DECL_INITIAL (decl);
3544 bool asan_protected = false;
3545
3546 /* Make sure any other constants whose addresses appear in EXP
3547 are assigned label numbers. */
3548 output_addressed_constants (exp);
3549
3550 /* We are no longer deferring this constant. */
3551 TREE_ASM_WRITTEN (decl) = TREE_ASM_WRITTEN (exp) = 1;
3552
3553 if ((flag_sanitize & SANITIZE_ADDRESS)
3554 && TREE_CODE (exp) == STRING_CST
3555 && asan_protect_global (exp))
3556 {
3557 asan_protected = true;
3558 SET_DECL_ALIGN (decl, MAX (DECL_ALIGN (decl),
3559 ASAN_RED_ZONE_SIZE * BITS_PER_UNIT));
3560 }
3561
3562 /* If the constant is part of an object block, make sure that the
3563 decl has been positioned within its block, but do not write out
3564 its definition yet. output_object_blocks will do that later. */
3565 if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol) && SYMBOL_REF_BLOCK (symbol))
3566 place_block_symbol (symbol);
3567 else
3568 {
3569 int align = (TREE_CODE (decl) == CONST_DECL
3570 || (VAR_P (decl) && DECL_IN_CONSTANT_POOL (decl))
3571 ? DECL_ALIGN (decl)
3572 : symtab_node::get (decl)->definition_alignment ());
3573 section *sect = get_constant_section (exp, align);
3574 switch_to_section (sect);
3575 if (align > BITS_PER_UNIT)
3576 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
3577 assemble_constant_contents (exp, XSTR (symbol, 0), align,
3578 (sect->common.flags & SECTION_MERGE)
3579 && (sect->common.flags & SECTION_STRINGS));
3580 if (asan_protected)
3581 {
3582 HOST_WIDE_INT size = get_constant_size (exp);
3583 assemble_zeros (asan_red_zone_size (size));
3584 }
3585 }
3586 }
3587
3588 /* Look up EXP in the table of constant descriptors. Return the rtl
3589 if it has been emitted, else null. */
3590
3591 rtx
3592 lookup_constant_def (tree exp)
3593 {
3594 struct constant_descriptor_tree key;
3595
3596 key.value = exp;
3597 key.hash = const_hash_1 (exp);
3598 constant_descriptor_tree *desc
3599 = const_desc_htab->find_with_hash (&key, key.hash);
3600
3601 return (desc ? desc->rtl : NULL_RTX);
3602 }
3603
3604 /* Return a tree representing a reference to constant data in memory
3605 for the constant expression EXP.
3606
3607 This is the counterpart of output_constant_def at the Tree level. */
3608
3609 tree
3610 tree_output_constant_def (tree exp)
3611 {
3612 struct constant_descriptor_tree *desc = add_constant_to_table (exp);
3613 tree decl = SYMBOL_REF_DECL (XEXP (desc->rtl, 0));
3614 varpool_node::finalize_decl (decl);
3615 return decl;
3616 }
3617 \f
3618 class GTY((chain_next ("%h.next"), for_user)) constant_descriptor_rtx {
3619 public:
3620 class constant_descriptor_rtx *next;
3621 rtx mem;
3622 rtx sym;
3623 rtx constant;
3624 HOST_WIDE_INT offset;
3625 hashval_t hash;
3626 fixed_size_mode mode;
3627 unsigned int align;
3628 int labelno;
3629 int mark;
3630 };
3631
3632 struct const_rtx_desc_hasher : ggc_ptr_hash<constant_descriptor_rtx>
3633 {
3634 static hashval_t hash (constant_descriptor_rtx *);
3635 static bool equal (constant_descriptor_rtx *, constant_descriptor_rtx *);
3636 };
3637
3638 /* Used in the hash tables to avoid outputting the same constant
3639 twice. Unlike 'struct constant_descriptor_tree', RTX constants
3640 are output once per function, not once per file. */
3641 /* ??? Only a few targets need per-function constant pools. Most
3642 can use one per-file pool. Should add a targetm bit to tell the
3643 difference. */
3644
3645 struct GTY(()) rtx_constant_pool {
3646 /* Pointers to first and last constant in pool, as ordered by offset. */
3647 class constant_descriptor_rtx *first;
3648 class constant_descriptor_rtx *last;
3649
3650 /* Hash facility for making memory-constants from constant rtl-expressions.
3651 It is used on RISC machines where immediate integer arguments and
3652 constant addresses are restricted so that such constants must be stored
3653 in memory. */
3654 hash_table<const_rtx_desc_hasher> *const_rtx_htab;
3655
3656 /* Current offset in constant pool (does not include any
3657 machine-specific header). */
3658 HOST_WIDE_INT offset;
3659 };
3660
3661 /* Hash and compare functions for const_rtx_htab. */
3662
3663 hashval_t
3664 const_rtx_desc_hasher::hash (constant_descriptor_rtx *desc)
3665 {
3666 return desc->hash;
3667 }
3668
3669 bool
3670 const_rtx_desc_hasher::equal (constant_descriptor_rtx *x,
3671 constant_descriptor_rtx *y)
3672 {
3673 if (x->mode != y->mode)
3674 return 0;
3675 return rtx_equal_p (x->constant, y->constant);
3676 }
3677
3678 /* Hash one component of a constant. */
3679
3680 static hashval_t
3681 const_rtx_hash_1 (const_rtx x)
3682 {
3683 unsigned HOST_WIDE_INT hwi;
3684 machine_mode mode;
3685 enum rtx_code code;
3686 hashval_t h;
3687 int i;
3688
3689 code = GET_CODE (x);
3690 mode = GET_MODE (x);
3691 h = (hashval_t) code * 1048573 + mode;
3692
3693 switch (code)
3694 {
3695 case CONST_INT:
3696 hwi = INTVAL (x);
3697
3698 fold_hwi:
3699 {
3700 int shift = sizeof (hashval_t) * CHAR_BIT;
3701 const int n = sizeof (HOST_WIDE_INT) / sizeof (hashval_t);
3702
3703 h ^= (hashval_t) hwi;
3704 for (i = 1; i < n; ++i)
3705 {
3706 hwi >>= shift;
3707 h ^= (hashval_t) hwi;
3708 }
3709 }
3710 break;
3711
3712 case CONST_WIDE_INT:
3713 hwi = 0;
3714 {
3715 for (i = 0; i < CONST_WIDE_INT_NUNITS (x); i++)
3716 hwi ^= CONST_WIDE_INT_ELT (x, i);
3717 goto fold_hwi;
3718 }
3719
3720 case CONST_DOUBLE:
3721 if (TARGET_SUPPORTS_WIDE_INT == 0 && mode == VOIDmode)
3722 {
3723 hwi = CONST_DOUBLE_LOW (x) ^ CONST_DOUBLE_HIGH (x);
3724 goto fold_hwi;
3725 }
3726 else
3727 h ^= real_hash (CONST_DOUBLE_REAL_VALUE (x));
3728 break;
3729
3730 case CONST_FIXED:
3731 h ^= fixed_hash (CONST_FIXED_VALUE (x));
3732 break;
3733
3734 case SYMBOL_REF:
3735 h ^= htab_hash_string (XSTR (x, 0));
3736 break;
3737
3738 case LABEL_REF:
3739 h = h * 251 + CODE_LABEL_NUMBER (label_ref_label (x));
3740 break;
3741
3742 case UNSPEC:
3743 case UNSPEC_VOLATILE:
3744 h = h * 251 + XINT (x, 1);
3745 break;
3746
3747 default:
3748 break;
3749 }
3750
3751 return h;
3752 }
3753
3754 /* Compute a hash value for X, which should be a constant. */
3755
3756 static hashval_t
3757 const_rtx_hash (rtx x)
3758 {
3759 hashval_t h = 0;
3760 subrtx_iterator::array_type array;
3761 FOR_EACH_SUBRTX (iter, array, x, ALL)
3762 h = h * 509 + const_rtx_hash_1 (*iter);
3763 return h;
3764 }
3765
3766 \f
3767 /* Create and return a new rtx constant pool. */
3768
3769 static struct rtx_constant_pool *
3770 create_constant_pool (void)
3771 {
3772 struct rtx_constant_pool *pool;
3773
3774 pool = ggc_alloc<rtx_constant_pool> ();
3775 pool->const_rtx_htab = hash_table<const_rtx_desc_hasher>::create_ggc (31);
3776 pool->first = NULL;
3777 pool->last = NULL;
3778 pool->offset = 0;
3779 return pool;
3780 }
3781
3782 /* Initialize constant pool hashing for a new function. */
3783
3784 void
3785 init_varasm_status (void)
3786 {
3787 crtl->varasm.pool = create_constant_pool ();
3788 crtl->varasm.deferred_constants = 0;
3789 }
3790 \f
3791 /* Given a MINUS expression, simplify it if both sides
3792 include the same symbol. */
3793
3794 rtx
3795 simplify_subtraction (rtx x)
3796 {
3797 rtx r = simplify_rtx (x);
3798 return r ? r : x;
3799 }
3800 \f
3801 /* Given a constant rtx X, make (or find) a memory constant for its value
3802 and return a MEM rtx to refer to it in memory. IN_MODE is the mode
3803 of X. */
3804
3805 rtx
3806 force_const_mem (machine_mode in_mode, rtx x)
3807 {
3808 class constant_descriptor_rtx *desc, tmp;
3809 struct rtx_constant_pool *pool;
3810 char label[256];
3811 rtx def, symbol;
3812 hashval_t hash;
3813 unsigned int align;
3814 constant_descriptor_rtx **slot;
3815 fixed_size_mode mode;
3816
3817 /* We can't force variable-sized objects to memory. */
3818 if (!is_a <fixed_size_mode> (in_mode, &mode))
3819 return NULL_RTX;
3820
3821 /* If we're not allowed to drop X into the constant pool, don't. */
3822 if (targetm.cannot_force_const_mem (mode, x))
3823 return NULL_RTX;
3824
3825 /* Record that this function has used a constant pool entry. */
3826 crtl->uses_const_pool = 1;
3827
3828 /* Decide which pool to use. */
3829 pool = (targetm.use_blocks_for_constant_p (mode, x)
3830 ? shared_constant_pool
3831 : crtl->varasm.pool);
3832
3833 /* Lookup the value in the hashtable. */
3834 tmp.constant = x;
3835 tmp.mode = mode;
3836 hash = const_rtx_hash (x);
3837 slot = pool->const_rtx_htab->find_slot_with_hash (&tmp, hash, INSERT);
3838 desc = *slot;
3839
3840 /* If the constant was already present, return its memory. */
3841 if (desc)
3842 return copy_rtx (desc->mem);
3843
3844 /* Otherwise, create a new descriptor. */
3845 desc = ggc_alloc<constant_descriptor_rtx> ();
3846 *slot = desc;
3847
3848 /* Align the location counter as required by EXP's data type. */
3849 machine_mode align_mode = (mode == VOIDmode ? word_mode : mode);
3850 align = targetm.static_rtx_alignment (align_mode);
3851
3852 pool->offset += (align / BITS_PER_UNIT) - 1;
3853 pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
3854
3855 desc->next = NULL;
3856 desc->constant = copy_rtx (tmp.constant);
3857 desc->offset = pool->offset;
3858 desc->hash = hash;
3859 desc->mode = mode;
3860 desc->align = align;
3861 desc->labelno = const_labelno;
3862 desc->mark = 0;
3863
3864 pool->offset += GET_MODE_SIZE (mode);
3865 if (pool->last)
3866 pool->last->next = desc;
3867 else
3868 pool->first = pool->last = desc;
3869 pool->last = desc;
3870
3871 /* Create a string containing the label name, in LABEL. */
3872 ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno);
3873 ++const_labelno;
3874
3875 /* Construct the SYMBOL_REF. Make sure to mark it as belonging to
3876 the constants pool. */
3877 if (use_object_blocks_p () && targetm.use_blocks_for_constant_p (mode, x))
3878 {
3879 section *sect = targetm.asm_out.select_rtx_section (mode, x, align);
3880 symbol = create_block_symbol (ggc_strdup (label),
3881 get_block_for_section (sect), -1);
3882 }
3883 else
3884 symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
3885 desc->sym = symbol;
3886 SYMBOL_REF_FLAGS (symbol) |= SYMBOL_FLAG_LOCAL;
3887 CONSTANT_POOL_ADDRESS_P (symbol) = 1;
3888 SET_SYMBOL_REF_CONSTANT (symbol, desc);
3889
3890 /* Construct the MEM. */
3891 desc->mem = def = gen_const_mem (mode, symbol);
3892 set_mem_align (def, align);
3893
3894 /* If we're dropping a label to the constant pool, make sure we
3895 don't delete it. */
3896 if (GET_CODE (x) == LABEL_REF)
3897 LABEL_PRESERVE_P (XEXP (x, 0)) = 1;
3898
3899 return copy_rtx (def);
3900 }
3901 \f
3902 /* Given a constant pool SYMBOL_REF, return the corresponding constant. */
3903
3904 rtx
3905 get_pool_constant (const_rtx addr)
3906 {
3907 return SYMBOL_REF_CONSTANT (addr)->constant;
3908 }
3909
3910 /* Given a constant pool SYMBOL_REF, return the corresponding constant
3911 and whether it has been output or not. */
3912
3913 rtx
3914 get_pool_constant_mark (rtx addr, bool *pmarked)
3915 {
3916 class constant_descriptor_rtx *desc;
3917
3918 desc = SYMBOL_REF_CONSTANT (addr);
3919 *pmarked = (desc->mark != 0);
3920 return desc->constant;
3921 }
3922
3923 /* Similar, return the mode. */
3924
3925 fixed_size_mode
3926 get_pool_mode (const_rtx addr)
3927 {
3928 return SYMBOL_REF_CONSTANT (addr)->mode;
3929 }
3930
3931 /* Return TRUE if and only if the constant pool has no entries. Note
3932 that even entries we might end up choosing not to emit are counted
3933 here, so there is the potential for missed optimizations. */
3934
3935 bool
3936 constant_pool_empty_p (void)
3937 {
3938 return crtl->varasm.pool->first == NULL;
3939 }
3940 \f
3941 /* Worker function for output_constant_pool_1. Emit assembly for X
3942 in MODE with known alignment ALIGN. */
3943
3944 static void
3945 output_constant_pool_2 (fixed_size_mode mode, rtx x, unsigned int align)
3946 {
3947 switch (GET_MODE_CLASS (mode))
3948 {
3949 case MODE_FLOAT:
3950 case MODE_DECIMAL_FLOAT:
3951 {
3952 gcc_assert (CONST_DOUBLE_AS_FLOAT_P (x));
3953 assemble_real (*CONST_DOUBLE_REAL_VALUE (x),
3954 as_a <scalar_float_mode> (mode), align, false);
3955 break;
3956 }
3957
3958 case MODE_INT:
3959 case MODE_PARTIAL_INT:
3960 case MODE_FRACT:
3961 case MODE_UFRACT:
3962 case MODE_ACCUM:
3963 case MODE_UACCUM:
3964 assemble_integer (x, GET_MODE_SIZE (mode), align, 1);
3965 break;
3966
3967 case MODE_VECTOR_BOOL:
3968 {
3969 gcc_assert (GET_CODE (x) == CONST_VECTOR);
3970
3971 /* Pick the smallest integer mode that contains at least one
3972 whole element. Often this is byte_mode and contains more
3973 than one element. */
3974 unsigned int nelts = GET_MODE_NUNITS (mode);
3975 unsigned int elt_bits = GET_MODE_BITSIZE (mode) / nelts;
3976 unsigned int int_bits = MAX (elt_bits, BITS_PER_UNIT);
3977 scalar_int_mode int_mode = int_mode_for_size (int_bits, 0).require ();
3978
3979 /* Build the constant up one integer at a time. */
3980 unsigned int elts_per_int = int_bits / elt_bits;
3981 for (unsigned int i = 0; i < nelts; i += elts_per_int)
3982 {
3983 unsigned HOST_WIDE_INT value = 0;
3984 unsigned int limit = MIN (nelts - i, elts_per_int);
3985 for (unsigned int j = 0; j < limit; ++j)
3986 if (INTVAL (CONST_VECTOR_ELT (x, i + j)) != 0)
3987 value |= 1 << (j * elt_bits);
3988 output_constant_pool_2 (int_mode, gen_int_mode (value, int_mode),
3989 i != 0 ? MIN (align, int_bits) : align);
3990 }
3991 break;
3992 }
3993 case MODE_VECTOR_FLOAT:
3994 case MODE_VECTOR_INT:
3995 case MODE_VECTOR_FRACT:
3996 case MODE_VECTOR_UFRACT:
3997 case MODE_VECTOR_ACCUM:
3998 case MODE_VECTOR_UACCUM:
3999 {
4000 int i, units;
4001 scalar_mode submode = GET_MODE_INNER (mode);
4002 unsigned int subalign = MIN (align, GET_MODE_BITSIZE (submode));
4003
4004 gcc_assert (GET_CODE (x) == CONST_VECTOR);
4005 units = GET_MODE_NUNITS (mode);
4006
4007 for (i = 0; i < units; i++)
4008 {
4009 rtx elt = CONST_VECTOR_ELT (x, i);
4010 output_constant_pool_2 (submode, elt, i ? subalign : align);
4011 }
4012 }
4013 break;
4014
4015 default:
4016 gcc_unreachable ();
4017 }
4018 }
4019
4020 /* Worker function for output_constant_pool. Emit constant DESC,
4021 giving it ALIGN bits of alignment. */
4022
4023 static void
4024 output_constant_pool_1 (class constant_descriptor_rtx *desc,
4025 unsigned int align)
4026 {
4027 rtx x, tmp;
4028
4029 x = desc->constant;
4030
4031 /* See if X is a LABEL_REF (or a CONST referring to a LABEL_REF)
4032 whose CODE_LABEL has been deleted. This can occur if a jump table
4033 is eliminated by optimization. If so, write a constant of zero
4034 instead. Note that this can also happen by turning the
4035 CODE_LABEL into a NOTE. */
4036 /* ??? This seems completely and utterly wrong. Certainly it's
4037 not true for NOTE_INSN_DELETED_LABEL, but I disbelieve proper
4038 functioning even with rtx_insn::deleted and friends. */
4039
4040 tmp = x;
4041 switch (GET_CODE (tmp))
4042 {
4043 case CONST:
4044 if (GET_CODE (XEXP (tmp, 0)) != PLUS
4045 || GET_CODE (XEXP (XEXP (tmp, 0), 0)) != LABEL_REF)
4046 break;
4047 tmp = XEXP (XEXP (tmp, 0), 0);
4048 /* FALLTHRU */
4049
4050 case LABEL_REF:
4051 {
4052 rtx_insn *insn = label_ref_label (tmp);
4053 gcc_assert (!insn->deleted ());
4054 gcc_assert (!NOTE_P (insn)
4055 || NOTE_KIND (insn) != NOTE_INSN_DELETED);
4056 break;
4057 }
4058
4059 default:
4060 break;
4061 }
4062
4063 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
4064 ASM_OUTPUT_SPECIAL_POOL_ENTRY (asm_out_file, x, desc->mode,
4065 align, desc->labelno, done);
4066 #endif
4067
4068 assemble_align (align);
4069
4070 /* Output the label. */
4071 targetm.asm_out.internal_label (asm_out_file, "LC", desc->labelno);
4072
4073 /* Output the data.
4074 Pass actual alignment value while emitting string constant to asm code
4075 as function 'output_constant_pool_1' explicitly passes the alignment as 1
4076 assuming that the data is already aligned which prevents the generation
4077 of fix-up table entries. */
4078 output_constant_pool_2 (desc->mode, x, desc->align);
4079
4080 /* Make sure all constants in SECTION_MERGE and not SECTION_STRINGS
4081 sections have proper size. */
4082 if (align > GET_MODE_BITSIZE (desc->mode)
4083 && in_section
4084 && (in_section->common.flags & SECTION_MERGE))
4085 assemble_align (align);
4086
4087 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
4088 done:
4089 #endif
4090 return;
4091 }
4092
4093 /* Recompute the offsets of entries in POOL, and the overall size of
4094 POOL. Do this after calling mark_constant_pool to ensure that we
4095 are computing the offset values for the pool which we will actually
4096 emit. */
4097
4098 static void
4099 recompute_pool_offsets (struct rtx_constant_pool *pool)
4100 {
4101 class constant_descriptor_rtx *desc;
4102 pool->offset = 0;
4103
4104 for (desc = pool->first; desc ; desc = desc->next)
4105 if (desc->mark)
4106 {
4107 /* Recalculate offset. */
4108 unsigned int align = desc->align;
4109 pool->offset += (align / BITS_PER_UNIT) - 1;
4110 pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
4111 desc->offset = pool->offset;
4112 pool->offset += GET_MODE_SIZE (desc->mode);
4113 }
4114 }
4115
4116 /* Mark all constants that are referenced by SYMBOL_REFs in X.
4117 Emit referenced deferred strings. */
4118
4119 static void
4120 mark_constants_in_pattern (rtx insn)
4121 {
4122 subrtx_iterator::array_type array;
4123 FOR_EACH_SUBRTX (iter, array, PATTERN (insn), ALL)
4124 {
4125 const_rtx x = *iter;
4126 if (GET_CODE (x) == SYMBOL_REF)
4127 {
4128 if (CONSTANT_POOL_ADDRESS_P (x))
4129 {
4130 class constant_descriptor_rtx *desc = SYMBOL_REF_CONSTANT (x);
4131 if (desc->mark == 0)
4132 {
4133 desc->mark = 1;
4134 iter.substitute (desc->constant);
4135 }
4136 }
4137 else if (TREE_CONSTANT_POOL_ADDRESS_P (x))
4138 {
4139 tree decl = SYMBOL_REF_DECL (x);
4140 if (!TREE_ASM_WRITTEN (DECL_INITIAL (decl)))
4141 {
4142 n_deferred_constants--;
4143 output_constant_def_contents (CONST_CAST_RTX (x));
4144 }
4145 }
4146 }
4147 }
4148 }
4149
4150 /* Look through appropriate parts of INSN, marking all entries in the
4151 constant pool which are actually being used. Entries that are only
4152 referenced by other constants are also marked as used. Emit
4153 deferred strings that are used. */
4154
4155 static void
4156 mark_constants (rtx_insn *insn)
4157 {
4158 if (!INSN_P (insn))
4159 return;
4160
4161 /* Insns may appear inside a SEQUENCE. Only check the patterns of
4162 insns, not any notes that may be attached. We don't want to mark
4163 a constant just because it happens to appear in a REG_EQUIV note. */
4164 if (rtx_sequence *seq = dyn_cast <rtx_sequence *> (PATTERN (insn)))
4165 {
4166 int i, n = seq->len ();
4167 for (i = 0; i < n; ++i)
4168 {
4169 rtx subinsn = seq->element (i);
4170 if (INSN_P (subinsn))
4171 mark_constants_in_pattern (subinsn);
4172 }
4173 }
4174 else
4175 mark_constants_in_pattern (insn);
4176 }
4177
4178 /* Look through the instructions for this function, and mark all the
4179 entries in POOL which are actually being used. Emit deferred constants
4180 which have indeed been used. */
4181
4182 static void
4183 mark_constant_pool (void)
4184 {
4185 rtx_insn *insn;
4186
4187 if (!crtl->uses_const_pool && n_deferred_constants == 0)
4188 return;
4189
4190 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
4191 mark_constants (insn);
4192 }
4193
4194 /* Write all the constants in POOL. */
4195
4196 static void
4197 output_constant_pool_contents (struct rtx_constant_pool *pool)
4198 {
4199 class constant_descriptor_rtx *desc;
4200
4201 for (desc = pool->first; desc ; desc = desc->next)
4202 if (desc->mark)
4203 {
4204 /* If the constant is part of an object_block, make sure that
4205 the constant has been positioned within its block, but do not
4206 write out its definition yet. output_object_blocks will do
4207 that later. */
4208 if (SYMBOL_REF_HAS_BLOCK_INFO_P (desc->sym)
4209 && SYMBOL_REF_BLOCK (desc->sym))
4210 place_block_symbol (desc->sym);
4211 else
4212 {
4213 switch_to_section (targetm.asm_out.select_rtx_section
4214 (desc->mode, desc->constant, desc->align));
4215 output_constant_pool_1 (desc, desc->align);
4216 }
4217 }
4218 }
4219
4220 /* Mark all constants that are used in the current function, then write
4221 out the function's private constant pool. */
4222
4223 static void
4224 output_constant_pool (const char *fnname ATTRIBUTE_UNUSED,
4225 tree fndecl ATTRIBUTE_UNUSED)
4226 {
4227 struct rtx_constant_pool *pool = crtl->varasm.pool;
4228
4229 /* It is possible for gcc to call force_const_mem and then to later
4230 discard the instructions which refer to the constant. In such a
4231 case we do not need to output the constant. */
4232 mark_constant_pool ();
4233
4234 /* Having marked the constant pool entries we'll actually emit, we
4235 now need to rebuild the offset information, which may have become
4236 stale. */
4237 recompute_pool_offsets (pool);
4238
4239 #ifdef ASM_OUTPUT_POOL_PROLOGUE
4240 ASM_OUTPUT_POOL_PROLOGUE (asm_out_file, fnname, fndecl, pool->offset);
4241 #endif
4242
4243 output_constant_pool_contents (pool);
4244
4245 #ifdef ASM_OUTPUT_POOL_EPILOGUE
4246 ASM_OUTPUT_POOL_EPILOGUE (asm_out_file, fnname, fndecl, pool->offset);
4247 #endif
4248 }
4249 \f
4250 /* Write the contents of the shared constant pool. */
4251
4252 void
4253 output_shared_constant_pool (void)
4254 {
4255 output_constant_pool_contents (shared_constant_pool);
4256 }
4257 \f
4258 /* Determine what kind of relocations EXP may need. */
4259
4260 int
4261 compute_reloc_for_constant (tree exp)
4262 {
4263 int reloc = 0, reloc2;
4264 tree tem;
4265
4266 switch (TREE_CODE (exp))
4267 {
4268 case ADDR_EXPR:
4269 case FDESC_EXPR:
4270 /* Go inside any operations that get_inner_reference can handle and see
4271 if what's inside is a constant: no need to do anything here for
4272 addresses of variables or functions. */
4273 for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
4274 tem = TREE_OPERAND (tem, 0))
4275 ;
4276
4277 if (TREE_CODE (tem) == MEM_REF
4278 && TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR)
4279 {
4280 reloc = compute_reloc_for_constant (TREE_OPERAND (tem, 0));
4281 break;
4282 }
4283
4284 if (!targetm.binds_local_p (tem))
4285 reloc |= 2;
4286 else
4287 reloc |= 1;
4288 break;
4289
4290 case PLUS_EXPR:
4291 case POINTER_PLUS_EXPR:
4292 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
4293 reloc |= compute_reloc_for_constant (TREE_OPERAND (exp, 1));
4294 break;
4295
4296 case MINUS_EXPR:
4297 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
4298 reloc2 = compute_reloc_for_constant (TREE_OPERAND (exp, 1));
4299 /* The difference of two local labels is computable at link time. */
4300 if (reloc == 1 && reloc2 == 1)
4301 reloc = 0;
4302 else
4303 reloc |= reloc2;
4304 break;
4305
4306 CASE_CONVERT:
4307 case VIEW_CONVERT_EXPR:
4308 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
4309 break;
4310
4311 case CONSTRUCTOR:
4312 {
4313 unsigned HOST_WIDE_INT idx;
4314 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
4315 if (tem != 0)
4316 reloc |= compute_reloc_for_constant (tem);
4317 }
4318 break;
4319
4320 default:
4321 break;
4322 }
4323 return reloc;
4324 }
4325
4326 /* Find all the constants whose addresses are referenced inside of EXP,
4327 and make sure assembler code with a label has been output for each one.
4328 Indicate whether an ADDR_EXPR has been encountered. */
4329
4330 static void
4331 output_addressed_constants (tree exp)
4332 {
4333 tree tem;
4334
4335 switch (TREE_CODE (exp))
4336 {
4337 case ADDR_EXPR:
4338 case FDESC_EXPR:
4339 /* Go inside any operations that get_inner_reference can handle and see
4340 if what's inside is a constant: no need to do anything here for
4341 addresses of variables or functions. */
4342 for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
4343 tem = TREE_OPERAND (tem, 0))
4344 ;
4345
4346 /* If we have an initialized CONST_DECL, retrieve the initializer. */
4347 if (TREE_CODE (tem) == CONST_DECL && DECL_INITIAL (tem))
4348 tem = DECL_INITIAL (tem);
4349
4350 if (CONSTANT_CLASS_P (tem) || TREE_CODE (tem) == CONSTRUCTOR)
4351 output_constant_def (tem, 0);
4352
4353 if (TREE_CODE (tem) == MEM_REF)
4354 output_addressed_constants (TREE_OPERAND (tem, 0));
4355 break;
4356
4357 case PLUS_EXPR:
4358 case POINTER_PLUS_EXPR:
4359 case MINUS_EXPR:
4360 output_addressed_constants (TREE_OPERAND (exp, 1));
4361 gcc_fallthrough ();
4362
4363 CASE_CONVERT:
4364 case VIEW_CONVERT_EXPR:
4365 output_addressed_constants (TREE_OPERAND (exp, 0));
4366 break;
4367
4368 case CONSTRUCTOR:
4369 {
4370 unsigned HOST_WIDE_INT idx;
4371 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
4372 if (tem != 0)
4373 output_addressed_constants (tem);
4374 }
4375 break;
4376
4377 default:
4378 break;
4379 }
4380 }
4381 \f
4382 /* Whether a constructor CTOR is a valid static constant initializer if all
4383 its elements are. This used to be internal to initializer_constant_valid_p
4384 and has been exposed to let other functions like categorize_ctor_elements
4385 evaluate the property while walking a constructor for other purposes. */
4386
4387 bool
4388 constructor_static_from_elts_p (const_tree ctor)
4389 {
4390 return (TREE_CONSTANT (ctor)
4391 && (TREE_CODE (TREE_TYPE (ctor)) == UNION_TYPE
4392 || TREE_CODE (TREE_TYPE (ctor)) == RECORD_TYPE
4393 || TREE_CODE (TREE_TYPE (ctor)) == ARRAY_TYPE));
4394 }
4395
4396 static tree initializer_constant_valid_p_1 (tree value, tree endtype,
4397 tree *cache);
4398
4399 /* A subroutine of initializer_constant_valid_p. VALUE is a MINUS_EXPR,
4400 PLUS_EXPR or POINTER_PLUS_EXPR. This looks for cases of VALUE
4401 which are valid when ENDTYPE is an integer of any size; in
4402 particular, this does not accept a pointer minus a constant. This
4403 returns null_pointer_node if the VALUE is an absolute constant
4404 which can be used to initialize a static variable. Otherwise it
4405 returns NULL. */
4406
4407 static tree
4408 narrowing_initializer_constant_valid_p (tree value, tree endtype, tree *cache)
4409 {
4410 tree op0, op1;
4411
4412 if (!INTEGRAL_TYPE_P (endtype))
4413 return NULL_TREE;
4414
4415 op0 = TREE_OPERAND (value, 0);
4416 op1 = TREE_OPERAND (value, 1);
4417
4418 /* Like STRIP_NOPS except allow the operand mode to widen. This
4419 works around a feature of fold that simplifies (int)(p1 - p2) to
4420 ((int)p1 - (int)p2) under the theory that the narrower operation
4421 is cheaper. */
4422
4423 while (CONVERT_EXPR_P (op0)
4424 || TREE_CODE (op0) == NON_LVALUE_EXPR)
4425 {
4426 tree inner = TREE_OPERAND (op0, 0);
4427 if (inner == error_mark_node
4428 || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
4429 || (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (op0)))
4430 > GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (inner)))))
4431 break;
4432 op0 = inner;
4433 }
4434
4435 while (CONVERT_EXPR_P (op1)
4436 || TREE_CODE (op1) == NON_LVALUE_EXPR)
4437 {
4438 tree inner = TREE_OPERAND (op1, 0);
4439 if (inner == error_mark_node
4440 || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
4441 || (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (op1)))
4442 > GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (inner)))))
4443 break;
4444 op1 = inner;
4445 }
4446
4447 op0 = initializer_constant_valid_p_1 (op0, endtype, cache);
4448 if (!op0)
4449 return NULL_TREE;
4450
4451 op1 = initializer_constant_valid_p_1 (op1, endtype,
4452 cache ? cache + 2 : NULL);
4453 /* Both initializers must be known. */
4454 if (op1)
4455 {
4456 if (op0 == op1
4457 && (op0 == null_pointer_node
4458 || TREE_CODE (value) == MINUS_EXPR))
4459 return null_pointer_node;
4460
4461 /* Support differences between labels. */
4462 if (TREE_CODE (op0) == LABEL_DECL
4463 && TREE_CODE (op1) == LABEL_DECL)
4464 return null_pointer_node;
4465
4466 if (TREE_CODE (op0) == STRING_CST
4467 && TREE_CODE (op1) == STRING_CST
4468 && operand_equal_p (op0, op1, 1))
4469 return null_pointer_node;
4470 }
4471
4472 return NULL_TREE;
4473 }
4474
4475 /* Helper function of initializer_constant_valid_p.
4476 Return nonzero if VALUE is a valid constant-valued expression
4477 for use in initializing a static variable; one that can be an
4478 element of a "constant" initializer.
4479
4480 Return null_pointer_node if the value is absolute;
4481 if it is relocatable, return the variable that determines the relocation.
4482 We assume that VALUE has been folded as much as possible;
4483 therefore, we do not need to check for such things as
4484 arithmetic-combinations of integers.
4485
4486 Use CACHE (pointer to 2 tree values) for caching if non-NULL. */
4487
4488 static tree
4489 initializer_constant_valid_p_1 (tree value, tree endtype, tree *cache)
4490 {
4491 tree ret;
4492
4493 switch (TREE_CODE (value))
4494 {
4495 case CONSTRUCTOR:
4496 if (constructor_static_from_elts_p (value))
4497 {
4498 unsigned HOST_WIDE_INT idx;
4499 tree elt;
4500 bool absolute = true;
4501
4502 if (cache && cache[0] == value)
4503 return cache[1];
4504 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (value), idx, elt)
4505 {
4506 tree reloc;
4507 reloc = initializer_constant_valid_p_1 (elt, TREE_TYPE (elt),
4508 NULL);
4509 if (!reloc
4510 /* An absolute value is required with reverse SSO. */
4511 || (reloc != null_pointer_node
4512 && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (value))
4513 && !AGGREGATE_TYPE_P (TREE_TYPE (elt))))
4514 {
4515 if (cache)
4516 {
4517 cache[0] = value;
4518 cache[1] = NULL_TREE;
4519 }
4520 return NULL_TREE;
4521 }
4522 if (reloc != null_pointer_node)
4523 absolute = false;
4524 }
4525 /* For a non-absolute relocation, there is no single
4526 variable that can be "the variable that determines the
4527 relocation." */
4528 if (cache)
4529 {
4530 cache[0] = value;
4531 cache[1] = absolute ? null_pointer_node : error_mark_node;
4532 }
4533 return absolute ? null_pointer_node : error_mark_node;
4534 }
4535
4536 return TREE_STATIC (value) ? null_pointer_node : NULL_TREE;
4537
4538 case INTEGER_CST:
4539 case VECTOR_CST:
4540 case REAL_CST:
4541 case FIXED_CST:
4542 case STRING_CST:
4543 case COMPLEX_CST:
4544 return null_pointer_node;
4545
4546 case ADDR_EXPR:
4547 case FDESC_EXPR:
4548 {
4549 tree op0 = staticp (TREE_OPERAND (value, 0));
4550 if (op0)
4551 {
4552 /* "&(*a).f" is like unto pointer arithmetic. If "a" turns out
4553 to be a constant, this is old-skool offsetof-like nonsense. */
4554 if (TREE_CODE (op0) == INDIRECT_REF
4555 && TREE_CONSTANT (TREE_OPERAND (op0, 0)))
4556 return null_pointer_node;
4557 /* Taking the address of a nested function involves a trampoline,
4558 unless we don't need or want one. */
4559 if (TREE_CODE (op0) == FUNCTION_DECL
4560 && DECL_STATIC_CHAIN (op0)
4561 && !TREE_NO_TRAMPOLINE (value))
4562 return NULL_TREE;
4563 /* "&{...}" requires a temporary to hold the constructed
4564 object. */
4565 if (TREE_CODE (op0) == CONSTRUCTOR)
4566 return NULL_TREE;
4567 }
4568 return op0;
4569 }
4570
4571 case NON_LVALUE_EXPR:
4572 return initializer_constant_valid_p_1 (TREE_OPERAND (value, 0),
4573 endtype, cache);
4574
4575 case VIEW_CONVERT_EXPR:
4576 {
4577 tree src = TREE_OPERAND (value, 0);
4578 tree src_type = TREE_TYPE (src);
4579 tree dest_type = TREE_TYPE (value);
4580
4581 /* Allow view-conversions from aggregate to non-aggregate type only
4582 if the bit pattern is fully preserved afterwards; otherwise, the
4583 RTL expander won't be able to apply a subsequent transformation
4584 to the underlying constructor. */
4585 if (AGGREGATE_TYPE_P (src_type) && !AGGREGATE_TYPE_P (dest_type))
4586 {
4587 if (TYPE_MODE (endtype) == TYPE_MODE (dest_type))
4588 return initializer_constant_valid_p_1 (src, endtype, cache);
4589 else
4590 return NULL_TREE;
4591 }
4592
4593 /* Allow all other kinds of view-conversion. */
4594 return initializer_constant_valid_p_1 (src, endtype, cache);
4595 }
4596
4597 CASE_CONVERT:
4598 {
4599 tree src = TREE_OPERAND (value, 0);
4600 tree src_type = TREE_TYPE (src);
4601 tree dest_type = TREE_TYPE (value);
4602
4603 /* Allow conversions between pointer types, floating-point
4604 types, and offset types. */
4605 if ((POINTER_TYPE_P (dest_type) && POINTER_TYPE_P (src_type))
4606 || (FLOAT_TYPE_P (dest_type) && FLOAT_TYPE_P (src_type))
4607 || (TREE_CODE (dest_type) == OFFSET_TYPE
4608 && TREE_CODE (src_type) == OFFSET_TYPE))
4609 return initializer_constant_valid_p_1 (src, endtype, cache);
4610
4611 /* Allow length-preserving conversions between integer types. */
4612 if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type)
4613 && (TYPE_PRECISION (dest_type) == TYPE_PRECISION (src_type)))
4614 return initializer_constant_valid_p_1 (src, endtype, cache);
4615
4616 /* Allow conversions between other integer types only if
4617 explicit value. Don't allow sign-extension to a type larger
4618 than word and pointer, there aren't relocations that would
4619 allow to sign extend it to a wider type. */
4620 if (INTEGRAL_TYPE_P (dest_type)
4621 && INTEGRAL_TYPE_P (src_type)
4622 && (TYPE_UNSIGNED (src_type)
4623 || TYPE_PRECISION (dest_type) <= TYPE_PRECISION (src_type)
4624 || TYPE_PRECISION (dest_type) <= BITS_PER_WORD
4625 || TYPE_PRECISION (dest_type) <= POINTER_SIZE))
4626 {
4627 tree inner = initializer_constant_valid_p_1 (src, endtype, cache);
4628 if (inner == null_pointer_node)
4629 return null_pointer_node;
4630 break;
4631 }
4632
4633 /* Allow (int) &foo provided int is as wide as a pointer. */
4634 if (INTEGRAL_TYPE_P (dest_type) && POINTER_TYPE_P (src_type)
4635 && (TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type)))
4636 return initializer_constant_valid_p_1 (src, endtype, cache);
4637
4638 /* Likewise conversions from int to pointers, but also allow
4639 conversions from 0. */
4640 if ((POINTER_TYPE_P (dest_type)
4641 || TREE_CODE (dest_type) == OFFSET_TYPE)
4642 && INTEGRAL_TYPE_P (src_type))
4643 {
4644 if (TREE_CODE (src) == INTEGER_CST
4645 && TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type))
4646 return null_pointer_node;
4647 if (integer_zerop (src))
4648 return null_pointer_node;
4649 else if (TYPE_PRECISION (dest_type) <= TYPE_PRECISION (src_type))
4650 return initializer_constant_valid_p_1 (src, endtype, cache);
4651 }
4652
4653 /* Allow conversions to struct or union types if the value
4654 inside is okay. */
4655 if (TREE_CODE (dest_type) == RECORD_TYPE
4656 || TREE_CODE (dest_type) == UNION_TYPE)
4657 return initializer_constant_valid_p_1 (src, endtype, cache);
4658 }
4659 break;
4660
4661 case POINTER_PLUS_EXPR:
4662 case PLUS_EXPR:
4663 /* Any valid floating-point constants will have been folded by now;
4664 with -frounding-math we hit this with addition of two constants. */
4665 if (TREE_CODE (endtype) == REAL_TYPE)
4666 return NULL_TREE;
4667 if (cache && cache[0] == value)
4668 return cache[1];
4669 if (! INTEGRAL_TYPE_P (endtype)
4670 || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value)))
4671 {
4672 tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };
4673 tree valid0
4674 = initializer_constant_valid_p_1 (TREE_OPERAND (value, 0),
4675 endtype, ncache);
4676 tree valid1
4677 = initializer_constant_valid_p_1 (TREE_OPERAND (value, 1),
4678 endtype, ncache + 2);
4679 /* If either term is absolute, use the other term's relocation. */
4680 if (valid0 == null_pointer_node)
4681 ret = valid1;
4682 else if (valid1 == null_pointer_node)
4683 ret = valid0;
4684 /* Support narrowing pointer differences. */
4685 else
4686 ret = narrowing_initializer_constant_valid_p (value, endtype,
4687 ncache);
4688 }
4689 else
4690 /* Support narrowing pointer differences. */
4691 ret = narrowing_initializer_constant_valid_p (value, endtype, NULL);
4692 if (cache)
4693 {
4694 cache[0] = value;
4695 cache[1] = ret;
4696 }
4697 return ret;
4698
4699 case POINTER_DIFF_EXPR:
4700 case MINUS_EXPR:
4701 if (TREE_CODE (endtype) == REAL_TYPE)
4702 return NULL_TREE;
4703 if (cache && cache[0] == value)
4704 return cache[1];
4705 if (! INTEGRAL_TYPE_P (endtype)
4706 || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value)))
4707 {
4708 tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };
4709 tree valid0
4710 = initializer_constant_valid_p_1 (TREE_OPERAND (value, 0),
4711 endtype, ncache);
4712 tree valid1
4713 = initializer_constant_valid_p_1 (TREE_OPERAND (value, 1),
4714 endtype, ncache + 2);
4715 /* Win if second argument is absolute. */
4716 if (valid1 == null_pointer_node)
4717 ret = valid0;
4718 /* Win if both arguments have the same relocation.
4719 Then the value is absolute. */
4720 else if (valid0 == valid1 && valid0 != 0)
4721 ret = null_pointer_node;
4722 /* Since GCC guarantees that string constants are unique in the
4723 generated code, a subtraction between two copies of the same
4724 constant string is absolute. */
4725 else if (valid0 && TREE_CODE (valid0) == STRING_CST
4726 && valid1 && TREE_CODE (valid1) == STRING_CST
4727 && operand_equal_p (valid0, valid1, 1))
4728 ret = null_pointer_node;
4729 /* Support narrowing differences. */
4730 else
4731 ret = narrowing_initializer_constant_valid_p (value, endtype,
4732 ncache);
4733 }
4734 else
4735 /* Support narrowing differences. */
4736 ret = narrowing_initializer_constant_valid_p (value, endtype, NULL);
4737 if (cache)
4738 {
4739 cache[0] = value;
4740 cache[1] = ret;
4741 }
4742 return ret;
4743
4744 default:
4745 break;
4746 }
4747
4748 return NULL_TREE;
4749 }
4750
4751 /* Return nonzero if VALUE is a valid constant-valued expression
4752 for use in initializing a static variable; one that can be an
4753 element of a "constant" initializer.
4754
4755 Return null_pointer_node if the value is absolute;
4756 if it is relocatable, return the variable that determines the relocation.
4757 We assume that VALUE has been folded as much as possible;
4758 therefore, we do not need to check for such things as
4759 arithmetic-combinations of integers. */
4760 tree
4761 initializer_constant_valid_p (tree value, tree endtype, bool reverse)
4762 {
4763 tree reloc = initializer_constant_valid_p_1 (value, endtype, NULL);
4764
4765 /* An absolute value is required with reverse storage order. */
4766 if (reloc
4767 && reloc != null_pointer_node
4768 && reverse
4769 && !AGGREGATE_TYPE_P (endtype)
4770 && !VECTOR_TYPE_P (endtype))
4771 reloc = NULL_TREE;
4772
4773 return reloc;
4774 }
4775 \f
4776 /* Return true if VALUE is a valid constant-valued expression
4777 for use in initializing a static bit-field; one that can be
4778 an element of a "constant" initializer. */
4779
4780 bool
4781 initializer_constant_valid_for_bitfield_p (tree value)
4782 {
4783 /* For bitfields we support integer constants or possibly nested aggregates
4784 of such. */
4785 switch (TREE_CODE (value))
4786 {
4787 case CONSTRUCTOR:
4788 {
4789 unsigned HOST_WIDE_INT idx;
4790 tree elt;
4791
4792 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (value), idx, elt)
4793 if (!initializer_constant_valid_for_bitfield_p (elt))
4794 return false;
4795 return true;
4796 }
4797
4798 case INTEGER_CST:
4799 case REAL_CST:
4800 return true;
4801
4802 case VIEW_CONVERT_EXPR:
4803 case NON_LVALUE_EXPR:
4804 return
4805 initializer_constant_valid_for_bitfield_p (TREE_OPERAND (value, 0));
4806
4807 default:
4808 break;
4809 }
4810
4811 return false;
4812 }
4813
4814 /* Check if a STRING_CST fits into the field.
4815 Tolerate only the case when the NUL termination
4816 does not fit into the field. */
4817
4818 static bool
4819 check_string_literal (tree string, unsigned HOST_WIDE_INT size)
4820 {
4821 tree type = TREE_TYPE (string);
4822 tree eltype = TREE_TYPE (type);
4823 unsigned HOST_WIDE_INT elts = tree_to_uhwi (TYPE_SIZE_UNIT (eltype));
4824 unsigned HOST_WIDE_INT mem_size = tree_to_uhwi (TYPE_SIZE_UNIT (type));
4825 int len = TREE_STRING_LENGTH (string);
4826
4827 if (elts != 1 && elts != 2 && elts != 4)
4828 return false;
4829 if (len < 0 || len % elts != 0)
4830 return false;
4831 if (size < (unsigned)len)
4832 return false;
4833 if (mem_size != size)
4834 return false;
4835 return true;
4836 }
4837
4838 /* output_constructor outer state of relevance in recursive calls, typically
4839 for nested aggregate bitfields. */
4840
4841 struct oc_outer_state {
4842 unsigned int bit_offset; /* current position in ... */
4843 int byte; /* ... the outer byte buffer. */
4844 };
4845
4846 static unsigned HOST_WIDE_INT
4847 output_constructor (tree, unsigned HOST_WIDE_INT, unsigned int, bool,
4848 oc_outer_state *);
4849
4850 /* Output assembler code for constant EXP, with no label.
4851 This includes the pseudo-op such as ".int" or ".byte", and a newline.
4852 Assumes output_addressed_constants has been done on EXP already.
4853
4854 Generate at least SIZE bytes of assembler data, padding at the end
4855 with zeros if necessary. SIZE must always be specified. The returned
4856 value is the actual number of bytes of assembler data generated, which
4857 may be bigger than SIZE if the object contains a variable length field.
4858
4859 SIZE is important for structure constructors,
4860 since trailing members may have been omitted from the constructor.
4861 It is also important for initialization of arrays from string constants
4862 since the full length of the string constant might not be wanted.
4863 It is also needed for initialization of unions, where the initializer's
4864 type is just one member, and that may not be as long as the union.
4865
4866 There a case in which we would fail to output exactly SIZE bytes:
4867 for a structure constructor that wants to produce more than SIZE bytes.
4868 But such constructors will never be generated for any possible input.
4869
4870 ALIGN is the alignment of the data in bits.
4871
4872 If REVERSE is true, EXP is output in reverse storage order. */
4873
4874 static unsigned HOST_WIDE_INT
4875 output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align,
4876 bool reverse, bool merge_strings)
4877 {
4878 enum tree_code code;
4879 unsigned HOST_WIDE_INT thissize;
4880 rtx cst;
4881
4882 if (size == 0 || flag_syntax_only)
4883 return size;
4884
4885 /* See if we're trying to initialize a pointer in a non-default mode
4886 to the address of some declaration somewhere. If the target says
4887 the mode is valid for pointers, assume the target has a way of
4888 resolving it. */
4889 if (TREE_CODE (exp) == NOP_EXPR
4890 && POINTER_TYPE_P (TREE_TYPE (exp))
4891 && targetm.addr_space.valid_pointer_mode
4892 (SCALAR_INT_TYPE_MODE (TREE_TYPE (exp)),
4893 TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)))))
4894 {
4895 tree saved_type = TREE_TYPE (exp);
4896
4897 /* Peel off any intermediate conversions-to-pointer for valid
4898 pointer modes. */
4899 while (TREE_CODE (exp) == NOP_EXPR
4900 && POINTER_TYPE_P (TREE_TYPE (exp))
4901 && targetm.addr_space.valid_pointer_mode
4902 (SCALAR_INT_TYPE_MODE (TREE_TYPE (exp)),
4903 TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)))))
4904 exp = TREE_OPERAND (exp, 0);
4905
4906 /* If what we're left with is the address of something, we can
4907 convert the address to the final type and output it that
4908 way. */
4909 if (TREE_CODE (exp) == ADDR_EXPR)
4910 exp = build1 (ADDR_EXPR, saved_type, TREE_OPERAND (exp, 0));
4911 /* Likewise for constant ints. */
4912 else if (TREE_CODE (exp) == INTEGER_CST)
4913 exp = fold_convert (saved_type, exp);
4914
4915 }
4916
4917 /* Eliminate any conversions since we'll be outputting the underlying
4918 constant. */
4919 while (CONVERT_EXPR_P (exp)
4920 || TREE_CODE (exp) == NON_LVALUE_EXPR
4921 || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
4922 {
4923 HOST_WIDE_INT type_size = int_size_in_bytes (TREE_TYPE (exp));
4924 HOST_WIDE_INT op_size = int_size_in_bytes (TREE_TYPE (TREE_OPERAND (exp, 0)));
4925
4926 /* Make sure eliminating the conversion is really a no-op, except with
4927 VIEW_CONVERT_EXPRs to allow for wild Ada unchecked conversions and
4928 union types to allow for Ada unchecked unions. */
4929 if (type_size > op_size
4930 && TREE_CODE (exp) != VIEW_CONVERT_EXPR
4931 && TREE_CODE (TREE_TYPE (exp)) != UNION_TYPE)
4932 /* Keep the conversion. */
4933 break;
4934 else
4935 exp = TREE_OPERAND (exp, 0);
4936 }
4937
4938 code = TREE_CODE (TREE_TYPE (exp));
4939 thissize = int_size_in_bytes (TREE_TYPE (exp));
4940
4941 /* Allow a constructor with no elements for any data type.
4942 This means to fill the space with zeros. */
4943 if (TREE_CODE (exp) == CONSTRUCTOR
4944 && vec_safe_is_empty (CONSTRUCTOR_ELTS (exp)))
4945 {
4946 assemble_zeros (size);
4947 return size;
4948 }
4949
4950 if (TREE_CODE (exp) == FDESC_EXPR)
4951 {
4952 #ifdef ASM_OUTPUT_FDESC
4953 HOST_WIDE_INT part = tree_to_shwi (TREE_OPERAND (exp, 1));
4954 tree decl = TREE_OPERAND (exp, 0);
4955 ASM_OUTPUT_FDESC (asm_out_file, decl, part);
4956 #else
4957 gcc_unreachable ();
4958 #endif
4959 return size;
4960 }
4961
4962 /* Now output the underlying data. If we've handling the padding, return.
4963 Otherwise, break and ensure SIZE is the size written. */
4964 switch (code)
4965 {
4966 case BOOLEAN_TYPE:
4967 case INTEGER_TYPE:
4968 case ENUMERAL_TYPE:
4969 case POINTER_TYPE:
4970 case REFERENCE_TYPE:
4971 case OFFSET_TYPE:
4972 case FIXED_POINT_TYPE:
4973 case NULLPTR_TYPE:
4974 cst = expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
4975 if (reverse)
4976 cst = flip_storage_order (TYPE_MODE (TREE_TYPE (exp)), cst);
4977 if (!assemble_integer (cst, MIN (size, thissize), align, 0))
4978 error ("initializer for integer/fixed-point value is too complicated");
4979 break;
4980
4981 case REAL_TYPE:
4982 if (TREE_CODE (exp) != REAL_CST)
4983 error ("initializer for floating value is not a floating constant");
4984 else
4985 assemble_real (TREE_REAL_CST (exp),
4986 SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (exp)),
4987 align, reverse);
4988 break;
4989
4990 case COMPLEX_TYPE:
4991 output_constant (TREE_REALPART (exp), thissize / 2, align,
4992 reverse, false);
4993 output_constant (TREE_IMAGPART (exp), thissize / 2,
4994 min_align (align, BITS_PER_UNIT * (thissize / 2)),
4995 reverse, false);
4996 break;
4997
4998 case ARRAY_TYPE:
4999 case VECTOR_TYPE:
5000 switch (TREE_CODE (exp))
5001 {
5002 case CONSTRUCTOR:
5003 return output_constructor (exp, size, align, reverse, NULL);
5004 case STRING_CST:
5005 thissize = (unsigned HOST_WIDE_INT)TREE_STRING_LENGTH (exp);
5006 if (merge_strings
5007 && (thissize == 0
5008 || TREE_STRING_POINTER (exp) [thissize - 1] != '\0'))
5009 thissize++;
5010 gcc_checking_assert (check_string_literal (exp, size));
5011 assemble_string (TREE_STRING_POINTER (exp), thissize);
5012 break;
5013 case VECTOR_CST:
5014 {
5015 scalar_mode inner = SCALAR_TYPE_MODE (TREE_TYPE (TREE_TYPE (exp)));
5016 unsigned int nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
5017 int elt_size = GET_MODE_SIZE (inner);
5018 output_constant (VECTOR_CST_ELT (exp, 0), elt_size, align,
5019 reverse, false);
5020 thissize = elt_size;
5021 /* Static constants must have a fixed size. */
5022 unsigned int nunits = VECTOR_CST_NELTS (exp).to_constant ();
5023 for (unsigned int i = 1; i < nunits; i++)
5024 {
5025 output_constant (VECTOR_CST_ELT (exp, i), elt_size, nalign,
5026 reverse, false);
5027 thissize += elt_size;
5028 }
5029 break;
5030 }
5031 default:
5032 gcc_unreachable ();
5033 }
5034 break;
5035
5036 case RECORD_TYPE:
5037 case UNION_TYPE:
5038 gcc_assert (TREE_CODE (exp) == CONSTRUCTOR);
5039 return output_constructor (exp, size, align, reverse, NULL);
5040
5041 case ERROR_MARK:
5042 return 0;
5043
5044 default:
5045 gcc_unreachable ();
5046 }
5047
5048 if (size > thissize)
5049 assemble_zeros (size - thissize);
5050
5051 return size;
5052 }
5053 \f
5054 /* Subroutine of output_constructor, used for computing the size of
5055 arrays of unspecified length. VAL must be a CONSTRUCTOR of an array
5056 type with an unspecified upper bound. */
5057
5058 static unsigned HOST_WIDE_INT
5059 array_size_for_constructor (tree val)
5060 {
5061 tree max_index;
5062 unsigned HOST_WIDE_INT cnt;
5063 tree index, value, tmp;
5064 offset_int i;
5065
5066 /* This code used to attempt to handle string constants that are not
5067 arrays of single-bytes, but nothing else does, so there's no point in
5068 doing it here. */
5069 if (TREE_CODE (val) == STRING_CST)
5070 return TREE_STRING_LENGTH (val);
5071
5072 max_index = NULL_TREE;
5073 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (val), cnt, index, value)
5074 {
5075 if (TREE_CODE (index) == RANGE_EXPR)
5076 index = TREE_OPERAND (index, 1);
5077 if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
5078 max_index = index;
5079 }
5080
5081 if (max_index == NULL_TREE)
5082 return 0;
5083
5084 /* Compute the total number of array elements. */
5085 tmp = TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)));
5086 i = wi::to_offset (max_index) - wi::to_offset (tmp) + 1;
5087
5088 /* Multiply by the array element unit size to find number of bytes. */
5089 i *= wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (val))));
5090
5091 gcc_assert (wi::fits_uhwi_p (i));
5092 return i.to_uhwi ();
5093 }
5094
5095 /* Other datastructures + helpers for output_constructor. */
5096
5097 /* output_constructor local state to support interaction with helpers. */
5098
5099 struct oc_local_state {
5100
5101 /* Received arguments. */
5102 tree exp; /* Constructor expression. */
5103 tree type; /* Type of constructor expression. */
5104 unsigned HOST_WIDE_INT size; /* # bytes to output - pad if necessary. */
5105 unsigned int align; /* Known initial alignment. */
5106 tree min_index; /* Lower bound if specified for an array. */
5107
5108 /* Output processing state. */
5109 HOST_WIDE_INT total_bytes; /* # bytes output so far / current position. */
5110 int byte; /* Part of a bitfield byte yet to be output. */
5111 int last_relative_index; /* Implicit or explicit index of the last
5112 array element output within a bitfield. */
5113 bool byte_buffer_in_use; /* Whether BYTE is in use. */
5114 bool reverse; /* Whether reverse storage order is in use. */
5115
5116 /* Current element. */
5117 tree field; /* Current field decl in a record. */
5118 tree val; /* Current element value. */
5119 tree index; /* Current element index. */
5120
5121 };
5122
5123 /* Helper for output_constructor. From the current LOCAL state, output a
5124 RANGE_EXPR element. */
5125
5126 static void
5127 output_constructor_array_range (oc_local_state *local)
5128 {
5129 /* Perform the index calculation in modulo arithmetic but
5130 sign-extend the result because Ada has negative DECL_FIELD_OFFSETs
5131 but we are using an unsigned sizetype. */
5132 unsigned prec = TYPE_PRECISION (sizetype);
5133 offset_int idx = wi::sext (wi::to_offset (TREE_OPERAND (local->index, 0))
5134 - wi::to_offset (local->min_index), prec);
5135 tree valtype = TREE_TYPE (local->val);
5136 HOST_WIDE_INT fieldpos
5137 = (idx * wi::to_offset (TYPE_SIZE_UNIT (valtype))).to_short_addr ();
5138
5139 /* Advance to offset of this element. */
5140 if (fieldpos > local->total_bytes)
5141 {
5142 assemble_zeros (fieldpos - local->total_bytes);
5143 local->total_bytes = fieldpos;
5144 }
5145 else
5146 /* Must not go backwards. */
5147 gcc_assert (fieldpos == local->total_bytes);
5148
5149 unsigned HOST_WIDE_INT fieldsize
5150 = int_size_in_bytes (TREE_TYPE (local->type));
5151
5152 HOST_WIDE_INT lo_index
5153 = tree_to_shwi (TREE_OPERAND (local->index, 0));
5154 HOST_WIDE_INT hi_index
5155 = tree_to_shwi (TREE_OPERAND (local->index, 1));
5156 HOST_WIDE_INT index;
5157
5158 unsigned int align2
5159 = min_align (local->align, fieldsize * BITS_PER_UNIT);
5160
5161 for (index = lo_index; index <= hi_index; index++)
5162 {
5163 /* Output the element's initial value. */
5164 if (local->val == NULL_TREE)
5165 assemble_zeros (fieldsize);
5166 else
5167 fieldsize = output_constant (local->val, fieldsize, align2,
5168 local->reverse, false);
5169
5170 /* Count its size. */
5171 local->total_bytes += fieldsize;
5172 }
5173 }
5174
5175 /* Helper for output_constructor. From the current LOCAL state, output a
5176 field element that is not true bitfield or part of an outer one. */
5177
5178 static void
5179 output_constructor_regular_field (oc_local_state *local)
5180 {
5181 /* Field size and position. Since this structure is static, we know the
5182 positions are constant. */
5183 unsigned HOST_WIDE_INT fieldsize;
5184 HOST_WIDE_INT fieldpos;
5185
5186 unsigned int align2;
5187
5188 /* Output any buffered-up bit-fields preceding this element. */
5189 if (local->byte_buffer_in_use)
5190 {
5191 assemble_integer (GEN_INT (local->byte), 1, BITS_PER_UNIT, 1);
5192 local->total_bytes++;
5193 local->byte_buffer_in_use = false;
5194 }
5195
5196 if (local->index != NULL_TREE)
5197 {
5198 /* Perform the index calculation in modulo arithmetic but
5199 sign-extend the result because Ada has negative DECL_FIELD_OFFSETs
5200 but we are using an unsigned sizetype. */
5201 unsigned prec = TYPE_PRECISION (sizetype);
5202 offset_int idx = wi::sext (wi::to_offset (local->index)
5203 - wi::to_offset (local->min_index), prec);
5204 fieldpos = (idx * wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (local->val))))
5205 .to_short_addr ();
5206 }
5207 else if (local->field != NULL_TREE)
5208 fieldpos = int_byte_position (local->field);
5209 else
5210 fieldpos = 0;
5211
5212 /* Advance to offset of this element.
5213 Note no alignment needed in an array, since that is guaranteed
5214 if each element has the proper size. */
5215 if (local->field != NULL_TREE || local->index != NULL_TREE)
5216 {
5217 if (fieldpos > local->total_bytes)
5218 {
5219 assemble_zeros (fieldpos - local->total_bytes);
5220 local->total_bytes = fieldpos;
5221 }
5222 else
5223 /* Must not go backwards. */
5224 gcc_assert (fieldpos == local->total_bytes);
5225 }
5226
5227 /* Find the alignment of this element. */
5228 align2 = min_align (local->align, BITS_PER_UNIT * fieldpos);
5229
5230 /* Determine size this element should occupy. */
5231 if (local->field)
5232 {
5233 fieldsize = 0;
5234
5235 /* If this is an array with an unspecified upper bound,
5236 the initializer determines the size. */
5237 /* ??? This ought to only checked if DECL_SIZE_UNIT is NULL,
5238 but we cannot do this until the deprecated support for
5239 initializing zero-length array members is removed. */
5240 if (TREE_CODE (TREE_TYPE (local->field)) == ARRAY_TYPE
5241 && (!TYPE_DOMAIN (TREE_TYPE (local->field))
5242 || !TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (local->field)))))
5243 {
5244 fieldsize = array_size_for_constructor (local->val);
5245 /* Given a non-empty initialization, this field had better
5246 be last. Given a flexible array member, the next field
5247 on the chain is a TYPE_DECL of the enclosing struct. */
5248 const_tree next = DECL_CHAIN (local->field);
5249 gcc_assert (!fieldsize || !next || TREE_CODE (next) != FIELD_DECL);
5250 tree size = TYPE_SIZE_UNIT (TREE_TYPE (local->val));
5251 gcc_checking_assert (compare_tree_int (size, fieldsize) == 0);
5252 }
5253 else
5254 fieldsize = tree_to_uhwi (DECL_SIZE_UNIT (local->field));
5255 }
5256 else
5257 fieldsize = int_size_in_bytes (TREE_TYPE (local->type));
5258
5259 /* Output the element's initial value. */
5260 if (local->val == NULL_TREE)
5261 assemble_zeros (fieldsize);
5262 else
5263 fieldsize = output_constant (local->val, fieldsize, align2,
5264 local->reverse, false);
5265
5266 /* Count its size. */
5267 local->total_bytes += fieldsize;
5268 }
5269
5270 /* Helper for output_constructor. From the LOCAL state, output an element
5271 that is a true bitfield or part of an outer one. BIT_OFFSET is the offset
5272 from the start of a possibly ongoing outer byte buffer. */
5273
5274 static void
5275 output_constructor_bitfield (oc_local_state *local, unsigned int bit_offset)
5276 {
5277 /* Bit size of this element. */
5278 HOST_WIDE_INT ebitsize
5279 = (local->field
5280 ? tree_to_uhwi (DECL_SIZE (local->field))
5281 : tree_to_uhwi (TYPE_SIZE (TREE_TYPE (local->type))));
5282
5283 /* Relative index of this element if this is an array component. */
5284 HOST_WIDE_INT relative_index
5285 = (!local->field
5286 ? (local->index
5287 ? (tree_to_shwi (local->index)
5288 - tree_to_shwi (local->min_index))
5289 : local->last_relative_index + 1)
5290 : 0);
5291
5292 /* Bit position of this element from the start of the containing
5293 constructor. */
5294 HOST_WIDE_INT constructor_relative_ebitpos
5295 = (local->field
5296 ? int_bit_position (local->field)
5297 : ebitsize * relative_index);
5298
5299 /* Bit position of this element from the start of a possibly ongoing
5300 outer byte buffer. */
5301 HOST_WIDE_INT byte_relative_ebitpos
5302 = bit_offset + constructor_relative_ebitpos;
5303
5304 /* From the start of a possibly ongoing outer byte buffer, offsets to
5305 the first bit of this element and to the first bit past the end of
5306 this element. */
5307 HOST_WIDE_INT next_offset = byte_relative_ebitpos;
5308 HOST_WIDE_INT end_offset = byte_relative_ebitpos + ebitsize;
5309
5310 local->last_relative_index = relative_index;
5311
5312 if (local->val == NULL_TREE)
5313 local->val = integer_zero_node;
5314
5315 while (TREE_CODE (local->val) == VIEW_CONVERT_EXPR
5316 || TREE_CODE (local->val) == NON_LVALUE_EXPR)
5317 local->val = TREE_OPERAND (local->val, 0);
5318
5319 if (TREE_CODE (local->val) != INTEGER_CST
5320 && TREE_CODE (local->val) != CONSTRUCTOR)
5321 {
5322 error ("invalid initial value for member %qE", DECL_NAME (local->field));
5323 return;
5324 }
5325
5326 /* If this field does not start in this (or next) byte, skip some bytes. */
5327 if (next_offset / BITS_PER_UNIT != local->total_bytes)
5328 {
5329 /* Output remnant of any bit field in previous bytes. */
5330 if (local->byte_buffer_in_use)
5331 {
5332 assemble_integer (GEN_INT (local->byte), 1, BITS_PER_UNIT, 1);
5333 local->total_bytes++;
5334 local->byte_buffer_in_use = false;
5335 }
5336
5337 /* If still not at proper byte, advance to there. */
5338 if (next_offset / BITS_PER_UNIT != local->total_bytes)
5339 {
5340 gcc_assert (next_offset / BITS_PER_UNIT >= local->total_bytes);
5341 assemble_zeros (next_offset / BITS_PER_UNIT - local->total_bytes);
5342 local->total_bytes = next_offset / BITS_PER_UNIT;
5343 }
5344 }
5345
5346 /* Set up the buffer if necessary. */
5347 if (!local->byte_buffer_in_use)
5348 {
5349 local->byte = 0;
5350 if (ebitsize > 0)
5351 local->byte_buffer_in_use = true;
5352 }
5353
5354 /* If this is nested constructor, recurse passing the bit offset and the
5355 pending data, then retrieve the new pending data afterwards. */
5356 if (TREE_CODE (local->val) == CONSTRUCTOR)
5357 {
5358 oc_outer_state temp_state;
5359 temp_state.bit_offset = next_offset % BITS_PER_UNIT;
5360 temp_state.byte = local->byte;
5361 local->total_bytes
5362 += output_constructor (local->val, 0, 0, local->reverse, &temp_state);
5363 local->byte = temp_state.byte;
5364 return;
5365 }
5366
5367 /* Otherwise, we must split the element into pieces that fall within
5368 separate bytes, and combine each byte with previous or following
5369 bit-fields. */
5370 while (next_offset < end_offset)
5371 {
5372 int this_time;
5373 int shift;
5374 unsigned HOST_WIDE_INT value;
5375 HOST_WIDE_INT next_byte = next_offset / BITS_PER_UNIT;
5376 HOST_WIDE_INT next_bit = next_offset % BITS_PER_UNIT;
5377
5378 /* Advance from byte to byte within this element when necessary. */
5379 while (next_byte != local->total_bytes)
5380 {
5381 assemble_integer (GEN_INT (local->byte), 1, BITS_PER_UNIT, 1);
5382 local->total_bytes++;
5383 local->byte = 0;
5384 }
5385
5386 /* Number of bits we can process at once (all part of the same byte). */
5387 this_time = MIN (end_offset - next_offset, BITS_PER_UNIT - next_bit);
5388 if (local->reverse ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN)
5389 {
5390 /* For big-endian data, take the most significant bits (of the
5391 bits that are significant) first and put them into bytes from
5392 the most significant end. */
5393 shift = end_offset - next_offset - this_time;
5394
5395 /* Don't try to take a bunch of bits that cross
5396 the word boundary in the INTEGER_CST. We can
5397 only select bits from one element. */
5398 if ((shift / HOST_BITS_PER_WIDE_INT)
5399 != ((shift + this_time - 1) / HOST_BITS_PER_WIDE_INT))
5400 {
5401 const int end = shift + this_time - 1;
5402 shift = end & -HOST_BITS_PER_WIDE_INT;
5403 this_time = end - shift + 1;
5404 }
5405
5406 /* Now get the bits we want to insert. */
5407 value = wi::extract_uhwi (wi::to_widest (local->val),
5408 shift, this_time);
5409
5410 /* Get the result. This works only when:
5411 1 <= this_time <= HOST_BITS_PER_WIDE_INT. */
5412 local->byte |= value << (BITS_PER_UNIT - this_time - next_bit);
5413 }
5414 else
5415 {
5416 /* On little-endian machines, take the least significant bits of
5417 the value first and pack them starting at the least significant
5418 bits of the bytes. */
5419 shift = next_offset - byte_relative_ebitpos;
5420
5421 /* Don't try to take a bunch of bits that cross
5422 the word boundary in the INTEGER_CST. We can
5423 only select bits from one element. */
5424 if ((shift / HOST_BITS_PER_WIDE_INT)
5425 != ((shift + this_time - 1) / HOST_BITS_PER_WIDE_INT))
5426 this_time
5427 = HOST_BITS_PER_WIDE_INT - (shift & (HOST_BITS_PER_WIDE_INT - 1));
5428
5429 /* Now get the bits we want to insert. */
5430 value = wi::extract_uhwi (wi::to_widest (local->val),
5431 shift, this_time);
5432
5433 /* Get the result. This works only when:
5434 1 <= this_time <= HOST_BITS_PER_WIDE_INT. */
5435 local->byte |= value << next_bit;
5436 }
5437
5438 next_offset += this_time;
5439 local->byte_buffer_in_use = true;
5440 }
5441 }
5442
5443 /* Subroutine of output_constant, used for CONSTRUCTORs (aggregate constants).
5444 Generate at least SIZE bytes, padding if necessary. OUTER designates the
5445 caller output state of relevance in recursive invocations. */
5446
5447 static unsigned HOST_WIDE_INT
5448 output_constructor (tree exp, unsigned HOST_WIDE_INT size, unsigned int align,
5449 bool reverse, oc_outer_state *outer)
5450 {
5451 unsigned HOST_WIDE_INT cnt;
5452 constructor_elt *ce;
5453 oc_local_state local;
5454
5455 /* Setup our local state to communicate with helpers. */
5456 local.exp = exp;
5457 local.type = TREE_TYPE (exp);
5458 local.size = size;
5459 local.align = align;
5460 if (TREE_CODE (local.type) == ARRAY_TYPE && TYPE_DOMAIN (local.type))
5461 local.min_index = TYPE_MIN_VALUE (TYPE_DOMAIN (local.type));
5462 else
5463 local.min_index = integer_zero_node;
5464
5465 local.total_bytes = 0;
5466 local.byte_buffer_in_use = outer != NULL;
5467 local.byte = outer ? outer->byte : 0;
5468 local.last_relative_index = -1;
5469 /* The storage order is specified for every aggregate type. */
5470 if (AGGREGATE_TYPE_P (local.type))
5471 local.reverse = TYPE_REVERSE_STORAGE_ORDER (local.type);
5472 else
5473 local.reverse = reverse;
5474
5475 gcc_assert (HOST_BITS_PER_WIDE_INT >= BITS_PER_UNIT);
5476
5477 /* As CE goes through the elements of the constant, FIELD goes through the
5478 structure fields if the constant is a structure. If the constant is a
5479 union, we override this by getting the field from the TREE_LIST element.
5480 But the constant could also be an array. Then FIELD is zero.
5481
5482 There is always a maximum of one element in the chain LINK for unions
5483 (even if the initializer in a source program incorrectly contains
5484 more one). */
5485
5486 if (TREE_CODE (local.type) == RECORD_TYPE)
5487 local.field = TYPE_FIELDS (local.type);
5488 else
5489 local.field = NULL_TREE;
5490
5491 for (cnt = 0;
5492 vec_safe_iterate (CONSTRUCTOR_ELTS (exp), cnt, &ce);
5493 cnt++, local.field = local.field ? DECL_CHAIN (local.field) : 0)
5494 {
5495 local.val = ce->value;
5496 local.index = NULL_TREE;
5497
5498 /* The element in a union constructor specifies the proper field
5499 or index. */
5500 if (RECORD_OR_UNION_TYPE_P (local.type) && ce->index != NULL_TREE)
5501 local.field = ce->index;
5502
5503 else if (TREE_CODE (local.type) == ARRAY_TYPE)
5504 local.index = ce->index;
5505
5506 if (local.field && flag_verbose_asm)
5507 fprintf (asm_out_file, "%s %s:\n",
5508 ASM_COMMENT_START,
5509 DECL_NAME (local.field)
5510 ? IDENTIFIER_POINTER (DECL_NAME (local.field))
5511 : "<anonymous>");
5512
5513 /* Eliminate the marker that makes a cast not be an lvalue. */
5514 if (local.val != NULL_TREE)
5515 STRIP_NOPS (local.val);
5516
5517 /* Output the current element, using the appropriate helper ... */
5518
5519 /* For an array slice not part of an outer bitfield. */
5520 if (!outer
5521 && local.index != NULL_TREE
5522 && TREE_CODE (local.index) == RANGE_EXPR)
5523 output_constructor_array_range (&local);
5524
5525 /* For a field that is neither a true bitfield nor part of an outer one,
5526 known to be at least byte aligned and multiple-of-bytes long. */
5527 else if (!outer
5528 && (local.field == NULL_TREE
5529 || !CONSTRUCTOR_BITFIELD_P (local.field)))
5530 output_constructor_regular_field (&local);
5531
5532 /* For a true bitfield or part of an outer one. Only INTEGER_CSTs are
5533 supported for scalar fields, so we may need to convert first. */
5534 else
5535 {
5536 if (TREE_CODE (local.val) == REAL_CST)
5537 local.val
5538 = fold_unary (VIEW_CONVERT_EXPR,
5539 build_nonstandard_integer_type
5540 (TYPE_PRECISION (TREE_TYPE (local.val)), 0),
5541 local.val);
5542 output_constructor_bitfield (&local, outer ? outer->bit_offset : 0);
5543 }
5544 }
5545
5546 /* If we are not at toplevel, save the pending data for our caller.
5547 Otherwise output the pending data and padding zeros as needed. */
5548 if (outer)
5549 outer->byte = local.byte;
5550 else
5551 {
5552 if (local.byte_buffer_in_use)
5553 {
5554 assemble_integer (GEN_INT (local.byte), 1, BITS_PER_UNIT, 1);
5555 local.total_bytes++;
5556 }
5557
5558 if ((unsigned HOST_WIDE_INT)local.total_bytes < local.size)
5559 {
5560 assemble_zeros (local.size - local.total_bytes);
5561 local.total_bytes = local.size;
5562 }
5563 }
5564
5565 return local.total_bytes;
5566 }
5567
5568 /* Mark DECL as weak. */
5569
5570 static void
5571 mark_weak (tree decl)
5572 {
5573 if (DECL_WEAK (decl))
5574 return;
5575
5576 struct symtab_node *n = symtab_node::get (decl);
5577 if (n && n->refuse_visibility_changes)
5578 error ("%+qD declared weak after being used", decl);
5579 DECL_WEAK (decl) = 1;
5580
5581 if (DECL_RTL_SET_P (decl)
5582 && MEM_P (DECL_RTL (decl))
5583 && XEXP (DECL_RTL (decl), 0)
5584 && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF)
5585 SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1;
5586 }
5587
5588 /* Merge weak status between NEWDECL and OLDDECL. */
5589
5590 void
5591 merge_weak (tree newdecl, tree olddecl)
5592 {
5593 if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
5594 {
5595 if (DECL_WEAK (newdecl) && TARGET_SUPPORTS_WEAK)
5596 {
5597 tree *pwd;
5598 /* We put the NEWDECL on the weak_decls list at some point
5599 and OLDDECL as well. Keep just OLDDECL on the list. */
5600 for (pwd = &weak_decls; *pwd; pwd = &TREE_CHAIN (*pwd))
5601 if (TREE_VALUE (*pwd) == newdecl)
5602 {
5603 *pwd = TREE_CHAIN (*pwd);
5604 break;
5605 }
5606 }
5607 return;
5608 }
5609
5610 if (DECL_WEAK (newdecl))
5611 {
5612 tree wd;
5613
5614 /* NEWDECL is weak, but OLDDECL is not. */
5615
5616 /* If we already output the OLDDECL, we're in trouble; we can't
5617 go back and make it weak. This should never happen in
5618 unit-at-a-time compilation. */
5619 gcc_assert (!TREE_ASM_WRITTEN (olddecl));
5620
5621 /* If we've already generated rtl referencing OLDDECL, we may
5622 have done so in a way that will not function properly with
5623 a weak symbol. Again in unit-at-a-time this should be
5624 impossible. */
5625 gcc_assert (!TREE_USED (olddecl)
5626 || !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)));
5627
5628 /* PR 49899: You cannot convert a static function into a weak, public function. */
5629 if (! TREE_PUBLIC (olddecl) && TREE_PUBLIC (newdecl))
5630 error ("weak declaration of %q+D being applied to a already "
5631 "existing, static definition", newdecl);
5632
5633 if (TARGET_SUPPORTS_WEAK)
5634 {
5635 /* We put the NEWDECL on the weak_decls list at some point.
5636 Replace it with the OLDDECL. */
5637 for (wd = weak_decls; wd; wd = TREE_CHAIN (wd))
5638 if (TREE_VALUE (wd) == newdecl)
5639 {
5640 TREE_VALUE (wd) = olddecl;
5641 break;
5642 }
5643 /* We may not find the entry on the list. If NEWDECL is a
5644 weak alias, then we will have already called
5645 globalize_decl to remove the entry; in that case, we do
5646 not need to do anything. */
5647 }
5648
5649 /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping. */
5650 mark_weak (olddecl);
5651 }
5652 else
5653 /* OLDDECL was weak, but NEWDECL was not explicitly marked as
5654 weak. Just update NEWDECL to indicate that it's weak too. */
5655 mark_weak (newdecl);
5656 }
5657
5658 /* Declare DECL to be a weak symbol. */
5659
5660 void
5661 declare_weak (tree decl)
5662 {
5663 gcc_assert (TREE_CODE (decl) != FUNCTION_DECL || !TREE_ASM_WRITTEN (decl));
5664 if (! TREE_PUBLIC (decl))
5665 {
5666 error ("weak declaration of %q+D must be public", decl);
5667 return;
5668 }
5669 else if (!TARGET_SUPPORTS_WEAK)
5670 warning (0, "weak declaration of %q+D not supported", decl);
5671
5672 mark_weak (decl);
5673 if (!lookup_attribute ("weak", DECL_ATTRIBUTES (decl)))
5674 DECL_ATTRIBUTES (decl)
5675 = tree_cons (get_identifier ("weak"), NULL, DECL_ATTRIBUTES (decl));
5676 }
5677
5678 static void
5679 weak_finish_1 (tree decl)
5680 {
5681 #if defined (ASM_WEAKEN_DECL) || defined (ASM_WEAKEN_LABEL)
5682 const char *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5683 #endif
5684
5685 if (! TREE_USED (decl))
5686 return;
5687
5688 #ifdef ASM_WEAKEN_DECL
5689 ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL);
5690 #else
5691 #ifdef ASM_WEAKEN_LABEL
5692 ASM_WEAKEN_LABEL (asm_out_file, name);
5693 #else
5694 #ifdef ASM_OUTPUT_WEAK_ALIAS
5695 {
5696 static bool warn_once = 0;
5697 if (! warn_once)
5698 {
5699 warning (0, "only weak aliases are supported in this configuration");
5700 warn_once = 1;
5701 }
5702 return;
5703 }
5704 #endif
5705 #endif
5706 #endif
5707 }
5708
5709 /* Fiven an assembly name, find the decl it is associated with. */
5710 static tree
5711 find_decl (tree target)
5712 {
5713 symtab_node *node = symtab_node::get_for_asmname (target);
5714 if (node)
5715 return node->decl;
5716 return NULL_TREE;
5717 }
5718
5719 /* This TREE_LIST contains weakref targets. */
5720
5721 static GTY(()) tree weakref_targets;
5722
5723 /* Emit any pending weak declarations. */
5724
5725 void
5726 weak_finish (void)
5727 {
5728 tree t;
5729
5730 for (t = weakref_targets; t; t = TREE_CHAIN (t))
5731 {
5732 tree alias_decl = TREE_PURPOSE (t);
5733 tree target = ultimate_transparent_alias_target (&TREE_VALUE (t));
5734
5735 if (! TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (alias_decl))
5736 || TREE_SYMBOL_REFERENCED (target))
5737 /* Remove alias_decl from the weak list, but leave entries for
5738 the target alone. */
5739 target = NULL_TREE;
5740 #ifndef ASM_OUTPUT_WEAKREF
5741 else if (! TREE_SYMBOL_REFERENCED (target))
5742 {
5743 /* Use ASM_WEAKEN_LABEL only if ASM_WEAKEN_DECL is not
5744 defined, otherwise we and weak_finish_1 would use
5745 different macros. */
5746 # if defined ASM_WEAKEN_LABEL && ! defined ASM_WEAKEN_DECL
5747 ASM_WEAKEN_LABEL (asm_out_file, IDENTIFIER_POINTER (target));
5748 # else
5749 tree decl = find_decl (target);
5750
5751 if (! decl)
5752 {
5753 decl = build_decl (DECL_SOURCE_LOCATION (alias_decl),
5754 TREE_CODE (alias_decl), target,
5755 TREE_TYPE (alias_decl));
5756
5757 DECL_EXTERNAL (decl) = 1;
5758 TREE_PUBLIC (decl) = 1;
5759 DECL_ARTIFICIAL (decl) = 1;
5760 TREE_NOTHROW (decl) = TREE_NOTHROW (alias_decl);
5761 TREE_USED (decl) = 1;
5762 }
5763
5764 weak_finish_1 (decl);
5765 # endif
5766 }
5767 #endif
5768
5769 {
5770 tree *p;
5771 tree t2;
5772
5773 /* Remove the alias and the target from the pending weak list
5774 so that we do not emit any .weak directives for the former,
5775 nor multiple .weak directives for the latter. */
5776 for (p = &weak_decls; (t2 = *p) ; )
5777 {
5778 if (TREE_VALUE (t2) == alias_decl
5779 || target == DECL_ASSEMBLER_NAME (TREE_VALUE (t2)))
5780 *p = TREE_CHAIN (t2);
5781 else
5782 p = &TREE_CHAIN (t2);
5783 }
5784
5785 /* Remove other weakrefs to the same target, to speed things up. */
5786 for (p = &TREE_CHAIN (t); (t2 = *p) ; )
5787 {
5788 if (target == ultimate_transparent_alias_target (&TREE_VALUE (t2)))
5789 *p = TREE_CHAIN (t2);
5790 else
5791 p = &TREE_CHAIN (t2);
5792 }
5793 }
5794 }
5795
5796 for (t = weak_decls; t; t = TREE_CHAIN (t))
5797 {
5798 tree decl = TREE_VALUE (t);
5799
5800 weak_finish_1 (decl);
5801 }
5802 }
5803
5804 /* Emit the assembly bits to indicate that DECL is globally visible. */
5805
5806 static void
5807 globalize_decl (tree decl)
5808 {
5809
5810 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
5811 if (DECL_WEAK (decl))
5812 {
5813 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
5814 tree *p, t;
5815
5816 #ifdef ASM_WEAKEN_DECL
5817 ASM_WEAKEN_DECL (asm_out_file, decl, name, 0);
5818 #else
5819 ASM_WEAKEN_LABEL (asm_out_file, name);
5820 #endif
5821
5822 /* Remove this function from the pending weak list so that
5823 we do not emit multiple .weak directives for it. */
5824 for (p = &weak_decls; (t = *p) ; )
5825 {
5826 if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
5827 *p = TREE_CHAIN (t);
5828 else
5829 p = &TREE_CHAIN (t);
5830 }
5831
5832 /* Remove weakrefs to the same target from the pending weakref
5833 list, for the same reason. */
5834 for (p = &weakref_targets; (t = *p) ; )
5835 {
5836 if (DECL_ASSEMBLER_NAME (decl)
5837 == ultimate_transparent_alias_target (&TREE_VALUE (t)))
5838 *p = TREE_CHAIN (t);
5839 else
5840 p = &TREE_CHAIN (t);
5841 }
5842
5843 return;
5844 }
5845 #endif
5846
5847 targetm.asm_out.globalize_decl_name (asm_out_file, decl);
5848 }
5849
5850 vec<alias_pair, va_gc> *alias_pairs;
5851
5852 /* Output the assembler code for a define (equate) using ASM_OUTPUT_DEF
5853 or ASM_OUTPUT_DEF_FROM_DECLS. The function defines the symbol whose
5854 tree node is DECL to have the value of the tree node TARGET. */
5855
5856 void
5857 do_assemble_alias (tree decl, tree target)
5858 {
5859 tree id;
5860
5861 /* Emulated TLS had better not get this var. */
5862 gcc_assert (!(!targetm.have_tls
5863 && VAR_P (decl)
5864 && DECL_THREAD_LOCAL_P (decl)));
5865
5866 if (TREE_ASM_WRITTEN (decl))
5867 return;
5868
5869 id = DECL_ASSEMBLER_NAME (decl);
5870 ultimate_transparent_alias_target (&id);
5871 ultimate_transparent_alias_target (&target);
5872
5873 /* We must force creation of DECL_RTL for debug info generation, even though
5874 we don't use it here. */
5875 make_decl_rtl (decl);
5876
5877 TREE_ASM_WRITTEN (decl) = 1;
5878 TREE_ASM_WRITTEN (DECL_ASSEMBLER_NAME (decl)) = 1;
5879 TREE_ASM_WRITTEN (id) = 1;
5880
5881 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5882 {
5883 if (!TREE_SYMBOL_REFERENCED (target))
5884 weakref_targets = tree_cons (decl, target, weakref_targets);
5885
5886 #ifdef ASM_OUTPUT_WEAKREF
5887 ASM_OUTPUT_WEAKREF (asm_out_file, decl,
5888 IDENTIFIER_POINTER (id),
5889 IDENTIFIER_POINTER (target));
5890 #else
5891 if (!TARGET_SUPPORTS_WEAK)
5892 {
5893 error_at (DECL_SOURCE_LOCATION (decl),
5894 "weakref is not supported in this configuration");
5895 return;
5896 }
5897 #endif
5898 return;
5899 }
5900
5901 #ifdef ASM_OUTPUT_DEF
5902 tree orig_decl = decl;
5903
5904 /* Make name accessible from other files, if appropriate. */
5905
5906 if (TREE_PUBLIC (decl) || TREE_PUBLIC (orig_decl))
5907 {
5908 globalize_decl (decl);
5909 maybe_assemble_visibility (decl);
5910 }
5911 if (TREE_CODE (decl) == FUNCTION_DECL
5912 && cgraph_node::get (decl)->ifunc_resolver)
5913 {
5914 #if defined (ASM_OUTPUT_TYPE_DIRECTIVE)
5915 if (targetm.has_ifunc_p ())
5916 ASM_OUTPUT_TYPE_DIRECTIVE
5917 (asm_out_file, IDENTIFIER_POINTER (id),
5918 IFUNC_ASM_TYPE);
5919 else
5920 #endif
5921 error_at (DECL_SOURCE_LOCATION (decl),
5922 "%qs is not supported on this target", "ifunc");
5923 }
5924
5925 # ifdef ASM_OUTPUT_DEF_FROM_DECLS
5926 ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
5927 # else
5928 ASM_OUTPUT_DEF (asm_out_file,
5929 IDENTIFIER_POINTER (id),
5930 IDENTIFIER_POINTER (target));
5931 # endif
5932 #elif defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
5933 {
5934 const char *name;
5935 tree *p, t;
5936
5937 name = IDENTIFIER_POINTER (id);
5938 # ifdef ASM_WEAKEN_DECL
5939 ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target));
5940 # else
5941 ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target));
5942 # endif
5943 /* Remove this function from the pending weak list so that
5944 we do not emit multiple .weak directives for it. */
5945 for (p = &weak_decls; (t = *p) ; )
5946 if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t))
5947 || id == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
5948 *p = TREE_CHAIN (t);
5949 else
5950 p = &TREE_CHAIN (t);
5951
5952 /* Remove weakrefs to the same target from the pending weakref
5953 list, for the same reason. */
5954 for (p = &weakref_targets; (t = *p) ; )
5955 {
5956 if (id == ultimate_transparent_alias_target (&TREE_VALUE (t)))
5957 *p = TREE_CHAIN (t);
5958 else
5959 p = &TREE_CHAIN (t);
5960 }
5961 }
5962 #endif
5963 }
5964
5965 /* Output .symver directive. */
5966
5967 void
5968 do_assemble_symver (tree decl, tree target)
5969 {
5970 tree id = DECL_ASSEMBLER_NAME (decl);
5971 ultimate_transparent_alias_target (&id);
5972 ultimate_transparent_alias_target (&target);
5973 #ifdef ASM_OUTPUT_SYMVER_DIRECTIVE
5974 ASM_OUTPUT_SYMVER_DIRECTIVE (asm_out_file,
5975 IDENTIFIER_POINTER (target),
5976 IDENTIFIER_POINTER (id));
5977 #else
5978 error ("symver is only supported on ELF platforms");
5979 #endif
5980 }
5981
5982 /* Emit an assembler directive to make the symbol for DECL an alias to
5983 the symbol for TARGET. */
5984
5985 void
5986 assemble_alias (tree decl, tree target)
5987 {
5988 tree target_decl;
5989
5990 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5991 {
5992 tree alias = DECL_ASSEMBLER_NAME (decl);
5993
5994 ultimate_transparent_alias_target (&target);
5995
5996 if (alias == target)
5997 error ("%qs symbol %q+D ultimately targets itself", "weakref", decl);
5998 if (TREE_PUBLIC (decl))
5999 error ("%qs symbol %q+D must have static linkage", "weakref", decl);
6000 }
6001 else
6002 {
6003 #if !defined (ASM_OUTPUT_DEF)
6004 # if !defined(ASM_OUTPUT_WEAK_ALIAS) && !defined (ASM_WEAKEN_DECL)
6005 error_at (DECL_SOURCE_LOCATION (decl),
6006 "alias definitions not supported in this configuration");
6007 TREE_ASM_WRITTEN (decl) = 1;
6008 return;
6009 # else
6010 if (!DECL_WEAK (decl))
6011 {
6012 /* NB: ifunc_resolver isn't set when an error is detected. */
6013 if (TREE_CODE (decl) == FUNCTION_DECL
6014 && lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl)))
6015 error_at (DECL_SOURCE_LOCATION (decl),
6016 "%qs is not supported in this configuration", "ifunc");
6017 else
6018 error_at (DECL_SOURCE_LOCATION (decl),
6019 "only weak aliases are supported in this configuration");
6020 TREE_ASM_WRITTEN (decl) = 1;
6021 return;
6022 }
6023 # endif
6024 #endif
6025 }
6026 TREE_USED (decl) = 1;
6027
6028 /* Allow aliases to aliases. */
6029 if (TREE_CODE (decl) == FUNCTION_DECL)
6030 cgraph_node::get_create (decl)->alias = true;
6031 else
6032 varpool_node::get_create (decl)->alias = true;
6033
6034 /* If the target has already been emitted, we don't have to queue the
6035 alias. This saves a tad of memory. */
6036 if (symtab->global_info_ready)
6037 target_decl = find_decl (target);
6038 else
6039 target_decl= NULL;
6040 if ((target_decl && TREE_ASM_WRITTEN (target_decl))
6041 || symtab->state >= EXPANSION)
6042 do_assemble_alias (decl, target);
6043 else
6044 {
6045 alias_pair p = {decl, target};
6046 vec_safe_push (alias_pairs, p);
6047 }
6048 }
6049
6050 /* Record and output a table of translations from original function
6051 to its transaction aware clone. Note that tm_pure functions are
6052 considered to be their own clone. */
6053
6054 struct tm_clone_hasher : ggc_cache_ptr_hash<tree_map>
6055 {
6056 static hashval_t hash (tree_map *m) { return tree_map_hash (m); }
6057 static bool equal (tree_map *a, tree_map *b) { return tree_map_eq (a, b); }
6058
6059 static int
6060 keep_cache_entry (tree_map *&e)
6061 {
6062 return ggc_marked_p (e->base.from);
6063 }
6064 };
6065
6066 static GTY((cache)) hash_table<tm_clone_hasher> *tm_clone_hash;
6067
6068 void
6069 record_tm_clone_pair (tree o, tree n)
6070 {
6071 struct tree_map **slot, *h;
6072
6073 if (tm_clone_hash == NULL)
6074 tm_clone_hash = hash_table<tm_clone_hasher>::create_ggc (32);
6075
6076 h = ggc_alloc<tree_map> ();
6077 h->hash = htab_hash_pointer (o);
6078 h->base.from = o;
6079 h->to = n;
6080
6081 slot = tm_clone_hash->find_slot_with_hash (h, h->hash, INSERT);
6082 *slot = h;
6083 }
6084
6085 tree
6086 get_tm_clone_pair (tree o)
6087 {
6088 if (tm_clone_hash)
6089 {
6090 struct tree_map *h, in;
6091
6092 in.base.from = o;
6093 in.hash = htab_hash_pointer (o);
6094 h = tm_clone_hash->find_with_hash (&in, in.hash);
6095 if (h)
6096 return h->to;
6097 }
6098 return NULL_TREE;
6099 }
6100
6101 struct tm_alias_pair
6102 {
6103 unsigned int uid;
6104 tree from;
6105 tree to;
6106 };
6107
6108
6109 /* Dump the actual pairs to the .tm_clone_table section. */
6110
6111 static void
6112 dump_tm_clone_pairs (vec<tm_alias_pair> tm_alias_pairs)
6113 {
6114 unsigned i;
6115 tm_alias_pair *p;
6116 bool switched = false;
6117
6118 FOR_EACH_VEC_ELT (tm_alias_pairs, i, p)
6119 {
6120 tree src = p->from;
6121 tree dst = p->to;
6122 struct cgraph_node *src_n = cgraph_node::get (src);
6123 struct cgraph_node *dst_n = cgraph_node::get (dst);
6124
6125 /* The function ipa_tm_create_version() marks the clone as needed if
6126 the original function was needed. But we also mark the clone as
6127 needed if we ever called the clone indirectly through
6128 TM_GETTMCLONE. If neither of these are true, we didn't generate
6129 a clone, and we didn't call it indirectly... no sense keeping it
6130 in the clone table. */
6131 if (!dst_n || !dst_n->definition)
6132 continue;
6133
6134 /* This covers the case where we have optimized the original
6135 function away, and only access the transactional clone. */
6136 if (!src_n || !src_n->definition)
6137 continue;
6138
6139 if (!switched)
6140 {
6141 switch_to_section (targetm.asm_out.tm_clone_table_section ());
6142 assemble_align (POINTER_SIZE);
6143 switched = true;
6144 }
6145
6146 assemble_integer (XEXP (DECL_RTL (src), 0),
6147 POINTER_SIZE_UNITS, POINTER_SIZE, 1);
6148 assemble_integer (XEXP (DECL_RTL (dst), 0),
6149 POINTER_SIZE_UNITS, POINTER_SIZE, 1);
6150 }
6151 }
6152
6153 /* Provide a default for the tm_clone_table section. */
6154
6155 section *
6156 default_clone_table_section (void)
6157 {
6158 return get_named_section (NULL, ".tm_clone_table", 3);
6159 }
6160
6161 /* Helper comparison function for qsorting by the DECL_UID stored in
6162 alias_pair->emitted_diags. */
6163
6164 static int
6165 tm_alias_pair_cmp (const void *x, const void *y)
6166 {
6167 const tm_alias_pair *p1 = (const tm_alias_pair *) x;
6168 const tm_alias_pair *p2 = (const tm_alias_pair *) y;
6169 if (p1->uid < p2->uid)
6170 return -1;
6171 if (p1->uid > p2->uid)
6172 return 1;
6173 return 0;
6174 }
6175
6176 void
6177 finish_tm_clone_pairs (void)
6178 {
6179 vec<tm_alias_pair> tm_alias_pairs = vNULL;
6180
6181 if (tm_clone_hash == NULL)
6182 return;
6183
6184 /* We need a determenistic order for the .tm_clone_table, otherwise
6185 we will get bootstrap comparison failures, so dump the hash table
6186 to a vector, sort it, and dump the vector. */
6187
6188 /* Dump the hashtable to a vector. */
6189 tree_map *map;
6190 hash_table<tm_clone_hasher>::iterator iter;
6191 FOR_EACH_HASH_TABLE_ELEMENT (*tm_clone_hash, map, tree_map *, iter)
6192 {
6193 tm_alias_pair p = {DECL_UID (map->base.from), map->base.from, map->to};
6194 tm_alias_pairs.safe_push (p);
6195 }
6196 /* Sort it. */
6197 tm_alias_pairs.qsort (tm_alias_pair_cmp);
6198
6199 /* Dump it. */
6200 dump_tm_clone_pairs (tm_alias_pairs);
6201
6202 tm_clone_hash->empty ();
6203 tm_clone_hash = NULL;
6204 tm_alias_pairs.release ();
6205 }
6206
6207
6208 /* Emit an assembler directive to set symbol for DECL visibility to
6209 the visibility type VIS, which must not be VISIBILITY_DEFAULT. */
6210
6211 void
6212 default_assemble_visibility (tree decl ATTRIBUTE_UNUSED,
6213 int vis ATTRIBUTE_UNUSED)
6214 {
6215 #ifdef HAVE_GAS_HIDDEN
6216 static const char * const visibility_types[] = {
6217 NULL, "protected", "hidden", "internal"
6218 };
6219
6220 const char *name, *type;
6221 tree id;
6222
6223 id = DECL_ASSEMBLER_NAME (decl);
6224 ultimate_transparent_alias_target (&id);
6225 name = IDENTIFIER_POINTER (id);
6226
6227 type = visibility_types[vis];
6228
6229 fprintf (asm_out_file, "\t.%s\t", type);
6230 assemble_name (asm_out_file, name);
6231 fprintf (asm_out_file, "\n");
6232 #else
6233 if (!DECL_ARTIFICIAL (decl))
6234 warning (OPT_Wattributes, "visibility attribute not supported "
6235 "in this configuration; ignored");
6236 #endif
6237 }
6238
6239 /* A helper function to call assemble_visibility when needed for a decl. */
6240
6241 int
6242 maybe_assemble_visibility (tree decl)
6243 {
6244 enum symbol_visibility vis = DECL_VISIBILITY (decl);
6245 if (vis != VISIBILITY_DEFAULT)
6246 {
6247 targetm.asm_out.assemble_visibility (decl, vis);
6248 return 1;
6249 }
6250 else
6251 return 0;
6252 }
6253
6254 /* Returns 1 if the target configuration supports defining public symbols
6255 so that one of them will be chosen at link time instead of generating a
6256 multiply-defined symbol error, whether through the use of weak symbols or
6257 a target-specific mechanism for having duplicates discarded. */
6258
6259 int
6260 supports_one_only (void)
6261 {
6262 if (SUPPORTS_ONE_ONLY)
6263 return 1;
6264 return TARGET_SUPPORTS_WEAK;
6265 }
6266
6267 /* Set up DECL as a public symbol that can be defined in multiple
6268 translation units without generating a linker error. */
6269
6270 void
6271 make_decl_one_only (tree decl, tree comdat_group)
6272 {
6273 struct symtab_node *symbol;
6274 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
6275
6276 TREE_PUBLIC (decl) = 1;
6277
6278 if (VAR_P (decl))
6279 symbol = varpool_node::get_create (decl);
6280 else
6281 symbol = cgraph_node::get_create (decl);
6282
6283 if (SUPPORTS_ONE_ONLY)
6284 {
6285 #ifdef MAKE_DECL_ONE_ONLY
6286 MAKE_DECL_ONE_ONLY (decl);
6287 #endif
6288 symbol->set_comdat_group (comdat_group);
6289 }
6290 else if (VAR_P (decl)
6291 && (DECL_INITIAL (decl) == 0
6292 || (!in_lto_p && DECL_INITIAL (decl) == error_mark_node)))
6293 DECL_COMMON (decl) = 1;
6294 else
6295 {
6296 gcc_assert (TARGET_SUPPORTS_WEAK);
6297 DECL_WEAK (decl) = 1;
6298 }
6299 }
6300
6301 void
6302 init_varasm_once (void)
6303 {
6304 section_htab = hash_table<section_hasher>::create_ggc (31);
6305 object_block_htab = hash_table<object_block_hasher>::create_ggc (31);
6306 const_desc_htab = hash_table<tree_descriptor_hasher>::create_ggc (1009);
6307
6308 shared_constant_pool = create_constant_pool ();
6309
6310 #ifdef TEXT_SECTION_ASM_OP
6311 text_section = get_unnamed_section (SECTION_CODE, output_section_asm_op,
6312 TEXT_SECTION_ASM_OP);
6313 #endif
6314
6315 #ifdef DATA_SECTION_ASM_OP
6316 data_section = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
6317 DATA_SECTION_ASM_OP);
6318 #endif
6319
6320 #ifdef SDATA_SECTION_ASM_OP
6321 sdata_section = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
6322 SDATA_SECTION_ASM_OP);
6323 #endif
6324
6325 #ifdef READONLY_DATA_SECTION_ASM_OP
6326 readonly_data_section = get_unnamed_section (0, output_section_asm_op,
6327 READONLY_DATA_SECTION_ASM_OP);
6328 #endif
6329
6330 #ifdef CTORS_SECTION_ASM_OP
6331 ctors_section = get_unnamed_section (0, output_section_asm_op,
6332 CTORS_SECTION_ASM_OP);
6333 #endif
6334
6335 #ifdef DTORS_SECTION_ASM_OP
6336 dtors_section = get_unnamed_section (0, output_section_asm_op,
6337 DTORS_SECTION_ASM_OP);
6338 #endif
6339
6340 #ifdef BSS_SECTION_ASM_OP
6341 bss_section = get_unnamed_section (SECTION_WRITE | SECTION_BSS,
6342 output_section_asm_op,
6343 BSS_SECTION_ASM_OP);
6344 #endif
6345
6346 #ifdef SBSS_SECTION_ASM_OP
6347 sbss_section = get_unnamed_section (SECTION_WRITE | SECTION_BSS,
6348 output_section_asm_op,
6349 SBSS_SECTION_ASM_OP);
6350 #endif
6351
6352 tls_comm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
6353 | SECTION_COMMON, emit_tls_common);
6354 lcomm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
6355 | SECTION_COMMON, emit_local);
6356 comm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
6357 | SECTION_COMMON, emit_common);
6358
6359 #if defined ASM_OUTPUT_ALIGNED_BSS
6360 bss_noswitch_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS,
6361 emit_bss);
6362 #endif
6363
6364 targetm.asm_out.init_sections ();
6365
6366 if (readonly_data_section == NULL)
6367 readonly_data_section = text_section;
6368
6369 #ifdef ASM_OUTPUT_EXTERNAL
6370 pending_assemble_externals_set = new hash_set<tree>;
6371 #endif
6372 }
6373
6374 enum tls_model
6375 decl_default_tls_model (const_tree decl)
6376 {
6377 enum tls_model kind;
6378 bool is_local;
6379
6380 is_local = targetm.binds_local_p (decl);
6381 if (!flag_shlib)
6382 {
6383 if (is_local)
6384 kind = TLS_MODEL_LOCAL_EXEC;
6385 else
6386 kind = TLS_MODEL_INITIAL_EXEC;
6387 }
6388
6389 /* Local dynamic is inefficient when we're not combining the
6390 parts of the address. */
6391 else if (optimize && is_local)
6392 kind = TLS_MODEL_LOCAL_DYNAMIC;
6393 else
6394 kind = TLS_MODEL_GLOBAL_DYNAMIC;
6395 if (kind < flag_tls_default)
6396 kind = flag_tls_default;
6397
6398 return kind;
6399 }
6400
6401 /* Select a set of attributes for section NAME based on the properties
6402 of DECL and whether or not RELOC indicates that DECL's initializer
6403 might contain runtime relocations.
6404
6405 We make the section read-only and executable for a function decl,
6406 read-only for a const data decl, and writable for a non-const data decl. */
6407
6408 unsigned int
6409 default_section_type_flags (tree decl, const char *name, int reloc)
6410 {
6411 unsigned int flags;
6412
6413 if (decl && TREE_CODE (decl) == FUNCTION_DECL)
6414 flags = SECTION_CODE;
6415 else if (decl)
6416 {
6417 enum section_category category
6418 = categorize_decl_for_section (decl, reloc);
6419 if (decl_readonly_section_1 (category))
6420 flags = 0;
6421 else if (category == SECCAT_DATA_REL_RO
6422 || category == SECCAT_DATA_REL_RO_LOCAL)
6423 flags = SECTION_WRITE | SECTION_RELRO;
6424 else
6425 flags = SECTION_WRITE;
6426 }
6427 else
6428 {
6429 flags = SECTION_WRITE;
6430 if (strcmp (name, ".data.rel.ro") == 0
6431 || strcmp (name, ".data.rel.ro.local") == 0)
6432 flags |= SECTION_RELRO;
6433 }
6434
6435 if (decl && DECL_P (decl) && DECL_COMDAT_GROUP (decl))
6436 flags |= SECTION_LINKONCE;
6437
6438 if (strcmp (name, ".vtable_map_vars") == 0)
6439 flags |= SECTION_LINKONCE;
6440
6441 if (decl && VAR_P (decl) && DECL_THREAD_LOCAL_P (decl))
6442 flags |= SECTION_TLS | SECTION_WRITE;
6443
6444 if (strcmp (name, ".bss") == 0
6445 || strncmp (name, ".bss.", 5) == 0
6446 || strncmp (name, ".gnu.linkonce.b.", 16) == 0
6447 || strcmp (name, ".persistent.bss") == 0
6448 || strcmp (name, ".sbss") == 0
6449 || strncmp (name, ".sbss.", 6) == 0
6450 || strncmp (name, ".gnu.linkonce.sb.", 17) == 0)
6451 flags |= SECTION_BSS;
6452
6453 if (strcmp (name, ".tdata") == 0
6454 || strncmp (name, ".tdata.", 7) == 0
6455 || strncmp (name, ".gnu.linkonce.td.", 17) == 0)
6456 flags |= SECTION_TLS;
6457
6458 if (strcmp (name, ".tbss") == 0
6459 || strncmp (name, ".tbss.", 6) == 0
6460 || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
6461 flags |= SECTION_TLS | SECTION_BSS;
6462
6463 if (strcmp (name, ".noinit") == 0)
6464 flags |= SECTION_WRITE | SECTION_BSS | SECTION_NOTYPE;
6465
6466 /* Various sections have special ELF types that the assembler will
6467 assign by default based on the name. They are neither SHT_PROGBITS
6468 nor SHT_NOBITS, so when changing sections we don't want to print a
6469 section type (@progbits or @nobits). Rather than duplicating the
6470 assembler's knowledge of what those special name patterns are, just
6471 let the assembler choose the type if we don't know a specific
6472 reason to set it to something other than the default. SHT_PROGBITS
6473 is the default for sections whose name is not specially known to
6474 the assembler, so it does no harm to leave the choice to the
6475 assembler when @progbits is the best thing we know to use. If
6476 someone is silly enough to emit code or TLS variables to one of
6477 these sections, then don't handle them specially.
6478
6479 default_elf_asm_named_section (below) handles the BSS, TLS, ENTSIZE, and
6480 LINKONCE cases when NOTYPE is not set, so leave those to its logic. */
6481 if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS | SECTION_ENTSIZE))
6482 && !(HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE)))
6483 flags |= SECTION_NOTYPE;
6484
6485 return flags;
6486 }
6487
6488 /* Return true if the target supports some form of global BSS,
6489 either through bss_noswitch_section, or by selecting a BSS
6490 section in TARGET_ASM_SELECT_SECTION. */
6491
6492 bool
6493 have_global_bss_p (void)
6494 {
6495 return bss_noswitch_section || targetm.have_switchable_bss_sections;
6496 }
6497
6498 /* Output assembly to switch to section NAME with attribute FLAGS.
6499 Four variants for common object file formats. */
6500
6501 void
6502 default_no_named_section (const char *name ATTRIBUTE_UNUSED,
6503 unsigned int flags ATTRIBUTE_UNUSED,
6504 tree decl ATTRIBUTE_UNUSED)
6505 {
6506 /* Some object formats don't support named sections at all. The
6507 front-end should already have flagged this as an error. */
6508 gcc_unreachable ();
6509 }
6510
6511 #ifndef TLS_SECTION_ASM_FLAG
6512 #define TLS_SECTION_ASM_FLAG 'T'
6513 #endif
6514
6515 void
6516 default_elf_asm_named_section (const char *name, unsigned int flags,
6517 tree decl)
6518 {
6519 char flagchars[11], *f = flagchars;
6520 unsigned int numeric_value = 0;
6521
6522 /* If we have already declared this section, we can use an
6523 abbreviated form to switch back to it -- unless this section is
6524 part of a COMDAT groups, in which case GAS requires the full
6525 declaration every time. */
6526 if (!(HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
6527 && (flags & SECTION_DECLARED))
6528 {
6529 fprintf (asm_out_file, "\t.section\t%s\n", name);
6530 return;
6531 }
6532
6533 /* If we have a machine specific flag, then use the numeric value to pass
6534 this on to GAS. */
6535 if (targetm.asm_out.elf_flags_numeric (flags, &numeric_value))
6536 snprintf (f, sizeof (flagchars), "0x%08x", numeric_value);
6537 else
6538 {
6539 if (!(flags & SECTION_DEBUG))
6540 *f++ = 'a';
6541 #if HAVE_GAS_SECTION_EXCLUDE
6542 if (flags & SECTION_EXCLUDE)
6543 *f++ = 'e';
6544 #endif
6545 if (flags & SECTION_WRITE)
6546 *f++ = 'w';
6547 if (flags & SECTION_CODE)
6548 *f++ = 'x';
6549 if (flags & SECTION_SMALL)
6550 *f++ = 's';
6551 if (flags & SECTION_MERGE)
6552 *f++ = 'M';
6553 if (flags & SECTION_STRINGS)
6554 *f++ = 'S';
6555 if (flags & SECTION_TLS)
6556 *f++ = TLS_SECTION_ASM_FLAG;
6557 if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
6558 *f++ = 'G';
6559 #ifdef MACH_DEP_SECTION_ASM_FLAG
6560 if (flags & SECTION_MACH_DEP)
6561 *f++ = MACH_DEP_SECTION_ASM_FLAG;
6562 #endif
6563 *f = '\0';
6564 }
6565
6566 fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
6567
6568 /* default_section_type_flags (above) knows which flags need special
6569 handling here, and sets NOTYPE when none of these apply so that the
6570 assembler's logic for default types can apply to user-chosen
6571 section names. */
6572 if (!(flags & SECTION_NOTYPE))
6573 {
6574 const char *type;
6575 const char *format;
6576
6577 if (flags & SECTION_BSS)
6578 type = "nobits";
6579 else
6580 type = "progbits";
6581
6582 format = ",@%s";
6583 /* On platforms that use "@" as the assembly comment character,
6584 use "%" instead. */
6585 if (strcmp (ASM_COMMENT_START, "@") == 0)
6586 format = ",%%%s";
6587 fprintf (asm_out_file, format, type);
6588
6589 if (flags & SECTION_ENTSIZE)
6590 fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
6591 if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
6592 {
6593 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6594 fprintf (asm_out_file, ",%s,comdat", IDENTIFIER_POINTER (decl));
6595 else
6596 fprintf (asm_out_file, ",%s,comdat",
6597 IDENTIFIER_POINTER (DECL_COMDAT_GROUP (decl)));
6598 }
6599 }
6600
6601 putc ('\n', asm_out_file);
6602 }
6603
6604 void
6605 default_coff_asm_named_section (const char *name, unsigned int flags,
6606 tree decl ATTRIBUTE_UNUSED)
6607 {
6608 char flagchars[8], *f = flagchars;
6609
6610 if (flags & SECTION_WRITE)
6611 *f++ = 'w';
6612 if (flags & SECTION_CODE)
6613 *f++ = 'x';
6614 *f = '\0';
6615
6616 fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
6617 }
6618
6619 void
6620 default_pe_asm_named_section (const char *name, unsigned int flags,
6621 tree decl)
6622 {
6623 default_coff_asm_named_section (name, flags, decl);
6624
6625 if (flags & SECTION_LINKONCE)
6626 {
6627 /* Functions may have been compiled at various levels of
6628 optimization so we can't use `same_size' here.
6629 Instead, have the linker pick one. */
6630 fprintf (asm_out_file, "\t.linkonce %s\n",
6631 (flags & SECTION_CODE ? "discard" : "same_size"));
6632 }
6633 }
6634 \f
6635 /* The lame default section selector. */
6636
6637 section *
6638 default_select_section (tree decl, int reloc,
6639 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
6640 {
6641 if (DECL_P (decl))
6642 {
6643 if (decl_readonly_section (decl, reloc))
6644 return readonly_data_section;
6645 }
6646 else if (TREE_CODE (decl) == CONSTRUCTOR)
6647 {
6648 if (! ((flag_pic && reloc)
6649 || !TREE_READONLY (decl)
6650 || TREE_SIDE_EFFECTS (decl)
6651 || !TREE_CONSTANT (decl)))
6652 return readonly_data_section;
6653 }
6654 else if (TREE_CODE (decl) == STRING_CST)
6655 return readonly_data_section;
6656 else if (! (flag_pic && reloc))
6657 return readonly_data_section;
6658
6659 return data_section;
6660 }
6661
6662 enum section_category
6663 categorize_decl_for_section (const_tree decl, int reloc)
6664 {
6665 enum section_category ret;
6666
6667 if (TREE_CODE (decl) == FUNCTION_DECL)
6668 return SECCAT_TEXT;
6669 else if (TREE_CODE (decl) == STRING_CST)
6670 {
6671 if ((flag_sanitize & SANITIZE_ADDRESS)
6672 && asan_protect_global (CONST_CAST_TREE (decl)))
6673 /* or !flag_merge_constants */
6674 return SECCAT_RODATA;
6675 else
6676 return SECCAT_RODATA_MERGE_STR;
6677 }
6678 else if (VAR_P (decl))
6679 {
6680 tree d = CONST_CAST_TREE (decl);
6681 if (bss_initializer_p (decl))
6682 ret = SECCAT_BSS;
6683 else if (! TREE_READONLY (decl)
6684 || TREE_SIDE_EFFECTS (decl)
6685 || (DECL_INITIAL (decl)
6686 && ! TREE_CONSTANT (DECL_INITIAL (decl))))
6687 {
6688 /* Here the reloc_rw_mask is not testing whether the section should
6689 be read-only or not, but whether the dynamic link will have to
6690 do something. If so, we wish to segregate the data in order to
6691 minimize cache misses inside the dynamic linker. */
6692 if (reloc & targetm.asm_out.reloc_rw_mask ())
6693 ret = reloc == 1 ? SECCAT_DATA_REL_LOCAL : SECCAT_DATA_REL;
6694 else
6695 ret = SECCAT_DATA;
6696 }
6697 else if (reloc & targetm.asm_out.reloc_rw_mask ())
6698 ret = reloc == 1 ? SECCAT_DATA_REL_RO_LOCAL : SECCAT_DATA_REL_RO;
6699 else if (reloc || flag_merge_constants < 2
6700 || ((flag_sanitize & SANITIZE_ADDRESS)
6701 /* PR 81697: for architectures that use section anchors we
6702 need to ignore DECL_RTL_SET_P (decl) for string constants
6703 inside this asan_protect_global call because otherwise
6704 we'll wrongly put them into SECCAT_RODATA_MERGE_CONST
6705 section, set DECL_RTL (decl) later on and add DECL to
6706 protected globals via successive asan_protect_global
6707 calls. In this scenario we'll end up with wrong
6708 alignment of these strings at runtime and possible ASan
6709 false positives. */
6710 && asan_protect_global (d, use_object_blocks_p ()
6711 && use_blocks_for_decl_p (d))))
6712 /* C and C++ don't allow different variables to share the same
6713 location. -fmerge-all-constants allows even that (at the
6714 expense of not conforming). */
6715 ret = SECCAT_RODATA;
6716 else if (DECL_INITIAL (decl)
6717 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
6718 ret = SECCAT_RODATA_MERGE_STR_INIT;
6719 else
6720 ret = SECCAT_RODATA_MERGE_CONST;
6721 }
6722 else if (TREE_CODE (decl) == CONSTRUCTOR)
6723 {
6724 if ((reloc & targetm.asm_out.reloc_rw_mask ())
6725 || TREE_SIDE_EFFECTS (decl)
6726 || ! TREE_CONSTANT (decl))
6727 ret = SECCAT_DATA;
6728 else
6729 ret = SECCAT_RODATA;
6730 }
6731 else
6732 ret = SECCAT_RODATA;
6733
6734 /* There are no read-only thread-local sections. */
6735 if (VAR_P (decl) && DECL_THREAD_LOCAL_P (decl))
6736 {
6737 /* Note that this would be *just* SECCAT_BSS, except that there's
6738 no concept of a read-only thread-local-data section. */
6739 if (ret == SECCAT_BSS
6740 || DECL_INITIAL (decl) == NULL
6741 || (flag_zero_initialized_in_bss
6742 && initializer_zerop (DECL_INITIAL (decl))))
6743 ret = SECCAT_TBSS;
6744 else
6745 ret = SECCAT_TDATA;
6746 }
6747
6748 /* If the target uses small data sections, select it. */
6749 else if (targetm.in_small_data_p (decl))
6750 {
6751 if (ret == SECCAT_BSS)
6752 ret = SECCAT_SBSS;
6753 else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
6754 ret = SECCAT_SRODATA;
6755 else
6756 ret = SECCAT_SDATA;
6757 }
6758
6759 return ret;
6760 }
6761
6762 static bool
6763 decl_readonly_section_1 (enum section_category category)
6764 {
6765 switch (category)
6766 {
6767 case SECCAT_RODATA:
6768 case SECCAT_RODATA_MERGE_STR:
6769 case SECCAT_RODATA_MERGE_STR_INIT:
6770 case SECCAT_RODATA_MERGE_CONST:
6771 case SECCAT_SRODATA:
6772 return true;
6773 default:
6774 return false;
6775 }
6776 }
6777
6778 bool
6779 decl_readonly_section (const_tree decl, int reloc)
6780 {
6781 return decl_readonly_section_1 (categorize_decl_for_section (decl, reloc));
6782 }
6783
6784 /* Select a section based on the above categorization. */
6785
6786 section *
6787 default_elf_select_section (tree decl, int reloc,
6788 unsigned HOST_WIDE_INT align)
6789 {
6790 const char *sname;
6791
6792 switch (categorize_decl_for_section (decl, reloc))
6793 {
6794 case SECCAT_TEXT:
6795 /* We're not supposed to be called on FUNCTION_DECLs. */
6796 gcc_unreachable ();
6797 case SECCAT_RODATA:
6798 return readonly_data_section;
6799 case SECCAT_RODATA_MERGE_STR:
6800 return mergeable_string_section (decl, align, 0);
6801 case SECCAT_RODATA_MERGE_STR_INIT:
6802 return mergeable_string_section (DECL_INITIAL (decl), align, 0);
6803 case SECCAT_RODATA_MERGE_CONST:
6804 return mergeable_constant_section (DECL_MODE (decl), align, 0);
6805 case SECCAT_SRODATA:
6806 sname = ".sdata2";
6807 break;
6808 case SECCAT_DATA:
6809 return data_section;
6810 case SECCAT_DATA_REL:
6811 sname = ".data.rel";
6812 break;
6813 case SECCAT_DATA_REL_LOCAL:
6814 sname = ".data.rel.local";
6815 break;
6816 case SECCAT_DATA_REL_RO:
6817 sname = ".data.rel.ro";
6818 break;
6819 case SECCAT_DATA_REL_RO_LOCAL:
6820 sname = ".data.rel.ro.local";
6821 break;
6822 case SECCAT_SDATA:
6823 sname = ".sdata";
6824 break;
6825 case SECCAT_TDATA:
6826 sname = ".tdata";
6827 break;
6828 case SECCAT_BSS:
6829 if (DECL_P (decl)
6830 && lookup_attribute ("noinit", DECL_ATTRIBUTES (decl)) != NULL_TREE)
6831 {
6832 sname = ".noinit";
6833 break;
6834 }
6835
6836 if (bss_section)
6837 return bss_section;
6838 sname = ".bss";
6839 break;
6840 case SECCAT_SBSS:
6841 sname = ".sbss";
6842 break;
6843 case SECCAT_TBSS:
6844 sname = ".tbss";
6845 break;
6846 default:
6847 gcc_unreachable ();
6848 }
6849
6850 return get_named_section (decl, sname, reloc);
6851 }
6852
6853 /* Construct a unique section name based on the decl name and the
6854 categorization performed above. */
6855
6856 void
6857 default_unique_section (tree decl, int reloc)
6858 {
6859 /* We only need to use .gnu.linkonce if we don't have COMDAT groups. */
6860 bool one_only = DECL_ONE_ONLY (decl) && !HAVE_COMDAT_GROUP;
6861 const char *prefix, *name, *linkonce;
6862 char *string;
6863 tree id;
6864
6865 switch (categorize_decl_for_section (decl, reloc))
6866 {
6867 case SECCAT_TEXT:
6868 prefix = one_only ? ".t" : ".text";
6869 break;
6870 case SECCAT_RODATA:
6871 case SECCAT_RODATA_MERGE_STR:
6872 case SECCAT_RODATA_MERGE_STR_INIT:
6873 case SECCAT_RODATA_MERGE_CONST:
6874 prefix = one_only ? ".r" : ".rodata";
6875 break;
6876 case SECCAT_SRODATA:
6877 prefix = one_only ? ".s2" : ".sdata2";
6878 break;
6879 case SECCAT_DATA:
6880 prefix = one_only ? ".d" : ".data";
6881 break;
6882 case SECCAT_DATA_REL:
6883 prefix = one_only ? ".d.rel" : ".data.rel";
6884 break;
6885 case SECCAT_DATA_REL_LOCAL:
6886 prefix = one_only ? ".d.rel.local" : ".data.rel.local";
6887 break;
6888 case SECCAT_DATA_REL_RO:
6889 prefix = one_only ? ".d.rel.ro" : ".data.rel.ro";
6890 break;
6891 case SECCAT_DATA_REL_RO_LOCAL:
6892 prefix = one_only ? ".d.rel.ro.local" : ".data.rel.ro.local";
6893 break;
6894 case SECCAT_SDATA:
6895 prefix = one_only ? ".s" : ".sdata";
6896 break;
6897 case SECCAT_BSS:
6898 prefix = one_only ? ".b" : ".bss";
6899 break;
6900 case SECCAT_SBSS:
6901 prefix = one_only ? ".sb" : ".sbss";
6902 break;
6903 case SECCAT_TDATA:
6904 prefix = one_only ? ".td" : ".tdata";
6905 break;
6906 case SECCAT_TBSS:
6907 prefix = one_only ? ".tb" : ".tbss";
6908 break;
6909 default:
6910 gcc_unreachable ();
6911 }
6912
6913 id = DECL_ASSEMBLER_NAME (decl);
6914 ultimate_transparent_alias_target (&id);
6915 name = IDENTIFIER_POINTER (id);
6916 name = targetm.strip_name_encoding (name);
6917
6918 /* If we're using one_only, then there needs to be a .gnu.linkonce
6919 prefix to the section name. */
6920 linkonce = one_only ? ".gnu.linkonce" : "";
6921
6922 string = ACONCAT ((linkonce, prefix, ".", name, NULL));
6923
6924 set_decl_section_name (decl, string);
6925 }
6926
6927 /* Subroutine of compute_reloc_for_rtx for leaf rtxes. */
6928
6929 static int
6930 compute_reloc_for_rtx_1 (const_rtx x)
6931 {
6932 switch (GET_CODE (x))
6933 {
6934 case SYMBOL_REF:
6935 return SYMBOL_REF_LOCAL_P (x) ? 1 : 2;
6936 case LABEL_REF:
6937 return 1;
6938 default:
6939 return 0;
6940 }
6941 }
6942
6943 /* Like compute_reloc_for_constant, except for an RTX. The return value
6944 is a mask for which bit 1 indicates a global relocation, and bit 0
6945 indicates a local relocation. */
6946
6947 static int
6948 compute_reloc_for_rtx (const_rtx x)
6949 {
6950 switch (GET_CODE (x))
6951 {
6952 case SYMBOL_REF:
6953 case LABEL_REF:
6954 return compute_reloc_for_rtx_1 (x);
6955
6956 case CONST:
6957 {
6958 int reloc = 0;
6959 subrtx_iterator::array_type array;
6960 FOR_EACH_SUBRTX (iter, array, x, ALL)
6961 reloc |= compute_reloc_for_rtx_1 (*iter);
6962 return reloc;
6963 }
6964
6965 default:
6966 return 0;
6967 }
6968 }
6969
6970 section *
6971 default_select_rtx_section (machine_mode mode ATTRIBUTE_UNUSED,
6972 rtx x,
6973 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
6974 {
6975 if (compute_reloc_for_rtx (x) & targetm.asm_out.reloc_rw_mask ())
6976 return data_section;
6977 else
6978 return readonly_data_section;
6979 }
6980
6981 section *
6982 default_elf_select_rtx_section (machine_mode mode, rtx x,
6983 unsigned HOST_WIDE_INT align)
6984 {
6985 int reloc = compute_reloc_for_rtx (x);
6986
6987 /* ??? Handle small data here somehow. */
6988
6989 if (reloc & targetm.asm_out.reloc_rw_mask ())
6990 {
6991 if (reloc == 1)
6992 return get_named_section (NULL, ".data.rel.ro.local", 1);
6993 else
6994 return get_named_section (NULL, ".data.rel.ro", 3);
6995 }
6996
6997 return mergeable_constant_section (mode, align, 0);
6998 }
6999
7000 /* Set the generally applicable flags on the SYMBOL_REF for EXP. */
7001
7002 void
7003 default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
7004 {
7005 rtx symbol;
7006 int flags;
7007
7008 /* Careful not to prod global register variables. */
7009 if (!MEM_P (rtl))
7010 return;
7011 symbol = XEXP (rtl, 0);
7012 if (GET_CODE (symbol) != SYMBOL_REF)
7013 return;
7014
7015 flags = SYMBOL_REF_FLAGS (symbol) & SYMBOL_FLAG_HAS_BLOCK_INFO;
7016 if (TREE_CODE (decl) == FUNCTION_DECL)
7017 flags |= SYMBOL_FLAG_FUNCTION;
7018 if (targetm.binds_local_p (decl))
7019 flags |= SYMBOL_FLAG_LOCAL;
7020 if (VAR_P (decl) && DECL_THREAD_LOCAL_P (decl))
7021 flags |= DECL_TLS_MODEL (decl) << SYMBOL_FLAG_TLS_SHIFT;
7022 else if (targetm.in_small_data_p (decl))
7023 flags |= SYMBOL_FLAG_SMALL;
7024 /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names? Without
7025 being PUBLIC, the thing *must* be defined in this translation unit.
7026 Prevent this buglet from being propagated into rtl code as well. */
7027 if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
7028 flags |= SYMBOL_FLAG_EXTERNAL;
7029
7030 SYMBOL_REF_FLAGS (symbol) = flags;
7031 }
7032
7033 /* By default, we do nothing for encode_section_info, so we need not
7034 do anything but discard the '*' marker. */
7035
7036 const char *
7037 default_strip_name_encoding (const char *str)
7038 {
7039 return str + (*str == '*');
7040 }
7041
7042 #ifdef ASM_OUTPUT_DEF
7043 /* The default implementation of TARGET_ASM_OUTPUT_ANCHOR. Define the
7044 anchor relative to ".", the current section position. */
7045
7046 void
7047 default_asm_output_anchor (rtx symbol)
7048 {
7049 char buffer[100];
7050
7051 sprintf (buffer, "*. + " HOST_WIDE_INT_PRINT_DEC,
7052 SYMBOL_REF_BLOCK_OFFSET (symbol));
7053 ASM_OUTPUT_DEF (asm_out_file, XSTR (symbol, 0), buffer);
7054 }
7055 #endif
7056
7057 /* The default implementation of TARGET_USE_ANCHORS_FOR_SYMBOL_P. */
7058
7059 bool
7060 default_use_anchors_for_symbol_p (const_rtx symbol)
7061 {
7062 tree decl;
7063 section *sect = SYMBOL_REF_BLOCK (symbol)->sect;
7064
7065 /* This function should only be called with non-zero SYMBOL_REF_BLOCK,
7066 furthermore get_block_for_section should not create object blocks
7067 for mergeable sections. */
7068 gcc_checking_assert (sect && !(sect->common.flags & SECTION_MERGE));
7069
7070 /* Don't use anchors for small data sections. The small data register
7071 acts as an anchor for such sections. */
7072 if (sect->common.flags & SECTION_SMALL)
7073 return false;
7074
7075 decl = SYMBOL_REF_DECL (symbol);
7076 if (decl && DECL_P (decl))
7077 {
7078 /* Don't use section anchors for decls that might be defined or
7079 usurped by other modules. */
7080 if (TREE_PUBLIC (decl) && !decl_binds_to_current_def_p (decl))
7081 return false;
7082
7083 /* Don't use section anchors for decls that will be placed in a
7084 small data section. */
7085 /* ??? Ideally, this check would be redundant with the SECTION_SMALL
7086 one above. The problem is that we only use SECTION_SMALL for
7087 sections that should be marked as small in the section directive. */
7088 if (targetm.in_small_data_p (decl))
7089 return false;
7090
7091 /* Don't use section anchors for decls that won't fit inside a single
7092 anchor range to reduce the amount of instructions required to refer
7093 to the entire declaration. */
7094 if (DECL_SIZE_UNIT (decl) == NULL_TREE
7095 || !tree_fits_uhwi_p (DECL_SIZE_UNIT (decl))
7096 || (tree_to_uhwi (DECL_SIZE_UNIT (decl))
7097 >= (unsigned HOST_WIDE_INT) targetm.max_anchor_offset))
7098 return false;
7099
7100 }
7101 return true;
7102 }
7103
7104 /* Return true when RESOLUTION indicate that symbol will be bound to the
7105 definition provided by current .o file. */
7106
7107 static bool
7108 resolution_to_local_definition_p (enum ld_plugin_symbol_resolution resolution)
7109 {
7110 return (resolution == LDPR_PREVAILING_DEF
7111 || resolution == LDPR_PREVAILING_DEF_IRONLY_EXP
7112 || resolution == LDPR_PREVAILING_DEF_IRONLY);
7113 }
7114
7115 /* Return true when RESOLUTION indicate that symbol will be bound locally
7116 within current executable or DSO. */
7117
7118 static bool
7119 resolution_local_p (enum ld_plugin_symbol_resolution resolution)
7120 {
7121 return (resolution == LDPR_PREVAILING_DEF
7122 || resolution == LDPR_PREVAILING_DEF_IRONLY
7123 || resolution == LDPR_PREVAILING_DEF_IRONLY_EXP
7124 || resolution == LDPR_PREEMPTED_REG
7125 || resolution == LDPR_PREEMPTED_IR
7126 || resolution == LDPR_RESOLVED_IR
7127 || resolution == LDPR_RESOLVED_EXEC);
7128 }
7129
7130 /* COMMON_LOCAL_P is true means that the linker can guarantee that an
7131 uninitialized common symbol in the executable will still be defined
7132 (through COPY relocation) in the executable. */
7133
7134 bool
7135 default_binds_local_p_3 (const_tree exp, bool shlib, bool weak_dominate,
7136 bool extern_protected_data, bool common_local_p)
7137 {
7138 /* A non-decl is an entry in the constant pool. */
7139 if (!DECL_P (exp))
7140 return true;
7141
7142 /* Weakrefs may not bind locally, even though the weakref itself is always
7143 static and therefore local. Similarly, the resolver for ifunc functions
7144 might resolve to a non-local function.
7145 FIXME: We can resolve the weakref case more curefuly by looking at the
7146 weakref alias. */
7147 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp))
7148 || (TREE_CODE (exp) == FUNCTION_DECL
7149 && cgraph_node::get (exp)
7150 && cgraph_node::get (exp)->ifunc_resolver))
7151 return false;
7152
7153 /* Static variables are always local. */
7154 if (! TREE_PUBLIC (exp))
7155 return true;
7156
7157 /* With resolution file in hand, take look into resolutions.
7158 We can't just return true for resolved_locally symbols,
7159 because dynamic linking might overwrite symbols
7160 in shared libraries. */
7161 bool resolved_locally = false;
7162
7163 bool uninited_common = (DECL_COMMON (exp)
7164 && (DECL_INITIAL (exp) == NULL
7165 || (!in_lto_p
7166 && DECL_INITIAL (exp) == error_mark_node)));
7167
7168 /* A non-external variable is defined locally only if it isn't
7169 uninitialized COMMON variable or common_local_p is true. */
7170 bool defined_locally = (!DECL_EXTERNAL (exp)
7171 && (!uninited_common || common_local_p));
7172 if (symtab_node *node = symtab_node::get (exp))
7173 {
7174 if (node->in_other_partition)
7175 defined_locally = true;
7176 if (node->can_be_discarded_p ())
7177 ;
7178 else if (resolution_to_local_definition_p (node->resolution))
7179 defined_locally = resolved_locally = true;
7180 else if (resolution_local_p (node->resolution))
7181 resolved_locally = true;
7182 }
7183 if (defined_locally && weak_dominate && !shlib)
7184 resolved_locally = true;
7185
7186 /* Undefined weak symbols are never defined locally. */
7187 if (DECL_WEAK (exp) && !defined_locally)
7188 return false;
7189
7190 /* A symbol is local if the user has said explicitly that it will be,
7191 or if we have a definition for the symbol. We cannot infer visibility
7192 for undefined symbols. */
7193 if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT
7194 && (TREE_CODE (exp) == FUNCTION_DECL
7195 || !extern_protected_data
7196 || DECL_VISIBILITY (exp) != VISIBILITY_PROTECTED)
7197 && (DECL_VISIBILITY_SPECIFIED (exp) || defined_locally))
7198 return true;
7199
7200 /* If PIC, then assume that any global name can be overridden by
7201 symbols resolved from other modules. */
7202 if (shlib)
7203 return false;
7204
7205 /* Variables defined outside this object might not be local. */
7206 if (DECL_EXTERNAL (exp) && !resolved_locally)
7207 return false;
7208
7209 /* Non-dominant weak symbols are not defined locally. */
7210 if (DECL_WEAK (exp) && !resolved_locally)
7211 return false;
7212
7213 /* Uninitialized COMMON variable may be unified with symbols
7214 resolved from other modules. */
7215 if (uninited_common && !resolved_locally)
7216 return false;
7217
7218 /* Otherwise we're left with initialized (or non-common) global data
7219 which is of necessity defined locally. */
7220 return true;
7221 }
7222
7223 /* Assume ELF-ish defaults, since that's pretty much the most liberal
7224 wrt cross-module name binding. */
7225
7226 bool
7227 default_binds_local_p (const_tree exp)
7228 {
7229 return default_binds_local_p_3 (exp, flag_shlib != 0, true, false, false);
7230 }
7231
7232 /* Similar to default_binds_local_p, but common symbol may be local and
7233 extern protected data is non-local. */
7234
7235 bool
7236 default_binds_local_p_2 (const_tree exp)
7237 {
7238 return default_binds_local_p_3 (exp, flag_shlib != 0, true, true,
7239 !flag_pic);
7240 }
7241
7242 bool
7243 default_binds_local_p_1 (const_tree exp, int shlib)
7244 {
7245 return default_binds_local_p_3 (exp, shlib != 0, false, false, false);
7246 }
7247
7248 /* Return true when references to DECL must bind to current definition in
7249 final executable.
7250
7251 The condition is usually equivalent to whether the function binds to the
7252 current module (shared library or executable), that is to binds_local_p.
7253 We use this fact to avoid need for another target hook and implement
7254 the logic using binds_local_p and just special cases where
7255 decl_binds_to_current_def_p is stronger than binds_local_p. In particular
7256 the weak definitions (that can be overwritten at linktime by other
7257 definition from different object file) and when resolution info is available
7258 we simply use the knowledge passed to us by linker plugin. */
7259 bool
7260 decl_binds_to_current_def_p (const_tree decl)
7261 {
7262 gcc_assert (DECL_P (decl));
7263 if (!targetm.binds_local_p (decl))
7264 return false;
7265 if (!TREE_PUBLIC (decl))
7266 return true;
7267
7268 /* When resolution is available, just use it. */
7269 if (symtab_node *node = symtab_node::get (decl))
7270 {
7271 if (node->resolution != LDPR_UNKNOWN
7272 && !node->can_be_discarded_p ())
7273 return resolution_to_local_definition_p (node->resolution);
7274 }
7275
7276 /* Otherwise we have to assume the worst for DECL_WEAK (hidden weaks
7277 binds locally but still can be overwritten), DECL_COMMON (can be merged
7278 with a non-common definition somewhere in the same module) or
7279 DECL_EXTERNAL.
7280 This rely on fact that binds_local_p behave as decl_replaceable_p
7281 for all other declaration types. */
7282 if (DECL_WEAK (decl))
7283 return false;
7284 if (DECL_COMMON (decl)
7285 && (DECL_INITIAL (decl) == NULL
7286 || (!in_lto_p && DECL_INITIAL (decl) == error_mark_node)))
7287 return false;
7288 if (DECL_EXTERNAL (decl))
7289 return false;
7290 return true;
7291 }
7292
7293 /* A replaceable function or variable is one which may be replaced
7294 at link-time with an entirely different definition, provided that the
7295 replacement has the same type. For example, functions declared
7296 with __attribute__((weak)) on most systems are replaceable.
7297
7298 COMDAT functions are not replaceable, since all definitions of the
7299 function must be equivalent. It is important that COMDAT functions
7300 not be treated as replaceable so that use of C++ template
7301 instantiations is not penalized. */
7302
7303 bool
7304 decl_replaceable_p (tree decl)
7305 {
7306 gcc_assert (DECL_P (decl));
7307 if (!TREE_PUBLIC (decl) || DECL_COMDAT (decl))
7308 return false;
7309 if (!flag_semantic_interposition
7310 && !DECL_WEAK (decl))
7311 return false;
7312 return !decl_binds_to_current_def_p (decl);
7313 }
7314
7315 /* Default function to output code that will globalize a label. A
7316 target must define GLOBAL_ASM_OP or provide its own function to
7317 globalize a label. */
7318 #ifdef GLOBAL_ASM_OP
7319 void
7320 default_globalize_label (FILE * stream, const char *name)
7321 {
7322 fputs (GLOBAL_ASM_OP, stream);
7323 assemble_name (stream, name);
7324 putc ('\n', stream);
7325 }
7326 #endif /* GLOBAL_ASM_OP */
7327
7328 /* Default function to output code that will globalize a declaration. */
7329 void
7330 default_globalize_decl_name (FILE * stream, tree decl)
7331 {
7332 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
7333 targetm.asm_out.globalize_label (stream, name);
7334 }
7335
7336 /* Default function to output a label for unwind information. The
7337 default is to do nothing. A target that needs nonlocal labels for
7338 unwind information must provide its own function to do this. */
7339 void
7340 default_emit_unwind_label (FILE * stream ATTRIBUTE_UNUSED,
7341 tree decl ATTRIBUTE_UNUSED,
7342 int for_eh ATTRIBUTE_UNUSED,
7343 int empty ATTRIBUTE_UNUSED)
7344 {
7345 }
7346
7347 /* Default function to output a label to divide up the exception table.
7348 The default is to do nothing. A target that needs/wants to divide
7349 up the table must provide it's own function to do this. */
7350 void
7351 default_emit_except_table_label (FILE * stream ATTRIBUTE_UNUSED)
7352 {
7353 }
7354
7355 /* This is how to output an internal numbered label where PREFIX is
7356 the class of label and LABELNO is the number within the class. */
7357
7358 void
7359 default_generate_internal_label (char *buf, const char *prefix,
7360 unsigned long labelno)
7361 {
7362 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
7363 }
7364
7365 /* This is how to output an internal numbered label where PREFIX is
7366 the class of label and LABELNO is the number within the class. */
7367
7368 void
7369 default_internal_label (FILE *stream, const char *prefix,
7370 unsigned long labelno)
7371 {
7372 char *const buf = (char *) alloca (40 + strlen (prefix));
7373 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
7374 ASM_OUTPUT_INTERNAL_LABEL (stream, buf);
7375 }
7376
7377
7378 /* The default implementation of ASM_DECLARE_CONSTANT_NAME. */
7379
7380 void
7381 default_asm_declare_constant_name (FILE *file, const char *name,
7382 const_tree exp ATTRIBUTE_UNUSED,
7383 HOST_WIDE_INT size ATTRIBUTE_UNUSED)
7384 {
7385 assemble_label (file, name);
7386 }
7387
7388 /* This is the default behavior at the beginning of a file. It's
7389 controlled by two other target-hook toggles. */
7390 void
7391 default_file_start (void)
7392 {
7393 if (targetm.asm_file_start_app_off
7394 && !(flag_verbose_asm || flag_debug_asm || flag_dump_rtl_in_asm))
7395 fputs (ASM_APP_OFF, asm_out_file);
7396
7397 if (targetm.asm_file_start_file_directive)
7398 {
7399 /* LTO produced units have no meaningful main_input_filename. */
7400 if (in_lto_p)
7401 output_file_directive (asm_out_file, "<artificial>");
7402 else
7403 output_file_directive (asm_out_file, main_input_filename);
7404 }
7405 }
7406
7407 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
7408 which emits a special section directive used to indicate whether or
7409 not this object file needs an executable stack. This is primarily
7410 a GNU extension to ELF but could be used on other targets. */
7411
7412 int trampolines_created;
7413
7414 void
7415 file_end_indicate_exec_stack (void)
7416 {
7417 unsigned int flags = SECTION_DEBUG;
7418 if (trampolines_created)
7419 flags |= SECTION_CODE;
7420
7421 switch_to_section (get_section (".note.GNU-stack", flags, NULL));
7422 }
7423
7424 /* Emit a special section directive to indicate that this object file
7425 was compiled with -fsplit-stack. This is used to let the linker
7426 detect calls between split-stack code and non-split-stack code, so
7427 that it can modify the split-stack code to allocate a sufficiently
7428 large stack. We emit another special section if there are any
7429 functions in this file which have the no_split_stack attribute, to
7430 prevent the linker from warning about being unable to convert the
7431 functions if they call non-split-stack code. */
7432
7433 void
7434 file_end_indicate_split_stack (void)
7435 {
7436 if (flag_split_stack)
7437 {
7438 switch_to_section (get_section (".note.GNU-split-stack", SECTION_DEBUG,
7439 NULL));
7440 if (saw_no_split_stack)
7441 switch_to_section (get_section (".note.GNU-no-split-stack",
7442 SECTION_DEBUG, NULL));
7443 }
7444 }
7445
7446 /* Output DIRECTIVE (a C string) followed by a newline. This is used as
7447 a get_unnamed_section callback. */
7448
7449 void
7450 output_section_asm_op (const void *directive)
7451 {
7452 fprintf (asm_out_file, "%s\n", (const char *) directive);
7453 }
7454
7455 /* Emit assembly code to switch to section NEW_SECTION. Do nothing if
7456 the current section is NEW_SECTION. */
7457
7458 void
7459 switch_to_section (section *new_section)
7460 {
7461 if (in_section == new_section)
7462 return;
7463
7464 if (new_section->common.flags & SECTION_FORGET)
7465 in_section = NULL;
7466 else
7467 in_section = new_section;
7468
7469 switch (SECTION_STYLE (new_section))
7470 {
7471 case SECTION_NAMED:
7472 targetm.asm_out.named_section (new_section->named.name,
7473 new_section->named.common.flags,
7474 new_section->named.decl);
7475 break;
7476
7477 case SECTION_UNNAMED:
7478 new_section->unnamed.callback (new_section->unnamed.data);
7479 break;
7480
7481 case SECTION_NOSWITCH:
7482 gcc_unreachable ();
7483 break;
7484 }
7485
7486 new_section->common.flags |= SECTION_DECLARED;
7487 }
7488
7489 /* If block symbol SYMBOL has not yet been assigned an offset, place
7490 it at the end of its block. */
7491
7492 void
7493 place_block_symbol (rtx symbol)
7494 {
7495 unsigned HOST_WIDE_INT size, mask, offset;
7496 class constant_descriptor_rtx *desc;
7497 unsigned int alignment;
7498 struct object_block *block;
7499 tree decl;
7500
7501 gcc_assert (SYMBOL_REF_BLOCK (symbol));
7502 if (SYMBOL_REF_BLOCK_OFFSET (symbol) >= 0)
7503 return;
7504
7505 /* Work out the symbol's size and alignment. */
7506 if (CONSTANT_POOL_ADDRESS_P (symbol))
7507 {
7508 desc = SYMBOL_REF_CONSTANT (symbol);
7509 alignment = desc->align;
7510 size = GET_MODE_SIZE (desc->mode);
7511 }
7512 else if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
7513 {
7514 decl = SYMBOL_REF_DECL (symbol);
7515 gcc_checking_assert (DECL_IN_CONSTANT_POOL (decl));
7516 alignment = DECL_ALIGN (decl);
7517 size = get_constant_size (DECL_INITIAL (decl));
7518 if ((flag_sanitize & SANITIZE_ADDRESS)
7519 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
7520 && asan_protect_global (DECL_INITIAL (decl)))
7521 {
7522 size += asan_red_zone_size (size);
7523 alignment = MAX (alignment,
7524 ASAN_RED_ZONE_SIZE * BITS_PER_UNIT);
7525 }
7526 }
7527 else
7528 {
7529 struct symtab_node *snode;
7530 decl = SYMBOL_REF_DECL (symbol);
7531
7532 snode = symtab_node::get (decl);
7533 if (snode->alias)
7534 {
7535 rtx target = DECL_RTL (snode->ultimate_alias_target ()->decl);
7536
7537 gcc_assert (MEM_P (target)
7538 && GET_CODE (XEXP (target, 0)) == SYMBOL_REF
7539 && SYMBOL_REF_HAS_BLOCK_INFO_P (XEXP (target, 0)));
7540 target = XEXP (target, 0);
7541 place_block_symbol (target);
7542 SYMBOL_REF_BLOCK_OFFSET (symbol) = SYMBOL_REF_BLOCK_OFFSET (target);
7543 return;
7544 }
7545 alignment = get_variable_align (decl);
7546 size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
7547 if ((flag_sanitize & SANITIZE_ADDRESS)
7548 && asan_protect_global (decl))
7549 {
7550 size += asan_red_zone_size (size);
7551 alignment = MAX (alignment,
7552 ASAN_RED_ZONE_SIZE * BITS_PER_UNIT);
7553 }
7554 }
7555
7556 /* Calculate the object's offset from the start of the block. */
7557 block = SYMBOL_REF_BLOCK (symbol);
7558 mask = alignment / BITS_PER_UNIT - 1;
7559 offset = (block->size + mask) & ~mask;
7560 SYMBOL_REF_BLOCK_OFFSET (symbol) = offset;
7561
7562 /* Record the block's new alignment and size. */
7563 block->alignment = MAX (block->alignment, alignment);
7564 block->size = offset + size;
7565
7566 vec_safe_push (block->objects, symbol);
7567 }
7568
7569 /* Return the anchor that should be used to address byte offset OFFSET
7570 from the first object in BLOCK. MODEL is the TLS model used
7571 to access it. */
7572
7573 rtx
7574 get_section_anchor (struct object_block *block, HOST_WIDE_INT offset,
7575 enum tls_model model)
7576 {
7577 char label[100];
7578 unsigned int begin, middle, end;
7579 unsigned HOST_WIDE_INT min_offset, max_offset, range, bias, delta;
7580 rtx anchor;
7581
7582 /* Work out the anchor's offset. Use an offset of 0 for the first
7583 anchor so that we don't pessimize the case where we take the address
7584 of a variable at the beginning of the block. This is particularly
7585 useful when a block has only one variable assigned to it.
7586
7587 We try to place anchors RANGE bytes apart, so there can then be
7588 anchors at +/-RANGE, +/-2 * RANGE, and so on, up to the limits of
7589 a ptr_mode offset. With some target settings, the lowest such
7590 anchor might be out of range for the lowest ptr_mode offset;
7591 likewise the highest anchor for the highest offset. Use anchors
7592 at the extreme ends of the ptr_mode range in such cases.
7593
7594 All arithmetic uses unsigned integers in order to avoid
7595 signed overflow. */
7596 max_offset = (unsigned HOST_WIDE_INT) targetm.max_anchor_offset;
7597 min_offset = (unsigned HOST_WIDE_INT) targetm.min_anchor_offset;
7598 range = max_offset - min_offset + 1;
7599 if (range == 0)
7600 offset = 0;
7601 else
7602 {
7603 bias = HOST_WIDE_INT_1U << (GET_MODE_BITSIZE (ptr_mode) - 1);
7604 if (offset < 0)
7605 {
7606 delta = -(unsigned HOST_WIDE_INT) offset + max_offset;
7607 delta -= delta % range;
7608 if (delta > bias)
7609 delta = bias;
7610 offset = (HOST_WIDE_INT) (-delta);
7611 }
7612 else
7613 {
7614 delta = (unsigned HOST_WIDE_INT) offset - min_offset;
7615 delta -= delta % range;
7616 if (delta > bias - 1)
7617 delta = bias - 1;
7618 offset = (HOST_WIDE_INT) delta;
7619 }
7620 }
7621
7622 /* Do a binary search to see if there's already an anchor we can use.
7623 Set BEGIN to the new anchor's index if not. */
7624 begin = 0;
7625 end = vec_safe_length (block->anchors);
7626 while (begin != end)
7627 {
7628 middle = (end + begin) / 2;
7629 anchor = (*block->anchors)[middle];
7630 if (SYMBOL_REF_BLOCK_OFFSET (anchor) > offset)
7631 end = middle;
7632 else if (SYMBOL_REF_BLOCK_OFFSET (anchor) < offset)
7633 begin = middle + 1;
7634 else if (SYMBOL_REF_TLS_MODEL (anchor) > model)
7635 end = middle;
7636 else if (SYMBOL_REF_TLS_MODEL (anchor) < model)
7637 begin = middle + 1;
7638 else
7639 return anchor;
7640 }
7641
7642 /* Create a new anchor with a unique label. */
7643 ASM_GENERATE_INTERNAL_LABEL (label, "LANCHOR", anchor_labelno++);
7644 anchor = create_block_symbol (ggc_strdup (label), block, offset);
7645 SYMBOL_REF_FLAGS (anchor) |= SYMBOL_FLAG_LOCAL | SYMBOL_FLAG_ANCHOR;
7646 SYMBOL_REF_FLAGS (anchor) |= model << SYMBOL_FLAG_TLS_SHIFT;
7647
7648 /* Insert it at index BEGIN. */
7649 vec_safe_insert (block->anchors, begin, anchor);
7650 return anchor;
7651 }
7652
7653 /* Output the objects in BLOCK. */
7654
7655 static void
7656 output_object_block (struct object_block *block)
7657 {
7658 class constant_descriptor_rtx *desc;
7659 unsigned int i;
7660 HOST_WIDE_INT offset;
7661 tree decl;
7662 rtx symbol;
7663
7664 if (!block->objects)
7665 return;
7666
7667 /* Switch to the section and make sure that the first byte is
7668 suitably aligned. */
7669 /* Special case VTV comdat sections similar to assemble_variable. */
7670 if (SECTION_STYLE (block->sect) == SECTION_NAMED
7671 && block->sect->named.name
7672 && (strcmp (block->sect->named.name, ".vtable_map_vars") == 0))
7673 handle_vtv_comdat_section (block->sect, block->sect->named.decl);
7674 else
7675 switch_to_section (block->sect);
7676
7677 gcc_checking_assert (!(block->sect->common.flags & SECTION_MERGE));
7678 assemble_align (block->alignment);
7679
7680 /* Define the values of all anchors relative to the current section
7681 position. */
7682 FOR_EACH_VEC_SAFE_ELT (block->anchors, i, symbol)
7683 targetm.asm_out.output_anchor (symbol);
7684
7685 /* Output the objects themselves. */
7686 offset = 0;
7687 FOR_EACH_VEC_ELT (*block->objects, i, symbol)
7688 {
7689 /* Move to the object's offset, padding with zeros if necessary. */
7690 assemble_zeros (SYMBOL_REF_BLOCK_OFFSET (symbol) - offset);
7691 offset = SYMBOL_REF_BLOCK_OFFSET (symbol);
7692 if (CONSTANT_POOL_ADDRESS_P (symbol))
7693 {
7694 desc = SYMBOL_REF_CONSTANT (symbol);
7695 /* Pass 1 for align as we have already laid out everything in the block.
7696 So aligning shouldn't be necessary. */
7697 output_constant_pool_1 (desc, 1);
7698 offset += GET_MODE_SIZE (desc->mode);
7699 }
7700 else if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
7701 {
7702 HOST_WIDE_INT size;
7703 decl = SYMBOL_REF_DECL (symbol);
7704 assemble_constant_contents (DECL_INITIAL (decl), XSTR (symbol, 0),
7705 DECL_ALIGN (decl), false);
7706
7707 size = get_constant_size (DECL_INITIAL (decl));
7708 offset += size;
7709 if ((flag_sanitize & SANITIZE_ADDRESS)
7710 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
7711 && asan_protect_global (DECL_INITIAL (decl)))
7712 {
7713 size = asan_red_zone_size (size);
7714 assemble_zeros (size);
7715 offset += size;
7716 }
7717 }
7718 else
7719 {
7720 HOST_WIDE_INT size;
7721 decl = SYMBOL_REF_DECL (symbol);
7722 assemble_variable_contents (decl, XSTR (symbol, 0), false, false);
7723 size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
7724 offset += size;
7725 if ((flag_sanitize & SANITIZE_ADDRESS)
7726 && asan_protect_global (decl))
7727 {
7728 size = asan_red_zone_size (size);
7729 assemble_zeros (size);
7730 offset += size;
7731 }
7732 }
7733 }
7734 }
7735
7736 /* A callback for qsort to compare object_blocks. */
7737
7738 static int
7739 output_object_block_compare (const void *x, const void *y)
7740 {
7741 object_block *p1 = *(object_block * const*)x;
7742 object_block *p2 = *(object_block * const*)y;
7743
7744 if (p1->sect->common.flags & SECTION_NAMED
7745 && !(p2->sect->common.flags & SECTION_NAMED))
7746 return 1;
7747
7748 if (!(p1->sect->common.flags & SECTION_NAMED)
7749 && p2->sect->common.flags & SECTION_NAMED)
7750 return -1;
7751
7752 if (p1->sect->common.flags & SECTION_NAMED
7753 && p2->sect->common.flags & SECTION_NAMED)
7754 return strcmp (p1->sect->named.name, p2->sect->named.name);
7755
7756 unsigned f1 = p1->sect->common.flags;
7757 unsigned f2 = p2->sect->common.flags;
7758 if (f1 == f2)
7759 return 0;
7760 return f1 < f2 ? -1 : 1;
7761 }
7762
7763 /* Output the definitions of all object_blocks. */
7764
7765 void
7766 output_object_blocks (void)
7767 {
7768 vec<object_block *, va_heap> v;
7769 v.create (object_block_htab->elements ());
7770 object_block *obj;
7771 hash_table<object_block_hasher>::iterator hi;
7772
7773 FOR_EACH_HASH_TABLE_ELEMENT (*object_block_htab, obj, object_block *, hi)
7774 v.quick_push (obj);
7775
7776 /* Sort them in order to output them in a deterministic manner,
7777 otherwise we may get .rodata sections in different orders with
7778 and without -g. */
7779 v.qsort (output_object_block_compare);
7780 unsigned i;
7781 FOR_EACH_VEC_ELT (v, i, obj)
7782 output_object_block (obj);
7783
7784 v.release ();
7785 }
7786
7787 /* This function provides a possible implementation of the
7788 TARGET_ASM_RECORD_GCC_SWITCHES target hook for ELF targets. When triggered
7789 by -frecord-gcc-switches it creates a new mergeable, string section in the
7790 assembler output file called TARGET_ASM_RECORD_GCC_SWITCHES_SECTION which
7791 contains the switches in ASCII format.
7792
7793 FIXME: This code does not correctly handle double quote characters
7794 that appear inside strings, (it strips them rather than preserving them).
7795 FIXME: ASM_OUTPUT_ASCII, as defined in config/elfos.h will not emit NUL
7796 characters - instead it treats them as sub-string separators. Since
7797 we want to emit NUL strings terminators into the object file we have to use
7798 ASM_OUTPUT_SKIP. */
7799
7800 int
7801 elf_record_gcc_switches (print_switch_type type, const char * name)
7802 {
7803 switch (type)
7804 {
7805 case SWITCH_TYPE_PASSED:
7806 ASM_OUTPUT_ASCII (asm_out_file, name, strlen (name));
7807 ASM_OUTPUT_SKIP (asm_out_file, HOST_WIDE_INT_1U);
7808 break;
7809
7810 case SWITCH_TYPE_DESCRIPTIVE:
7811 if (name == NULL)
7812 {
7813 /* Distinguish between invocations where name is NULL. */
7814 static bool started = false;
7815
7816 if (!started)
7817 {
7818 section * sec;
7819
7820 sec = get_section (targetm.asm_out.record_gcc_switches_section,
7821 SECTION_DEBUG
7822 | SECTION_MERGE
7823 | SECTION_STRINGS
7824 | (SECTION_ENTSIZE & 1),
7825 NULL);
7826 switch_to_section (sec);
7827 started = true;
7828 }
7829 }
7830
7831 default:
7832 break;
7833 }
7834
7835 /* The return value is currently ignored by the caller, but must be 0.
7836 For -fverbose-asm the return value would be the number of characters
7837 emitted into the assembler file. */
7838 return 0;
7839 }
7840
7841 /* Emit text to declare externally defined symbols. It is needed to
7842 properly support non-default visibility. */
7843 void
7844 default_elf_asm_output_external (FILE *file ATTRIBUTE_UNUSED,
7845 tree decl,
7846 const char *name ATTRIBUTE_UNUSED)
7847 {
7848 /* We output the name if and only if TREE_SYMBOL_REFERENCED is
7849 set in order to avoid putting out names that are never really
7850 used. Always output visibility specified in the source. */
7851 if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
7852 && (DECL_VISIBILITY_SPECIFIED (decl)
7853 || targetm.binds_local_p (decl)))
7854 maybe_assemble_visibility (decl);
7855 }
7856
7857 /* The default hook for TARGET_ASM_OUTPUT_SOURCE_FILENAME. */
7858
7859 void
7860 default_asm_output_source_filename (FILE *file, const char *name)
7861 {
7862 #ifdef ASM_OUTPUT_SOURCE_FILENAME
7863 ASM_OUTPUT_SOURCE_FILENAME (file, name);
7864 #else
7865 fprintf (file, "\t.file\t");
7866 output_quoted_string (file, name);
7867 putc ('\n', file);
7868 #endif
7869 }
7870
7871 /* Output a file name in the form wanted by System V. */
7872
7873 void
7874 output_file_directive (FILE *asm_file, const char *input_name)
7875 {
7876 int len;
7877 const char *na;
7878
7879 if (input_name == NULL)
7880 input_name = "<stdin>";
7881 else
7882 input_name = remap_debug_filename (input_name);
7883
7884 len = strlen (input_name);
7885 na = input_name + len;
7886
7887 /* NA gets INPUT_NAME sans directory names. */
7888 while (na > input_name)
7889 {
7890 if (IS_DIR_SEPARATOR (na[-1]))
7891 break;
7892 na--;
7893 }
7894
7895 targetm.asm_out.output_source_filename (asm_file, na);
7896 }
7897
7898 /* Create a DEBUG_EXPR_DECL / DEBUG_EXPR pair from RTL expression
7899 EXP. */
7900 rtx
7901 make_debug_expr_from_rtl (const_rtx exp)
7902 {
7903 tree ddecl = make_node (DEBUG_EXPR_DECL), type;
7904 machine_mode mode = GET_MODE (exp);
7905 rtx dval;
7906
7907 DECL_ARTIFICIAL (ddecl) = 1;
7908 if (REG_P (exp) && REG_EXPR (exp))
7909 type = TREE_TYPE (REG_EXPR (exp));
7910 else if (MEM_P (exp) && MEM_EXPR (exp))
7911 type = TREE_TYPE (MEM_EXPR (exp));
7912 else
7913 type = NULL_TREE;
7914 if (type && TYPE_MODE (type) == mode)
7915 TREE_TYPE (ddecl) = type;
7916 else
7917 TREE_TYPE (ddecl) = lang_hooks.types.type_for_mode (mode, 1);
7918 SET_DECL_MODE (ddecl, mode);
7919 dval = gen_rtx_DEBUG_EXPR (mode);
7920 DEBUG_EXPR_TREE_DECL (dval) = ddecl;
7921 SET_DECL_RTL (ddecl, dval);
7922 return dval;
7923 }
7924
7925 #ifdef ELF_ASCII_ESCAPES
7926 /* Default ASM_OUTPUT_LIMITED_STRING for ELF targets. */
7927
7928 void
7929 default_elf_asm_output_limited_string (FILE *f, const char *s)
7930 {
7931 int escape;
7932 unsigned char c;
7933
7934 fputs (STRING_ASM_OP, f);
7935 putc ('"', f);
7936 while (*s != '\0')
7937 {
7938 c = *s;
7939 escape = ELF_ASCII_ESCAPES[c];
7940 switch (escape)
7941 {
7942 case 0:
7943 putc (c, f);
7944 break;
7945 case 1:
7946 putc ('\\', f);
7947 putc ('0'+((c>>6)&7), f);
7948 putc ('0'+((c>>3)&7), f);
7949 putc ('0'+(c&7), f);
7950 break;
7951 default:
7952 putc ('\\', f);
7953 putc (escape, f);
7954 break;
7955 }
7956 s++;
7957 }
7958 putc ('\"', f);
7959 putc ('\n', f);
7960 }
7961
7962 /* Default ASM_OUTPUT_ASCII for ELF targets. */
7963
7964 void
7965 default_elf_asm_output_ascii (FILE *f, const char *s, unsigned int len)
7966 {
7967 const char *limit = s + len;
7968 const char *last_null = NULL;
7969 unsigned bytes_in_chunk = 0;
7970 unsigned char c;
7971 int escape;
7972
7973 for (; s < limit; s++)
7974 {
7975 const char *p;
7976
7977 if (bytes_in_chunk >= 60)
7978 {
7979 putc ('\"', f);
7980 putc ('\n', f);
7981 bytes_in_chunk = 0;
7982 }
7983
7984 if (s > last_null)
7985 {
7986 for (p = s; p < limit && *p != '\0'; p++)
7987 continue;
7988 last_null = p;
7989 }
7990 else
7991 p = last_null;
7992
7993 if (p < limit && (p - s) <= (long) ELF_STRING_LIMIT)
7994 {
7995 if (bytes_in_chunk > 0)
7996 {
7997 putc ('\"', f);
7998 putc ('\n', f);
7999 bytes_in_chunk = 0;
8000 }
8001
8002 default_elf_asm_output_limited_string (f, s);
8003 s = p;
8004 }
8005 else
8006 {
8007 if (bytes_in_chunk == 0)
8008 fputs (ASCII_DATA_ASM_OP "\"", f);
8009
8010 c = *s;
8011 escape = ELF_ASCII_ESCAPES[c];
8012 switch (escape)
8013 {
8014 case 0:
8015 putc (c, f);
8016 bytes_in_chunk++;
8017 break;
8018 case 1:
8019 putc ('\\', f);
8020 putc ('0'+((c>>6)&7), f);
8021 putc ('0'+((c>>3)&7), f);
8022 putc ('0'+(c&7), f);
8023 bytes_in_chunk += 4;
8024 break;
8025 default:
8026 putc ('\\', f);
8027 putc (escape, f);
8028 bytes_in_chunk += 2;
8029 break;
8030 }
8031
8032 }
8033 }
8034
8035 if (bytes_in_chunk > 0)
8036 {
8037 putc ('\"', f);
8038 putc ('\n', f);
8039 }
8040 }
8041 #endif
8042
8043 static GTY(()) section *elf_init_array_section;
8044 static GTY(()) section *elf_fini_array_section;
8045
8046 static section *
8047 get_elf_initfini_array_priority_section (int priority,
8048 bool constructor_p)
8049 {
8050 section *sec;
8051 if (priority != DEFAULT_INIT_PRIORITY)
8052 {
8053 char buf[18];
8054 sprintf (buf, "%s.%.5u",
8055 constructor_p ? ".init_array" : ".fini_array",
8056 priority);
8057 sec = get_section (buf, SECTION_WRITE | SECTION_NOTYPE, NULL_TREE);
8058 }
8059 else
8060 {
8061 if (constructor_p)
8062 {
8063 if (elf_init_array_section == NULL)
8064 elf_init_array_section
8065 = get_section (".init_array",
8066 SECTION_WRITE | SECTION_NOTYPE, NULL_TREE);
8067 sec = elf_init_array_section;
8068 }
8069 else
8070 {
8071 if (elf_fini_array_section == NULL)
8072 elf_fini_array_section
8073 = get_section (".fini_array",
8074 SECTION_WRITE | SECTION_NOTYPE, NULL_TREE);
8075 sec = elf_fini_array_section;
8076 }
8077 }
8078 return sec;
8079 }
8080
8081 /* Use .init_array section for constructors. */
8082
8083 void
8084 default_elf_init_array_asm_out_constructor (rtx symbol, int priority)
8085 {
8086 section *sec = get_elf_initfini_array_priority_section (priority,
8087 true);
8088 assemble_addr_to_section (symbol, sec);
8089 }
8090
8091 /* Use .fini_array section for destructors. */
8092
8093 void
8094 default_elf_fini_array_asm_out_destructor (rtx symbol, int priority)
8095 {
8096 section *sec = get_elf_initfini_array_priority_section (priority,
8097 false);
8098 assemble_addr_to_section (symbol, sec);
8099 }
8100
8101 /* Default TARGET_ASM_OUTPUT_IDENT hook.
8102
8103 This is a bit of a cheat. The real default is a no-op, but this
8104 hook is the default for all targets with a .ident directive. */
8105
8106 void
8107 default_asm_output_ident_directive (const char *ident_str)
8108 {
8109 const char *ident_asm_op = "\t.ident\t";
8110
8111 /* If we are still in the front end, do not write out the string
8112 to asm_out_file. Instead, add a fake top-level asm statement.
8113 This allows the front ends to use this hook without actually
8114 writing to asm_out_file, to handle #ident or Pragma Ident. */
8115 if (symtab->state == PARSING)
8116 {
8117 char *buf = ACONCAT ((ident_asm_op, "\"", ident_str, "\"\n", NULL));
8118 symtab->finalize_toplevel_asm (build_string (strlen (buf), buf));
8119 }
8120 else
8121 fprintf (asm_out_file, "%s\"%s\"\n", ident_asm_op, ident_str);
8122 }
8123
8124
8125 /* This function ensures that vtable_map variables are not only
8126 in the comdat section, but that each variable has its own unique
8127 comdat name. Without this the variables end up in the same section
8128 with a single comdat name.
8129
8130 FIXME: resolve_unique_section needs to deal better with
8131 decls with both DECL_SECTION_NAME and DECL_ONE_ONLY. Once
8132 that is fixed, this if-else statement can be replaced with
8133 a single call to "switch_to_section (sect)". */
8134
8135 static void
8136 handle_vtv_comdat_section (section *sect, const_tree decl ATTRIBUTE_UNUSED)
8137 {
8138 #if defined (OBJECT_FORMAT_ELF)
8139 targetm.asm_out.named_section (sect->named.name,
8140 sect->named.common.flags
8141 | SECTION_LINKONCE,
8142 DECL_NAME (decl));
8143 in_section = sect;
8144 #else
8145 /* Neither OBJECT_FORMAT_PE, nor OBJECT_FORMAT_COFF is set here.
8146 Therefore the following check is used.
8147 In case a the target is PE or COFF a comdat group section
8148 is created, e.g. .vtable_map_vars$foo. The linker places
8149 everything in .vtable_map_vars at the end.
8150
8151 A fix could be made in
8152 gcc/config/i386/winnt.c: i386_pe_unique_section. */
8153 if (TARGET_PECOFF)
8154 {
8155 char *name;
8156
8157 if (TREE_CODE (DECL_NAME (decl)) == IDENTIFIER_NODE)
8158 name = ACONCAT ((sect->named.name, "$",
8159 IDENTIFIER_POINTER (DECL_NAME (decl)), NULL));
8160 else
8161 name = ACONCAT ((sect->named.name, "$",
8162 IDENTIFIER_POINTER (DECL_COMDAT_GROUP (DECL_NAME (decl))),
8163 NULL));
8164
8165 targetm.asm_out.named_section (name,
8166 sect->named.common.flags
8167 | SECTION_LINKONCE,
8168 DECL_NAME (decl));
8169 in_section = sect;
8170 }
8171 else
8172 switch_to_section (sect);
8173 #endif
8174 }
8175
8176 #include "gt-varasm.h"