OSDN Git Service

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