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