OSDN Git Service

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