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