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