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