OSDN Git Service

f4607b49eea209f519da436ac7aba58256ae531f
[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 (rtl.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 (cfun->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       cfun->unlikely_text_section_name = ggc_strdup (buffer);
627     }
628   else
629     cfun->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 (!cfun->unlikely_text_section_name)
640         initialize_cold_section_name ();
641
642       return get_named_section (NULL, cfun->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 = cfun->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   cfun->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       cfun->hot_section_label = ggc_strdup (tmp_label);
1597       ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LCOLDB", const_labelno);
1598       cfun->cold_section_label = ggc_strdup (tmp_label);
1599       ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LHOTE", const_labelno);
1600       cfun->hot_section_end_label = ggc_strdup (tmp_label);
1601       ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LCOLDE", const_labelno);
1602       cfun->cold_section_end_label = ggc_strdup (tmp_label);
1603       const_labelno++;
1604     }
1605   else
1606     {
1607       cfun->hot_section_label = NULL;
1608       cfun->cold_section_label = NULL;
1609       cfun->hot_section_end_label = NULL;
1610       cfun->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, cfun->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 (!current_function_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, cfun->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 (cfun->unlikely_text_section_name
1656           && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
1657                      cfun->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, cfun->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, cfun->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, cfun->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     case NON_LVALUE_EXPR:
2819       return const_hash_1 (TREE_OPERAND (exp, 0)) * 7 + 2;
2820
2821     default:
2822       /* A language specific constant. Just hash the code.  */
2823       return code;
2824     }
2825
2826   /* Compute hashing function.  */
2827   hi = len;
2828   for (i = 0; i < len; i++)
2829     hi = ((hi * 613) + (unsigned) (p[i]));
2830
2831   return hi;
2832 }
2833
2834 /* Wrapper of compare_constant, for the htab interface.  */
2835 static int
2836 const_desc_eq (const void *p1, const void *p2)
2837 {
2838   const struct constant_descriptor_tree *c1 = p1;
2839   const struct constant_descriptor_tree *c2 = p2;
2840   if (c1->hash != c2->hash)
2841     return 0;
2842   return compare_constant (c1->value, c2->value);
2843 }
2844
2845 /* Compare t1 and t2, and return 1 only if they are known to result in
2846    the same bit pattern on output.  */
2847
2848 static int
2849 compare_constant (const tree t1, const tree t2)
2850 {
2851   enum tree_code typecode;
2852
2853   if (t1 == NULL_TREE)
2854     return t2 == NULL_TREE;
2855   if (t2 == NULL_TREE)
2856     return 0;
2857
2858   if (TREE_CODE (t1) != TREE_CODE (t2))
2859     return 0;
2860
2861   switch (TREE_CODE (t1))
2862     {
2863     case INTEGER_CST:
2864       /* Integer constants are the same only if the same width of type.  */
2865       if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2866         return 0;
2867       if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
2868         return 0;
2869       return tree_int_cst_equal (t1, t2);
2870
2871     case REAL_CST:
2872       /* Real constants are the same only if the same width of type.  */
2873       if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2874         return 0;
2875
2876       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2877
2878     case FIXED_CST:
2879       /* Fixed constants are the same only if the same width of type.  */
2880       if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2881         return 0;
2882
2883       return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
2884
2885     case STRING_CST:
2886       if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
2887         return 0;
2888
2889       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2890               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2891                          TREE_STRING_LENGTH (t1)));
2892
2893     case COMPLEX_CST:
2894       return (compare_constant (TREE_REALPART (t1), TREE_REALPART (t2))
2895               && compare_constant (TREE_IMAGPART (t1), TREE_IMAGPART (t2)));
2896
2897     case CONSTRUCTOR:
2898       {
2899         VEC(constructor_elt, gc) *v1, *v2;
2900         unsigned HOST_WIDE_INT idx;
2901
2902         typecode = TREE_CODE (TREE_TYPE (t1));
2903         if (typecode != TREE_CODE (TREE_TYPE (t2)))
2904           return 0;
2905
2906         if (typecode == ARRAY_TYPE)
2907           {
2908             HOST_WIDE_INT size_1 = int_size_in_bytes (TREE_TYPE (t1));
2909             /* For arrays, check that the sizes all match.  */
2910             if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
2911                 || size_1 == -1
2912                 || size_1 != int_size_in_bytes (TREE_TYPE (t2)))
2913               return 0;
2914           }
2915         else
2916           {
2917             /* For record and union constructors, require exact type
2918                equality.  */
2919             if (TREE_TYPE (t1) != TREE_TYPE (t2))
2920               return 0;
2921           }
2922
2923         v1 = CONSTRUCTOR_ELTS (t1);
2924         v2 = CONSTRUCTOR_ELTS (t2);
2925         if (VEC_length (constructor_elt, v1)
2926             != VEC_length (constructor_elt, v2))
2927             return 0;
2928
2929         for (idx = 0; idx < VEC_length (constructor_elt, v1); ++idx)
2930           {
2931             constructor_elt *c1 = VEC_index (constructor_elt, v1, idx);
2932             constructor_elt *c2 = VEC_index (constructor_elt, v2, idx);
2933
2934             /* Check that each value is the same...  */
2935             if (!compare_constant (c1->value, c2->value))
2936               return 0;
2937             /* ... and that they apply to the same fields!  */
2938             if (typecode == ARRAY_TYPE)
2939               {
2940                 if (!compare_constant (c1->index, c2->index))
2941                   return 0;
2942               }
2943             else
2944               {
2945                 if (c1->index != c2->index)
2946                   return 0;
2947               }
2948           }
2949
2950         return 1;
2951       }
2952
2953     case ADDR_EXPR:
2954     case FDESC_EXPR:
2955       {
2956         struct addr_const value1, value2;
2957
2958         decode_addr_const (t1, &value1);
2959         decode_addr_const (t2, &value2);
2960         return (value1.offset == value2.offset
2961                 && strcmp (XSTR (value1.base, 0), XSTR (value2.base, 0)) == 0);
2962       }
2963
2964     case PLUS_EXPR:
2965     case POINTER_PLUS_EXPR:
2966     case MINUS_EXPR:
2967     case RANGE_EXPR:
2968       return (compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
2969               && compare_constant(TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
2970
2971     case NOP_EXPR:
2972     case CONVERT_EXPR:
2973     case NON_LVALUE_EXPR:
2974     case VIEW_CONVERT_EXPR:
2975       return compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2976
2977     default:
2978       return 0;
2979     }
2980
2981   gcc_unreachable ();
2982 }
2983 \f
2984 /* Make a copy of the whole tree structure for a constant.  This
2985    handles the same types of nodes that compare_constant handles.  */
2986
2987 static tree
2988 copy_constant (tree exp)
2989 {
2990   switch (TREE_CODE (exp))
2991     {
2992     case ADDR_EXPR:
2993       /* For ADDR_EXPR, we do not want to copy the decl whose address
2994          is requested.  We do want to copy constants though.  */
2995       if (CONSTANT_CLASS_P (TREE_OPERAND (exp, 0)))
2996         return build1 (TREE_CODE (exp), TREE_TYPE (exp),
2997                        copy_constant (TREE_OPERAND (exp, 0)));
2998       else
2999         return copy_node (exp);
3000
3001     case INTEGER_CST:
3002     case REAL_CST:
3003     case FIXED_CST:
3004     case STRING_CST:
3005       return copy_node (exp);
3006
3007     case COMPLEX_CST:
3008       return build_complex (TREE_TYPE (exp),
3009                             copy_constant (TREE_REALPART (exp)),
3010                             copy_constant (TREE_IMAGPART (exp)));
3011
3012     case PLUS_EXPR:
3013     case POINTER_PLUS_EXPR:
3014     case MINUS_EXPR:
3015       return build2 (TREE_CODE (exp), TREE_TYPE (exp),
3016                      copy_constant (TREE_OPERAND (exp, 0)),
3017                      copy_constant (TREE_OPERAND (exp, 1)));
3018
3019     case NOP_EXPR:
3020     case CONVERT_EXPR:
3021     case NON_LVALUE_EXPR:
3022     case VIEW_CONVERT_EXPR:
3023       return build1 (TREE_CODE (exp), TREE_TYPE (exp),
3024                      copy_constant (TREE_OPERAND (exp, 0)));
3025
3026     case CONSTRUCTOR:
3027       {
3028         tree copy = copy_node (exp);
3029         VEC(constructor_elt, gc) *v;
3030         unsigned HOST_WIDE_INT idx;
3031         tree purpose, value;
3032
3033         v = VEC_alloc(constructor_elt, gc, VEC_length(constructor_elt,
3034                                                       CONSTRUCTOR_ELTS (exp)));
3035         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (exp), idx, purpose, value)
3036           {
3037             constructor_elt *ce = VEC_quick_push (constructor_elt, v, NULL);
3038             ce->index = purpose;
3039             ce->value = copy_constant (value);
3040           }
3041         CONSTRUCTOR_ELTS (copy) = v;
3042         return copy;
3043       }
3044
3045     default:
3046       gcc_unreachable ();
3047     }
3048 }
3049 \f
3050 /* Return the alignment of constant EXP in bits.  */
3051
3052 static unsigned int
3053 get_constant_alignment (tree exp)
3054 {
3055   unsigned int align;
3056
3057   align = TYPE_ALIGN (TREE_TYPE (exp));
3058 #ifdef CONSTANT_ALIGNMENT
3059   align = CONSTANT_ALIGNMENT (exp, align);
3060 #endif
3061   return align;
3062 }
3063
3064 /* Return the section into which constant EXP should be placed.  */
3065
3066 static section *
3067 get_constant_section (tree exp)
3068 {
3069   if (IN_NAMED_SECTION (exp))
3070     return get_named_section (exp, NULL, compute_reloc_for_constant (exp));
3071   else
3072     return targetm.asm_out.select_section (exp,
3073                                            compute_reloc_for_constant (exp),
3074                                            get_constant_alignment (exp));
3075 }
3076
3077 /* Return the size of constant EXP in bytes.  */
3078
3079 static HOST_WIDE_INT
3080 get_constant_size (tree exp)
3081 {
3082   HOST_WIDE_INT size;
3083
3084   size = int_size_in_bytes (TREE_TYPE (exp));
3085   if (TREE_CODE (exp) == STRING_CST)
3086     size = MAX (TREE_STRING_LENGTH (exp), size);
3087   return size;
3088 }
3089
3090 /* Subroutine of output_constant_def:
3091    No constant equal to EXP is known to have been output.
3092    Make a constant descriptor to enter EXP in the hash table.
3093    Assign the label number and construct RTL to refer to the
3094    constant's location in memory.
3095    Caller is responsible for updating the hash table.  */
3096
3097 static struct constant_descriptor_tree *
3098 build_constant_desc (tree exp)
3099 {
3100   rtx symbol;
3101   rtx rtl;
3102   char label[256];
3103   int labelno;
3104   struct constant_descriptor_tree *desc;
3105
3106   desc = ggc_alloc (sizeof (*desc));
3107   desc->value = copy_constant (exp);
3108
3109   /* Propagate marked-ness to copied constant.  */
3110   if (flag_mudflap && mf_marked_p (exp))
3111     mf_mark (desc->value);
3112
3113   /* Create a string containing the label name, in LABEL.  */
3114   labelno = const_labelno++;
3115   ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno);
3116
3117   /* We have a symbol name; construct the SYMBOL_REF and the MEM.  */
3118   if (use_object_blocks_p ())
3119     {
3120       section *sect = get_constant_section (exp);
3121       symbol = create_block_symbol (ggc_strdup (label),
3122                                     get_block_for_section (sect), -1);
3123     }
3124   else
3125     symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
3126   SYMBOL_REF_FLAGS (symbol) |= SYMBOL_FLAG_LOCAL;
3127   SET_SYMBOL_REF_DECL (symbol, desc->value);
3128   TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1;
3129
3130   rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), symbol);
3131   set_mem_attributes (rtl, exp, 1);
3132   set_mem_alias_set (rtl, 0);
3133   set_mem_alias_set (rtl, const_alias_set);
3134
3135   /* Set flags or add text to the name to record information, such as
3136      that it is a local symbol.  If the name is changed, the macro
3137      ASM_OUTPUT_LABELREF will have to know how to strip this
3138      information.  This call might invalidate our local variable
3139      SYMBOL; we can't use it afterward.  */
3140
3141   targetm.encode_section_info (exp, rtl, true);
3142
3143   desc->rtl = rtl;
3144
3145   return desc;
3146 }
3147
3148 /* Return an rtx representing a reference to constant data in memory
3149    for the constant expression EXP.
3150
3151    If assembler code for such a constant has already been output,
3152    return an rtx to refer to it.
3153    Otherwise, output such a constant in memory
3154    and generate an rtx for it.
3155
3156    If DEFER is nonzero, this constant can be deferred and output only
3157    if referenced in the function after all optimizations.
3158
3159    `const_desc_table' records which constants already have label strings.  */
3160
3161 rtx
3162 output_constant_def (tree exp, int defer)
3163 {
3164   struct constant_descriptor_tree *desc;
3165   struct constant_descriptor_tree key;
3166   void **loc;
3167
3168   /* Look up EXP in the table of constant descriptors.  If we didn't find
3169      it, create a new one.  */
3170   key.value = exp;
3171   key.hash = const_hash_1 (exp);
3172   loc = htab_find_slot_with_hash (const_desc_htab, &key, key.hash, INSERT);
3173
3174   desc = *loc;
3175   if (desc == 0)
3176     {
3177       desc = build_constant_desc (exp);
3178       desc->hash = key.hash;
3179       *loc = desc;
3180     }
3181
3182   maybe_output_constant_def_contents (desc, defer);
3183   return desc->rtl;
3184 }
3185
3186 /* Subroutine of output_constant_def: Decide whether or not we need to
3187    output the constant DESC now, and if so, do it.  */
3188 static void
3189 maybe_output_constant_def_contents (struct constant_descriptor_tree *desc,
3190                                     int defer)
3191 {
3192   rtx symbol = XEXP (desc->rtl, 0);
3193   tree exp = desc->value;
3194
3195   if (flag_syntax_only)
3196     return;
3197
3198   if (TREE_ASM_WRITTEN (exp))
3199     /* Already output; don't do it again.  */
3200     return;
3201
3202   /* We can always defer constants as long as the context allows
3203      doing so.  */
3204   if (defer)
3205     {
3206       /* Increment n_deferred_constants if it exists.  It needs to be at
3207          least as large as the number of constants actually referred to
3208          by the function.  If it's too small we'll stop looking too early
3209          and fail to emit constants; if it's too large we'll only look
3210          through the entire function when we could have stopped earlier.  */
3211       if (cfun)
3212         n_deferred_constants++;
3213       return;
3214     }
3215
3216   output_constant_def_contents (symbol);
3217 }
3218
3219 /* Subroutine of output_constant_def_contents.  Output the definition
3220    of constant EXP, which is pointed to by label LABEL.  ALIGN is the
3221    constant's alignment in bits.  */
3222
3223 static void
3224 assemble_constant_contents (tree exp, const char *label, unsigned int align)
3225 {
3226   HOST_WIDE_INT size;
3227
3228   size = get_constant_size (exp);
3229
3230   /* Do any machine/system dependent processing of the constant.  */
3231 #ifdef ASM_DECLARE_CONSTANT_NAME
3232   ASM_DECLARE_CONSTANT_NAME (asm_out_file, label, exp, size);
3233 #else
3234   /* Standard thing is just output label for the constant.  */
3235   ASM_OUTPUT_LABEL (asm_out_file, label);
3236 #endif /* ASM_DECLARE_CONSTANT_NAME */
3237
3238   /* Output the value of EXP.  */
3239   output_constant (exp, size, align);
3240 }
3241
3242 /* We must output the constant data referred to by SYMBOL; do so.  */
3243
3244 static void
3245 output_constant_def_contents (rtx symbol)
3246 {
3247   tree exp = SYMBOL_REF_DECL (symbol);
3248   unsigned int align;
3249
3250   /* Make sure any other constants whose addresses appear in EXP
3251      are assigned label numbers.  */
3252   output_addressed_constants (exp);
3253
3254   /* We are no longer deferring this constant.  */
3255   TREE_ASM_WRITTEN (exp) = 1;
3256
3257   /* If the constant is part of an object block, make sure that the
3258      decl has been positioned within its block, but do not write out
3259      its definition yet.  output_object_blocks will do that later.  */
3260   if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol) && SYMBOL_REF_BLOCK (symbol))
3261     place_block_symbol (symbol);
3262   else
3263     {
3264       switch_to_section (get_constant_section (exp));
3265       align = get_constant_alignment (exp);
3266       if (align > BITS_PER_UNIT)
3267         ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
3268       assemble_constant_contents (exp, XSTR (symbol, 0), align);
3269     }
3270   if (flag_mudflap)
3271     mudflap_enqueue_constant (exp);
3272 }
3273
3274 /* Look up EXP in the table of constant descriptors.  Return the rtl
3275    if it has been emitted, else null.  */
3276
3277 rtx
3278 lookup_constant_def (tree exp)
3279 {
3280   struct constant_descriptor_tree *desc;
3281   struct constant_descriptor_tree key;
3282
3283   key.value = exp;
3284   key.hash = const_hash_1 (exp);
3285   desc = htab_find_with_hash (const_desc_htab, &key, key.hash);
3286
3287   return (desc ? desc->rtl : NULL_RTX);
3288 }
3289 \f
3290 /* Used in the hash tables to avoid outputting the same constant
3291    twice.  Unlike 'struct constant_descriptor_tree', RTX constants
3292    are output once per function, not once per file.  */
3293 /* ??? Only a few targets need per-function constant pools.  Most
3294    can use one per-file pool.  Should add a targetm bit to tell the
3295    difference.  */
3296
3297 struct rtx_constant_pool GTY(())
3298 {
3299   /* Pointers to first and last constant in pool, as ordered by offset.  */
3300   struct constant_descriptor_rtx *first;
3301   struct constant_descriptor_rtx *last;
3302
3303   /* Hash facility for making memory-constants from constant rtl-expressions.
3304      It is used on RISC machines where immediate integer arguments and
3305      constant addresses are restricted so that such constants must be stored
3306      in memory.  */
3307   htab_t GTY((param_is (struct constant_descriptor_rtx))) const_rtx_htab;
3308
3309   /* Current offset in constant pool (does not include any
3310      machine-specific header).  */
3311   HOST_WIDE_INT offset;
3312 };
3313
3314 struct constant_descriptor_rtx GTY((chain_next ("%h.next")))
3315 {
3316   struct constant_descriptor_rtx *next;
3317   rtx mem;
3318   rtx sym;
3319   rtx constant;
3320   HOST_WIDE_INT offset;
3321   hashval_t hash;
3322   enum machine_mode mode;
3323   unsigned int align;
3324   int labelno;
3325   int mark;
3326 };
3327
3328 /* Hash and compare functions for const_rtx_htab.  */
3329
3330 static hashval_t
3331 const_desc_rtx_hash (const void *ptr)
3332 {
3333   const struct constant_descriptor_rtx *desc = ptr;
3334   return desc->hash;
3335 }
3336
3337 static int
3338 const_desc_rtx_eq (const void *a, const void *b)
3339 {
3340   const struct constant_descriptor_rtx *x = a;
3341   const struct constant_descriptor_rtx *y = b;
3342
3343   if (x->mode != y->mode)
3344     return 0;
3345   return rtx_equal_p (x->constant, y->constant);
3346 }
3347
3348 /* This is the worker function for const_rtx_hash, called via for_each_rtx.  */
3349
3350 static int
3351 const_rtx_hash_1 (rtx *xp, void *data)
3352 {
3353   unsigned HOST_WIDE_INT hwi;
3354   enum machine_mode mode;
3355   enum rtx_code code;
3356   hashval_t h, *hp;
3357   rtx x;
3358
3359   x = *xp;
3360   code = GET_CODE (x);
3361   mode = GET_MODE (x);
3362   h = (hashval_t) code * 1048573 + mode;
3363
3364   switch (code)
3365     {
3366     case CONST_INT:
3367       hwi = INTVAL (x);
3368     fold_hwi:
3369       {
3370         const int shift = sizeof (hashval_t) * CHAR_BIT;
3371         const int n = sizeof (HOST_WIDE_INT) / sizeof (hashval_t);
3372         int i;
3373
3374         h ^= (hashval_t) hwi;
3375         for (i = 1; i < n; ++i)
3376           {
3377             hwi >>= shift;
3378             h ^= (hashval_t) hwi;
3379           }
3380       }
3381       break;
3382
3383     case CONST_DOUBLE:
3384       if (mode == VOIDmode)
3385         {
3386           hwi = CONST_DOUBLE_LOW (x) ^ CONST_DOUBLE_HIGH (x);
3387           goto fold_hwi;
3388         }
3389       else
3390         h ^= real_hash (CONST_DOUBLE_REAL_VALUE (x));
3391       break;
3392
3393     case CONST_FIXED:
3394       h ^= fixed_hash (CONST_FIXED_VALUE (x));
3395       break;
3396
3397     case CONST_VECTOR:
3398       {
3399         int i;
3400         for (i = XVECLEN (x, 0); i-- > 0; )
3401           h = h * 251 + const_rtx_hash_1 (&XVECEXP (x, 0, i), data);
3402       }
3403       break;
3404
3405     case SYMBOL_REF:
3406       h ^= htab_hash_string (XSTR (x, 0));
3407       break;
3408
3409     case LABEL_REF:
3410       h = h * 251 + CODE_LABEL_NUMBER (XEXP (x, 0));
3411       break;
3412
3413     case UNSPEC:
3414     case UNSPEC_VOLATILE:
3415       h = h * 251 + XINT (x, 1);
3416       break;
3417
3418     default:
3419       break;
3420     }
3421
3422   hp = data;
3423   *hp = *hp * 509 + h;
3424   return 0;
3425 }
3426
3427 /* Compute a hash value for X, which should be a constant.  */
3428
3429 static hashval_t
3430 const_rtx_hash (rtx x)
3431 {
3432   hashval_t h = 0;
3433   for_each_rtx (&x, const_rtx_hash_1, &h);
3434   return h;
3435 }
3436
3437 \f
3438 /* Create and return a new rtx constant pool.  */
3439
3440 static struct rtx_constant_pool *
3441 create_constant_pool (void)
3442 {
3443   struct rtx_constant_pool *pool;
3444
3445   pool = ggc_alloc (sizeof (struct rtx_constant_pool));
3446   pool->const_rtx_htab = htab_create_ggc (31, const_desc_rtx_hash,
3447                                           const_desc_rtx_eq, NULL);
3448   pool->first = NULL;
3449   pool->last = NULL;
3450   pool->offset = 0;
3451   return pool;
3452 }
3453
3454 /* Initialize constant pool hashing for a new function.  */
3455
3456 void
3457 init_varasm_status (void)
3458 {
3459   rtl.varasm.pool = create_constant_pool ();
3460   rtl.varasm.deferred_constants = 0;
3461 }
3462 \f
3463 /* Given a MINUS expression, simplify it if both sides
3464    include the same symbol.  */
3465
3466 rtx
3467 simplify_subtraction (rtx x)
3468 {
3469   rtx r = simplify_rtx (x);
3470   return r ? r : x;
3471 }
3472 \f
3473 /* Given a constant rtx X, make (or find) a memory constant for its value
3474    and return a MEM rtx to refer to it in memory.  */
3475
3476 rtx
3477 force_const_mem (enum machine_mode mode, rtx x)
3478 {
3479   struct constant_descriptor_rtx *desc, tmp;
3480   struct rtx_constant_pool *pool;
3481   char label[256];
3482   rtx def, symbol;
3483   hashval_t hash;
3484   unsigned int align;
3485   void **slot;
3486
3487   /* If we're not allowed to drop X into the constant pool, don't.  */
3488   if (targetm.cannot_force_const_mem (x))
3489     return NULL_RTX;
3490
3491   /* Record that this function has used a constant pool entry.  */
3492   current_function_uses_const_pool = 1;
3493
3494   /* Decide which pool to use.  */
3495   pool = (targetm.use_blocks_for_constant_p (mode, x)
3496           ? shared_constant_pool
3497           : rtl.varasm.pool);
3498
3499   /* Lookup the value in the hashtable.  */
3500   tmp.constant = x;
3501   tmp.mode = mode;
3502   hash = const_rtx_hash (x);
3503   slot = htab_find_slot_with_hash (pool->const_rtx_htab, &tmp, hash, INSERT);
3504   desc = *slot;
3505
3506   /* If the constant was already present, return its memory.  */
3507   if (desc)
3508     return copy_rtx (desc->mem);
3509
3510   /* Otherwise, create a new descriptor.  */
3511   desc = ggc_alloc (sizeof (*desc));
3512   *slot = desc;
3513
3514   /* Align the location counter as required by EXP's data type.  */
3515   align = GET_MODE_ALIGNMENT (mode == VOIDmode ? word_mode : mode);
3516 #ifdef CONSTANT_ALIGNMENT
3517   {
3518     tree type = lang_hooks.types.type_for_mode (mode, 0);
3519     if (type != NULL_TREE)
3520       align = CONSTANT_ALIGNMENT (make_tree (type, x), align);
3521   }
3522 #endif
3523
3524   pool->offset += (align / BITS_PER_UNIT) - 1;
3525   pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
3526
3527   desc->next = NULL;
3528   desc->constant = tmp.constant;
3529   desc->offset = pool->offset;
3530   desc->hash = hash;
3531   desc->mode = mode;
3532   desc->align = align;
3533   desc->labelno = const_labelno;
3534   desc->mark = 0;
3535
3536   pool->offset += GET_MODE_SIZE (mode);
3537   if (pool->last)
3538     pool->last->next = desc;
3539   else
3540     pool->first = pool->last = desc;
3541   pool->last = desc;
3542
3543   /* Create a string containing the label name, in LABEL.  */
3544   ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno);
3545   ++const_labelno;
3546
3547   /* Construct the SYMBOL_REF.  Make sure to mark it as belonging to
3548      the constants pool.  */
3549   if (use_object_blocks_p () && targetm.use_blocks_for_constant_p (mode, x))
3550     {
3551       section *sect = targetm.asm_out.select_rtx_section (mode, x, align);
3552       symbol = create_block_symbol (ggc_strdup (label),
3553                                     get_block_for_section (sect), -1);
3554     }
3555   else
3556     symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
3557   desc->sym = symbol;
3558   SYMBOL_REF_FLAGS (symbol) |= SYMBOL_FLAG_LOCAL;
3559   CONSTANT_POOL_ADDRESS_P (symbol) = 1;
3560   SET_SYMBOL_REF_CONSTANT (symbol, desc);
3561
3562   /* Construct the MEM.  */
3563   desc->mem = def = gen_const_mem (mode, symbol);
3564   set_mem_attributes (def, lang_hooks.types.type_for_mode (mode, 0), 1);
3565   set_mem_align (def, align);
3566
3567   /* If we're dropping a label to the constant pool, make sure we
3568      don't delete it.  */
3569   if (GET_CODE (x) == LABEL_REF)
3570     LABEL_PRESERVE_P (XEXP (x, 0)) = 1;
3571
3572   return copy_rtx (def);
3573 }
3574 \f
3575 /* Given a constant pool SYMBOL_REF, return the corresponding constant.  */
3576
3577 rtx
3578 get_pool_constant (rtx addr)
3579 {
3580   return SYMBOL_REF_CONSTANT (addr)->constant;
3581 }
3582
3583 /* Given a constant pool SYMBOL_REF, return the corresponding constant
3584    and whether it has been output or not.  */
3585
3586 rtx
3587 get_pool_constant_mark (rtx addr, bool *pmarked)
3588 {
3589   struct constant_descriptor_rtx *desc;
3590
3591   desc = SYMBOL_REF_CONSTANT (addr);
3592   *pmarked = (desc->mark != 0);
3593   return desc->constant;
3594 }
3595
3596 /* Similar, return the mode.  */
3597
3598 enum machine_mode
3599 get_pool_mode (const_rtx addr)
3600 {
3601   return SYMBOL_REF_CONSTANT (addr)->mode;
3602 }
3603
3604 /* Return the size of the constant pool.  */
3605
3606 int
3607 get_pool_size (void)
3608 {
3609   return rtl.varasm.pool->offset;
3610 }
3611 \f
3612 /* Worker function for output_constant_pool_1.  Emit assembly for X
3613    in MODE with known alignment ALIGN.  */
3614
3615 static void
3616 output_constant_pool_2 (enum machine_mode mode, rtx x, unsigned int align)
3617 {
3618   switch (GET_MODE_CLASS (mode))
3619     {
3620     case MODE_FLOAT:
3621     case MODE_DECIMAL_FLOAT:
3622       {
3623         REAL_VALUE_TYPE r;
3624
3625         gcc_assert (GET_CODE (x) == CONST_DOUBLE);
3626         REAL_VALUE_FROM_CONST_DOUBLE (r, x);
3627         assemble_real (r, mode, align);
3628         break;
3629       }
3630
3631     case MODE_INT:
3632     case MODE_PARTIAL_INT:
3633     case MODE_FRACT:
3634     case MODE_UFRACT:
3635     case MODE_ACCUM:
3636     case MODE_UACCUM:
3637       assemble_integer (x, GET_MODE_SIZE (mode), align, 1);
3638       break;
3639
3640     case MODE_VECTOR_FLOAT:
3641     case MODE_VECTOR_INT:
3642     case MODE_VECTOR_FRACT:
3643     case MODE_VECTOR_UFRACT:
3644     case MODE_VECTOR_ACCUM:
3645     case MODE_VECTOR_UACCUM:
3646       {
3647         int i, units;
3648         enum machine_mode submode = GET_MODE_INNER (mode);
3649         unsigned int subalign = MIN (align, GET_MODE_BITSIZE (submode));
3650
3651         gcc_assert (GET_CODE (x) == CONST_VECTOR);
3652         units = CONST_VECTOR_NUNITS (x);
3653
3654         for (i = 0; i < units; i++)
3655           {
3656             rtx elt = CONST_VECTOR_ELT (x, i);
3657             output_constant_pool_2 (submode, elt, i ? subalign : align);
3658           }
3659       }
3660       break;
3661
3662     default:
3663       gcc_unreachable ();
3664     }
3665 }
3666
3667 /* Worker function for output_constant_pool.  Emit constant DESC,
3668    giving it ALIGN bits of alignment.  */
3669
3670 static void
3671 output_constant_pool_1 (struct constant_descriptor_rtx *desc,
3672                         unsigned int align)
3673 {
3674   rtx x, tmp;
3675
3676   x = desc->constant;
3677
3678   /* See if X is a LABEL_REF (or a CONST referring to a LABEL_REF)
3679      whose CODE_LABEL has been deleted.  This can occur if a jump table
3680      is eliminated by optimization.  If so, write a constant of zero
3681      instead.  Note that this can also happen by turning the
3682      CODE_LABEL into a NOTE.  */
3683   /* ??? This seems completely and utterly wrong.  Certainly it's
3684      not true for NOTE_INSN_DELETED_LABEL, but I disbelieve proper
3685      functioning even with INSN_DELETED_P and friends.  */
3686
3687   tmp = x;
3688   switch (GET_CODE (x))
3689     {
3690     case CONST:
3691       if (GET_CODE (XEXP (x, 0)) != PLUS
3692           || GET_CODE (XEXP (XEXP (x, 0), 0)) != LABEL_REF)
3693         break;
3694       tmp = XEXP (XEXP (x, 0), 0);
3695       /* FALLTHRU  */
3696
3697     case LABEL_REF:
3698       tmp = XEXP (x, 0);
3699       gcc_assert (!INSN_DELETED_P (tmp));
3700       gcc_assert (!NOTE_P (tmp)
3701                   || NOTE_KIND (tmp) != NOTE_INSN_DELETED);
3702       break;
3703
3704     default:
3705       break;
3706     }
3707
3708 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3709   ASM_OUTPUT_SPECIAL_POOL_ENTRY (asm_out_file, x, desc->mode,
3710                                  align, desc->labelno, done);
3711 #endif
3712
3713   assemble_align (align);
3714
3715   /* Output the label.  */
3716   targetm.asm_out.internal_label (asm_out_file, "LC", desc->labelno);
3717
3718   /* Output the data.  */
3719   output_constant_pool_2 (desc->mode, x, align);
3720
3721   /* Make sure all constants in SECTION_MERGE and not SECTION_STRINGS
3722      sections have proper size.  */
3723   if (align > GET_MODE_BITSIZE (desc->mode)
3724       && in_section
3725       && (in_section->common.flags & SECTION_MERGE))
3726     assemble_align (align);
3727
3728 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3729  done:
3730 #endif
3731   return;
3732 }
3733
3734 /* Given a SYMBOL_REF CURRENT_RTX, mark it and all constants it refers
3735    to as used.  Emit referenced deferred strings.  This function can
3736    be used with for_each_rtx to mark all SYMBOL_REFs in an rtx.  */
3737
3738 static int
3739 mark_constant (rtx *current_rtx, void *data ATTRIBUTE_UNUSED)
3740 {
3741   rtx x = *current_rtx;
3742
3743   if (x == NULL_RTX || GET_CODE (x) != SYMBOL_REF)
3744     return 0;
3745
3746   if (CONSTANT_POOL_ADDRESS_P (x))
3747     {
3748       struct constant_descriptor_rtx *desc = SYMBOL_REF_CONSTANT (x);
3749       if (desc->mark == 0)
3750         {
3751           desc->mark = 1;
3752           for_each_rtx (&desc->constant, mark_constant, NULL);
3753         }
3754     }
3755   else if (TREE_CONSTANT_POOL_ADDRESS_P (x))
3756     {
3757       tree exp = SYMBOL_REF_DECL (x);
3758       if (!TREE_ASM_WRITTEN (exp))
3759         {
3760           n_deferred_constants--;
3761           output_constant_def_contents (x);
3762         }
3763     }
3764
3765   return -1;
3766 }
3767
3768 /* Look through appropriate parts of INSN, marking all entries in the
3769    constant pool which are actually being used.  Entries that are only
3770    referenced by other constants are also marked as used.  Emit
3771    deferred strings that are used.  */
3772
3773 static void
3774 mark_constants (rtx insn)
3775 {
3776   if (!INSN_P (insn))
3777     return;
3778
3779   /* Insns may appear inside a SEQUENCE.  Only check the patterns of
3780      insns, not any notes that may be attached.  We don't want to mark
3781      a constant just because it happens to appear in a REG_EQUIV note.  */
3782   if (GET_CODE (PATTERN (insn)) == SEQUENCE)
3783     {
3784       rtx seq = PATTERN (insn);
3785       int i, n = XVECLEN (seq, 0);
3786       for (i = 0; i < n; ++i)
3787         {
3788           rtx subinsn = XVECEXP (seq, 0, i);
3789           if (INSN_P (subinsn))
3790             for_each_rtx (&PATTERN (subinsn), mark_constant, NULL);
3791         }
3792     }
3793   else
3794     for_each_rtx (&PATTERN (insn), mark_constant, NULL);
3795 }
3796
3797 /* Look through the instructions for this function, and mark all the
3798    entries in POOL which are actually being used.  Emit deferred constants
3799    which have indeed been used.  */
3800
3801 static void
3802 mark_constant_pool (void)
3803 {
3804   rtx insn, link;
3805
3806   if (!current_function_uses_const_pool && n_deferred_constants == 0)
3807     return;
3808
3809   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3810     mark_constants (insn);
3811
3812   for (link = current_function_epilogue_delay_list;
3813        link;
3814        link = XEXP (link, 1))
3815     mark_constants (XEXP (link, 0));
3816 }
3817
3818 /* Write all the constants in POOL.  */
3819
3820 static void
3821 output_constant_pool_contents (struct rtx_constant_pool *pool)
3822 {
3823   struct constant_descriptor_rtx *desc;
3824
3825   for (desc = pool->first; desc ; desc = desc->next)
3826     if (desc->mark)
3827       {
3828         /* If the constant is part of an object_block, make sure that
3829            the constant has been positioned within its block, but do not
3830            write out its definition yet.  output_object_blocks will do
3831            that later.  */
3832         if (SYMBOL_REF_HAS_BLOCK_INFO_P (desc->sym)
3833             && SYMBOL_REF_BLOCK (desc->sym))
3834           place_block_symbol (desc->sym);
3835         else
3836           {
3837             switch_to_section (targetm.asm_out.select_rtx_section
3838                                (desc->mode, desc->constant, desc->align));
3839             output_constant_pool_1 (desc, desc->align);
3840           }
3841       }
3842 }
3843
3844 /* Mark all constants that are used in the current function, then write
3845    out the function's private constant pool.  */
3846
3847 static void
3848 output_constant_pool (const char *fnname ATTRIBUTE_UNUSED,
3849                       tree fndecl ATTRIBUTE_UNUSED)
3850 {
3851   struct rtx_constant_pool *pool = rtl.varasm.pool;
3852
3853   /* It is possible for gcc to call force_const_mem and then to later
3854      discard the instructions which refer to the constant.  In such a
3855      case we do not need to output the constant.  */
3856   mark_constant_pool ();
3857
3858 #ifdef ASM_OUTPUT_POOL_PROLOGUE
3859   ASM_OUTPUT_POOL_PROLOGUE (asm_out_file, fnname, fndecl, pool->offset);
3860 #endif
3861
3862   output_constant_pool_contents (pool);
3863
3864 #ifdef ASM_OUTPUT_POOL_EPILOGUE
3865   ASM_OUTPUT_POOL_EPILOGUE (asm_out_file, fnname, fndecl, pool->offset);
3866 #endif
3867 }
3868 \f
3869 /* Write the contents of the shared constant pool.  */
3870
3871 void
3872 output_shared_constant_pool (void)
3873 {
3874   output_constant_pool_contents (shared_constant_pool);
3875 }
3876 \f
3877 /* Determine what kind of relocations EXP may need.  */
3878
3879 int
3880 compute_reloc_for_constant (tree exp)
3881 {
3882   int reloc = 0, reloc2;
3883   tree tem;
3884
3885   switch (TREE_CODE (exp))
3886     {
3887     case ADDR_EXPR:
3888     case FDESC_EXPR:
3889       /* Go inside any operations that get_inner_reference can handle and see
3890          if what's inside is a constant: no need to do anything here for
3891          addresses of variables or functions.  */
3892       for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3893            tem = TREE_OPERAND (tem, 0))
3894         ;
3895
3896       if (TREE_PUBLIC (tem))
3897         reloc |= 2;
3898       else
3899         reloc |= 1;
3900       break;
3901
3902     case PLUS_EXPR:
3903     case POINTER_PLUS_EXPR:
3904       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3905       reloc |= compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3906       break;
3907
3908     case MINUS_EXPR:
3909       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3910       reloc2 = compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3911       /* The difference of two local labels is computable at link time.  */
3912       if (reloc == 1 && reloc2 == 1)
3913         reloc = 0;
3914       else
3915         reloc |= reloc2;
3916       break;
3917
3918     case NOP_EXPR:
3919     case CONVERT_EXPR:
3920     case NON_LVALUE_EXPR:
3921     case VIEW_CONVERT_EXPR:
3922       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3923       break;
3924
3925     case CONSTRUCTOR:
3926       {
3927         unsigned HOST_WIDE_INT idx;
3928         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
3929           if (tem != 0)
3930             reloc |= compute_reloc_for_constant (tem);
3931       }
3932       break;
3933
3934     default:
3935       break;
3936     }
3937   return reloc;
3938 }
3939
3940 /* Find all the constants whose addresses are referenced inside of EXP,
3941    and make sure assembler code with a label has been output for each one.
3942    Indicate whether an ADDR_EXPR has been encountered.  */
3943
3944 static void
3945 output_addressed_constants (tree exp)
3946 {
3947   tree tem;
3948
3949   switch (TREE_CODE (exp))
3950     {
3951     case ADDR_EXPR:
3952     case FDESC_EXPR:
3953       /* Go inside any operations that get_inner_reference can handle and see
3954          if what's inside is a constant: no need to do anything here for
3955          addresses of variables or functions.  */
3956       for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3957            tem = TREE_OPERAND (tem, 0))
3958         ;
3959
3960       /* If we have an initialized CONST_DECL, retrieve the initializer.  */
3961       if (TREE_CODE (tem) == CONST_DECL && DECL_INITIAL (tem))
3962         tem = DECL_INITIAL (tem);
3963
3964       if (CONSTANT_CLASS_P (tem) || TREE_CODE (tem) == CONSTRUCTOR)
3965         output_constant_def (tem, 0);
3966       break;
3967
3968     case PLUS_EXPR:
3969     case POINTER_PLUS_EXPR:
3970     case MINUS_EXPR:
3971       output_addressed_constants (TREE_OPERAND (exp, 1));
3972       /* Fall through.  */
3973
3974     case NOP_EXPR:
3975     case CONVERT_EXPR:
3976     case NON_LVALUE_EXPR:
3977     case VIEW_CONVERT_EXPR:
3978       output_addressed_constants (TREE_OPERAND (exp, 0));
3979       break;
3980
3981     case CONSTRUCTOR:
3982       {
3983         unsigned HOST_WIDE_INT idx;
3984         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
3985           if (tem != 0)
3986             output_addressed_constants (tem);
3987       }
3988       break;
3989
3990     default:
3991       break;
3992     }
3993 }
3994 \f
3995 /* Whether a constructor CTOR is a valid static constant initializer if all
3996    its elements are.  This used to be internal to initializer_constant_valid_p
3997    and has been exposed to let other functions like categorize_ctor_elements
3998    evaluate the property while walking a constructor for other purposes.  */
3999
4000 bool
4001 constructor_static_from_elts_p (const_tree ctor)
4002 {
4003   return (TREE_CONSTANT (ctor)
4004           && (TREE_CODE (TREE_TYPE (ctor)) == UNION_TYPE
4005               || TREE_CODE (TREE_TYPE (ctor)) == RECORD_TYPE)
4006           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (ctor)));
4007 }
4008
4009 /* Return nonzero if VALUE is a valid constant-valued expression
4010    for use in initializing a static variable; one that can be an
4011    element of a "constant" initializer.
4012
4013    Return null_pointer_node if the value is absolute;
4014    if it is relocatable, return the variable that determines the relocation.
4015    We assume that VALUE has been folded as much as possible;
4016    therefore, we do not need to check for such things as
4017    arithmetic-combinations of integers.  */
4018
4019 tree
4020 initializer_constant_valid_p (tree value, tree endtype)
4021 {
4022   switch (TREE_CODE (value))
4023     {
4024     case CONSTRUCTOR:
4025       if (constructor_static_from_elts_p (value))
4026         {
4027           unsigned HOST_WIDE_INT idx;
4028           tree elt;
4029           bool absolute = true;
4030
4031           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (value), idx, elt)
4032             {
4033               tree reloc;
4034               reloc = initializer_constant_valid_p (elt, TREE_TYPE (elt));
4035               if (!reloc)
4036                 return NULL_TREE;
4037               if (reloc != null_pointer_node)
4038                 absolute = false;
4039             }
4040           /* For a non-absolute relocation, there is no single
4041              variable that can be "the variable that determines the
4042              relocation."  */
4043           return absolute ? null_pointer_node : error_mark_node;
4044         }
4045
4046       return TREE_STATIC (value) ? null_pointer_node : NULL_TREE;
4047
4048     case INTEGER_CST:
4049     case VECTOR_CST:
4050     case REAL_CST:
4051     case FIXED_CST:
4052     case STRING_CST:
4053     case COMPLEX_CST:
4054       return null_pointer_node;
4055
4056     case ADDR_EXPR:
4057     case FDESC_EXPR:
4058       value = staticp (TREE_OPERAND (value, 0));
4059       if (value)
4060         {
4061           /* "&(*a).f" is like unto pointer arithmetic.  If "a" turns out to
4062              be a constant, this is old-skool offsetof-like nonsense.  */
4063           if (TREE_CODE (value) == INDIRECT_REF
4064               && TREE_CONSTANT (TREE_OPERAND (value, 0)))
4065             return null_pointer_node;
4066           /* Taking the address of a nested function involves a trampoline.  */
4067           if (TREE_CODE (value) == FUNCTION_DECL
4068               && decl_function_context (value)
4069               && !DECL_NO_STATIC_CHAIN (value))
4070             return NULL_TREE;
4071           /* "&{...}" requires a temporary to hold the constructed
4072              object.  */
4073           if (TREE_CODE (value) == CONSTRUCTOR)
4074             return NULL_TREE;
4075         }
4076       return value;
4077
4078     case VIEW_CONVERT_EXPR:
4079     case NON_LVALUE_EXPR:
4080       return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4081
4082     case CONVERT_EXPR:
4083     case NOP_EXPR:
4084       {
4085         tree src;
4086         tree src_type;
4087         tree dest_type;
4088
4089         src = TREE_OPERAND (value, 0);
4090         src_type = TREE_TYPE (src);
4091         dest_type = TREE_TYPE (value);
4092
4093         /* Allow conversions between pointer types, floating-point
4094            types, and offset types.  */
4095         if ((POINTER_TYPE_P (dest_type) && POINTER_TYPE_P (src_type))
4096             || (FLOAT_TYPE_P (dest_type) && FLOAT_TYPE_P (src_type))
4097             || (TREE_CODE (dest_type) == OFFSET_TYPE
4098                 && TREE_CODE (src_type) == OFFSET_TYPE))
4099           return initializer_constant_valid_p (src, endtype);
4100
4101         /* Allow length-preserving conversions between integer types.  */
4102         if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type)
4103             && (TYPE_PRECISION (dest_type) == TYPE_PRECISION (src_type)))
4104           return initializer_constant_valid_p (src, endtype);
4105
4106         /* Allow conversions between other integer types only if
4107            explicit value.  */
4108         if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type))
4109           {
4110             tree inner = initializer_constant_valid_p (src, endtype);
4111             if (inner == null_pointer_node)
4112               return null_pointer_node;
4113             break;
4114           }
4115
4116         /* Allow (int) &foo provided int is as wide as a pointer.  */
4117         if (INTEGRAL_TYPE_P (dest_type) && POINTER_TYPE_P (src_type)
4118             && (TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type)))
4119           return initializer_constant_valid_p (src, endtype);
4120
4121         /* Likewise conversions from int to pointers, but also allow
4122            conversions from 0.  */
4123         if ((POINTER_TYPE_P (dest_type)
4124              || TREE_CODE (dest_type) == OFFSET_TYPE)
4125             && INTEGRAL_TYPE_P (src_type))
4126           {
4127             if (TREE_CODE (src) == INTEGER_CST
4128                 && TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type))
4129               return null_pointer_node;
4130             if (integer_zerop (src))
4131               return null_pointer_node;
4132             else if (TYPE_PRECISION (dest_type) <= TYPE_PRECISION (src_type))
4133               return initializer_constant_valid_p (src, endtype);
4134           }
4135
4136         /* Allow conversions to struct or union types if the value
4137            inside is okay.  */
4138         if (TREE_CODE (dest_type) == RECORD_TYPE
4139             || TREE_CODE (dest_type) == UNION_TYPE)
4140           return initializer_constant_valid_p (src, endtype);
4141       }
4142       break;
4143
4144     case POINTER_PLUS_EXPR:
4145     case PLUS_EXPR:
4146       if (! INTEGRAL_TYPE_P (endtype)
4147           || TYPE_PRECISION (endtype) >= POINTER_SIZE)
4148         {
4149           tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4150                                                       endtype);
4151           tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4152                                                       endtype);
4153           /* If either term is absolute, use the other term's relocation.  */
4154           if (valid0 == null_pointer_node)
4155             return valid1;
4156           if (valid1 == null_pointer_node)
4157             return valid0;
4158         }
4159       break;
4160
4161     case MINUS_EXPR:
4162       if (! INTEGRAL_TYPE_P (endtype)
4163           || TYPE_PRECISION (endtype) >= POINTER_SIZE)
4164         {
4165           tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4166                                                       endtype);
4167           tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4168                                                       endtype);
4169           /* Win if second argument is absolute.  */
4170           if (valid1 == null_pointer_node)
4171             return valid0;
4172           /* Win if both arguments have the same relocation.
4173              Then the value is absolute.  */
4174           if (valid0 == valid1 && valid0 != 0)
4175             return null_pointer_node;
4176
4177           /* Since GCC guarantees that string constants are unique in the
4178              generated code, a subtraction between two copies of the same
4179              constant string is absolute.  */
4180           if (valid0 && TREE_CODE (valid0) == STRING_CST
4181               && valid1 && TREE_CODE (valid1) == STRING_CST
4182               && operand_equal_p (valid0, valid1, 1))
4183             return null_pointer_node;
4184         }
4185
4186       /* Support narrowing differences.  */
4187       if (INTEGRAL_TYPE_P (endtype))
4188         {
4189           tree op0, op1;
4190
4191           op0 = TREE_OPERAND (value, 0);
4192           op1 = TREE_OPERAND (value, 1);
4193
4194           /* Like STRIP_NOPS except allow the operand mode to widen.
4195              This works around a feature of fold that simplifies
4196              (int)(p1 - p2) to ((int)p1 - (int)p2) under the theory
4197              that the narrower operation is cheaper.  */
4198
4199           while (TREE_CODE (op0) == NOP_EXPR
4200                  || TREE_CODE (op0) == CONVERT_EXPR
4201                  || TREE_CODE (op0) == NON_LVALUE_EXPR)
4202             {
4203               tree inner = TREE_OPERAND (op0, 0);
4204               if (inner == error_mark_node
4205                   || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
4206                   || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0)))
4207                       > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
4208                 break;
4209               op0 = inner;
4210             }
4211
4212           while (TREE_CODE (op1) == NOP_EXPR
4213                  || TREE_CODE (op1) == CONVERT_EXPR
4214                  || TREE_CODE (op1) == NON_LVALUE_EXPR)
4215             {
4216               tree inner = TREE_OPERAND (op1, 0);
4217               if (inner == error_mark_node
4218                   || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
4219                   || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1)))
4220                       > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
4221                 break;
4222               op1 = inner;
4223             }
4224
4225           op0 = initializer_constant_valid_p (op0, endtype);
4226           op1 = initializer_constant_valid_p (op1, endtype);
4227
4228           /* Both initializers must be known.  */
4229           if (op0 && op1)
4230             {
4231               if (op0 == op1)
4232                 return null_pointer_node;
4233
4234               /* Support differences between labels.  */
4235               if (TREE_CODE (op0) == LABEL_DECL
4236                   && TREE_CODE (op1) == LABEL_DECL)
4237                 return null_pointer_node;
4238
4239               if (TREE_CODE (op0) == STRING_CST
4240                   && TREE_CODE (op1) == STRING_CST
4241                   && operand_equal_p (op0, op1, 1))
4242                 return null_pointer_node;
4243             }
4244         }
4245       break;
4246
4247     default:
4248       break;
4249     }
4250
4251   return 0;
4252 }
4253 \f
4254 /* Output assembler code for constant EXP to FILE, with no label.
4255    This includes the pseudo-op such as ".int" or ".byte", and a newline.
4256    Assumes output_addressed_constants has been done on EXP already.
4257
4258    Generate exactly SIZE bytes of assembler data, padding at the end
4259    with zeros if necessary.  SIZE must always be specified.
4260
4261    SIZE is important for structure constructors,
4262    since trailing members may have been omitted from the constructor.
4263    It is also important for initialization of arrays from string constants
4264    since the full length of the string constant might not be wanted.
4265    It is also needed for initialization of unions, where the initializer's
4266    type is just one member, and that may not be as long as the union.
4267
4268    There a case in which we would fail to output exactly SIZE bytes:
4269    for a structure constructor that wants to produce more than SIZE bytes.
4270    But such constructors will never be generated for any possible input.
4271
4272    ALIGN is the alignment of the data in bits.  */
4273
4274 void
4275 output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align)
4276 {
4277   enum tree_code code;
4278   unsigned HOST_WIDE_INT thissize;
4279
4280   if (size == 0 || flag_syntax_only)
4281     return;
4282
4283   /* See if we're trying to initialize a pointer in a non-default mode
4284      to the address of some declaration somewhere.  If the target says
4285      the mode is valid for pointers, assume the target has a way of
4286      resolving it.  */
4287   if (TREE_CODE (exp) == NOP_EXPR
4288       && POINTER_TYPE_P (TREE_TYPE (exp))
4289       && targetm.valid_pointer_mode (TYPE_MODE (TREE_TYPE (exp))))
4290     {
4291       tree saved_type = TREE_TYPE (exp);
4292
4293       /* Peel off any intermediate conversions-to-pointer for valid
4294          pointer modes.  */
4295       while (TREE_CODE (exp) == NOP_EXPR
4296              && POINTER_TYPE_P (TREE_TYPE (exp))
4297              && targetm.valid_pointer_mode (TYPE_MODE (TREE_TYPE (exp))))
4298         exp = TREE_OPERAND (exp, 0);
4299
4300       /* If what we're left with is the address of something, we can
4301          convert the address to the final type and output it that
4302          way.  */
4303       if (TREE_CODE (exp) == ADDR_EXPR)
4304         exp = build1 (ADDR_EXPR, saved_type, TREE_OPERAND (exp, 0));
4305       /* Likewise for constant ints.  */
4306       else if (TREE_CODE (exp) == INTEGER_CST)
4307         exp = build_int_cst_wide (saved_type, TREE_INT_CST_LOW (exp),
4308                                   TREE_INT_CST_HIGH (exp));
4309       
4310     }
4311
4312   /* Eliminate any conversions since we'll be outputting the underlying
4313      constant.  */
4314   while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
4315          || TREE_CODE (exp) == NON_LVALUE_EXPR
4316          || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
4317     {
4318       HOST_WIDE_INT type_size = int_size_in_bytes (TREE_TYPE (exp));
4319       HOST_WIDE_INT op_size = int_size_in_bytes (TREE_TYPE (TREE_OPERAND (exp, 0)));
4320
4321       /* Make sure eliminating the conversion is really a no-op, except with
4322          VIEW_CONVERT_EXPRs to allow for wild Ada unchecked conversions and
4323          union types to allow for Ada unchecked unions.  */
4324       if (type_size > op_size
4325           && TREE_CODE (exp) != VIEW_CONVERT_EXPR
4326           && TREE_CODE (TREE_TYPE (exp)) != UNION_TYPE)
4327         /* Keep the conversion. */
4328         break;
4329       else
4330         exp = TREE_OPERAND (exp, 0);
4331     }
4332
4333   code = TREE_CODE (TREE_TYPE (exp));
4334   thissize = int_size_in_bytes (TREE_TYPE (exp));
4335
4336   /* Allow a constructor with no elements for any data type.
4337      This means to fill the space with zeros.  */
4338   if (TREE_CODE (exp) == CONSTRUCTOR
4339       && VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (exp)))
4340     {
4341       assemble_zeros (size);
4342       return;
4343     }
4344
4345   if (TREE_CODE (exp) == FDESC_EXPR)
4346     {
4347 #ifdef ASM_OUTPUT_FDESC
4348       HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0);
4349       tree decl = TREE_OPERAND (exp, 0);
4350       ASM_OUTPUT_FDESC (asm_out_file, decl, part);
4351 #else
4352       gcc_unreachable ();
4353 #endif
4354       return;
4355     }
4356
4357   /* Now output the underlying data.  If we've handling the padding, return.
4358      Otherwise, break and ensure SIZE is the size written.  */
4359   switch (code)
4360     {
4361     case BOOLEAN_TYPE:
4362     case INTEGER_TYPE:
4363     case ENUMERAL_TYPE:
4364     case POINTER_TYPE:
4365     case REFERENCE_TYPE:
4366     case OFFSET_TYPE:
4367     case FIXED_POINT_TYPE:
4368       if (! assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode,
4369                                            EXPAND_INITIALIZER),
4370                               MIN (size, thissize), align, 0))
4371         error ("initializer for integer/fixed-point value is too complicated");
4372       break;
4373
4374     case REAL_TYPE:
4375       if (TREE_CODE (exp) != REAL_CST)
4376         error ("initializer for floating value is not a floating constant");
4377
4378       assemble_real (TREE_REAL_CST (exp), TYPE_MODE (TREE_TYPE (exp)), align);
4379       break;
4380
4381     case COMPLEX_TYPE:
4382       output_constant (TREE_REALPART (exp), thissize / 2, align);
4383       output_constant (TREE_IMAGPART (exp), thissize / 2,
4384                        min_align (align, BITS_PER_UNIT * (thissize / 2)));
4385       break;
4386
4387     case ARRAY_TYPE:
4388     case VECTOR_TYPE:
4389       switch (TREE_CODE (exp))
4390         {
4391         case CONSTRUCTOR:
4392           output_constructor (exp, size, align);
4393           return;
4394         case STRING_CST:
4395           thissize = MIN ((unsigned HOST_WIDE_INT)TREE_STRING_LENGTH (exp),
4396                           size);
4397           assemble_string (TREE_STRING_POINTER (exp), thissize);
4398           break;
4399
4400         case VECTOR_CST:
4401           {
4402             int elt_size;
4403             tree link;
4404             unsigned int nalign;
4405             enum machine_mode inner;
4406
4407             inner = TYPE_MODE (TREE_TYPE (TREE_TYPE (exp)));
4408             nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
4409
4410             elt_size = GET_MODE_SIZE (inner);
4411
4412             link = TREE_VECTOR_CST_ELTS (exp);
4413             output_constant (TREE_VALUE (link), elt_size, align);
4414             thissize = elt_size;
4415             while ((link = TREE_CHAIN (link)) != NULL)
4416               {
4417                 output_constant (TREE_VALUE (link), elt_size, nalign);
4418                 thissize += elt_size;
4419               }
4420             break;
4421           }
4422         default:
4423           gcc_unreachable ();
4424         }
4425       break;
4426
4427     case RECORD_TYPE:
4428     case UNION_TYPE:
4429       gcc_assert (TREE_CODE (exp) == CONSTRUCTOR);
4430       output_constructor (exp, size, align);
4431       return;
4432
4433     case ERROR_MARK:
4434       return;
4435
4436     default:
4437       gcc_unreachable ();
4438     }
4439
4440   if (size > thissize)
4441     assemble_zeros (size - thissize);
4442 }
4443
4444 \f
4445 /* Subroutine of output_constructor, used for computing the size of
4446    arrays of unspecified length.  VAL must be a CONSTRUCTOR of an array
4447    type with an unspecified upper bound.  */
4448
4449 static unsigned HOST_WIDE_INT
4450 array_size_for_constructor (tree val)
4451 {
4452   tree max_index, i;
4453   unsigned HOST_WIDE_INT cnt;
4454   tree index, value, tmp;
4455
4456   /* This code used to attempt to handle string constants that are not
4457      arrays of single-bytes, but nothing else does, so there's no point in
4458      doing it here.  */
4459   if (TREE_CODE (val) == STRING_CST)
4460     return TREE_STRING_LENGTH (val);
4461
4462   max_index = NULL_TREE;
4463   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (val), cnt, index, value)
4464     {
4465       if (TREE_CODE (index) == RANGE_EXPR)
4466         index = TREE_OPERAND (index, 1);
4467       if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
4468         max_index = index;
4469     }
4470
4471   if (max_index == NULL_TREE)
4472     return 0;
4473
4474   /* Compute the total number of array elements.  */
4475   tmp = TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)));
4476   i = size_binop (MINUS_EXPR, fold_convert (sizetype, max_index),
4477                   fold_convert (sizetype, tmp));
4478   i = size_binop (PLUS_EXPR, i, build_int_cst (sizetype, 1));
4479
4480   /* Multiply by the array element unit size to find number of bytes.  */
4481   i = size_binop (MULT_EXPR, i, TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (val))));
4482
4483   return tree_low_cst (i, 1);
4484 }
4485
4486 /* Subroutine of output_constant, used for CONSTRUCTORs (aggregate constants).
4487    Generate at least SIZE bytes, padding if necessary.  */
4488
4489 static void
4490 output_constructor (tree exp, unsigned HOST_WIDE_INT size,
4491                     unsigned int align)
4492 {
4493   tree type = TREE_TYPE (exp);
4494   tree field = 0;
4495   tree min_index = 0;
4496   /* Number of bytes output or skipped so far.
4497      In other words, current position within the constructor.  */
4498   HOST_WIDE_INT total_bytes = 0;
4499   /* Nonzero means BYTE contains part of a byte, to be output.  */
4500   int byte_buffer_in_use = 0;
4501   int byte = 0;
4502   unsigned HOST_WIDE_INT cnt;
4503   constructor_elt *ce;
4504
4505   gcc_assert (HOST_BITS_PER_WIDE_INT >= BITS_PER_UNIT);
4506
4507   if (TREE_CODE (type) == RECORD_TYPE)
4508     field = TYPE_FIELDS (type);
4509
4510   if (TREE_CODE (type) == ARRAY_TYPE
4511       && TYPE_DOMAIN (type) != 0)
4512     min_index = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
4513
4514   /* As LINK goes through the elements of the constant,
4515      FIELD goes through the structure fields, if the constant is a structure.
4516      if the constant is a union, then we override this,
4517      by getting the field from the TREE_LIST element.
4518      But the constant could also be an array.  Then FIELD is zero.
4519
4520      There is always a maximum of one element in the chain LINK for unions
4521      (even if the initializer in a source program incorrectly contains
4522      more one).  */
4523   for (cnt = 0;
4524        VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (exp), cnt, ce);
4525        cnt++, field = field ? TREE_CHAIN (field) : 0)
4526     {
4527       tree val = ce->value;
4528       tree index = 0;
4529
4530       /* The element in a union constructor specifies the proper field
4531          or index.  */
4532       if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
4533            || TREE_CODE (type) == QUAL_UNION_TYPE)
4534           && ce->index != 0)
4535         field = ce->index;
4536
4537       else if (TREE_CODE (type) == ARRAY_TYPE)
4538         index = ce->index;
4539
4540 #ifdef ASM_COMMENT_START
4541       if (field && flag_verbose_asm)
4542         fprintf (asm_out_file, "%s %s:\n",
4543                  ASM_COMMENT_START,
4544                  DECL_NAME (field)
4545                  ? IDENTIFIER_POINTER (DECL_NAME (field))
4546                  : "<anonymous>");
4547 #endif
4548
4549       /* Eliminate the marker that makes a cast not be an lvalue.  */
4550       if (val != 0)
4551         STRIP_NOPS (val);
4552
4553       if (index && TREE_CODE (index) == RANGE_EXPR)
4554         {
4555           unsigned HOST_WIDE_INT fieldsize
4556             = int_size_in_bytes (TREE_TYPE (type));
4557           HOST_WIDE_INT lo_index = tree_low_cst (TREE_OPERAND (index, 0), 0);
4558           HOST_WIDE_INT hi_index = tree_low_cst (TREE_OPERAND (index, 1), 0);
4559           HOST_WIDE_INT index;
4560           unsigned int align2 = min_align (align, fieldsize * BITS_PER_UNIT);
4561
4562           for (index = lo_index; index <= hi_index; index++)
4563             {
4564               /* Output the element's initial value.  */
4565               if (val == 0)
4566                 assemble_zeros (fieldsize);
4567               else
4568                 output_constant (val, fieldsize, align2);
4569
4570               /* Count its size.  */
4571               total_bytes += fieldsize;
4572             }
4573         }
4574       else if (field == 0 || !DECL_BIT_FIELD (field))
4575         {
4576           /* An element that is not a bit-field.  */
4577
4578           unsigned HOST_WIDE_INT fieldsize;
4579           /* Since this structure is static,
4580              we know the positions are constant.  */
4581           HOST_WIDE_INT pos = field ? int_byte_position (field) : 0;
4582           unsigned int align2;
4583
4584           if (index != 0)
4585             pos = (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (val)), 1)
4586                    * (tree_low_cst (index, 0) - tree_low_cst (min_index, 0)));
4587
4588           /* Output any buffered-up bit-fields preceding this element.  */
4589           if (byte_buffer_in_use)
4590             {
4591               assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4592               total_bytes++;
4593               byte_buffer_in_use = 0;
4594             }
4595
4596           /* Advance to offset of this element.
4597              Note no alignment needed in an array, since that is guaranteed
4598              if each element has the proper size.  */
4599           if ((field != 0 || index != 0) && pos != total_bytes)
4600             {
4601               gcc_assert (pos >= total_bytes);
4602               assemble_zeros (pos - total_bytes);
4603               total_bytes = pos;
4604             }
4605
4606           /* Find the alignment of this element.  */
4607           align2 = min_align (align, BITS_PER_UNIT * pos);
4608
4609           /* Determine size this element should occupy.  */
4610           if (field)
4611             {
4612               fieldsize = 0;
4613
4614               /* If this is an array with an unspecified upper bound,
4615                  the initializer determines the size.  */
4616               /* ??? This ought to only checked if DECL_SIZE_UNIT is NULL,
4617                  but we cannot do this until the deprecated support for
4618                  initializing zero-length array members is removed.  */
4619               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
4620                   && TYPE_DOMAIN (TREE_TYPE (field))
4621                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
4622                 {
4623                   fieldsize = array_size_for_constructor (val);
4624                   /* Given a non-empty initialization, this field had
4625                      better be last.  */
4626                   gcc_assert (!fieldsize || !TREE_CHAIN (field));
4627                 }
4628               else if (DECL_SIZE_UNIT (field))
4629                 {
4630                   /* ??? This can't be right.  If the decl size overflows
4631                      a host integer we will silently emit no data.  */
4632                   if (host_integerp (DECL_SIZE_UNIT (field), 1))
4633                     fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 1);
4634                 }
4635             }
4636           else
4637             fieldsize = int_size_in_bytes (TREE_TYPE (type));
4638
4639           /* Output the element's initial value.  */
4640           if (val == 0)
4641             assemble_zeros (fieldsize);
4642           else
4643             output_constant (val, fieldsize, align2);
4644
4645           /* Count its size.  */
4646           total_bytes += fieldsize;
4647         }
4648       else if (val != 0 && TREE_CODE (val) != INTEGER_CST)
4649         error ("invalid initial value for member %qs",
4650                IDENTIFIER_POINTER (DECL_NAME (field)));
4651       else
4652         {
4653           /* Element that is a bit-field.  */
4654
4655           HOST_WIDE_INT next_offset = int_bit_position (field);
4656           HOST_WIDE_INT end_offset
4657             = (next_offset + tree_low_cst (DECL_SIZE (field), 1));
4658
4659           if (val == 0)
4660             val = integer_zero_node;
4661
4662           /* If this field does not start in this (or, next) byte,
4663              skip some bytes.  */
4664           if (next_offset / BITS_PER_UNIT != total_bytes)
4665             {
4666               /* Output remnant of any bit field in previous bytes.  */
4667               if (byte_buffer_in_use)
4668                 {
4669                   assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4670                   total_bytes++;
4671                   byte_buffer_in_use = 0;
4672                 }
4673
4674               /* If still not at proper byte, advance to there.  */
4675               if (next_offset / BITS_PER_UNIT != total_bytes)
4676                 {
4677                   gcc_assert (next_offset / BITS_PER_UNIT >= total_bytes);
4678                   assemble_zeros (next_offset / BITS_PER_UNIT - total_bytes);
4679                   total_bytes = next_offset / BITS_PER_UNIT;
4680                 }
4681             }
4682
4683           if (! byte_buffer_in_use)
4684             byte = 0;
4685
4686           /* We must split the element into pieces that fall within
4687              separate bytes, and combine each byte with previous or
4688              following bit-fields.  */
4689
4690           /* next_offset is the offset n fbits from the beginning of
4691              the structure to the next bit of this element to be processed.
4692              end_offset is the offset of the first bit past the end of
4693              this element.  */
4694           while (next_offset < end_offset)
4695             {
4696               int this_time;
4697               int shift;
4698               HOST_WIDE_INT value;
4699               HOST_WIDE_INT next_byte = next_offset / BITS_PER_UNIT;
4700               HOST_WIDE_INT next_bit = next_offset % BITS_PER_UNIT;
4701
4702               /* Advance from byte to byte
4703                  within this element when necessary.  */
4704               while (next_byte != total_bytes)
4705                 {
4706                   assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4707                   total_bytes++;
4708                   byte = 0;
4709                 }
4710
4711               /* Number of bits we can process at once
4712                  (all part of the same byte).  */
4713               this_time = MIN (end_offset - next_offset,
4714                                BITS_PER_UNIT - next_bit);
4715               if (BYTES_BIG_ENDIAN)
4716                 {
4717                   /* On big-endian machine, take the most significant bits
4718                      first (of the bits that are significant)
4719                      and put them into bytes from the most significant end.  */
4720                   shift = end_offset - next_offset - this_time;
4721
4722                   /* Don't try to take a bunch of bits that cross
4723                      the word boundary in the INTEGER_CST. We can
4724                      only select bits from the LOW or HIGH part
4725                      not from both.  */
4726                   if (shift < HOST_BITS_PER_WIDE_INT
4727                       && shift + this_time > HOST_BITS_PER_WIDE_INT)
4728                     {
4729                       this_time = shift + this_time - HOST_BITS_PER_WIDE_INT;
4730                       shift = HOST_BITS_PER_WIDE_INT;
4731                     }
4732
4733                   /* Now get the bits from the appropriate constant word.  */
4734                   if (shift < HOST_BITS_PER_WIDE_INT)
4735                     value = TREE_INT_CST_LOW (val);
4736                   else
4737                     {
4738                       gcc_assert (shift < 2 * HOST_BITS_PER_WIDE_INT);
4739                       value = TREE_INT_CST_HIGH (val);
4740                       shift -= HOST_BITS_PER_WIDE_INT;
4741                     }
4742
4743                   /* Get the result. This works only when:
4744                      1 <= this_time <= HOST_BITS_PER_WIDE_INT.  */
4745                   byte |= (((value >> shift)
4746                             & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4747                            << (BITS_PER_UNIT - this_time - next_bit));
4748                 }
4749               else
4750                 {
4751                   /* On little-endian machines,
4752                      take first the least significant bits of the value
4753                      and pack them starting at the least significant
4754                      bits of the bytes.  */
4755                   shift = next_offset - int_bit_position (field);
4756
4757                   /* Don't try to take a bunch of bits that cross
4758                      the word boundary in the INTEGER_CST. We can
4759                      only select bits from the LOW or HIGH part
4760                      not from both.  */
4761                   if (shift < HOST_BITS_PER_WIDE_INT
4762                       && shift + this_time > HOST_BITS_PER_WIDE_INT)
4763                     this_time = (HOST_BITS_PER_WIDE_INT - shift);
4764
4765                   /* Now get the bits from the appropriate constant word.  */
4766                   if (shift < HOST_BITS_PER_WIDE_INT)
4767                     value = TREE_INT_CST_LOW (val);
4768                   else
4769                     {
4770                       gcc_assert (shift < 2 * HOST_BITS_PER_WIDE_INT);
4771                       value = TREE_INT_CST_HIGH (val);
4772                       shift -= HOST_BITS_PER_WIDE_INT;
4773                     }
4774
4775                   /* Get the result. This works only when:
4776                      1 <= this_time <= HOST_BITS_PER_WIDE_INT.  */
4777                   byte |= (((value >> shift)
4778                             & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4779                            << next_bit);
4780                 }
4781
4782               next_offset += this_time;
4783               byte_buffer_in_use = 1;
4784             }
4785         }
4786     }
4787
4788   if (byte_buffer_in_use)
4789     {
4790       assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4791       total_bytes++;
4792     }
4793
4794   if ((unsigned HOST_WIDE_INT)total_bytes < size)
4795     assemble_zeros (size - total_bytes);
4796 }
4797
4798 /* This TREE_LIST contains any weak symbol declarations waiting
4799    to be emitted.  */
4800 static GTY(()) tree weak_decls;
4801
4802 /* Mark DECL as weak.  */
4803
4804 static void
4805 mark_weak (tree decl)
4806 {
4807   DECL_WEAK (decl) = 1;
4808
4809   if (DECL_RTL_SET_P (decl)
4810       && MEM_P (DECL_RTL (decl))
4811       && XEXP (DECL_RTL (decl), 0)
4812       && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF)
4813     SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1;
4814 }
4815
4816 /* Merge weak status between NEWDECL and OLDDECL.  */
4817
4818 void
4819 merge_weak (tree newdecl, tree olddecl)
4820 {
4821   if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
4822     {
4823       if (DECL_WEAK (newdecl) && SUPPORTS_WEAK)
4824         {
4825           tree *pwd;
4826           /* We put the NEWDECL on the weak_decls list at some point
4827              and OLDDECL as well.  Keep just OLDDECL on the list.  */
4828           for (pwd = &weak_decls; *pwd; pwd = &TREE_CHAIN (*pwd))
4829             if (TREE_VALUE (*pwd) == newdecl)
4830               {
4831                 *pwd = TREE_CHAIN (*pwd);
4832                 break;
4833               }
4834         }
4835       return;
4836     }
4837
4838   if (DECL_WEAK (newdecl))
4839     {
4840       tree wd;
4841
4842       /* NEWDECL is weak, but OLDDECL is not.  */
4843
4844       /* If we already output the OLDDECL, we're in trouble; we can't
4845          go back and make it weak.  This error cannot be caught in
4846          declare_weak because the NEWDECL and OLDDECL was not yet
4847          been merged; therefore, TREE_ASM_WRITTEN was not set.  */
4848       if (TREE_ASM_WRITTEN (olddecl))
4849         error ("weak declaration of %q+D must precede definition",
4850                newdecl);
4851
4852       /* If we've already generated rtl referencing OLDDECL, we may
4853          have done so in a way that will not function properly with
4854          a weak symbol.  */
4855       else if (TREE_USED (olddecl)
4856                && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)))
4857         warning (0, "weak declaration of %q+D after first use results "
4858                  "in unspecified behavior", newdecl);
4859
4860       if (SUPPORTS_WEAK)
4861         {
4862           /* We put the NEWDECL on the weak_decls list at some point.
4863              Replace it with the OLDDECL.  */
4864           for (wd = weak_decls; wd; wd = TREE_CHAIN (wd))
4865             if (TREE_VALUE (wd) == newdecl)
4866               {
4867                 TREE_VALUE (wd) = olddecl;
4868                 break;
4869               }
4870           /* We may not find the entry on the list.  If NEWDECL is a
4871              weak alias, then we will have already called
4872              globalize_decl to remove the entry; in that case, we do
4873              not need to do anything.  */
4874         }
4875
4876       /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping.  */
4877       mark_weak (olddecl);
4878     }
4879   else
4880     /* OLDDECL was weak, but NEWDECL was not explicitly marked as
4881        weak.  Just update NEWDECL to indicate that it's weak too.  */
4882     mark_weak (newdecl);
4883 }
4884
4885 /* Declare DECL to be a weak symbol.  */
4886
4887 void
4888 declare_weak (tree decl)
4889 {
4890   if (! TREE_PUBLIC (decl))
4891     error ("weak declaration of %q+D must be public", decl);
4892   else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
4893     error ("weak declaration of %q+D must precede definition", decl);
4894   else if (SUPPORTS_WEAK)
4895     {
4896       if (! DECL_WEAK (decl))
4897         weak_decls = tree_cons (NULL, decl, weak_decls);
4898     }
4899   else
4900     warning (0, "weak declaration of %q+D not supported", decl);
4901
4902   mark_weak (decl);
4903 }
4904
4905 static void
4906 weak_finish_1 (tree decl)
4907 {
4908 #if defined (ASM_WEAKEN_DECL) || defined (ASM_WEAKEN_LABEL)
4909   const char *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4910 #endif
4911
4912   if (! TREE_USED (decl))
4913     return;
4914
4915 #ifdef ASM_WEAKEN_DECL
4916   ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL);
4917 #else
4918 #ifdef ASM_WEAKEN_LABEL
4919   ASM_WEAKEN_LABEL (asm_out_file, name);
4920 #else
4921 #ifdef ASM_OUTPUT_WEAK_ALIAS
4922   {
4923     static bool warn_once = 0;
4924     if (! warn_once)
4925       {
4926         warning (0, "only weak aliases are supported in this configuration");
4927         warn_once = 1;
4928       }
4929     return;
4930   }
4931 #endif
4932 #endif
4933 #endif
4934 }
4935
4936 /* This TREE_LIST contains weakref targets.  */
4937
4938 static GTY(()) tree weakref_targets;
4939
4940 /* Forward declaration.  */
4941 static tree find_decl_and_mark_needed (tree decl, tree target);
4942
4943 /* Emit any pending weak declarations.  */
4944
4945 void
4946 weak_finish (void)
4947 {
4948   tree t;
4949
4950   for (t = weakref_targets; t; t = TREE_CHAIN (t))
4951     {
4952       tree alias_decl = TREE_PURPOSE (t);
4953       tree target = ultimate_transparent_alias_target (&TREE_VALUE (t));
4954
4955       if (! TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (alias_decl)))
4956         /* Remove alias_decl from the weak list, but leave entries for
4957            the target alone.  */
4958         target = NULL_TREE;
4959 #ifndef ASM_OUTPUT_WEAKREF
4960       else if (! TREE_SYMBOL_REFERENCED (target))
4961         {
4962           /* Use ASM_WEAKEN_LABEL only if ASM_WEAKEN_DECL is not
4963              defined, otherwise we and weak_finish_1 would use
4964              different macros.  */
4965 # if defined ASM_WEAKEN_LABEL && ! defined ASM_WEAKEN_DECL
4966           ASM_WEAKEN_LABEL (asm_out_file, IDENTIFIER_POINTER (target));
4967 # else
4968           tree decl = find_decl_and_mark_needed (alias_decl, target);
4969
4970           if (! decl)
4971             {
4972               decl = build_decl (TREE_CODE (alias_decl), target,
4973                                  TREE_TYPE (alias_decl));
4974
4975               DECL_EXTERNAL (decl) = 1;
4976               TREE_PUBLIC (decl) = 1;
4977               DECL_ARTIFICIAL (decl) = 1;
4978               TREE_NOTHROW (decl) = TREE_NOTHROW (alias_decl);
4979               TREE_USED (decl) = 1;
4980             }
4981
4982           weak_finish_1 (decl);
4983 # endif
4984         }
4985 #endif
4986
4987       {
4988         tree *p;
4989         tree t2;
4990
4991         /* Remove the alias and the target from the pending weak list
4992            so that we do not emit any .weak directives for the former,
4993            nor multiple .weak directives for the latter.  */
4994         for (p = &weak_decls; (t2 = *p) ; )
4995           {
4996             if (TREE_VALUE (t2) == alias_decl
4997                 || target == DECL_ASSEMBLER_NAME (TREE_VALUE (t2)))
4998               *p = TREE_CHAIN (t2);
4999             else
5000               p = &TREE_CHAIN (t2);
5001           }
5002
5003         /* Remove other weakrefs to the same target, to speed things up.  */
5004         for (p = &TREE_CHAIN (t); (t2 = *p) ; )
5005           {
5006             if (target == ultimate_transparent_alias_target (&TREE_VALUE (t2)))
5007               *p = TREE_CHAIN (t2);
5008             else
5009               p = &TREE_CHAIN (t2);
5010           }
5011       }
5012     }
5013
5014   for (t = weak_decls; t; t = TREE_CHAIN (t))
5015     {
5016       tree decl = TREE_VALUE (t);
5017
5018       weak_finish_1 (decl);
5019     }
5020 }
5021
5022 /* Emit the assembly bits to indicate that DECL is globally visible.  */
5023
5024 static void
5025 globalize_decl (tree decl)
5026 {
5027
5028 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
5029   if (DECL_WEAK (decl))
5030     {
5031       const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
5032       tree *p, t;
5033
5034 #ifdef ASM_WEAKEN_DECL
5035       ASM_WEAKEN_DECL (asm_out_file, decl, name, 0);
5036 #else
5037       ASM_WEAKEN_LABEL (asm_out_file, name);
5038 #endif
5039
5040       /* Remove this function from the pending weak list so that
5041          we do not emit multiple .weak directives for it.  */
5042       for (p = &weak_decls; (t = *p) ; )
5043         {
5044           if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
5045             *p = TREE_CHAIN (t);
5046           else
5047             p = &TREE_CHAIN (t);
5048         }
5049
5050       /* Remove weakrefs to the same target from the pending weakref
5051          list, for the same reason.  */
5052       for (p = &weakref_targets; (t = *p) ; )
5053         {
5054           if (DECL_ASSEMBLER_NAME (decl)
5055               == ultimate_transparent_alias_target (&TREE_VALUE (t)))
5056             *p = TREE_CHAIN (t);
5057           else
5058             p = &TREE_CHAIN (t);
5059         }
5060
5061       return;
5062     }
5063 #endif
5064
5065   targetm.asm_out.globalize_decl_name (asm_out_file, decl);
5066 }
5067
5068 /* We have to be able to tell cgraph about the needed-ness of the target
5069    of an alias.  This requires that the decl have been defined.  Aliases
5070    that precede their definition have to be queued for later processing.  */
5071
5072 typedef struct alias_pair GTY(())
5073 {
5074   tree decl;
5075   tree target;
5076 } alias_pair;
5077
5078 /* Define gc'd vector type.  */
5079 DEF_VEC_O(alias_pair);
5080 DEF_VEC_ALLOC_O(alias_pair,gc);
5081
5082 static GTY(()) VEC(alias_pair,gc) *alias_pairs;
5083
5084 /* Given an assembly name, find the decl it is associated with.  At the
5085    same time, mark it needed for cgraph.  */
5086
5087 static tree
5088 find_decl_and_mark_needed (tree decl, tree target)
5089 {
5090   struct cgraph_node *fnode = NULL;
5091   struct varpool_node *vnode = NULL;
5092
5093   if (TREE_CODE (decl) == FUNCTION_DECL)
5094     {
5095       fnode = cgraph_node_for_asm (target);
5096       if (fnode == NULL)
5097         vnode = varpool_node_for_asm (target);
5098     }
5099   else
5100     {
5101       vnode = varpool_node_for_asm (target);
5102       if (vnode == NULL)
5103         fnode = cgraph_node_for_asm (target);
5104     }
5105
5106   if (fnode)
5107     {
5108       /* We can't mark function nodes as used after cgraph global info
5109          is finished.  This wouldn't generally be necessary, but C++
5110          virtual table thunks are introduced late in the game and
5111          might seem like they need marking, although in fact they
5112          don't.  */
5113       if (! cgraph_global_info_ready)
5114         cgraph_mark_needed_node (fnode);
5115       return fnode->decl;
5116     }
5117   else if (vnode)
5118     {
5119       varpool_mark_needed_node (vnode);
5120       return vnode->decl;
5121     }
5122   else
5123     return NULL_TREE;
5124 }
5125
5126 /* Output the assembler code for a define (equate) using ASM_OUTPUT_DEF
5127    or ASM_OUTPUT_DEF_FROM_DECLS.  The function defines the symbol whose
5128    tree node is DECL to have the value of the tree node TARGET.  */
5129
5130 static void
5131 do_assemble_alias (tree decl, tree target)
5132 {
5133   if (TREE_ASM_WRITTEN (decl))
5134     return;
5135
5136   TREE_ASM_WRITTEN (decl) = 1;
5137   TREE_ASM_WRITTEN (DECL_ASSEMBLER_NAME (decl)) = 1;
5138
5139   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5140     {
5141       ultimate_transparent_alias_target (&target);
5142
5143       if (!targetm.have_tls
5144           && TREE_CODE (decl) == VAR_DECL
5145           && DECL_THREAD_LOCAL_P (decl))
5146         {
5147           decl = emutls_decl (decl);
5148           target = get_emutls_object_name (target);
5149         }
5150
5151       if (!TREE_SYMBOL_REFERENCED (target))
5152         weakref_targets = tree_cons (decl, target, weakref_targets);
5153
5154 #ifdef ASM_OUTPUT_WEAKREF
5155       ASM_OUTPUT_WEAKREF (asm_out_file, decl,
5156                           IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
5157                           IDENTIFIER_POINTER (target));
5158 #else
5159       if (!SUPPORTS_WEAK)
5160         {
5161           error ("%Jweakref is not supported in this configuration", decl);
5162           return;
5163         }
5164 #endif
5165       return;
5166     }
5167
5168   if (!targetm.have_tls
5169       && TREE_CODE (decl) == VAR_DECL
5170       && DECL_THREAD_LOCAL_P (decl))
5171     {
5172       decl = emutls_decl (decl);
5173       target = get_emutls_object_name (target);
5174     }
5175
5176 #ifdef ASM_OUTPUT_DEF
5177   /* Make name accessible from other files, if appropriate.  */
5178
5179   if (TREE_PUBLIC (decl))
5180     {
5181       globalize_decl (decl);
5182       maybe_assemble_visibility (decl);
5183     }
5184
5185 # ifdef ASM_OUTPUT_DEF_FROM_DECLS
5186   ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
5187 # else
5188   ASM_OUTPUT_DEF (asm_out_file,
5189                   IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
5190                   IDENTIFIER_POINTER (target));
5191 # endif
5192 #elif defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
5193   {
5194     const char *name;
5195     tree *p, t;
5196
5197     name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5198 # ifdef ASM_WEAKEN_DECL
5199     ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target));
5200 # else
5201     ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target));
5202 # endif
5203     /* Remove this function from the pending weak list so that
5204        we do not emit multiple .weak directives for it.  */
5205     for (p = &weak_decls; (t = *p) ; )
5206       if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
5207         *p = TREE_CHAIN (t);
5208       else
5209         p = &TREE_CHAIN (t);
5210
5211     /* Remove weakrefs to the same target from the pending weakref
5212        list, for the same reason.  */
5213     for (p = &weakref_targets; (t = *p) ; )
5214       {
5215         if (DECL_ASSEMBLER_NAME (decl)
5216             == ultimate_transparent_alias_target (&TREE_VALUE (t)))
5217           *p = TREE_CHAIN (t);
5218         else
5219           p = &TREE_CHAIN (t);
5220       }
5221   }
5222 #endif
5223 }
5224
5225 /* First pass of completing pending aliases.  Make sure that cgraph knows
5226    which symbols will be required.  */
5227
5228 void
5229 finish_aliases_1 (void)
5230 {
5231   unsigned i;
5232   alias_pair *p;
5233
5234   for (i = 0; VEC_iterate (alias_pair, alias_pairs, i, p); i++)
5235     {
5236       tree target_decl;
5237
5238       target_decl = find_decl_and_mark_needed (p->decl, p->target);
5239       if (target_decl == NULL)
5240         {
5241           if (! lookup_attribute ("weakref", DECL_ATTRIBUTES (p->decl)))
5242             error ("%q+D aliased to undefined symbol %qs",
5243                    p->decl, IDENTIFIER_POINTER (p->target));
5244         }
5245       else if (DECL_EXTERNAL (target_decl)
5246                && ! lookup_attribute ("weakref", DECL_ATTRIBUTES (p->decl)))
5247         error ("%q+D aliased to external symbol %qs",
5248                p->decl, IDENTIFIER_POINTER (p->target));
5249     }
5250 }
5251
5252 /* Second pass of completing pending aliases.  Emit the actual assembly.
5253    This happens at the end of compilation and thus it is assured that the
5254    target symbol has been emitted.  */
5255
5256 void
5257 finish_aliases_2 (void)
5258 {
5259   unsigned i;
5260   alias_pair *p;
5261
5262   for (i = 0; VEC_iterate (alias_pair, alias_pairs, i, p); i++)
5263     do_assemble_alias (p->decl, p->target);
5264
5265   VEC_truncate (alias_pair, alias_pairs, 0);
5266 }
5267
5268 /* Emit an assembler directive to make the symbol for DECL an alias to
5269    the symbol for TARGET.  */
5270
5271 void
5272 assemble_alias (tree decl, tree target)
5273 {
5274   tree target_decl;
5275   bool is_weakref = false;
5276
5277   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5278     {
5279       tree alias = DECL_ASSEMBLER_NAME (decl);
5280
5281       is_weakref = true;
5282
5283       ultimate_transparent_alias_target (&target);
5284
5285       if (alias == target)
5286         error ("weakref %q+D ultimately targets itself", decl);
5287       else
5288         {
5289 #ifndef ASM_OUTPUT_WEAKREF
5290           IDENTIFIER_TRANSPARENT_ALIAS (alias) = 1;
5291           TREE_CHAIN (alias) = target;
5292 #endif
5293         }
5294       if (TREE_PUBLIC (decl))
5295         error ("weakref %q+D must have static linkage", decl);
5296     }
5297   else
5298     {
5299 #if !defined (ASM_OUTPUT_DEF)
5300 # if !defined(ASM_OUTPUT_WEAK_ALIAS) && !defined (ASM_WEAKEN_DECL)
5301       error ("%Jalias definitions not supported in this configuration", decl);
5302       return;
5303 # else
5304       if (!DECL_WEAK (decl))
5305         {
5306           error ("%Jonly weak aliases are supported in this configuration", decl);
5307           return;
5308         }
5309 # endif
5310 #endif
5311     }
5312
5313   /* We must force creation of DECL_RTL for debug info generation, even though
5314      we don't use it here.  */
5315   make_decl_rtl (decl);
5316   TREE_USED (decl) = 1;
5317
5318   /* A quirk of the initial implementation of aliases required that the user
5319      add "extern" to all of them.  Which is silly, but now historical.  Do
5320      note that the symbol is in fact locally defined.  */
5321   if (! is_weakref)
5322     DECL_EXTERNAL (decl) = 0;
5323
5324   /* Allow aliases to aliases.  */
5325   if (TREE_CODE (decl) == FUNCTION_DECL)
5326     cgraph_node (decl)->alias = true;
5327   else
5328     varpool_node (decl)->alias = true;
5329
5330   /* If the target has already been emitted, we don't have to queue the
5331      alias.  This saves a tad of memory.  */
5332   target_decl = find_decl_and_mark_needed (decl, target);
5333   if (target_decl && TREE_ASM_WRITTEN (target_decl))
5334     do_assemble_alias (decl, target);
5335   else
5336     {
5337       alias_pair *p = VEC_safe_push (alias_pair, gc, alias_pairs, NULL);
5338       p->decl = decl;
5339       p->target = target;
5340     }
5341 }
5342
5343 /* Emit an assembler directive to set symbol for DECL visibility to
5344    the visibility type VIS, which must not be VISIBILITY_DEFAULT.  */
5345
5346 void
5347 default_assemble_visibility (tree decl, int vis)
5348 {
5349   static const char * const visibility_types[] = {
5350     NULL, "protected", "hidden", "internal"
5351   };
5352
5353   const char *name, *type;
5354
5355   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5356   type = visibility_types[vis];
5357
5358 #ifdef HAVE_GAS_HIDDEN
5359   fprintf (asm_out_file, "\t.%s\t", type);
5360   assemble_name (asm_out_file, name);
5361   fprintf (asm_out_file, "\n");
5362 #else
5363   warning (OPT_Wattributes, "visibility attribute not supported "
5364            "in this configuration; ignored");
5365 #endif
5366 }
5367
5368 /* A helper function to call assemble_visibility when needed for a decl.  */
5369
5370 int
5371 maybe_assemble_visibility (tree decl)
5372 {
5373   enum symbol_visibility vis = DECL_VISIBILITY (decl);
5374
5375   if (vis != VISIBILITY_DEFAULT)
5376     {
5377       targetm.asm_out.visibility (decl, vis);
5378       return 1;
5379     }
5380   else
5381     return 0;
5382 }
5383
5384 /* Returns 1 if the target configuration supports defining public symbols
5385    so that one of them will be chosen at link time instead of generating a
5386    multiply-defined symbol error, whether through the use of weak symbols or
5387    a target-specific mechanism for having duplicates discarded.  */
5388
5389 int
5390 supports_one_only (void)
5391 {
5392   if (SUPPORTS_ONE_ONLY)
5393     return 1;
5394   return SUPPORTS_WEAK;
5395 }
5396
5397 /* Set up DECL as a public symbol that can be defined in multiple
5398    translation units without generating a linker error.  */
5399
5400 void
5401 make_decl_one_only (tree decl)
5402 {
5403   gcc_assert (TREE_CODE (decl) == VAR_DECL
5404               || TREE_CODE (decl) == FUNCTION_DECL);
5405
5406   TREE_PUBLIC (decl) = 1;
5407
5408   if (SUPPORTS_ONE_ONLY)
5409     {
5410 #ifdef MAKE_DECL_ONE_ONLY
5411       MAKE_DECL_ONE_ONLY (decl);
5412 #endif
5413       DECL_ONE_ONLY (decl) = 1;
5414     }
5415   else if (TREE_CODE (decl) == VAR_DECL
5416       && (DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node))
5417     DECL_COMMON (decl) = 1;
5418   else
5419     {
5420       gcc_assert (SUPPORTS_WEAK);
5421       DECL_WEAK (decl) = 1;
5422     }
5423 }
5424
5425 void
5426 init_varasm_once (void)
5427 {
5428   section_htab = htab_create_ggc (31, section_entry_hash,
5429                                   section_entry_eq, NULL);
5430   object_block_htab = htab_create_ggc (31, object_block_entry_hash,
5431                                        object_block_entry_eq, NULL);
5432   const_desc_htab = htab_create_ggc (1009, const_desc_hash,
5433                                      const_desc_eq, NULL);
5434
5435   const_alias_set = new_alias_set ();
5436   shared_constant_pool = create_constant_pool ();
5437
5438 #ifdef TEXT_SECTION_ASM_OP
5439   text_section = get_unnamed_section (SECTION_CODE, output_section_asm_op,
5440                                       TEXT_SECTION_ASM_OP);
5441 #endif
5442
5443 #ifdef DATA_SECTION_ASM_OP
5444   data_section = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
5445                                       DATA_SECTION_ASM_OP);
5446 #endif
5447
5448 #ifdef SDATA_SECTION_ASM_OP
5449   sdata_section = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
5450                                        SDATA_SECTION_ASM_OP);
5451 #endif
5452
5453 #ifdef READONLY_DATA_SECTION_ASM_OP
5454   readonly_data_section = get_unnamed_section (0, output_section_asm_op,
5455                                                READONLY_DATA_SECTION_ASM_OP);
5456 #endif
5457
5458 #ifdef CTORS_SECTION_ASM_OP
5459   ctors_section = get_unnamed_section (0, output_section_asm_op,
5460                                        CTORS_SECTION_ASM_OP);
5461 #endif
5462
5463 #ifdef DTORS_SECTION_ASM_OP
5464   dtors_section = get_unnamed_section (0, output_section_asm_op,
5465                                        DTORS_SECTION_ASM_OP);
5466 #endif
5467
5468 #ifdef BSS_SECTION_ASM_OP
5469   bss_section = get_unnamed_section (SECTION_WRITE | SECTION_BSS,
5470                                      output_section_asm_op,
5471                                      BSS_SECTION_ASM_OP);
5472 #endif
5473
5474 #ifdef SBSS_SECTION_ASM_OP
5475   sbss_section = get_unnamed_section (SECTION_WRITE | SECTION_BSS,
5476                                       output_section_asm_op,
5477                                       SBSS_SECTION_ASM_OP);
5478 #endif
5479
5480   tls_comm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
5481                                            | SECTION_COMMON, emit_tls_common);
5482   lcomm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
5483                                         | SECTION_COMMON, emit_local);
5484   comm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
5485                                        | SECTION_COMMON, emit_common);
5486
5487 #if defined ASM_OUTPUT_ALIGNED_BSS || defined ASM_OUTPUT_BSS
5488   bss_noswitch_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS,
5489                                                emit_bss);
5490 #endif
5491
5492   targetm.asm_out.init_sections ();
5493
5494   if (readonly_data_section == NULL)
5495     readonly_data_section = text_section;
5496 }
5497
5498 enum tls_model
5499 decl_default_tls_model (const_tree decl)
5500 {
5501   enum tls_model kind;
5502   bool is_local;
5503
5504   is_local = targetm.binds_local_p (decl);
5505   if (!flag_shlib)
5506     {
5507       if (is_local)
5508         kind = TLS_MODEL_LOCAL_EXEC;
5509       else
5510         kind = TLS_MODEL_INITIAL_EXEC;
5511     }
5512
5513   /* Local dynamic is inefficient when we're not combining the
5514      parts of the address.  */
5515   else if (optimize && is_local)
5516     kind = TLS_MODEL_LOCAL_DYNAMIC;
5517   else
5518     kind = TLS_MODEL_GLOBAL_DYNAMIC;
5519   if (kind < flag_tls_default)
5520     kind = flag_tls_default;
5521
5522   return kind;
5523 }
5524
5525 /* Select a set of attributes for section NAME based on the properties
5526    of DECL and whether or not RELOC indicates that DECL's initializer
5527    might contain runtime relocations.
5528
5529    We make the section read-only and executable for a function decl,
5530    read-only for a const data decl, and writable for a non-const data decl.  */
5531
5532 unsigned int
5533 default_section_type_flags (tree decl, const char *name, int reloc)
5534 {
5535   unsigned int flags;
5536
5537   if (decl && TREE_CODE (decl) == FUNCTION_DECL)
5538     flags = SECTION_CODE;
5539   else if (decl && decl_readonly_section (decl, reloc))
5540     flags = 0;
5541   else if (current_function_decl
5542            && cfun
5543            && cfun->unlikely_text_section_name
5544            && strcmp (name, cfun->unlikely_text_section_name) == 0)
5545     flags = SECTION_CODE;
5546   else if (!decl
5547            && (!current_function_decl || !cfun)
5548            && strcmp (name, UNLIKELY_EXECUTED_TEXT_SECTION_NAME) == 0)
5549     flags = SECTION_CODE;
5550   else
5551     flags = SECTION_WRITE;
5552
5553   if (decl && DECL_ONE_ONLY (decl))
5554     flags |= SECTION_LINKONCE;
5555
5556   if (decl && TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl))
5557     flags |= SECTION_TLS | SECTION_WRITE;
5558
5559   if (strcmp (name, ".bss") == 0
5560       || strncmp (name, ".bss.", 5) == 0
5561       || strncmp (name, ".gnu.linkonce.b.", 16) == 0
5562       || strcmp (name, ".sbss") == 0
5563       || strncmp (name, ".sbss.", 6) == 0
5564       || strncmp (name, ".gnu.linkonce.sb.", 17) == 0)
5565     flags |= SECTION_BSS;
5566
5567   if (strcmp (name, ".tdata") == 0
5568       || strncmp (name, ".tdata.", 7) == 0
5569       || strncmp (name, ".gnu.linkonce.td.", 17) == 0)
5570     flags |= SECTION_TLS;
5571
5572   if (strcmp (name, ".tbss") == 0
5573       || strncmp (name, ".tbss.", 6) == 0
5574       || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
5575     flags |= SECTION_TLS | SECTION_BSS;
5576
5577   /* These three sections have special ELF types.  They are neither
5578      SHT_PROGBITS nor SHT_NOBITS, so when changing sections we don't
5579      want to print a section type (@progbits or @nobits).  If someone
5580      is silly enough to emit code or TLS variables to one of these
5581      sections, then don't handle them specially.  */
5582   if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS))
5583       && (strcmp (name, ".init_array") == 0
5584           || strcmp (name, ".fini_array") == 0
5585           || strcmp (name, ".preinit_array") == 0))
5586     flags |= SECTION_NOTYPE;
5587
5588   return flags;
5589 }
5590
5591 /* Return true if the target supports some form of global BSS,
5592    either through bss_noswitch_section, or by selecting a BSS
5593    section in TARGET_ASM_SELECT_SECTION.  */
5594
5595 bool
5596 have_global_bss_p (void)
5597 {
5598   return bss_noswitch_section || targetm.have_switchable_bss_sections;
5599 }
5600
5601 /* Output assembly to switch to section NAME with attribute FLAGS.
5602    Four variants for common object file formats.  */
5603
5604 void
5605 default_no_named_section (const char *name ATTRIBUTE_UNUSED,
5606                           unsigned int flags ATTRIBUTE_UNUSED,
5607                           tree decl ATTRIBUTE_UNUSED)
5608 {
5609   /* Some object formats don't support named sections at all.  The
5610      front-end should already have flagged this as an error.  */
5611   gcc_unreachable ();
5612 }
5613
5614 void
5615 default_elf_asm_named_section (const char *name, unsigned int flags,
5616                                tree decl ATTRIBUTE_UNUSED)
5617 {
5618   char flagchars[10], *f = flagchars;
5619
5620   /* If we have already declared this section, we can use an
5621      abbreviated form to switch back to it -- unless this section is
5622      part of a COMDAT groups, in which case GAS requires the full
5623      declaration every time.  */
5624   if (!(HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
5625       && (flags & SECTION_DECLARED))
5626     {
5627       fprintf (asm_out_file, "\t.section\t%s\n", name);
5628       return;
5629     }
5630
5631   if (!(flags & SECTION_DEBUG))
5632     *f++ = 'a';
5633   if (flags & SECTION_WRITE)
5634     *f++ = 'w';
5635   if (flags & SECTION_CODE)
5636     *f++ = 'x';
5637   if (flags & SECTION_SMALL)
5638     *f++ = 's';
5639   if (flags & SECTION_MERGE)
5640     *f++ = 'M';
5641   if (flags & SECTION_STRINGS)
5642     *f++ = 'S';
5643   if (flags & SECTION_TLS)
5644     *f++ = 'T';
5645   if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
5646     *f++ = 'G';
5647   *f = '\0';
5648
5649   fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
5650
5651   if (!(flags & SECTION_NOTYPE))
5652     {
5653       const char *type;
5654       const char *format;
5655
5656       if (flags & SECTION_BSS)
5657         type = "nobits";
5658       else
5659         type = "progbits";
5660
5661       format = ",@%s";
5662 #ifdef ASM_COMMENT_START
5663       /* On platforms that use "@" as the assembly comment character,
5664          use "%" instead.  */
5665       if (strcmp (ASM_COMMENT_START, "@") == 0)
5666         format = ",%%%s";
5667 #endif
5668       fprintf (asm_out_file, format, type);
5669
5670       if (flags & SECTION_ENTSIZE)
5671         fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
5672       if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
5673         fprintf (asm_out_file, ",%s,comdat",
5674                  lang_hooks.decls.comdat_group (decl));
5675     }
5676
5677   putc ('\n', asm_out_file);
5678 }
5679
5680 void
5681 default_coff_asm_named_section (const char *name, unsigned int flags,
5682                                 tree decl ATTRIBUTE_UNUSED)
5683 {
5684   char flagchars[8], *f = flagchars;
5685
5686   if (flags & SECTION_WRITE)
5687     *f++ = 'w';
5688   if (flags & SECTION_CODE)
5689     *f++ = 'x';
5690   *f = '\0';
5691
5692   fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
5693 }
5694
5695 void
5696 default_pe_asm_named_section (const char *name, unsigned int flags,
5697                               tree decl)
5698 {
5699   default_coff_asm_named_section (name, flags, decl);
5700
5701   if (flags & SECTION_LINKONCE)
5702     {
5703       /* Functions may have been compiled at various levels of
5704          optimization so we can't use `same_size' here.
5705          Instead, have the linker pick one.  */
5706       fprintf (asm_out_file, "\t.linkonce %s\n",
5707                (flags & SECTION_CODE ? "discard" : "same_size"));
5708     }
5709 }
5710 \f
5711 /* The lame default section selector.  */
5712
5713 section *
5714 default_select_section (tree decl, int reloc,
5715                         unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
5716 {
5717   if (DECL_P (decl))
5718     {
5719       if (decl_readonly_section (decl, reloc))
5720         return readonly_data_section;
5721     }
5722   else if (TREE_CODE (decl) == CONSTRUCTOR)
5723     {
5724       if (! ((flag_pic && reloc)
5725              || !TREE_READONLY (decl)
5726              || TREE_SIDE_EFFECTS (decl)
5727              || !TREE_CONSTANT (decl)))
5728         return readonly_data_section;
5729     }
5730   else if (TREE_CODE (decl) == STRING_CST)
5731     return readonly_data_section;
5732   else if (! (flag_pic && reloc))
5733     return readonly_data_section;
5734
5735   return data_section;
5736 }
5737
5738 enum section_category
5739 categorize_decl_for_section (const_tree decl, int reloc)
5740 {
5741   enum section_category ret;
5742
5743   if (TREE_CODE (decl) == FUNCTION_DECL)
5744     return SECCAT_TEXT;
5745   else if (TREE_CODE (decl) == STRING_CST)
5746     {
5747       if (flag_mudflap) /* or !flag_merge_constants */
5748         return SECCAT_RODATA;
5749       else
5750         return SECCAT_RODATA_MERGE_STR;
5751     }
5752   else if (TREE_CODE (decl) == VAR_DECL)
5753     {
5754       if (bss_initializer_p (decl))
5755         ret = SECCAT_BSS;
5756       else if (! TREE_READONLY (decl)
5757                || TREE_SIDE_EFFECTS (decl)
5758                || ! TREE_CONSTANT (DECL_INITIAL (decl)))
5759         {
5760           /* Here the reloc_rw_mask is not testing whether the section should
5761              be read-only or not, but whether the dynamic link will have to
5762              do something.  If so, we wish to segregate the data in order to
5763              minimize cache misses inside the dynamic linker.  */
5764           if (reloc & targetm.asm_out.reloc_rw_mask ())
5765             ret = reloc == 1 ? SECCAT_DATA_REL_LOCAL : SECCAT_DATA_REL;
5766           else
5767             ret = SECCAT_DATA;
5768         }
5769       else if (reloc & targetm.asm_out.reloc_rw_mask ())
5770         ret = reloc == 1 ? SECCAT_DATA_REL_RO_LOCAL : SECCAT_DATA_REL_RO;
5771       else if (reloc || flag_merge_constants < 2)
5772         /* C and C++ don't allow different variables to share the same
5773            location.  -fmerge-all-constants allows even that (at the
5774            expense of not conforming).  */
5775         ret = SECCAT_RODATA;
5776       else if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
5777         ret = SECCAT_RODATA_MERGE_STR_INIT;
5778       else
5779         ret = SECCAT_RODATA_MERGE_CONST;
5780     }
5781   else if (TREE_CODE (decl) == CONSTRUCTOR)
5782     {
5783       if ((reloc & targetm.asm_out.reloc_rw_mask ())
5784           || TREE_SIDE_EFFECTS (decl)
5785           || ! TREE_CONSTANT (decl))
5786         ret = SECCAT_DATA;
5787       else
5788         ret = SECCAT_RODATA;
5789     }
5790   else
5791     ret = SECCAT_RODATA;
5792
5793   /* There are no read-only thread-local sections.  */
5794   if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl))
5795     {
5796       /* Note that this would be *just* SECCAT_BSS, except that there's
5797          no concept of a read-only thread-local-data section.  */
5798       if (ret == SECCAT_BSS
5799           || (flag_zero_initialized_in_bss
5800               && initializer_zerop (DECL_INITIAL (decl))))
5801         ret = SECCAT_TBSS;
5802       else
5803         ret = SECCAT_TDATA;
5804     }
5805
5806   /* If the target uses small data sections, select it.  */
5807   else if (targetm.in_small_data_p (decl))
5808     {
5809       if (ret == SECCAT_BSS)
5810         ret = SECCAT_SBSS;
5811       else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
5812         ret = SECCAT_SRODATA;
5813       else
5814         ret = SECCAT_SDATA;
5815     }
5816
5817   return ret;
5818 }
5819
5820 bool
5821 decl_readonly_section (const_tree decl, int reloc)
5822 {
5823   switch (categorize_decl_for_section (decl, reloc))
5824     {
5825     case SECCAT_RODATA:
5826     case SECCAT_RODATA_MERGE_STR:
5827     case SECCAT_RODATA_MERGE_STR_INIT:
5828     case SECCAT_RODATA_MERGE_CONST:
5829     case SECCAT_SRODATA:
5830       return true;
5831       break;
5832     default:
5833       return false;
5834       break;
5835     }
5836 }
5837
5838 /* Select a section based on the above categorization.  */
5839
5840 section *
5841 default_elf_select_section (tree decl, int reloc,
5842                             unsigned HOST_WIDE_INT align)
5843 {
5844   const char *sname;
5845   switch (categorize_decl_for_section (decl, reloc))
5846     {
5847     case SECCAT_TEXT:
5848       /* We're not supposed to be called on FUNCTION_DECLs.  */
5849       gcc_unreachable ();
5850     case SECCAT_RODATA:
5851       return readonly_data_section;
5852     case SECCAT_RODATA_MERGE_STR:
5853       return mergeable_string_section (decl, align, 0);
5854     case SECCAT_RODATA_MERGE_STR_INIT:
5855       return mergeable_string_section (DECL_INITIAL (decl), align, 0);
5856     case SECCAT_RODATA_MERGE_CONST:
5857       return mergeable_constant_section (DECL_MODE (decl), align, 0);
5858     case SECCAT_SRODATA:
5859       sname = ".sdata2";
5860       break;
5861     case SECCAT_DATA:
5862       return data_section;
5863     case SECCAT_DATA_REL:
5864       sname = ".data.rel";
5865       break;
5866     case SECCAT_DATA_REL_LOCAL:
5867       sname = ".data.rel.local";
5868       break;
5869     case SECCAT_DATA_REL_RO:
5870       sname = ".data.rel.ro";
5871       break;
5872     case SECCAT_DATA_REL_RO_LOCAL:
5873       sname = ".data.rel.ro.local";
5874       break;
5875     case SECCAT_SDATA:
5876       sname = ".sdata";
5877       break;
5878     case SECCAT_TDATA:
5879       sname = ".tdata";
5880       break;
5881     case SECCAT_BSS:
5882       if (bss_section)
5883         return bss_section;
5884       sname = ".bss";
5885       break;
5886     case SECCAT_SBSS:
5887       sname = ".sbss";
5888       break;
5889     case SECCAT_TBSS:
5890       sname = ".tbss";
5891       break;
5892     default:
5893       gcc_unreachable ();
5894     }
5895
5896   if (!DECL_P (decl))
5897     decl = NULL_TREE;
5898   return get_named_section (decl, sname, reloc);
5899 }
5900
5901 /* Construct a unique section name based on the decl name and the
5902    categorization performed above.  */
5903
5904 void
5905 default_unique_section (tree decl, int reloc)
5906 {
5907   /* We only need to use .gnu.linkonce if we don't have COMDAT groups.  */
5908   bool one_only = DECL_ONE_ONLY (decl) && !HAVE_COMDAT_GROUP;
5909   const char *prefix, *name;
5910   size_t nlen, plen;
5911   char *string;
5912
5913   switch (categorize_decl_for_section (decl, reloc))
5914     {
5915     case SECCAT_TEXT:
5916       prefix = one_only ? ".gnu.linkonce.t." : ".text.";
5917       break;
5918     case SECCAT_RODATA:
5919     case SECCAT_RODATA_MERGE_STR:
5920     case SECCAT_RODATA_MERGE_STR_INIT:
5921     case SECCAT_RODATA_MERGE_CONST:
5922       prefix = one_only ? ".gnu.linkonce.r." : ".rodata.";
5923       break;
5924     case SECCAT_SRODATA:
5925       prefix = one_only ? ".gnu.linkonce.s2." : ".sdata2.";
5926       break;
5927     case SECCAT_DATA:
5928       prefix = one_only ? ".gnu.linkonce.d." : ".data.";
5929       break;
5930     case SECCAT_DATA_REL:
5931       prefix = one_only ? ".gnu.linkonce.d.rel." : ".data.rel.";
5932       break;
5933     case SECCAT_DATA_REL_LOCAL:
5934       prefix = one_only ? ".gnu.linkonce.d.rel.local." : ".data.rel.local.";
5935       break;
5936     case SECCAT_DATA_REL_RO:
5937       prefix = one_only ? ".gnu.linkonce.d.rel.ro." : ".data.rel.ro.";
5938       break;
5939     case SECCAT_DATA_REL_RO_LOCAL:
5940       prefix = one_only ? ".gnu.linkonce.d.rel.ro.local."
5941                : ".data.rel.ro.local.";
5942       break;
5943     case SECCAT_SDATA:
5944       prefix = one_only ? ".gnu.linkonce.s." : ".sdata.";
5945       break;
5946     case SECCAT_BSS:
5947       prefix = one_only ? ".gnu.linkonce.b." : ".bss.";
5948       break;
5949     case SECCAT_SBSS:
5950       prefix = one_only ? ".gnu.linkonce.sb." : ".sbss.";
5951       break;
5952     case SECCAT_TDATA:
5953       prefix = one_only ? ".gnu.linkonce.td." : ".tdata.";
5954       break;
5955     case SECCAT_TBSS:
5956       prefix = one_only ? ".gnu.linkonce.tb." : ".tbss.";
5957       break;
5958     default:
5959       gcc_unreachable ();
5960     }
5961   plen = strlen (prefix);
5962
5963   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5964   name = targetm.strip_name_encoding (name);
5965   nlen = strlen (name);
5966
5967   string = alloca (nlen + plen + 1);
5968   memcpy (string, prefix, plen);
5969   memcpy (string + plen, name, nlen + 1);
5970
5971   DECL_SECTION_NAME (decl) = build_string (nlen + plen, string);
5972 }
5973
5974 /* Like compute_reloc_for_constant, except for an RTX.  The return value
5975    is a mask for which bit 1 indicates a global relocation, and bit 0
5976    indicates a local relocation.  */
5977
5978 static int
5979 compute_reloc_for_rtx_1 (rtx *xp, void *data)
5980 {
5981   int *preloc = data;
5982   rtx x = *xp;
5983
5984   switch (GET_CODE (x))
5985     {
5986     case SYMBOL_REF:
5987       *preloc |= SYMBOL_REF_LOCAL_P (x) ? 1 : 2;
5988       break;
5989     case LABEL_REF:
5990       *preloc |= 1;
5991       break;
5992     default:
5993       break;
5994     }
5995
5996   return 0;
5997 }
5998
5999 static int
6000 compute_reloc_for_rtx (rtx x)
6001 {
6002   int reloc;
6003
6004   switch (GET_CODE (x))
6005     {
6006     case CONST:
6007     case SYMBOL_REF:
6008     case LABEL_REF:
6009       reloc = 0;
6010       for_each_rtx (&x, compute_reloc_for_rtx_1, &reloc);
6011       return reloc;
6012
6013     default:
6014       return 0;
6015     }
6016 }
6017
6018 section *
6019 default_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED,
6020                             rtx x,
6021                             unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
6022 {
6023   if (compute_reloc_for_rtx (x) & targetm.asm_out.reloc_rw_mask ())
6024     return data_section;
6025   else
6026     return readonly_data_section;
6027 }
6028
6029 section *
6030 default_elf_select_rtx_section (enum machine_mode mode, rtx x,
6031                                 unsigned HOST_WIDE_INT align)
6032 {
6033   int reloc = compute_reloc_for_rtx (x);
6034
6035   /* ??? Handle small data here somehow.  */
6036
6037   if (reloc & targetm.asm_out.reloc_rw_mask ())
6038     {
6039       if (reloc == 1)
6040         return get_named_section (NULL, ".data.rel.ro.local", 1);
6041       else
6042         return get_named_section (NULL, ".data.rel.ro", 3);
6043     }
6044
6045   return mergeable_constant_section (mode, align, 0);
6046 }
6047
6048 /* Set the generally applicable flags on the SYMBOL_REF for EXP.  */
6049
6050 void
6051 default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
6052 {
6053   rtx symbol;
6054   int flags;
6055
6056   /* Careful not to prod global register variables.  */
6057   if (!MEM_P (rtl))
6058     return;
6059   symbol = XEXP (rtl, 0);
6060   if (GET_CODE (symbol) != SYMBOL_REF)
6061     return;
6062
6063   flags = SYMBOL_REF_FLAGS (symbol) & SYMBOL_FLAG_HAS_BLOCK_INFO;
6064   if (TREE_CODE (decl) == FUNCTION_DECL)
6065     flags |= SYMBOL_FLAG_FUNCTION;
6066   if (targetm.binds_local_p (decl))
6067     flags |= SYMBOL_FLAG_LOCAL;
6068   if (targetm.have_tls && TREE_CODE (decl) == VAR_DECL
6069       && DECL_THREAD_LOCAL_P (decl))
6070     flags |= DECL_TLS_MODEL (decl) << SYMBOL_FLAG_TLS_SHIFT;
6071   else if (targetm.in_small_data_p (decl))
6072     flags |= SYMBOL_FLAG_SMALL;
6073   /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names?  Without
6074      being PUBLIC, the thing *must* be defined in this translation unit.
6075      Prevent this buglet from being propagated into rtl code as well.  */
6076   if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
6077     flags |= SYMBOL_FLAG_EXTERNAL;
6078
6079   SYMBOL_REF_FLAGS (symbol) = flags;
6080 }
6081
6082 /* By default, we do nothing for encode_section_info, so we need not
6083    do anything but discard the '*' marker.  */
6084
6085 const char *
6086 default_strip_name_encoding (const char *str)
6087 {
6088   return str + (*str == '*');
6089 }
6090
6091 #ifdef ASM_OUTPUT_DEF
6092 /* The default implementation of TARGET_ASM_OUTPUT_ANCHOR.  Define the
6093    anchor relative to ".", the current section position.  */
6094
6095 void
6096 default_asm_output_anchor (rtx symbol)
6097 {
6098   char buffer[100];
6099
6100   sprintf (buffer, "*. + " HOST_WIDE_INT_PRINT_DEC,
6101            SYMBOL_REF_BLOCK_OFFSET (symbol));
6102   ASM_OUTPUT_DEF (asm_out_file, XSTR (symbol, 0), buffer);
6103 }
6104 #endif
6105
6106 /* The default implementation of TARGET_USE_ANCHORS_FOR_SYMBOL_P.  */
6107
6108 bool
6109 default_use_anchors_for_symbol_p (const_rtx symbol)
6110 {
6111   section *sect;
6112   tree decl;
6113
6114   /* Don't use anchors for mergeable sections.  The linker might move
6115      the objects around.  */
6116   sect = SYMBOL_REF_BLOCK (symbol)->sect;
6117   if (sect->common.flags & SECTION_MERGE)
6118     return false;
6119
6120   /* Don't use anchors for small data sections.  The small data register
6121      acts as an anchor for such sections.  */
6122   if (sect->common.flags & SECTION_SMALL)
6123     return false;
6124
6125   decl = SYMBOL_REF_DECL (symbol);
6126   if (decl && DECL_P (decl))
6127     {
6128       /* Don't use section anchors for decls that might be defined by
6129          other modules.  */
6130       if (!targetm.binds_local_p (decl))
6131         return false;
6132
6133       /* Don't use section anchors for decls that will be placed in a
6134          small data section.  */
6135       /* ??? Ideally, this check would be redundant with the SECTION_SMALL
6136          one above.  The problem is that we only use SECTION_SMALL for
6137          sections that should be marked as small in the section directive.  */
6138       if (targetm.in_small_data_p (decl))
6139         return false;
6140     }
6141   return true;
6142 }
6143
6144 /* Assume ELF-ish defaults, since that's pretty much the most liberal
6145    wrt cross-module name binding.  */
6146
6147 bool
6148 default_binds_local_p (const_tree exp)
6149 {
6150   return default_binds_local_p_1 (exp, flag_shlib);
6151 }
6152
6153 bool
6154 default_binds_local_p_1 (const_tree exp, int shlib)
6155 {
6156   bool local_p;
6157
6158   /* A non-decl is an entry in the constant pool.  */
6159   if (!DECL_P (exp))
6160     local_p = true;
6161   /* Weakrefs may not bind locally, even though the weakref itself is
6162      always static and therefore local.  */
6163   else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp)))
6164     local_p = false;
6165   /* Static variables are always local.  */
6166   else if (! TREE_PUBLIC (exp))
6167     local_p = true;
6168   /* A variable is local if the user has said explicitly that it will
6169      be.  */
6170   else if (DECL_VISIBILITY_SPECIFIED (exp)
6171            && DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
6172     local_p = true;
6173   /* Variables defined outside this object might not be local.  */
6174   else if (DECL_EXTERNAL (exp))
6175     local_p = false;
6176   /* If defined in this object and visibility is not default, must be
6177      local.  */
6178   else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
6179     local_p = true;
6180   /* Default visibility weak data can be overridden by a strong symbol
6181      in another module and so are not local.  */
6182   else if (DECL_WEAK (exp))
6183     local_p = false;
6184   /* If PIC, then assume that any global name can be overridden by
6185      symbols resolved from other modules, unless we are compiling with
6186      -fwhole-program, which assumes that names are local.  */
6187   else if (shlib)
6188     local_p = flag_whole_program;
6189   /* Uninitialized COMMON variable may be unified with symbols
6190      resolved from other modules.  */
6191   else if (DECL_COMMON (exp)
6192            && (DECL_INITIAL (exp) == NULL
6193                || DECL_INITIAL (exp) == error_mark_node))
6194     local_p = false;
6195   /* Otherwise we're left with initialized (or non-common) global data
6196      which is of necessity defined locally.  */
6197   else
6198     local_p = true;
6199
6200   return local_p;
6201 }
6202
6203 /* Determine whether or not a pointer mode is valid. Assume defaults
6204    of ptr_mode or Pmode - can be overridden.  */
6205 bool
6206 default_valid_pointer_mode (enum machine_mode mode)
6207 {
6208   return (mode == ptr_mode || mode == Pmode);
6209 }
6210
6211 /* Default function to output code that will globalize a label.  A
6212    target must define GLOBAL_ASM_OP or provide its own function to
6213    globalize a label.  */
6214 #ifdef GLOBAL_ASM_OP
6215 void
6216 default_globalize_label (FILE * stream, const char *name)
6217 {
6218   fputs (GLOBAL_ASM_OP, stream);
6219   assemble_name (stream, name);
6220   putc ('\n', stream);
6221 }
6222 #endif /* GLOBAL_ASM_OP */
6223
6224 /* Default function to output code that will globalize a declaration.  */
6225 void
6226 default_globalize_decl_name (FILE * stream, tree decl)
6227 {
6228   const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
6229   targetm.asm_out.globalize_label (stream, name);
6230 }
6231
6232 /* Default function to output a label for unwind information.  The
6233    default is to do nothing.  A target that needs nonlocal labels for
6234    unwind information must provide its own function to do this.  */
6235 void
6236 default_emit_unwind_label (FILE * stream ATTRIBUTE_UNUSED,
6237                            tree decl ATTRIBUTE_UNUSED,
6238                            int for_eh ATTRIBUTE_UNUSED,
6239                            int empty ATTRIBUTE_UNUSED)
6240 {
6241 }
6242
6243 /* Default function to output a label to divide up the exception table.
6244    The default is to do nothing.  A target that needs/wants to divide
6245    up the table must provide it's own function to do this.  */
6246 void
6247 default_emit_except_table_label (FILE * stream ATTRIBUTE_UNUSED)
6248 {
6249 }
6250
6251 /* This is how to output an internal numbered label where PREFIX is
6252    the class of label and LABELNO is the number within the class.  */
6253
6254 void
6255 default_internal_label (FILE *stream, const char *prefix,
6256                         unsigned long labelno)
6257 {
6258   char *const buf = alloca (40 + strlen (prefix));
6259   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
6260   ASM_OUTPUT_INTERNAL_LABEL (stream, buf);
6261 }
6262
6263 /* This is the default behavior at the beginning of a file.  It's
6264    controlled by two other target-hook toggles.  */
6265 void
6266 default_file_start (void)
6267 {
6268   if (targetm.file_start_app_off && !flag_verbose_asm)
6269     fputs (ASM_APP_OFF, asm_out_file);
6270
6271   if (targetm.file_start_file_directive)
6272     output_file_directive (asm_out_file, main_input_filename);
6273 }
6274
6275 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
6276    which emits a special section directive used to indicate whether or
6277    not this object file needs an executable stack.  This is primarily
6278    a GNU extension to ELF but could be used on other targets.  */
6279
6280 int trampolines_created;
6281
6282 void
6283 file_end_indicate_exec_stack (void)
6284 {
6285   unsigned int flags = SECTION_DEBUG;
6286   if (trampolines_created)
6287     flags |= SECTION_CODE;
6288
6289   switch_to_section (get_section (".note.GNU-stack", flags, NULL));
6290 }
6291
6292 /* Output DIRECTIVE (a C string) followed by a newline.  This is used as
6293    a get_unnamed_section callback.  */
6294
6295 void
6296 output_section_asm_op (const void *directive)
6297 {
6298   fprintf (asm_out_file, "%s\n", (const char *) directive);
6299 }
6300
6301 /* Emit assembly code to switch to section NEW_SECTION.  Do nothing if
6302    the current section is NEW_SECTION.  */
6303
6304 void
6305 switch_to_section (section *new_section)
6306 {
6307   if (in_section == new_section)
6308     return;
6309
6310   if (new_section->common.flags & SECTION_FORGET)
6311     in_section = NULL;
6312   else
6313     in_section = new_section;
6314
6315   switch (SECTION_STYLE (new_section))
6316     {
6317     case SECTION_NAMED:
6318       if (cfun
6319           && !cfun->unlikely_text_section_name
6320           && strcmp (new_section->named.name,
6321                      UNLIKELY_EXECUTED_TEXT_SECTION_NAME) == 0)
6322         cfun->unlikely_text_section_name = UNLIKELY_EXECUTED_TEXT_SECTION_NAME;
6323
6324       targetm.asm_out.named_section (new_section->named.name,
6325                                      new_section->named.common.flags,
6326                                      new_section->named.decl);
6327       break;
6328
6329     case SECTION_UNNAMED:
6330       new_section->unnamed.callback (new_section->unnamed.data);
6331       break;
6332
6333     case SECTION_NOSWITCH:
6334       gcc_unreachable ();
6335       break;
6336     }
6337
6338   new_section->common.flags |= SECTION_DECLARED;
6339 }
6340
6341 /* If block symbol SYMBOL has not yet been assigned an offset, place
6342    it at the end of its block.  */
6343
6344 void
6345 place_block_symbol (rtx symbol)
6346 {
6347   unsigned HOST_WIDE_INT size, mask, offset;
6348   struct constant_descriptor_rtx *desc;
6349   unsigned int alignment;
6350   struct object_block *block;
6351   tree decl;
6352
6353   gcc_assert (SYMBOL_REF_BLOCK (symbol));
6354   if (SYMBOL_REF_BLOCK_OFFSET (symbol) >= 0)
6355     return;
6356
6357   /* Work out the symbol's size and alignment.  */
6358   if (CONSTANT_POOL_ADDRESS_P (symbol))
6359     {
6360       desc = SYMBOL_REF_CONSTANT (symbol);
6361       alignment = desc->align;
6362       size = GET_MODE_SIZE (desc->mode);
6363     }
6364   else if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
6365     {
6366       decl = SYMBOL_REF_DECL (symbol);
6367       alignment = get_constant_alignment (decl);
6368       size = get_constant_size (decl);
6369     }
6370   else
6371     {
6372       decl = SYMBOL_REF_DECL (symbol);
6373       alignment = DECL_ALIGN (decl);
6374       size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
6375     }
6376
6377   /* Calculate the object's offset from the start of the block.  */
6378   block = SYMBOL_REF_BLOCK (symbol);
6379   mask = alignment / BITS_PER_UNIT - 1;
6380   offset = (block->size + mask) & ~mask;
6381   SYMBOL_REF_BLOCK_OFFSET (symbol) = offset;
6382
6383   /* Record the block's new alignment and size.  */
6384   block->alignment = MAX (block->alignment, alignment);
6385   block->size = offset + size;
6386
6387   VEC_safe_push (rtx, gc, block->objects, symbol);
6388 }
6389
6390 /* Return the anchor that should be used to address byte offset OFFSET
6391    from the first object in BLOCK.  MODEL is the TLS model used
6392    to access it.  */
6393
6394 rtx
6395 get_section_anchor (struct object_block *block, HOST_WIDE_INT offset,
6396                     enum tls_model model)
6397 {
6398   char label[100];
6399   unsigned int begin, middle, end;
6400   unsigned HOST_WIDE_INT min_offset, max_offset, range, bias, delta;
6401   rtx anchor;
6402
6403   /* Work out the anchor's offset.  Use an offset of 0 for the first
6404      anchor so that we don't pessimize the case where we take the address
6405      of a variable at the beginning of the block.  This is particularly
6406      useful when a block has only one variable assigned to it.
6407
6408      We try to place anchors RANGE bytes apart, so there can then be
6409      anchors at +/-RANGE, +/-2 * RANGE, and so on, up to the limits of
6410      a ptr_mode offset.  With some target settings, the lowest such
6411      anchor might be out of range for the lowest ptr_mode offset;
6412      likewise the highest anchor for the highest offset.  Use anchors
6413      at the extreme ends of the ptr_mode range in such cases.
6414
6415      All arithmetic uses unsigned integers in order to avoid
6416      signed overflow.  */
6417   max_offset = (unsigned HOST_WIDE_INT) targetm.max_anchor_offset;
6418   min_offset = (unsigned HOST_WIDE_INT) targetm.min_anchor_offset;
6419   range = max_offset - min_offset + 1;
6420   if (range == 0)
6421     offset = 0;
6422   else
6423     {
6424       bias = 1 << (GET_MODE_BITSIZE (ptr_mode) - 1);
6425       if (offset < 0)
6426         {
6427           delta = -(unsigned HOST_WIDE_INT) offset + max_offset;
6428           delta -= delta % range;
6429           if (delta > bias)
6430             delta = bias;
6431           offset = (HOST_WIDE_INT) (-delta);
6432         }
6433       else
6434         {
6435           delta = (unsigned HOST_WIDE_INT) offset - min_offset;
6436           delta -= delta % range;
6437           if (delta > bias - 1)
6438             delta = bias - 1;
6439           offset = (HOST_WIDE_INT) delta;
6440         }
6441     }
6442
6443   /* Do a binary search to see if there's already an anchor we can use.
6444      Set BEGIN to the new anchor's index if not.  */
6445   begin = 0;
6446   end = VEC_length (rtx, block->anchors);
6447   while (begin != end)
6448     {
6449       middle = (end + begin) / 2;
6450       anchor = VEC_index (rtx, block->anchors, middle);
6451       if (SYMBOL_REF_BLOCK_OFFSET (anchor) > offset)
6452         end = middle;
6453       else if (SYMBOL_REF_BLOCK_OFFSET (anchor) < offset)
6454         begin = middle + 1;
6455       else if (SYMBOL_REF_TLS_MODEL (anchor) > model)
6456         end = middle;
6457       else if (SYMBOL_REF_TLS_MODEL (anchor) < model)
6458         begin = middle + 1;
6459       else
6460         return anchor;
6461     }
6462
6463   /* Create a new anchor with a unique label.  */
6464   ASM_GENERATE_INTERNAL_LABEL (label, "LANCHOR", anchor_labelno++);
6465   anchor = create_block_symbol (ggc_strdup (label), block, offset);
6466   SYMBOL_REF_FLAGS (anchor) |= SYMBOL_FLAG_LOCAL | SYMBOL_FLAG_ANCHOR;
6467   SYMBOL_REF_FLAGS (anchor) |= model << SYMBOL_FLAG_TLS_SHIFT;
6468
6469   /* Insert it at index BEGIN.  */
6470   VEC_safe_insert (rtx, gc, block->anchors, begin, anchor);
6471   return anchor;
6472 }
6473
6474 /* Output the objects in BLOCK.  */
6475
6476 static void
6477 output_object_block (struct object_block *block)
6478 {
6479   struct constant_descriptor_rtx *desc;
6480   unsigned int i;
6481   HOST_WIDE_INT offset;
6482   tree decl;
6483   rtx symbol;
6484
6485   if (block->objects == NULL)
6486     return;
6487
6488   /* Switch to the section and make sure that the first byte is
6489      suitably aligned.  */
6490   switch_to_section (block->sect);
6491   assemble_align (block->alignment);
6492
6493   /* Define the values of all anchors relative to the current section
6494      position.  */
6495   for (i = 0; VEC_iterate (rtx, block->anchors, i, symbol); i++)
6496     targetm.asm_out.output_anchor (symbol);
6497
6498   /* Output the objects themselves.  */
6499   offset = 0;
6500   for (i = 0; VEC_iterate (rtx, block->objects, i, symbol); i++)
6501     {
6502       /* Move to the object's offset, padding with zeros if necessary.  */
6503       assemble_zeros (SYMBOL_REF_BLOCK_OFFSET (symbol) - offset);
6504       offset = SYMBOL_REF_BLOCK_OFFSET (symbol);
6505       if (CONSTANT_POOL_ADDRESS_P (symbol))
6506         {
6507           desc = SYMBOL_REF_CONSTANT (symbol);
6508           output_constant_pool_1 (desc, 1);
6509           offset += GET_MODE_SIZE (desc->mode);
6510         }
6511       else if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
6512         {
6513           decl = SYMBOL_REF_DECL (symbol);
6514           assemble_constant_contents (decl, XSTR (symbol, 0),
6515                                       get_constant_alignment (decl));
6516           offset += get_constant_size (decl);
6517         }
6518       else
6519         {
6520           decl = SYMBOL_REF_DECL (symbol);
6521           assemble_variable_contents (decl, XSTR (symbol, 0), false);
6522           offset += tree_low_cst (DECL_SIZE_UNIT (decl), 1);
6523         }
6524     }
6525 }
6526
6527 /* A htab_traverse callback used to call output_object_block for
6528    each member of object_block_htab.  */
6529
6530 static int
6531 output_object_block_htab (void **slot, void *data ATTRIBUTE_UNUSED)
6532 {
6533   output_object_block ((struct object_block *) (*slot));
6534   return 1;
6535 }
6536
6537 /* Output the definitions of all object_blocks.  */
6538
6539 void
6540 output_object_blocks (void)
6541 {
6542   htab_traverse (object_block_htab, output_object_block_htab, NULL);
6543 }
6544
6545 /* This function provides a possible implementation of the
6546    TARGET_ASM_RECORD_GCC_SWITCHES target hook for ELF targets.  When triggered
6547    by -frecord-gcc-switches it creates a new mergeable, string section in the
6548    assembler output file called TARGET_ASM_RECORD_GCC_SWITCHES_SECTION which
6549    contains the switches in ASCII format.
6550
6551    FIXME: This code does not correctly handle double quote characters
6552    that appear inside strings, (it strips them rather than preserving them).
6553    FIXME: ASM_OUTPUT_ASCII, as defined in config/elfos.h will not emit NUL
6554    characters - instead it treats them as sub-string separators.  Since
6555    we want to emit NUL strings terminators into the object file we have to use
6556    ASM_OUTPUT_SKIP.  */
6557
6558 int
6559 elf_record_gcc_switches (print_switch_type type, const char * name)
6560 {
6561   static char buffer[1024];
6562
6563   /* This variable is used as part of a simplistic heuristic to detect
6564      command line switches which take an argument:
6565
6566        "If a command line option does not start with a dash then
6567         it is an argument for the previous command line option."
6568
6569      This fails in the case of the command line option which is the name
6570      of the file to compile, but otherwise it is pretty reasonable.  */
6571   static bool previous_name_held_back = FALSE;
6572
6573   switch (type)
6574     {
6575     case SWITCH_TYPE_PASSED:
6576       if (* name != '-')
6577         {
6578           if (previous_name_held_back)
6579             {
6580               unsigned int len = strlen (buffer);
6581
6582               snprintf (buffer + len, sizeof buffer - len, " %s", name);
6583               ASM_OUTPUT_ASCII (asm_out_file, buffer, strlen (buffer));
6584               ASM_OUTPUT_SKIP (asm_out_file, (unsigned HOST_WIDE_INT) 1);
6585               previous_name_held_back = FALSE;
6586             }
6587           else
6588             {
6589               strncpy (buffer, name, sizeof buffer);
6590               ASM_OUTPUT_ASCII (asm_out_file, buffer, strlen (buffer));
6591               ASM_OUTPUT_SKIP (asm_out_file, (unsigned HOST_WIDE_INT) 1);
6592             }
6593         }
6594       else
6595         {
6596           if (previous_name_held_back)
6597             {
6598               ASM_OUTPUT_ASCII (asm_out_file, buffer, strlen (buffer));
6599               ASM_OUTPUT_SKIP (asm_out_file, (unsigned HOST_WIDE_INT) 1);
6600             }
6601
6602           strncpy (buffer, name, sizeof buffer);
6603           previous_name_held_back = TRUE;
6604         }
6605       break;
6606
6607     case SWITCH_TYPE_DESCRIPTIVE:
6608       if (name == NULL)
6609         {
6610           /* Distinguish between invocations where name is NULL.  */
6611           static bool started = false;
6612
6613           if (started)
6614             {
6615               if (previous_name_held_back)
6616                 {
6617                   ASM_OUTPUT_ASCII (asm_out_file, buffer, strlen (buffer));
6618                   ASM_OUTPUT_SKIP (asm_out_file, (unsigned HOST_WIDE_INT) 1);
6619                 }
6620             }
6621           else
6622             {
6623               section * sec;
6624
6625               sec = get_section (targetm.asm_out.record_gcc_switches_section,
6626                                  SECTION_DEBUG
6627                                  | SECTION_MERGE
6628                                  | SECTION_STRINGS
6629                                  | (SECTION_ENTSIZE & 1),
6630                                  NULL);
6631               switch_to_section (sec);
6632               started = true;
6633             }
6634         }
6635
6636     default:
6637       break;
6638     }
6639
6640   /* The return value is currently ignored by the caller, but must be 0.
6641      For -fverbose-asm the return value would be the number of characters
6642      emitted into the assembler file.  */
6643   return 0;
6644 }
6645
6646 /* Emit text to declare externally defined symbols. It is needed to
6647    properly support non-default visibility.  */
6648 void
6649 default_elf_asm_output_external (FILE *file ATTRIBUTE_UNUSED,
6650                                  tree decl,
6651                                  const char *name ATTRIBUTE_UNUSED)
6652 {
6653   /* We output the name if and only if TREE_SYMBOL_REFERENCED is
6654      set in order to avoid putting out names that are never really
6655      used. */
6656   if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
6657       && targetm.binds_local_p (decl))
6658     maybe_assemble_visibility (decl);
6659 }
6660
6661 #include "gt-varasm.h"