OSDN Git Service

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