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