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