OSDN Git Service

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