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