OSDN Git Service

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