OSDN Git Service

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