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