OSDN Git Service

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