* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
[official-gcc.git] / gcc / varasm.c
blob9a611e0164ff99316d8406f6b30b05d99e3faea1
1 /* Output variables, constants and external declarations, for GNU compiler.
2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4 Free Software Foundation, Inc.
6 This file is part of GCC.
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.
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.
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/>. */
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.
27 We also output the assembler code for constants stored in memory
28 and are responsible for combining constants with the same value. */
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"
58 #ifdef XCOFF_DEBUGGING_INFO
59 #include "xcoffout.h" /* Needed for external data
60 declarations for e.g. AIX 4.x. */
61 #endif
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;
67 const char *first_global_object_name;
68 const char *weak_global_object_name;
70 struct addr_const;
71 struct constant_descriptor_rtx;
72 struct rtx_constant_pool;
74 #define n_deferred_constants (crtl->varasm.deferred_constants)
76 /* Number for making the label on the next
77 constant that is stored in memory. */
79 static GTY(()) int const_labelno;
81 /* Carry information from ASM_DECLARE_OBJECT_NAME
82 to ASM_FINISH_DECLARE_OBJECT. */
84 int size_directive_output;
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. */
91 tree last_assemble_variable_decl;
93 /* The following global variable indicates if the first basic block
94 in a function belongs to the cold partition or not. */
96 bool first_function_block_is_cold;
98 /* We give all constants their own alias set. Perhaps redundant with
99 MEM_READONLY_P, but pre-dates it. */
101 static alias_set_type const_alias_set;
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);
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;
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;
149 /* A SECTION_NOSWITCH section used for declaring global BSS variables.
150 May be null. */
151 section *bss_noswitch_section;
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;
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;
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;
167 /* True if code for the current function is currently being directed
168 at the cold section. */
169 bool in_cold_section_p;
171 /* A linked list of all the unnamed sections. */
172 static GTY(()) section *unnamed_sections;
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
181 /* Hash table of named sections. */
182 static GTY((param_is (section))) htab_t section_htab;
184 /* A table of object_blocks, indexed by section. */
185 static GTY((param_is (struct object_block))) htab_t object_block_htab;
187 /* The next number to use for internal anchor labels. */
188 static GTY(()) int anchor_labelno;
190 /* A pool of constants that can be shared between functions. */
191 static GTY(()) struct rtx_constant_pool *shared_constant_pool;
193 /* TLS emulation. */
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)
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
211 /* Create an IDENTIFIER_NODE by prefixing PREFIX to the
212 IDENTIFIER_NODE NAME's name. */
214 static tree
215 prefix_name (const char *prefix, tree name)
217 unsigned plen = strlen (prefix);
218 unsigned nlen = strlen (IDENTIFIER_POINTER (name));
219 char *toname = (char *) alloca (plen + nlen + 1);
221 memcpy (toname, prefix, plen);
222 memcpy (toname + plen, IDENTIFIER_POINTER (name), nlen + 1);
224 return get_identifier (toname);
227 /* Create an identifier for the struct __emutls_object, given an identifier
228 of the DECL_ASSEMBLY_NAME of the original object. */
230 static tree
231 get_emutls_object_name (tree name)
233 const char *prefix = (targetm.emutls.var_prefix
234 ? targetm.emutls.var_prefix
235 : "__emutls_v" EMUTLS_SEPARATOR);
236 return prefix_name (prefix, name);
239 tree
240 default_emutls_var_fields (tree type, tree *name ATTRIBUTE_UNUSED)
242 tree word_type_node, field, next_field;
244 field = build_decl (FIELD_DECL, get_identifier ("__templ"), ptr_type_node);
245 DECL_CONTEXT (field) = type;
246 next_field = field;
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;
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;
261 field = build_decl (FIELD_DECL, get_identifier ("__size"), word_type_node);
262 DECL_CONTEXT (field) = type;
263 TREE_CHAIN (field) = next_field;
265 return field;
268 /* Create the structure for struct __emutls_object. This should match the
269 structure at the top of emutls.c, modulo the union there. */
271 static tree
272 get_emutls_object_type (void)
274 tree type, type_name, field;
276 type = emutls_object_type;
277 if (type)
278 return type;
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);
290 return type;
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. */
296 static tree
297 get_emutls_init_templ_addr (tree decl)
299 tree name, to;
301 if (targetm.emutls.register_common && !DECL_INITIAL (decl)
302 && !DECL_SECTION_NAME (decl))
303 return null_pointer_node;
305 name = DECL_ASSEMBLER_NAME (decl);
306 if (!targetm.emutls.tmpl_prefix || targetm.emutls.tmpl_prefix[0])
308 const char *prefix = (targetm.emutls.tmpl_prefix
309 ? targetm.emutls.tmpl_prefix
310 : "__emutls_t" EMUTLS_SEPARATOR);
311 name = prefix_name (prefix, name);
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);
324 DECL_WEAK (to) = DECL_WEAK (decl);
325 if (DECL_ONE_ONLY (decl))
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);
332 else
333 TREE_STATIC (to) = 1;
335 DECL_INITIAL (to) = DECL_INITIAL (decl);
336 DECL_INITIAL (decl) = NULL;
338 varpool_finalize_decl (to);
339 return build_fold_addr_expr (to);
342 /* When emulating tls, we use a control structure for use by the runtime.
343 Create and return this structure. */
345 tree
346 emutls_decl (tree decl)
348 tree name, to;
349 struct tree_map *h, in;
350 void **loc;
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;
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);
361 name = DECL_ASSEMBLER_NAME (decl);
363 /* Note that we use the hash of the decl's name, rather than a hash
364 of the decl's pointer. In emutls_finish we iterate through the
365 hash table, and we want this traversal to be predictable. */
366 in.hash = htab_hash_string (IDENTIFIER_POINTER (name));
367 in.base.from = decl;
368 loc = htab_find_slot_with_hash (emutls_htab, &in, in.hash, INSERT);
369 h = (struct tree_map *) *loc;
370 if (h != NULL)
371 to = h->to;
372 else
374 to = build_decl (VAR_DECL, get_emutls_object_name (name),
375 get_emutls_object_type ());
377 h = GGC_NEW (struct tree_map);
378 h->hash = in.hash;
379 h->base.from = decl;
380 h->to = to;
381 *(struct tree_map **) loc = h;
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;
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. */
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);
412 return to;
415 static int
416 emutls_common_1 (void **loc, void *xstmts)
418 struct tree_map *h = *(struct tree_map **) loc;
419 tree args, x, *pstmts = (tree *) xstmts;
420 tree word_type_node;
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;
427 word_type_node = lang_hooks.types.type_for_mode (word_mode, 1);
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);
442 x = built_in_decls[BUILT_IN_EMUTLS_REGISTER_COMMON];
443 x = build_function_call_expr (x, args);
445 append_to_statement_list (x, pstmts);
446 return 1;
449 void
450 emutls_finish (void)
452 if (targetm.emutls.register_common)
454 tree body = NULL_TREE;
456 if (emutls_htab == NULL)
457 return;
459 htab_traverse_noresize (emutls_htab, emutls_common_1, &body);
460 if (body == NULL_TREE)
461 return;
463 cgraph_build_static_cdtor ('I', body, DEFAULT_INIT_PRIORITY);
467 /* Helper routines for maintaining section_htab. */
469 static int
470 section_entry_eq (const void *p1, const void *p2)
472 const section *old = (const section *) p1;
473 const char *new_name = (const char *) p2;
475 return strcmp (old->named.name, new_name) == 0;
478 static hashval_t
479 section_entry_hash (const void *p)
481 const section *old = (const section *) p;
482 return htab_hash_string (old->named.name);
485 /* Return a hash value for section SECT. */
487 static hashval_t
488 hash_section (section *sect)
490 if (sect->common.flags & SECTION_NAMED)
491 return htab_hash_string (sect->named.name);
492 return sect->common.flags;
495 /* Helper routines for maintaining object_block_htab. */
497 static int
498 object_block_entry_eq (const void *p1, const void *p2)
500 const struct object_block *old = (const struct object_block *) p1;
501 const section *new_section = (const section *) p2;
503 return old->sect == new_section;
506 static hashval_t
507 object_block_entry_hash (const void *p)
509 const struct object_block *old = (const struct object_block *) p;
510 return hash_section (old->sect);
513 /* Return a new unnamed section with the given fields. */
515 section *
516 get_unnamed_section (unsigned int flags, void (*callback) (const void *),
517 const void *data)
519 section *sect;
521 sect = GGC_NEW (section);
522 sect->unnamed.common.flags = flags | SECTION_UNNAMED;
523 sect->unnamed.callback = callback;
524 sect->unnamed.data = data;
525 sect->unnamed.next = unnamed_sections;
527 unnamed_sections = sect;
528 return sect;
531 /* Return a SECTION_NOSWITCH section with the given fields. */
533 static section *
534 get_noswitch_section (unsigned int flags, noswitch_section_callback callback)
536 section *sect;
538 sect = GGC_NEW (section);
539 sect->noswitch.common.flags = flags | SECTION_NOSWITCH;
540 sect->noswitch.callback = callback;
542 return sect;
545 /* Return the named section structure associated with NAME. Create
546 a new section with the given fields if no such structure exists. */
548 section *
549 get_section (const char *name, unsigned int flags, tree decl)
551 section *sect, **slot;
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)
559 sect = GGC_NEW (section);
560 sect->named.common.flags = flags;
561 sect->named.name = ggc_strdup (name);
562 sect->named.decl = decl;
563 *slot = sect;
565 else
567 sect = *slot;
568 if ((sect->common.flags & ~SECTION_DECLARED) != flags
569 && ((sect->common.flags | flags) & SECTION_OVERRIDE) == 0)
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);
578 return sect;
581 /* Return true if the current compilation mode benefits from having
582 objects grouped into blocks. */
584 static bool
585 use_object_blocks_p (void)
587 return flag_section_anchors;
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. */
594 static struct object_block *
595 get_block_for_section (section *sect)
597 struct object_block *block;
598 void **slot;
600 if (sect == NULL)
601 return NULL;
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)
608 block = (struct object_block *)
609 ggc_alloc_cleared (sizeof (struct object_block));
610 block->sect = sect;
611 *slot = block;
613 return block;
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. */
620 static rtx
621 create_block_symbol (const char *label, struct object_block *block,
622 HOST_WIDE_INT offset)
624 rtx symbol;
625 unsigned int size;
627 /* Create the extended SYMBOL_REF. */
628 size = RTX_HDR_SIZE + sizeof (struct block_symbol);
629 symbol = (rtx) ggc_alloc_zone (size, &rtl_zone);
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;
638 /* Initialize the block_symbol stuff. */
639 SYMBOL_REF_BLOCK (symbol) = block;
640 SYMBOL_REF_BLOCK_OFFSET (symbol) = offset;
642 return symbol;
645 static void
646 initialize_cold_section_name (void)
648 const char *stripped_name;
649 char *name, *buffer;
650 tree dsn;
652 gcc_assert (cfun && current_function_decl);
653 if (crtl->subsections.unlikely_text_section_name)
654 return;
656 dsn = DECL_SECTION_NAME (current_function_decl);
657 if (flag_function_sections && dsn)
659 name = (char *) alloca (TREE_STRING_LENGTH (dsn) + 1);
660 memcpy (name, TREE_STRING_POINTER (dsn), TREE_STRING_LENGTH (dsn) + 1);
662 stripped_name = targetm.strip_name_encoding (name);
664 buffer = ACONCAT ((stripped_name, "_unlikely", NULL));
665 crtl->subsections.unlikely_text_section_name = ggc_strdup (buffer);
667 else
668 crtl->subsections.unlikely_text_section_name = UNLIKELY_EXECUTED_TEXT_SECTION_NAME;
671 /* Tell assembler to switch to unlikely-to-be-executed text section. */
673 section *
674 unlikely_text_section (void)
676 if (cfun)
678 if (!crtl->subsections.unlikely_text_section_name)
679 initialize_cold_section_name ();
681 return get_named_section (NULL, crtl->subsections.unlikely_text_section_name, 0);
683 else
684 return get_named_section (NULL, UNLIKELY_EXECUTED_TEXT_SECTION_NAME, 0);
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. */
692 bool
693 unlikely_text_section_p (section *sect)
695 const char *name;
697 if (cfun)
698 name = crtl->subsections.unlikely_text_section_name;
699 else
700 name = UNLIKELY_EXECUTED_TEXT_SECTION_NAME;
702 return (name
703 && sect
704 && SECTION_STYLE (sect) == SECTION_NAMED
705 && strcmp (name, sect->named.name) == 0);
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. */
715 section *
716 get_named_section (tree decl, const char *name, int reloc)
718 unsigned int flags;
720 gcc_assert (!decl || DECL_P (decl));
721 if (name == NULL)
722 name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl));
724 flags = targetm.section_type_flags (decl, name, reloc);
726 return get_section (name, flags, decl);
729 /* If required, set DECL_SECTION_NAME to a unique name. */
731 void
732 resolve_unique_section (tree decl, int reloc ATTRIBUTE_UNUSED,
733 int flag_function_or_data_sections)
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);
742 #ifdef BSS_SECTION_ASM_OP
744 #ifdef ASM_OUTPUT_BSS
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. */
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)
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);
770 #endif
772 #ifdef ASM_OUTPUT_ALIGNED_BSS
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. */
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)
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);
796 #endif
798 #endif /* BSS_SECTION_ASM_OP */
800 #ifndef USE_SELECT_SECTION_FOR_FUNCTIONS
801 /* Return the hot section for function DECL. Return text_section for
802 null DECLs. */
804 static section *
805 hot_function_section (tree decl)
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;
814 #endif
816 /* Return the section for function DECL.
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. */
821 section *
822 function_section (tree decl)
824 int reloc = 0;
826 if (first_function_block_is_cold)
827 reloc = 1;
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
841 section *
842 current_function_section (void)
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
861 /* Return the read-only data section associated with function DECL. */
863 section *
864 default_function_rodata_section (tree decl)
866 if (decl != NULL_TREE && DECL_SECTION_NAME (decl))
868 const char *name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl));
870 if (DECL_ONE_ONLY (decl) && HAVE_COMDAT_GROUP)
872 const char *dot;
873 size_t len;
874 char* rname;
876 dot = strchr (name + 1, '.');
877 if (!dot)
878 dot = name;
879 len = strlen (dot) + 8;
880 rname = (char *) alloca (len);
882 strcpy (rname, ".rodata");
883 strcat (rname, dot);
884 return get_section (rname, SECTION_LINKONCE, decl);
886 /* For .gnu.linkonce.t.foo we want to use .gnu.linkonce.r.foo. */
887 else if (DECL_ONE_ONLY (decl)
888 && strncmp (name, ".gnu.linkonce.t.", 16) == 0)
890 size_t len = strlen (name) + 1;
891 char *rname = (char *) alloca (len);
893 memcpy (rname, name, len);
894 rname[14] = 'r';
895 return get_section (rname, SECTION_LINKONCE, decl);
897 /* For .text.foo we want to use .rodata.foo. */
898 else if (flag_function_sections && flag_data_sections
899 && strncmp (name, ".text.", 6) == 0)
901 size_t len = strlen (name) + 1;
902 char *rname = (char *) alloca (len + 2);
904 memcpy (rname, ".rodata", 7);
905 memcpy (rname + 7, name + 5, len - 5);
906 return get_section (rname, 0, decl);
910 return readonly_data_section;
913 /* Return the read-only data section associated with function DECL
914 for targets where that section should be always the single
915 readonly data section. */
917 section *
918 default_no_function_rodata_section (tree decl ATTRIBUTE_UNUSED)
920 return readonly_data_section;
923 /* Return the section to use for string merging. */
925 static section *
926 mergeable_string_section (tree decl ATTRIBUTE_UNUSED,
927 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED,
928 unsigned int flags ATTRIBUTE_UNUSED)
930 HOST_WIDE_INT len;
932 if (HAVE_GAS_SHF_MERGE && flag_merge_constants
933 && TREE_CODE (decl) == STRING_CST
934 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
935 && align <= 256
936 && (len = int_size_in_bytes (TREE_TYPE (decl))) > 0
937 && TREE_STRING_LENGTH (decl) >= len)
939 enum machine_mode mode;
940 unsigned int modesize;
941 const char *str;
942 HOST_WIDE_INT i;
943 int j, unit;
944 char name[30];
946 mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (decl)));
947 modesize = GET_MODE_BITSIZE (mode);
948 if (modesize >= 8 && modesize <= 256
949 && (modesize & (modesize - 1)) == 0)
951 if (align < modesize)
952 align = modesize;
954 str = TREE_STRING_POINTER (decl);
955 unit = GET_MODE_SIZE (mode);
957 /* Check for embedded NUL characters. */
958 for (i = 0; i < len; i += unit)
960 for (j = 0; j < unit; j++)
961 if (str[i + j] != '\0')
962 break;
963 if (j == unit)
964 break;
966 if (i == len - unit)
968 sprintf (name, ".rodata.str%d.%d", modesize / 8,
969 (int) (align / 8));
970 flags |= (modesize / 8) | SECTION_MERGE | SECTION_STRINGS;
971 return get_section (name, flags, NULL);
976 return readonly_data_section;
979 /* Return the section to use for constant merging. */
981 section *
982 mergeable_constant_section (enum machine_mode mode ATTRIBUTE_UNUSED,
983 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED,
984 unsigned int flags ATTRIBUTE_UNUSED)
986 unsigned int modesize = GET_MODE_BITSIZE (mode);
988 if (HAVE_GAS_SHF_MERGE && flag_merge_constants
989 && mode != VOIDmode
990 && mode != BLKmode
991 && modesize <= align
992 && align >= 8
993 && align <= 256
994 && (align & (align - 1)) == 0)
996 char name[24];
998 sprintf (name, ".rodata.cst%d", (int) (align / 8));
999 flags |= (align / 8) | SECTION_MERGE;
1000 return get_section (name, flags, NULL);
1002 return readonly_data_section;
1005 /* Given NAME, a putative register name, discard any customary prefixes. */
1007 static const char *
1008 strip_reg_name (const char *name)
1010 #ifdef REGISTER_PREFIX
1011 if (!strncmp (name, REGISTER_PREFIX, strlen (REGISTER_PREFIX)))
1012 name += strlen (REGISTER_PREFIX);
1013 #endif
1014 if (name[0] == '%' || name[0] == '#')
1015 name++;
1016 return name;
1019 /* The user has asked for a DECL to have a particular name. Set (or
1020 change) it in such a way that we don't prefix an underscore to
1021 it. */
1022 void
1023 set_user_assembler_name (tree decl, const char *name)
1025 char *starred = (char *) alloca (strlen (name) + 2);
1026 starred[0] = '*';
1027 strcpy (starred + 1, name);
1028 change_decl_assembler_name (decl, get_identifier (starred));
1029 SET_DECL_RTL (decl, NULL_RTX);
1032 /* Decode an `asm' spec for a declaration as a register name.
1033 Return the register number, or -1 if nothing specified,
1034 or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized,
1035 or -3 if ASMSPEC is `cc' and is not recognized,
1036 or -4 if ASMSPEC is `memory' and is not recognized.
1037 Accept an exact spelling or a decimal number.
1038 Prefixes such as % are optional. */
1041 decode_reg_name (const char *asmspec)
1043 if (asmspec != 0)
1045 int i;
1047 /* Get rid of confusing prefixes. */
1048 asmspec = strip_reg_name (asmspec);
1050 /* Allow a decimal number as a "register name". */
1051 for (i = strlen (asmspec) - 1; i >= 0; i--)
1052 if (! ISDIGIT (asmspec[i]))
1053 break;
1054 if (asmspec[0] != 0 && i < 0)
1056 i = atoi (asmspec);
1057 if (i < FIRST_PSEUDO_REGISTER && i >= 0)
1058 return i;
1059 else
1060 return -2;
1063 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1064 if (reg_names[i][0]
1065 && ! strcmp (asmspec, strip_reg_name (reg_names[i])))
1066 return i;
1068 #ifdef ADDITIONAL_REGISTER_NAMES
1070 static const struct { const char *const name; const int number; } table[]
1071 = ADDITIONAL_REGISTER_NAMES;
1073 for (i = 0; i < (int) ARRAY_SIZE (table); i++)
1074 if (table[i].name[0]
1075 && ! strcmp (asmspec, table[i].name))
1076 return table[i].number;
1078 #endif /* ADDITIONAL_REGISTER_NAMES */
1080 if (!strcmp (asmspec, "memory"))
1081 return -4;
1083 if (!strcmp (asmspec, "cc"))
1084 return -3;
1086 return -2;
1089 return -1;
1092 /* Return true if DECL's initializer is suitable for a BSS section. */
1094 static bool
1095 bss_initializer_p (const_tree decl)
1097 return (DECL_INITIAL (decl) == NULL
1098 || DECL_INITIAL (decl) == error_mark_node
1099 || (flag_zero_initialized_in_bss
1100 /* Leave constant zeroes in .rodata so they
1101 can be shared. */
1102 && !TREE_READONLY (decl)
1103 && initializer_zerop (DECL_INITIAL (decl))));
1106 /* Compute the alignment of variable specified by DECL.
1107 DONT_OUTPUT_DATA is from assemble_variable. */
1109 void
1110 align_variable (tree decl, bool dont_output_data)
1112 unsigned int align = DECL_ALIGN (decl);
1114 /* In the case for initialing an array whose length isn't specified,
1115 where we have not yet been able to do the layout,
1116 figure out the proper alignment now. */
1117 if (dont_output_data && DECL_SIZE (decl) == 0
1118 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
1119 align = MAX (align, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (decl))));
1121 /* Some object file formats have a maximum alignment which they support.
1122 In particular, a.out format supports a maximum alignment of 4. */
1123 if (align > MAX_OFILE_ALIGNMENT)
1125 warning (0, "alignment of %q+D is greater than maximum object "
1126 "file alignment. Using %d", decl,
1127 MAX_OFILE_ALIGNMENT/BITS_PER_UNIT);
1128 align = MAX_OFILE_ALIGNMENT;
1131 /* On some machines, it is good to increase alignment sometimes. */
1132 if (! DECL_USER_ALIGN (decl))
1134 #ifdef DATA_ALIGNMENT
1135 unsigned int data_align = DATA_ALIGNMENT (TREE_TYPE (decl), align);
1136 /* Don't increase alignment too much for TLS variables - TLS space
1137 is too precious. */
1138 if (! DECL_THREAD_LOCAL_P (decl) || data_align <= BITS_PER_WORD)
1139 align = data_align;
1140 #endif
1141 #ifdef CONSTANT_ALIGNMENT
1142 if (DECL_INITIAL (decl) != 0 && DECL_INITIAL (decl) != error_mark_node)
1144 unsigned int const_align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl),
1145 align);
1146 /* Don't increase alignment too much for TLS variables - TLS space
1147 is too precious. */
1148 if (! DECL_THREAD_LOCAL_P (decl) || const_align <= BITS_PER_WORD)
1149 align = const_align;
1151 #endif
1154 /* Reset the alignment in case we have made it tighter, so we can benefit
1155 from it in get_pointer_alignment. */
1156 DECL_ALIGN (decl) = align;
1159 /* Return the section into which the given VAR_DECL or CONST_DECL
1160 should be placed. PREFER_NOSWITCH_P is true if a noswitch
1161 section should be used wherever possible. */
1163 static section *
1164 get_variable_section (tree decl, bool prefer_noswitch_p)
1166 int reloc;
1168 /* If the decl has been given an explicit section name, then it
1169 isn't common, and shouldn't be handled as such. */
1170 if (DECL_COMMON (decl) && DECL_SECTION_NAME (decl) == NULL)
1172 if (DECL_THREAD_LOCAL_P (decl))
1173 return tls_comm_section;
1174 /* This cannot be common bss for an emulated TLS object without
1175 a register_common hook. */
1176 else if (DECL_TLS_MODEL (decl) == TLS_MODEL_EMULATED
1177 && !targetm.emutls.register_common)
1179 else if (TREE_PUBLIC (decl) && bss_initializer_p (decl))
1180 return comm_section;
1183 if (DECL_INITIAL (decl) == error_mark_node)
1184 reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0;
1185 else if (DECL_INITIAL (decl))
1186 reloc = compute_reloc_for_constant (DECL_INITIAL (decl));
1187 else
1188 reloc = 0;
1190 resolve_unique_section (decl, reloc, flag_data_sections);
1191 if (IN_NAMED_SECTION (decl))
1192 return get_named_section (decl, NULL, reloc);
1194 if (!DECL_THREAD_LOCAL_P (decl)
1195 && !(prefer_noswitch_p && targetm.have_switchable_bss_sections)
1196 && bss_initializer_p (decl))
1198 if (!TREE_PUBLIC (decl))
1199 return lcomm_section;
1200 if (bss_noswitch_section)
1201 return bss_noswitch_section;
1204 return targetm.asm_out.select_section (decl, reloc, DECL_ALIGN (decl));
1207 /* Return the block into which object_block DECL should be placed. */
1209 static struct object_block *
1210 get_block_for_decl (tree decl)
1212 section *sect;
1214 if (TREE_CODE (decl) == VAR_DECL)
1216 /* The object must be defined in this translation unit. */
1217 if (DECL_EXTERNAL (decl))
1218 return NULL;
1220 /* There's no point using object blocks for something that is
1221 isolated by definition. */
1222 if (DECL_ONE_ONLY (decl))
1223 return NULL;
1226 /* We can only calculate block offsets if the decl has a known
1227 constant size. */
1228 if (DECL_SIZE_UNIT (decl) == NULL)
1229 return NULL;
1230 if (!host_integerp (DECL_SIZE_UNIT (decl), 1))
1231 return NULL;
1233 /* Find out which section should contain DECL. We cannot put it into
1234 an object block if it requires a standalone definition. */
1235 if (TREE_CODE (decl) == VAR_DECL)
1236 align_variable (decl, 0);
1237 sect = get_variable_section (decl, true);
1238 if (SECTION_STYLE (sect) == SECTION_NOSWITCH)
1239 return NULL;
1241 return get_block_for_section (sect);
1244 /* Make sure block symbol SYMBOL is in block BLOCK. */
1246 static void
1247 change_symbol_block (rtx symbol, struct object_block *block)
1249 if (block != SYMBOL_REF_BLOCK (symbol))
1251 gcc_assert (SYMBOL_REF_BLOCK_OFFSET (symbol) < 0);
1252 SYMBOL_REF_BLOCK (symbol) = block;
1256 /* Return true if it is possible to put DECL in an object_block. */
1258 static bool
1259 use_blocks_for_decl_p (tree decl)
1261 /* Only data DECLs can be placed into object blocks. */
1262 if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != CONST_DECL)
1263 return false;
1265 /* Detect decls created by dw2_force_const_mem. Such decls are
1266 special because DECL_INITIAL doesn't specify the decl's true value.
1267 dw2_output_indirect_constants will instead call assemble_variable
1268 with dont_output_data set to 1 and then print the contents itself. */
1269 if (DECL_INITIAL (decl) == decl)
1270 return false;
1272 /* If this decl is an alias, then we don't want to emit a definition. */
1273 if (lookup_attribute ("alias", DECL_ATTRIBUTES (decl)))
1274 return false;
1276 return true;
1279 /* Create the DECL_RTL for a VAR_DECL or FUNCTION_DECL. DECL should
1280 have static storage duration. In other words, it should not be an
1281 automatic variable, including PARM_DECLs.
1283 There is, however, one exception: this function handles variables
1284 explicitly placed in a particular register by the user.
1286 This is never called for PARM_DECL nodes. */
1288 void
1289 make_decl_rtl (tree decl)
1291 const char *name = 0;
1292 int reg_number;
1293 rtx x;
1295 /* Check that we are not being given an automatic variable. */
1296 gcc_assert (TREE_CODE (decl) != PARM_DECL
1297 && TREE_CODE (decl) != RESULT_DECL);
1299 /* A weak alias has TREE_PUBLIC set but not the other bits. */
1300 gcc_assert (TREE_CODE (decl) != VAR_DECL
1301 || TREE_STATIC (decl)
1302 || TREE_PUBLIC (decl)
1303 || DECL_EXTERNAL (decl)
1304 || DECL_REGISTER (decl));
1306 /* And that we were not given a type or a label. */
1307 gcc_assert (TREE_CODE (decl) != TYPE_DECL
1308 && TREE_CODE (decl) != LABEL_DECL);
1310 /* For a duplicate declaration, we can be called twice on the
1311 same DECL node. Don't discard the RTL already made. */
1312 if (DECL_RTL_SET_P (decl))
1314 /* If the old RTL had the wrong mode, fix the mode. */
1315 x = DECL_RTL (decl);
1316 if (GET_MODE (x) != DECL_MODE (decl))
1317 SET_DECL_RTL (decl, adjust_address_nv (x, DECL_MODE (decl), 0));
1319 if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
1320 return;
1322 /* ??? Another way to do this would be to maintain a hashed
1323 table of such critters. Instead of adding stuff to a DECL
1324 to give certain attributes to it, we could use an external
1325 hash map from DECL to set of attributes. */
1327 /* Let the target reassign the RTL if it wants.
1328 This is necessary, for example, when one machine specific
1329 decl attribute overrides another. */
1330 targetm.encode_section_info (decl, DECL_RTL (decl), false);
1332 /* If the symbol has a SYMBOL_REF_BLOCK field, update it based
1333 on the new decl information. */
1334 if (MEM_P (x)
1335 && GET_CODE (XEXP (x, 0)) == SYMBOL_REF
1336 && SYMBOL_REF_HAS_BLOCK_INFO_P (XEXP (x, 0)))
1337 change_symbol_block (XEXP (x, 0), get_block_for_decl (decl));
1339 /* Make this function static known to the mudflap runtime. */
1340 if (flag_mudflap && TREE_CODE (decl) == VAR_DECL)
1341 mudflap_enqueue_decl (decl);
1343 return;
1346 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
1348 if (name[0] != '*' && TREE_CODE (decl) != FUNCTION_DECL
1349 && DECL_REGISTER (decl))
1351 error ("register name not specified for %q+D", decl);
1353 else if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
1355 const char *asmspec = name+1;
1356 reg_number = decode_reg_name (asmspec);
1357 /* First detect errors in declaring global registers. */
1358 if (reg_number == -1)
1359 error ("register name not specified for %q+D", decl);
1360 else if (reg_number < 0)
1361 error ("invalid register name for %q+D", decl);
1362 else if (TYPE_MODE (TREE_TYPE (decl)) == BLKmode)
1363 error ("data type of %q+D isn%'t suitable for a register",
1364 decl);
1365 else if (! HARD_REGNO_MODE_OK (reg_number, TYPE_MODE (TREE_TYPE (decl))))
1366 error ("register specified for %q+D isn%'t suitable for data type",
1367 decl);
1368 /* Now handle properly declared static register variables. */
1369 else
1371 int nregs;
1373 if (DECL_INITIAL (decl) != 0 && TREE_STATIC (decl))
1375 DECL_INITIAL (decl) = 0;
1376 error ("global register variable has initial value");
1378 if (TREE_THIS_VOLATILE (decl))
1379 warning (OPT_Wvolatile_register_var,
1380 "optimization may eliminate reads and/or "
1381 "writes to register variables");
1383 /* If the user specified one of the eliminables registers here,
1384 e.g., FRAME_POINTER_REGNUM, we don't want to get this variable
1385 confused with that register and be eliminated. This usage is
1386 somewhat suspect... */
1388 SET_DECL_RTL (decl, gen_rtx_raw_REG (DECL_MODE (decl), reg_number));
1389 ORIGINAL_REGNO (DECL_RTL (decl)) = reg_number;
1390 REG_USERVAR_P (DECL_RTL (decl)) = 1;
1392 if (TREE_STATIC (decl))
1394 /* Make this register global, so not usable for anything
1395 else. */
1396 #ifdef ASM_DECLARE_REGISTER_GLOBAL
1397 name = IDENTIFIER_POINTER (DECL_NAME (decl));
1398 ASM_DECLARE_REGISTER_GLOBAL (asm_out_file, decl, reg_number, name);
1399 #endif
1400 nregs = hard_regno_nregs[reg_number][DECL_MODE (decl)];
1401 while (nregs > 0)
1402 globalize_reg (reg_number + --nregs);
1405 /* As a register variable, it has no section. */
1406 return;
1409 /* Now handle ordinary static variables and functions (in memory).
1410 Also handle vars declared register invalidly. */
1411 else if (name[0] == '*')
1413 #ifdef REGISTER_PREFIX
1414 if (strlen (REGISTER_PREFIX) != 0)
1416 reg_number = decode_reg_name (name);
1417 if (reg_number >= 0 || reg_number == -3)
1418 error ("register name given for non-register variable %q+D", decl);
1420 #endif
1423 /* Specifying a section attribute on a variable forces it into a
1424 non-.bss section, and thus it cannot be common. */
1425 if (TREE_CODE (decl) == VAR_DECL
1426 && DECL_SECTION_NAME (decl) != NULL_TREE
1427 && DECL_INITIAL (decl) == NULL_TREE
1428 && DECL_COMMON (decl))
1429 DECL_COMMON (decl) = 0;
1431 /* Variables can't be both common and weak. */
1432 if (TREE_CODE (decl) == VAR_DECL && DECL_WEAK (decl))
1433 DECL_COMMON (decl) = 0;
1435 if (use_object_blocks_p () && use_blocks_for_decl_p (decl))
1436 x = create_block_symbol (name, get_block_for_decl (decl), -1);
1437 else
1438 x = gen_rtx_SYMBOL_REF (Pmode, name);
1439 SYMBOL_REF_WEAK (x) = DECL_WEAK (decl);
1440 SET_SYMBOL_REF_DECL (x, decl);
1442 x = gen_rtx_MEM (DECL_MODE (decl), x);
1443 if (TREE_CODE (decl) != FUNCTION_DECL)
1444 set_mem_attributes (x, decl, 1);
1445 SET_DECL_RTL (decl, x);
1447 /* Optionally set flags or add text to the name to record information
1448 such as that it is a function name.
1449 If the name is changed, the macro ASM_OUTPUT_LABELREF
1450 will have to know how to strip this information. */
1451 targetm.encode_section_info (decl, DECL_RTL (decl), true);
1453 /* Make this function static known to the mudflap runtime. */
1454 if (flag_mudflap && TREE_CODE (decl) == VAR_DECL)
1455 mudflap_enqueue_decl (decl);
1458 /* Output a string of literal assembler code
1459 for an `asm' keyword used between functions. */
1461 void
1462 assemble_asm (tree string)
1464 app_enable ();
1466 if (TREE_CODE (string) == ADDR_EXPR)
1467 string = TREE_OPERAND (string, 0);
1469 fprintf (asm_out_file, "\t%s\n", TREE_STRING_POINTER (string));
1472 /* Record an element in the table of global destructors. SYMBOL is
1473 a SYMBOL_REF of the function to be called; PRIORITY is a number
1474 between 0 and MAX_INIT_PRIORITY. */
1476 void
1477 default_stabs_asm_out_destructor (rtx symbol ATTRIBUTE_UNUSED,
1478 int priority ATTRIBUTE_UNUSED)
1480 #if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO
1481 /* Tell GNU LD that this is part of the static destructor set.
1482 This will work for any system that uses stabs, most usefully
1483 aout systems. */
1484 dbxout_begin_simple_stabs ("___DTOR_LIST__", 22 /* N_SETT */);
1485 dbxout_stab_value_label (XSTR (symbol, 0));
1486 #else
1487 sorry ("global destructors not supported on this target");
1488 #endif
1491 /* Write the address of the entity given by SYMBOL to SEC. */
1492 void
1493 assemble_addr_to_section (rtx symbol, section *sec)
1495 switch_to_section (sec);
1496 assemble_align (POINTER_SIZE);
1497 assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
1500 /* Return the numbered .ctors.N (if CONSTRUCTOR_P) or .dtors.N (if
1501 not) section for PRIORITY. */
1502 section *
1503 get_cdtor_priority_section (int priority, bool constructor_p)
1505 char buf[16];
1507 /* ??? This only works reliably with the GNU linker. */
1508 sprintf (buf, "%s.%.5u",
1509 constructor_p ? ".ctors" : ".dtors",
1510 /* Invert the numbering so the linker puts us in the proper
1511 order; constructors are run from right to left, and the
1512 linker sorts in increasing order. */
1513 MAX_INIT_PRIORITY - priority);
1514 return get_section (buf, SECTION_WRITE, NULL);
1517 void
1518 default_named_section_asm_out_destructor (rtx symbol, int priority)
1520 section *sec;
1522 if (priority != DEFAULT_INIT_PRIORITY)
1523 sec = get_cdtor_priority_section (priority,
1524 /*constructor_p=*/false);
1525 else
1526 sec = get_section (".dtors", SECTION_WRITE, NULL);
1528 assemble_addr_to_section (symbol, sec);
1531 #ifdef DTORS_SECTION_ASM_OP
1532 void
1533 default_dtor_section_asm_out_destructor (rtx symbol,
1534 int priority ATTRIBUTE_UNUSED)
1536 assemble_addr_to_section (symbol, dtors_section);
1538 #endif
1540 /* Likewise for global constructors. */
1542 void
1543 default_stabs_asm_out_constructor (rtx symbol ATTRIBUTE_UNUSED,
1544 int priority ATTRIBUTE_UNUSED)
1546 #if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO
1547 /* Tell GNU LD that this is part of the static destructor set.
1548 This will work for any system that uses stabs, most usefully
1549 aout systems. */
1550 dbxout_begin_simple_stabs ("___CTOR_LIST__", 22 /* N_SETT */);
1551 dbxout_stab_value_label (XSTR (symbol, 0));
1552 #else
1553 sorry ("global constructors not supported on this target");
1554 #endif
1557 void
1558 default_named_section_asm_out_constructor (rtx symbol, int priority)
1560 section *sec;
1562 if (priority != DEFAULT_INIT_PRIORITY)
1563 sec = get_cdtor_priority_section (priority,
1564 /*constructor_p=*/true);
1565 else
1566 sec = get_section (".ctors", SECTION_WRITE, NULL);
1568 assemble_addr_to_section (symbol, sec);
1571 #ifdef CTORS_SECTION_ASM_OP
1572 void
1573 default_ctor_section_asm_out_constructor (rtx symbol,
1574 int priority ATTRIBUTE_UNUSED)
1576 assemble_addr_to_section (symbol, ctors_section);
1578 #endif
1580 /* CONSTANT_POOL_BEFORE_FUNCTION may be defined as an expression with
1581 a nonzero value if the constant pool should be output before the
1582 start of the function, or a zero value if the pool should output
1583 after the end of the function. The default is to put it before the
1584 start. */
1586 #ifndef CONSTANT_POOL_BEFORE_FUNCTION
1587 #define CONSTANT_POOL_BEFORE_FUNCTION 1
1588 #endif
1590 /* DECL is an object (either VAR_DECL or FUNCTION_DECL) which is going
1591 to be output to assembler.
1592 Set first_global_object_name and weak_global_object_name as appropriate. */
1594 void
1595 notice_global_symbol (tree decl)
1597 const char **type = &first_global_object_name;
1599 if (first_global_object_name
1600 || !TREE_PUBLIC (decl)
1601 || DECL_EXTERNAL (decl)
1602 || !DECL_NAME (decl)
1603 || (TREE_CODE (decl) != FUNCTION_DECL
1604 && (TREE_CODE (decl) != VAR_DECL
1605 || (DECL_COMMON (decl)
1606 && (DECL_INITIAL (decl) == 0
1607 || DECL_INITIAL (decl) == error_mark_node))))
1608 || !MEM_P (DECL_RTL (decl)))
1609 return;
1611 /* We win when global object is found, but it is useful to know about weak
1612 symbol as well so we can produce nicer unique names. */
1613 if (DECL_WEAK (decl) || DECL_ONE_ONLY (decl) || flag_shlib)
1614 type = &weak_global_object_name;
1616 if (!*type)
1618 const char *p;
1619 const char *name;
1620 rtx decl_rtl = DECL_RTL (decl);
1622 p = targetm.strip_name_encoding (XSTR (XEXP (decl_rtl, 0), 0));
1623 name = ggc_strdup (p);
1625 *type = name;
1629 /* Output assembler code for the constant pool of a function and associated
1630 with defining the name of the function. DECL describes the function.
1631 NAME is the function's name. For the constant pool, we use the current
1632 constant pool data. */
1634 void
1635 assemble_start_function (tree decl, const char *fnname)
1637 int align;
1638 char tmp_label[100];
1639 bool hot_label_written = false;
1641 crtl->subsections.unlikely_text_section_name = NULL;
1643 first_function_block_is_cold = false;
1644 if (flag_reorder_blocks_and_partition)
1646 ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LHOTB", const_labelno);
1647 crtl->subsections.hot_section_label = ggc_strdup (tmp_label);
1648 ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LCOLDB", const_labelno);
1649 crtl->subsections.cold_section_label = ggc_strdup (tmp_label);
1650 ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LHOTE", const_labelno);
1651 crtl->subsections.hot_section_end_label = ggc_strdup (tmp_label);
1652 ASM_GENERATE_INTERNAL_LABEL (tmp_label, "LCOLDE", const_labelno);
1653 crtl->subsections.cold_section_end_label = ggc_strdup (tmp_label);
1654 const_labelno++;
1656 else
1658 crtl->subsections.hot_section_label = NULL;
1659 crtl->subsections.cold_section_label = NULL;
1660 crtl->subsections.hot_section_end_label = NULL;
1661 crtl->subsections.cold_section_end_label = NULL;
1664 /* The following code does not need preprocessing in the assembler. */
1666 app_disable ();
1668 if (CONSTANT_POOL_BEFORE_FUNCTION)
1669 output_constant_pool (fnname, decl);
1671 resolve_unique_section (decl, 0, flag_function_sections);
1673 /* Make sure the not and cold text (code) sections are properly
1674 aligned. This is necessary here in the case where the function
1675 has both hot and cold sections, because we don't want to re-set
1676 the alignment when the section switch happens mid-function. */
1678 if (flag_reorder_blocks_and_partition)
1680 switch_to_section (unlikely_text_section ());
1681 assemble_align (DECL_ALIGN (decl));
1682 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.cold_section_label);
1684 /* When the function starts with a cold section, we need to explicitly
1685 align the hot section and write out the hot section label.
1686 But if the current function is a thunk, we do not have a CFG. */
1687 if (!cfun->is_thunk
1688 && BB_PARTITION (ENTRY_BLOCK_PTR->next_bb) == BB_COLD_PARTITION)
1690 switch_to_section (text_section);
1691 assemble_align (DECL_ALIGN (decl));
1692 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.hot_section_label);
1693 hot_label_written = true;
1694 first_function_block_is_cold = true;
1697 else if (DECL_SECTION_NAME (decl))
1699 /* Calls to function_section rely on first_function_block_is_cold
1700 being accurate. The first block may be cold even if we aren't
1701 doing partitioning, if the entire function was decided by
1702 choose_function_section (predict.c) to be cold. */
1704 initialize_cold_section_name ();
1706 if (crtl->subsections.unlikely_text_section_name
1707 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
1708 crtl->subsections.unlikely_text_section_name) == 0)
1709 first_function_block_is_cold = true;
1712 in_cold_section_p = first_function_block_is_cold;
1714 /* Switch to the correct text section for the start of the function. */
1716 switch_to_section (function_section (decl));
1717 if (flag_reorder_blocks_and_partition
1718 && !hot_label_written)
1719 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.hot_section_label);
1721 /* Tell assembler to move to target machine's alignment for functions. */
1722 align = floor_log2 (DECL_ALIGN (decl) / BITS_PER_UNIT);
1723 if (align > 0)
1725 ASM_OUTPUT_ALIGN (asm_out_file, align);
1728 /* Handle a user-specified function alignment.
1729 Note that we still need to align to DECL_ALIGN, as above,
1730 because ASM_OUTPUT_MAX_SKIP_ALIGN might not do any alignment at all. */
1731 if (! DECL_USER_ALIGN (decl)
1732 && align_functions_log > align
1733 && optimize_function_for_speed_p (cfun))
1735 #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
1736 ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file,
1737 align_functions_log, align_functions - 1);
1738 #else
1739 ASM_OUTPUT_ALIGN (asm_out_file, align_functions_log);
1740 #endif
1743 #ifdef ASM_OUTPUT_FUNCTION_PREFIX
1744 ASM_OUTPUT_FUNCTION_PREFIX (asm_out_file, fnname);
1745 #endif
1747 (*debug_hooks->begin_function) (decl);
1749 /* Make function name accessible from other files, if appropriate. */
1751 if (TREE_PUBLIC (decl))
1753 notice_global_symbol (decl);
1755 globalize_decl (decl);
1757 maybe_assemble_visibility (decl);
1760 if (DECL_PRESERVE_P (decl))
1761 targetm.asm_out.mark_decl_preserved (fnname);
1763 /* Do any machine/system dependent processing of the function name. */
1764 #ifdef ASM_DECLARE_FUNCTION_NAME
1765 ASM_DECLARE_FUNCTION_NAME (asm_out_file, fnname, current_function_decl);
1766 #else
1767 /* Standard thing is just output label for the function. */
1768 ASM_OUTPUT_LABEL (asm_out_file, fnname);
1769 #endif /* ASM_DECLARE_FUNCTION_NAME */
1772 /* Output assembler code associated with defining the size of the
1773 function. DECL describes the function. NAME is the function's name. */
1775 void
1776 assemble_end_function (tree decl, const char *fnname ATTRIBUTE_UNUSED)
1778 #ifdef ASM_DECLARE_FUNCTION_SIZE
1779 /* We could have switched section in the middle of the function. */
1780 if (flag_reorder_blocks_and_partition)
1781 switch_to_section (function_section (decl));
1782 ASM_DECLARE_FUNCTION_SIZE (asm_out_file, fnname, decl);
1783 #endif
1784 if (! CONSTANT_POOL_BEFORE_FUNCTION)
1786 output_constant_pool (fnname, decl);
1787 switch_to_section (function_section (decl)); /* need to switch back */
1789 /* Output labels for end of hot/cold text sections (to be used by
1790 debug info.) */
1791 if (flag_reorder_blocks_and_partition)
1793 section *save_text_section;
1795 save_text_section = in_section;
1796 switch_to_section (unlikely_text_section ());
1797 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.cold_section_end_label);
1798 if (first_function_block_is_cold)
1799 switch_to_section (text_section);
1800 else
1801 switch_to_section (function_section (decl));
1802 ASM_OUTPUT_LABEL (asm_out_file, crtl->subsections.hot_section_end_label);
1803 switch_to_section (save_text_section);
1807 /* Assemble code to leave SIZE bytes of zeros. */
1809 void
1810 assemble_zeros (unsigned HOST_WIDE_INT size)
1812 /* Do no output if -fsyntax-only. */
1813 if (flag_syntax_only)
1814 return;
1816 #ifdef ASM_NO_SKIP_IN_TEXT
1817 /* The `space' pseudo in the text section outputs nop insns rather than 0s,
1818 so we must output 0s explicitly in the text section. */
1819 if (ASM_NO_SKIP_IN_TEXT && (in_section->common.flags & SECTION_CODE) != 0)
1821 unsigned HOST_WIDE_INT i;
1822 for (i = 0; i < size; i++)
1823 assemble_integer (const0_rtx, 1, BITS_PER_UNIT, 1);
1825 else
1826 #endif
1827 if (size > 0)
1828 ASM_OUTPUT_SKIP (asm_out_file, size);
1831 /* Assemble an alignment pseudo op for an ALIGN-bit boundary. */
1833 void
1834 assemble_align (int align)
1836 if (align > BITS_PER_UNIT)
1838 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
1842 /* Assemble a string constant with the specified C string as contents. */
1844 void
1845 assemble_string (const char *p, int size)
1847 int pos = 0;
1848 int maximum = 2000;
1850 /* If the string is very long, split it up. */
1852 while (pos < size)
1854 int thissize = size - pos;
1855 if (thissize > maximum)
1856 thissize = maximum;
1858 ASM_OUTPUT_ASCII (asm_out_file, p, thissize);
1860 pos += thissize;
1861 p += thissize;
1866 /* A noswitch_section_callback for lcomm_section. */
1868 static bool
1869 emit_local (tree decl ATTRIBUTE_UNUSED,
1870 const char *name ATTRIBUTE_UNUSED,
1871 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
1872 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
1874 #if defined ASM_OUTPUT_ALIGNED_DECL_LOCAL
1875 ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, decl, name,
1876 size, DECL_ALIGN (decl));
1877 return true;
1878 #elif defined ASM_OUTPUT_ALIGNED_LOCAL
1879 ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, DECL_ALIGN (decl));
1880 return true;
1881 #else
1882 ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
1883 return false;
1884 #endif
1887 /* A noswitch_section_callback for bss_noswitch_section. */
1889 #if defined ASM_OUTPUT_ALIGNED_BSS || defined ASM_OUTPUT_BSS
1890 static bool
1891 emit_bss (tree decl ATTRIBUTE_UNUSED,
1892 const char *name ATTRIBUTE_UNUSED,
1893 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
1894 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
1896 #if defined ASM_OUTPUT_ALIGNED_BSS
1897 ASM_OUTPUT_ALIGNED_BSS (asm_out_file, decl, name, size, DECL_ALIGN (decl));
1898 return true;
1899 #else
1900 ASM_OUTPUT_BSS (asm_out_file, decl, name, size, rounded);
1901 return false;
1902 #endif
1904 #endif
1906 /* A noswitch_section_callback for comm_section. */
1908 static bool
1909 emit_common (tree decl ATTRIBUTE_UNUSED,
1910 const char *name ATTRIBUTE_UNUSED,
1911 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
1912 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
1914 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
1915 ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, decl, name,
1916 size, DECL_ALIGN (decl));
1917 return true;
1918 #elif defined ASM_OUTPUT_ALIGNED_COMMON
1919 ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, name, size, DECL_ALIGN (decl));
1920 return true;
1921 #else
1922 ASM_OUTPUT_COMMON (asm_out_file, name, size, rounded);
1923 return false;
1924 #endif
1927 /* A noswitch_section_callback for tls_comm_section. */
1929 static bool
1930 emit_tls_common (tree decl ATTRIBUTE_UNUSED,
1931 const char *name ATTRIBUTE_UNUSED,
1932 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
1933 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
1935 #ifdef ASM_OUTPUT_TLS_COMMON
1936 ASM_OUTPUT_TLS_COMMON (asm_out_file, decl, name, size);
1937 return true;
1938 #else
1939 sorry ("thread-local COMMON data not implemented");
1940 return true;
1941 #endif
1944 /* Assemble DECL given that it belongs in SECTION_NOSWITCH section SECT.
1945 NAME is the name of DECL's SYMBOL_REF. */
1947 static void
1948 assemble_noswitch_variable (tree decl, const char *name, section *sect)
1950 unsigned HOST_WIDE_INT size, rounded;
1952 size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
1953 rounded = size;
1955 /* Don't allocate zero bytes of common,
1956 since that means "undefined external" in the linker. */
1957 if (size == 0)
1958 rounded = 1;
1960 /* Round size up to multiple of BIGGEST_ALIGNMENT bits
1961 so that each uninitialized object starts on such a boundary. */
1962 rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1;
1963 rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
1964 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
1966 if (!sect->noswitch.callback (decl, name, size, rounded)
1967 && (unsigned HOST_WIDE_INT) DECL_ALIGN_UNIT (decl) > rounded)
1968 warning (0, "requested alignment for %q+D is greater than "
1969 "implemented alignment of %wu", decl, rounded);
1972 /* A subroutine of assemble_variable. Output the label and contents of
1973 DECL, whose address is a SYMBOL_REF with name NAME. DONT_OUTPUT_DATA
1974 is as for assemble_variable. */
1976 static void
1977 assemble_variable_contents (tree decl, const char *name,
1978 bool dont_output_data)
1980 /* Do any machine/system dependent processing of the object. */
1981 #ifdef ASM_DECLARE_OBJECT_NAME
1982 last_assemble_variable_decl = decl;
1983 ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl);
1984 #else
1985 /* Standard thing is just output label for the object. */
1986 ASM_OUTPUT_LABEL (asm_out_file, name);
1987 #endif /* ASM_DECLARE_OBJECT_NAME */
1989 if (!dont_output_data)
1991 if (DECL_INITIAL (decl)
1992 && DECL_INITIAL (decl) != error_mark_node
1993 && !initializer_zerop (DECL_INITIAL (decl)))
1994 /* Output the actual data. */
1995 output_constant (DECL_INITIAL (decl),
1996 tree_low_cst (DECL_SIZE_UNIT (decl), 1),
1997 DECL_ALIGN (decl));
1998 else
1999 /* Leave space for it. */
2000 assemble_zeros (tree_low_cst (DECL_SIZE_UNIT (decl), 1));
2004 /* Initialize emulated tls object TO, which refers to TLS variable
2005 DECL and is initialized by PROXY. */
2007 tree
2008 default_emutls_var_init (tree to, tree decl, tree proxy)
2010 VEC(constructor_elt,gc) *v = VEC_alloc (constructor_elt, gc, 4);
2011 constructor_elt *elt;
2012 tree type = TREE_TYPE (to);
2013 tree field = TYPE_FIELDS (type);
2015 elt = VEC_quick_push (constructor_elt, v, NULL);
2016 elt->index = field;
2017 elt->value = fold_convert (TREE_TYPE (field), DECL_SIZE_UNIT (decl));
2019 elt = VEC_quick_push (constructor_elt, v, NULL);
2020 field = TREE_CHAIN (field);
2021 elt->index = field;
2022 elt->value = build_int_cst (TREE_TYPE (field),
2023 DECL_ALIGN_UNIT (decl));
2025 elt = VEC_quick_push (constructor_elt, v, NULL);
2026 field = TREE_CHAIN (field);
2027 elt->index = field;
2028 elt->value = null_pointer_node;
2030 elt = VEC_quick_push (constructor_elt, v, NULL);
2031 field = TREE_CHAIN (field);
2032 elt->index = field;
2033 elt->value = proxy;
2035 return build_constructor (type, v);
2038 /* Assemble everything that is needed for a variable or function declaration.
2039 Not used for automatic variables, and not used for function definitions.
2040 Should not be called for variables of incomplete structure type.
2042 TOP_LEVEL is nonzero if this variable has file scope.
2043 AT_END is nonzero if this is the special handling, at end of compilation,
2044 to define things that have had only tentative definitions.
2045 DONT_OUTPUT_DATA if nonzero means don't actually output the
2046 initial value (that will be done by the caller). */
2048 void
2049 assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED,
2050 int at_end ATTRIBUTE_UNUSED, int dont_output_data)
2052 const char *name;
2053 rtx decl_rtl, symbol;
2054 section *sect;
2056 if (! targetm.have_tls
2057 && TREE_CODE (decl) == VAR_DECL
2058 && DECL_THREAD_LOCAL_P (decl))
2060 tree to = emutls_decl (decl);
2062 /* If this variable is defined locally, then we need to initialize the
2063 control structure with size and alignment information. We do this
2064 at the last moment because tentative definitions can take a locally
2065 defined but uninitialized variable and initialize it later, which
2066 would result in incorrect contents. */
2067 if (! DECL_EXTERNAL (to)
2068 && (! DECL_COMMON (to)
2069 || (DECL_INITIAL (decl)
2070 && DECL_INITIAL (decl) != error_mark_node)))
2072 DECL_INITIAL (to) = targetm.emutls.var_init
2073 (to, decl, get_emutls_init_templ_addr (decl));
2075 /* Make sure the template is marked as needed early enough.
2076 Without this, if the variable is placed in a
2077 section-anchored block, the template will only be marked
2078 when it's too late. */
2079 record_references_in_initializer (to);
2082 decl = to;
2085 last_assemble_variable_decl = 0;
2087 /* Normally no need to say anything here for external references,
2088 since assemble_external is called by the language-specific code
2089 when a declaration is first seen. */
2091 if (DECL_EXTERNAL (decl))
2092 return;
2094 /* Output no assembler code for a function declaration.
2095 Only definitions of functions output anything. */
2097 if (TREE_CODE (decl) == FUNCTION_DECL)
2098 return;
2100 /* Do nothing for global register variables. */
2101 if (DECL_RTL_SET_P (decl) && REG_P (DECL_RTL (decl)))
2103 TREE_ASM_WRITTEN (decl) = 1;
2104 return;
2107 /* If type was incomplete when the variable was declared,
2108 see if it is complete now. */
2110 if (DECL_SIZE (decl) == 0)
2111 layout_decl (decl, 0);
2113 /* Still incomplete => don't allocate it; treat the tentative defn
2114 (which is what it must have been) as an `extern' reference. */
2116 if (!dont_output_data && DECL_SIZE (decl) == 0)
2118 error ("storage size of %q+D isn%'t known", decl);
2119 TREE_ASM_WRITTEN (decl) = 1;
2120 return;
2123 /* The first declaration of a variable that comes through this function
2124 decides whether it is global (in C, has external linkage)
2125 or local (in C, has internal linkage). So do nothing more
2126 if this function has already run. */
2128 if (TREE_ASM_WRITTEN (decl))
2129 return;
2131 /* Make sure targetm.encode_section_info is invoked before we set
2132 ASM_WRITTEN. */
2133 decl_rtl = DECL_RTL (decl);
2135 TREE_ASM_WRITTEN (decl) = 1;
2137 /* Do no output if -fsyntax-only. */
2138 if (flag_syntax_only)
2139 return;
2141 app_disable ();
2143 if (! dont_output_data
2144 && ! host_integerp (DECL_SIZE_UNIT (decl), 1))
2146 error ("size of variable %q+D is too large", decl);
2147 return;
2150 gcc_assert (MEM_P (decl_rtl));
2151 gcc_assert (GET_CODE (XEXP (decl_rtl, 0)) == SYMBOL_REF);
2152 symbol = XEXP (decl_rtl, 0);
2153 name = XSTR (symbol, 0);
2154 if (TREE_PUBLIC (decl) && DECL_NAME (decl))
2155 notice_global_symbol (decl);
2157 /* Compute the alignment of this data. */
2159 align_variable (decl, dont_output_data);
2160 set_mem_align (decl_rtl, DECL_ALIGN (decl));
2162 if (TREE_PUBLIC (decl))
2163 maybe_assemble_visibility (decl);
2165 if (DECL_PRESERVE_P (decl))
2166 targetm.asm_out.mark_decl_preserved (name);
2168 /* First make the assembler name(s) global if appropriate. */
2169 sect = get_variable_section (decl, false);
2170 if (TREE_PUBLIC (decl)
2171 && (sect->common.flags & SECTION_COMMON) == 0)
2172 globalize_decl (decl);
2174 /* Output any data that we will need to use the address of. */
2175 if (DECL_INITIAL (decl) && DECL_INITIAL (decl) != error_mark_node)
2176 output_addressed_constants (DECL_INITIAL (decl));
2178 /* dbxout.c needs to know this. */
2179 if (sect && (sect->common.flags & SECTION_CODE) != 0)
2180 DECL_IN_TEXT_SECTION (decl) = 1;
2182 /* If the decl is part of an object_block, make sure that the decl
2183 has been positioned within its block, but do not write out its
2184 definition yet. output_object_blocks will do that later. */
2185 if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol) && SYMBOL_REF_BLOCK (symbol))
2187 gcc_assert (!dont_output_data);
2188 place_block_symbol (symbol);
2190 else if (SECTION_STYLE (sect) == SECTION_NOSWITCH)
2191 assemble_noswitch_variable (decl, name, sect);
2192 else
2194 switch_to_section (sect);
2195 if (DECL_ALIGN (decl) > BITS_PER_UNIT)
2196 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DECL_ALIGN_UNIT (decl)));
2197 assemble_variable_contents (decl, name, dont_output_data);
2201 /* Return 1 if type TYPE contains any pointers. */
2203 static int
2204 contains_pointers_p (tree type)
2206 switch (TREE_CODE (type))
2208 case POINTER_TYPE:
2209 case REFERENCE_TYPE:
2210 /* I'm not sure whether OFFSET_TYPE needs this treatment,
2211 so I'll play safe and return 1. */
2212 case OFFSET_TYPE:
2213 return 1;
2215 case RECORD_TYPE:
2216 case UNION_TYPE:
2217 case QUAL_UNION_TYPE:
2219 tree fields;
2220 /* For a type that has fields, see if the fields have pointers. */
2221 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
2222 if (TREE_CODE (fields) == FIELD_DECL
2223 && contains_pointers_p (TREE_TYPE (fields)))
2224 return 1;
2225 return 0;
2228 case ARRAY_TYPE:
2229 /* An array type contains pointers if its element type does. */
2230 return contains_pointers_p (TREE_TYPE (type));
2232 default:
2233 return 0;
2237 /* We delay assemble_external processing until
2238 the compilation unit is finalized. This is the best we can do for
2239 right now (i.e. stage 3 of GCC 4.0) - the right thing is to delay
2240 it all the way to final. See PR 17982 for further discussion. */
2241 static GTY(()) tree pending_assemble_externals;
2243 #ifdef ASM_OUTPUT_EXTERNAL
2244 /* True if DECL is a function decl for which no out-of-line copy exists.
2245 It is assumed that DECL's assembler name has been set. */
2247 static bool
2248 incorporeal_function_p (tree decl)
2250 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
2252 const char *name;
2254 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
2255 && DECL_FUNCTION_CODE (decl) == BUILT_IN_ALLOCA)
2256 return true;
2258 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
2259 if (is_builtin_name (name))
2260 return true;
2262 return false;
2265 /* Actually do the tests to determine if this is necessary, and invoke
2266 ASM_OUTPUT_EXTERNAL. */
2267 static void
2268 assemble_external_real (tree decl)
2270 rtx rtl = DECL_RTL (decl);
2272 if (MEM_P (rtl) && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF
2273 && !SYMBOL_REF_USED (XEXP (rtl, 0))
2274 && !incorporeal_function_p (decl))
2276 /* Some systems do require some output. */
2277 SYMBOL_REF_USED (XEXP (rtl, 0)) = 1;
2278 ASM_OUTPUT_EXTERNAL (asm_out_file, decl, XSTR (XEXP (rtl, 0), 0));
2281 #endif
2283 void
2284 process_pending_assemble_externals (void)
2286 #ifdef ASM_OUTPUT_EXTERNAL
2287 tree list;
2288 for (list = pending_assemble_externals; list; list = TREE_CHAIN (list))
2289 assemble_external_real (TREE_VALUE (list));
2291 pending_assemble_externals = 0;
2292 #endif
2295 /* This TREE_LIST contains any weak symbol declarations waiting
2296 to be emitted. */
2297 static GTY(()) tree weak_decls;
2299 /* Output something to declare an external symbol to the assembler,
2300 and qualifiers such as weakness. (Most assemblers don't need
2301 extern declaration, so we normally output nothing.) Do nothing if
2302 DECL is not external. */
2304 void
2305 assemble_external (tree decl ATTRIBUTE_UNUSED)
2307 /* Because most platforms do not define ASM_OUTPUT_EXTERNAL, the
2308 main body of this code is only rarely exercised. To provide some
2309 testing, on all platforms, we make sure that the ASM_OUT_FILE is
2310 open. If it's not, we should not be calling this function. */
2311 gcc_assert (asm_out_file);
2313 if (!DECL_P (decl) || !DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl))
2314 return;
2316 /* We want to output annotation for weak and external symbols at
2317 very last to check if they are references or not. */
2319 if (SUPPORTS_WEAK && DECL_WEAK (decl)
2320 /* TREE_STATIC is a weird and abused creature which is not
2321 generally the right test for whether an entity has been
2322 locally emitted, inlined or otherwise not-really-extern, but
2323 for declarations that can be weak, it happens to be
2324 match. */
2325 && !TREE_STATIC (decl)
2326 && tree_find_value (weak_decls, decl) == NULL_TREE)
2327 weak_decls = tree_cons (NULL, decl, weak_decls);
2329 #ifdef ASM_OUTPUT_EXTERNAL
2330 if (tree_find_value (pending_assemble_externals, decl) == NULL_TREE)
2331 pending_assemble_externals = tree_cons (NULL, decl,
2332 pending_assemble_externals);
2333 #endif
2336 /* Similar, for calling a library function FUN. */
2338 void
2339 assemble_external_libcall (rtx fun)
2341 /* Declare library function name external when first used, if nec. */
2342 if (! SYMBOL_REF_USED (fun))
2344 SYMBOL_REF_USED (fun) = 1;
2345 targetm.asm_out.external_libcall (fun);
2349 /* Assemble a label named NAME. */
2351 void
2352 assemble_label (const char *name)
2354 ASM_OUTPUT_LABEL (asm_out_file, name);
2357 /* Set the symbol_referenced flag for ID. */
2358 void
2359 mark_referenced (tree id)
2361 TREE_SYMBOL_REFERENCED (id) = 1;
2364 /* Set the symbol_referenced flag for DECL and notify callgraph. */
2365 void
2366 mark_decl_referenced (tree decl)
2368 if (TREE_CODE (decl) == FUNCTION_DECL)
2370 /* Extern inline functions don't become needed when referenced.
2371 If we know a method will be emitted in other TU and no new
2372 functions can be marked reachable, just use the external
2373 definition. */
2374 struct cgraph_node *node = cgraph_node (decl);
2375 if (!DECL_EXTERNAL (decl)
2376 && (!node->local.vtable_method || !cgraph_global_info_ready
2377 || !node->local.finalized))
2378 cgraph_mark_needed_node (node);
2380 else if (TREE_CODE (decl) == VAR_DECL)
2382 struct varpool_node *node = varpool_node (decl);
2383 varpool_mark_needed_node (node);
2384 /* C++ frontend use mark_decl_references to force COMDAT variables
2385 to be output that might appear dead otherwise. */
2386 node->force_output = true;
2388 /* else do nothing - we can get various sorts of CST nodes here,
2389 which do not need to be marked. */
2393 /* Follow the IDENTIFIER_TRANSPARENT_ALIAS chain starting at *ALIAS
2394 until we find an identifier that is not itself a transparent alias.
2395 Modify the alias passed to it by reference (and all aliases on the
2396 way to the ultimate target), such that they do not have to be
2397 followed again, and return the ultimate target of the alias
2398 chain. */
2400 static inline tree
2401 ultimate_transparent_alias_target (tree *alias)
2403 tree target = *alias;
2405 if (IDENTIFIER_TRANSPARENT_ALIAS (target))
2407 gcc_assert (TREE_CHAIN (target));
2408 target = ultimate_transparent_alias_target (&TREE_CHAIN (target));
2409 gcc_assert (! IDENTIFIER_TRANSPARENT_ALIAS (target)
2410 && ! TREE_CHAIN (target));
2411 *alias = target;
2414 return target;
2417 /* Output to FILE (an assembly file) a reference to NAME. If NAME
2418 starts with a *, the rest of NAME is output verbatim. Otherwise
2419 NAME is transformed in a target-specific way (usually by the
2420 addition of an underscore). */
2422 void
2423 assemble_name_raw (FILE *file, const char *name)
2425 if (name[0] == '*')
2426 fputs (&name[1], file);
2427 else
2428 ASM_OUTPUT_LABELREF (file, name);
2431 /* Like assemble_name_raw, but should be used when NAME might refer to
2432 an entity that is also represented as a tree (like a function or
2433 variable). If NAME does refer to such an entity, that entity will
2434 be marked as referenced. */
2436 void
2437 assemble_name (FILE *file, const char *name)
2439 const char *real_name;
2440 tree id;
2442 real_name = targetm.strip_name_encoding (name);
2444 id = maybe_get_identifier (real_name);
2445 if (id)
2447 tree id_orig = id;
2449 mark_referenced (id);
2450 ultimate_transparent_alias_target (&id);
2451 if (id != id_orig)
2452 name = IDENTIFIER_POINTER (id);
2453 gcc_assert (! TREE_CHAIN (id));
2456 assemble_name_raw (file, name);
2459 /* Allocate SIZE bytes writable static space with a gensym name
2460 and return an RTX to refer to its address. */
2463 assemble_static_space (unsigned HOST_WIDE_INT size)
2465 char name[12];
2466 const char *namestring;
2467 rtx x;
2469 ASM_GENERATE_INTERNAL_LABEL (name, "LF", const_labelno);
2470 ++const_labelno;
2471 namestring = ggc_strdup (name);
2473 x = gen_rtx_SYMBOL_REF (Pmode, namestring);
2474 SYMBOL_REF_FLAGS (x) = SYMBOL_FLAG_LOCAL;
2476 #ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
2477 ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, NULL_TREE, name, size,
2478 BIGGEST_ALIGNMENT);
2479 #else
2480 #ifdef ASM_OUTPUT_ALIGNED_LOCAL
2481 ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, BIGGEST_ALIGNMENT);
2482 #else
2484 /* Round size up to multiple of BIGGEST_ALIGNMENT bits
2485 so that each uninitialized object starts on such a boundary. */
2486 /* Variable `rounded' might or might not be used in ASM_OUTPUT_LOCAL. */
2487 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED
2488 = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1)
2489 / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
2490 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
2491 ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
2493 #endif
2494 #endif
2495 return x;
2498 /* Assemble the static constant template for function entry trampolines.
2499 This is done at most once per compilation.
2500 Returns an RTX for the address of the template. */
2502 static GTY(()) rtx initial_trampoline;
2504 #ifdef TRAMPOLINE_TEMPLATE
2506 assemble_trampoline_template (void)
2508 char label[256];
2509 const char *name;
2510 int align;
2511 rtx symbol;
2513 if (initial_trampoline)
2514 return initial_trampoline;
2516 /* By default, put trampoline templates in read-only data section. */
2518 #ifdef TRAMPOLINE_SECTION
2519 switch_to_section (TRAMPOLINE_SECTION);
2520 #else
2521 switch_to_section (readonly_data_section);
2522 #endif
2524 /* Write the assembler code to define one. */
2525 align = floor_log2 (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT);
2526 if (align > 0)
2528 ASM_OUTPUT_ALIGN (asm_out_file, align);
2531 targetm.asm_out.internal_label (asm_out_file, "LTRAMP", 0);
2532 TRAMPOLINE_TEMPLATE (asm_out_file);
2534 /* Record the rtl to refer to it. */
2535 ASM_GENERATE_INTERNAL_LABEL (label, "LTRAMP", 0);
2536 name = ggc_strdup (label);
2537 symbol = gen_rtx_SYMBOL_REF (Pmode, name);
2538 SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2540 initial_trampoline = gen_rtx_MEM (BLKmode, symbol);
2541 set_mem_align (initial_trampoline, TRAMPOLINE_ALIGNMENT);
2543 return initial_trampoline;
2545 #endif
2547 /* A and B are either alignments or offsets. Return the minimum alignment
2548 that may be assumed after adding the two together. */
2550 static inline unsigned
2551 min_align (unsigned int a, unsigned int b)
2553 return (a | b) & -(a | b);
2556 /* Return the assembler directive for creating a given kind of integer
2557 object. SIZE is the number of bytes in the object and ALIGNED_P
2558 indicates whether it is known to be aligned. Return NULL if the
2559 assembly dialect has no such directive.
2561 The returned string should be printed at the start of a new line and
2562 be followed immediately by the object's initial value. */
2564 const char *
2565 integer_asm_op (int size, int aligned_p)
2567 struct asm_int_op *ops;
2569 if (aligned_p)
2570 ops = &targetm.asm_out.aligned_op;
2571 else
2572 ops = &targetm.asm_out.unaligned_op;
2574 switch (size)
2576 case 1:
2577 return targetm.asm_out.byte_op;
2578 case 2:
2579 return ops->hi;
2580 case 4:
2581 return ops->si;
2582 case 8:
2583 return ops->di;
2584 case 16:
2585 return ops->ti;
2586 default:
2587 return NULL;
2591 /* Use directive OP to assemble an integer object X. Print OP at the
2592 start of the line, followed immediately by the value of X. */
2594 void
2595 assemble_integer_with_op (const char *op, rtx x)
2597 fputs (op, asm_out_file);
2598 output_addr_const (asm_out_file, x);
2599 fputc ('\n', asm_out_file);
2602 /* The default implementation of the asm_out.integer target hook. */
2604 bool
2605 default_assemble_integer (rtx x ATTRIBUTE_UNUSED,
2606 unsigned int size ATTRIBUTE_UNUSED,
2607 int aligned_p ATTRIBUTE_UNUSED)
2609 const char *op = integer_asm_op (size, aligned_p);
2610 /* Avoid GAS bugs for large values. Specifically negative values whose
2611 absolute value fits in a bfd_vma, but not in a bfd_signed_vma. */
2612 if (size > UNITS_PER_WORD && size > POINTER_SIZE / BITS_PER_UNIT)
2613 return false;
2614 return op && (assemble_integer_with_op (op, x), true);
2617 /* Assemble the integer constant X into an object of SIZE bytes. ALIGN is
2618 the alignment of the integer in bits. Return 1 if we were able to output
2619 the constant, otherwise 0. We must be able to output the constant,
2620 if FORCE is nonzero. */
2622 bool
2623 assemble_integer (rtx x, unsigned int size, unsigned int align, int force)
2625 int aligned_p;
2627 aligned_p = (align >= MIN (size * BITS_PER_UNIT, BIGGEST_ALIGNMENT));
2629 /* See if the target hook can handle this kind of object. */
2630 if (targetm.asm_out.integer (x, size, aligned_p))
2631 return true;
2633 /* If the object is a multi-byte one, try splitting it up. Split
2634 it into words it if is multi-word, otherwise split it into bytes. */
2635 if (size > 1)
2637 enum machine_mode omode, imode;
2638 unsigned int subalign;
2639 unsigned int subsize, i;
2640 enum mode_class mclass;
2642 subsize = size > UNITS_PER_WORD? UNITS_PER_WORD : 1;
2643 subalign = MIN (align, subsize * BITS_PER_UNIT);
2644 if (GET_CODE (x) == CONST_FIXED)
2645 mclass = GET_MODE_CLASS (GET_MODE (x));
2646 else
2647 mclass = MODE_INT;
2649 omode = mode_for_size (subsize * BITS_PER_UNIT, mclass, 0);
2650 imode = mode_for_size (size * BITS_PER_UNIT, mclass, 0);
2652 for (i = 0; i < size; i += subsize)
2654 rtx partial = simplify_subreg (omode, x, imode, i);
2655 if (!partial || !assemble_integer (partial, subsize, subalign, 0))
2656 break;
2658 if (i == size)
2659 return true;
2661 /* If we've printed some of it, but not all of it, there's no going
2662 back now. */
2663 gcc_assert (!i);
2666 gcc_assert (!force);
2668 return false;
2671 void
2672 assemble_real (REAL_VALUE_TYPE d, enum machine_mode mode, unsigned int align)
2674 long data[4] = {0, 0, 0, 0};
2675 int i;
2676 int bitsize, nelts, nunits, units_per;
2678 /* This is hairy. We have a quantity of known size. real_to_target
2679 will put it into an array of *host* longs, 32 bits per element
2680 (even if long is more than 32 bits). We need to determine the
2681 number of array elements that are occupied (nelts) and the number
2682 of *target* min-addressable units that will be occupied in the
2683 object file (nunits). We cannot assume that 32 divides the
2684 mode's bitsize (size * BITS_PER_UNIT) evenly.
2686 size * BITS_PER_UNIT is used here to make sure that padding bits
2687 (which might appear at either end of the value; real_to_target
2688 will include the padding bits in its output array) are included. */
2690 nunits = GET_MODE_SIZE (mode);
2691 bitsize = nunits * BITS_PER_UNIT;
2692 nelts = CEIL (bitsize, 32);
2693 units_per = 32 / BITS_PER_UNIT;
2695 real_to_target (data, &d, mode);
2697 /* Put out the first word with the specified alignment. */
2698 assemble_integer (GEN_INT (data[0]), MIN (nunits, units_per), align, 1);
2699 nunits -= units_per;
2701 /* Subsequent words need only 32-bit alignment. */
2702 align = min_align (align, 32);
2704 for (i = 1; i < nelts; i++)
2706 assemble_integer (GEN_INT (data[i]), MIN (nunits, units_per), align, 1);
2707 nunits -= units_per;
2711 /* Given an expression EXP with a constant value,
2712 reduce it to the sum of an assembler symbol and an integer.
2713 Store them both in the structure *VALUE.
2714 EXP must be reducible. */
2716 struct addr_const GTY(())
2718 rtx base;
2719 HOST_WIDE_INT offset;
2722 static void
2723 decode_addr_const (tree exp, struct addr_const *value)
2725 tree target = TREE_OPERAND (exp, 0);
2726 int offset = 0;
2727 rtx x;
2729 while (1)
2731 if (TREE_CODE (target) == COMPONENT_REF
2732 && host_integerp (byte_position (TREE_OPERAND (target, 1)), 0))
2735 offset += int_byte_position (TREE_OPERAND (target, 1));
2736 target = TREE_OPERAND (target, 0);
2738 else if (TREE_CODE (target) == ARRAY_REF
2739 || TREE_CODE (target) == ARRAY_RANGE_REF)
2741 offset += (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (target)), 1)
2742 * tree_low_cst (TREE_OPERAND (target, 1), 0));
2743 target = TREE_OPERAND (target, 0);
2745 else
2746 break;
2749 switch (TREE_CODE (target))
2751 case VAR_DECL:
2752 case FUNCTION_DECL:
2753 x = DECL_RTL (target);
2754 break;
2756 case LABEL_DECL:
2757 x = gen_rtx_MEM (FUNCTION_MODE,
2758 gen_rtx_LABEL_REF (Pmode, force_label_rtx (target)));
2759 break;
2761 case REAL_CST:
2762 case FIXED_CST:
2763 case STRING_CST:
2764 case COMPLEX_CST:
2765 case CONSTRUCTOR:
2766 case INTEGER_CST:
2767 x = output_constant_def (target, 1);
2768 break;
2770 default:
2771 gcc_unreachable ();
2774 gcc_assert (MEM_P (x));
2775 x = XEXP (x, 0);
2777 value->base = x;
2778 value->offset = offset;
2781 /* Uniquize all constants that appear in memory.
2782 Each constant in memory thus far output is recorded
2783 in `const_desc_table'. */
2785 struct constant_descriptor_tree GTY(())
2787 /* A MEM for the constant. */
2788 rtx rtl;
2790 /* The value of the constant. */
2791 tree value;
2793 /* Hash of value. Computing the hash from value each time
2794 hashfn is called can't work properly, as that means recursive
2795 use of the hash table during hash table expansion. */
2796 hashval_t hash;
2799 static GTY((param_is (struct constant_descriptor_tree)))
2800 htab_t const_desc_htab;
2802 static struct constant_descriptor_tree * build_constant_desc (tree);
2803 static void maybe_output_constant_def_contents (struct constant_descriptor_tree *, int);
2805 /* Compute a hash code for a constant expression. */
2807 static hashval_t
2808 const_desc_hash (const void *ptr)
2810 return ((const struct constant_descriptor_tree *)ptr)->hash;
2813 static hashval_t
2814 const_hash_1 (const tree exp)
2816 const char *p;
2817 hashval_t hi;
2818 int len, i;
2819 enum tree_code code = TREE_CODE (exp);
2821 /* Either set P and LEN to the address and len of something to hash and
2822 exit the switch or return a value. */
2824 switch (code)
2826 case INTEGER_CST:
2827 p = (char *) &TREE_INT_CST (exp);
2828 len = sizeof TREE_INT_CST (exp);
2829 break;
2831 case REAL_CST:
2832 return real_hash (TREE_REAL_CST_PTR (exp));
2834 case FIXED_CST:
2835 return fixed_hash (TREE_FIXED_CST_PTR (exp));
2837 case STRING_CST:
2838 p = TREE_STRING_POINTER (exp);
2839 len = TREE_STRING_LENGTH (exp);
2840 break;
2842 case COMPLEX_CST:
2843 return (const_hash_1 (TREE_REALPART (exp)) * 5
2844 + const_hash_1 (TREE_IMAGPART (exp)));
2846 case CONSTRUCTOR:
2848 unsigned HOST_WIDE_INT idx;
2849 tree value;
2851 hi = 5 + int_size_in_bytes (TREE_TYPE (exp));
2853 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, value)
2854 if (value)
2855 hi = hi * 603 + const_hash_1 (value);
2857 return hi;
2860 case ADDR_EXPR:
2861 case FDESC_EXPR:
2863 struct addr_const value;
2865 decode_addr_const (exp, &value);
2866 switch (GET_CODE (value.base))
2868 case SYMBOL_REF:
2869 /* Don't hash the address of the SYMBOL_REF;
2870 only use the offset and the symbol name. */
2871 hi = value.offset;
2872 p = XSTR (value.base, 0);
2873 for (i = 0; p[i] != 0; i++)
2874 hi = ((hi * 613) + (unsigned) (p[i]));
2875 break;
2877 case LABEL_REF:
2878 hi = value.offset + CODE_LABEL_NUMBER (XEXP (value.base, 0)) * 13;
2879 break;
2881 default:
2882 gcc_unreachable ();
2885 return hi;
2887 case PLUS_EXPR:
2888 case POINTER_PLUS_EXPR:
2889 case MINUS_EXPR:
2890 return (const_hash_1 (TREE_OPERAND (exp, 0)) * 9
2891 + const_hash_1 (TREE_OPERAND (exp, 1)));
2893 CASE_CONVERT:
2894 return const_hash_1 (TREE_OPERAND (exp, 0)) * 7 + 2;
2896 default:
2897 /* A language specific constant. Just hash the code. */
2898 return code;
2901 /* Compute hashing function. */
2902 hi = len;
2903 for (i = 0; i < len; i++)
2904 hi = ((hi * 613) + (unsigned) (p[i]));
2906 return hi;
2909 /* Wrapper of compare_constant, for the htab interface. */
2910 static int
2911 const_desc_eq (const void *p1, const void *p2)
2913 const struct constant_descriptor_tree *const c1
2914 = (const struct constant_descriptor_tree *) p1;
2915 const struct constant_descriptor_tree *const c2
2916 = (const struct constant_descriptor_tree *) p2;
2917 if (c1->hash != c2->hash)
2918 return 0;
2919 return compare_constant (c1->value, c2->value);
2922 /* Compare t1 and t2, and return 1 only if they are known to result in
2923 the same bit pattern on output. */
2925 static int
2926 compare_constant (const tree t1, const tree t2)
2928 enum tree_code typecode;
2930 if (t1 == NULL_TREE)
2931 return t2 == NULL_TREE;
2932 if (t2 == NULL_TREE)
2933 return 0;
2935 if (TREE_CODE (t1) != TREE_CODE (t2))
2936 return 0;
2938 switch (TREE_CODE (t1))
2940 case INTEGER_CST:
2941 /* Integer constants are the same only if the same width of type. */
2942 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2943 return 0;
2944 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
2945 return 0;
2946 return tree_int_cst_equal (t1, t2);
2948 case REAL_CST:
2949 /* Real constants are the same only if the same width of type. */
2950 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2951 return 0;
2953 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2955 case FIXED_CST:
2956 /* Fixed constants are the same only if the same width of type. */
2957 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2958 return 0;
2960 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
2962 case STRING_CST:
2963 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
2964 return 0;
2966 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2967 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2968 TREE_STRING_LENGTH (t1)));
2970 case COMPLEX_CST:
2971 return (compare_constant (TREE_REALPART (t1), TREE_REALPART (t2))
2972 && compare_constant (TREE_IMAGPART (t1), TREE_IMAGPART (t2)));
2974 case CONSTRUCTOR:
2976 VEC(constructor_elt, gc) *v1, *v2;
2977 unsigned HOST_WIDE_INT idx;
2979 typecode = TREE_CODE (TREE_TYPE (t1));
2980 if (typecode != TREE_CODE (TREE_TYPE (t2)))
2981 return 0;
2983 if (typecode == ARRAY_TYPE)
2985 HOST_WIDE_INT size_1 = int_size_in_bytes (TREE_TYPE (t1));
2986 /* For arrays, check that the sizes all match. */
2987 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
2988 || size_1 == -1
2989 || size_1 != int_size_in_bytes (TREE_TYPE (t2)))
2990 return 0;
2992 else
2994 /* For record and union constructors, require exact type
2995 equality. */
2996 if (TREE_TYPE (t1) != TREE_TYPE (t2))
2997 return 0;
3000 v1 = CONSTRUCTOR_ELTS (t1);
3001 v2 = CONSTRUCTOR_ELTS (t2);
3002 if (VEC_length (constructor_elt, v1)
3003 != VEC_length (constructor_elt, v2))
3004 return 0;
3006 for (idx = 0; idx < VEC_length (constructor_elt, v1); ++idx)
3008 constructor_elt *c1 = VEC_index (constructor_elt, v1, idx);
3009 constructor_elt *c2 = VEC_index (constructor_elt, v2, idx);
3011 /* Check that each value is the same... */
3012 if (!compare_constant (c1->value, c2->value))
3013 return 0;
3014 /* ... and that they apply to the same fields! */
3015 if (typecode == ARRAY_TYPE)
3017 if (!compare_constant (c1->index, c2->index))
3018 return 0;
3020 else
3022 if (c1->index != c2->index)
3023 return 0;
3027 return 1;
3030 case ADDR_EXPR:
3031 case FDESC_EXPR:
3033 struct addr_const value1, value2;
3035 decode_addr_const (t1, &value1);
3036 decode_addr_const (t2, &value2);
3037 return (value1.offset == value2.offset
3038 && strcmp (XSTR (value1.base, 0), XSTR (value2.base, 0)) == 0);
3041 case PLUS_EXPR:
3042 case POINTER_PLUS_EXPR:
3043 case MINUS_EXPR:
3044 case RANGE_EXPR:
3045 return (compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
3046 && compare_constant(TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
3048 CASE_CONVERT:
3049 case VIEW_CONVERT_EXPR:
3050 return compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3052 default:
3053 return 0;
3056 gcc_unreachable ();
3059 /* Make a copy of the whole tree structure for a constant. This
3060 handles the same types of nodes that compare_constant handles. */
3062 static tree
3063 copy_constant (tree exp)
3065 switch (TREE_CODE (exp))
3067 case ADDR_EXPR:
3068 /* For ADDR_EXPR, we do not want to copy the decl whose address
3069 is requested. We do want to copy constants though. */
3070 if (CONSTANT_CLASS_P (TREE_OPERAND (exp, 0)))
3071 return build1 (TREE_CODE (exp), TREE_TYPE (exp),
3072 copy_constant (TREE_OPERAND (exp, 0)));
3073 else
3074 return copy_node (exp);
3076 case INTEGER_CST:
3077 case REAL_CST:
3078 case FIXED_CST:
3079 case STRING_CST:
3080 return copy_node (exp);
3082 case COMPLEX_CST:
3083 return build_complex (TREE_TYPE (exp),
3084 copy_constant (TREE_REALPART (exp)),
3085 copy_constant (TREE_IMAGPART (exp)));
3087 case PLUS_EXPR:
3088 case POINTER_PLUS_EXPR:
3089 case MINUS_EXPR:
3090 return build2 (TREE_CODE (exp), TREE_TYPE (exp),
3091 copy_constant (TREE_OPERAND (exp, 0)),
3092 copy_constant (TREE_OPERAND (exp, 1)));
3094 CASE_CONVERT:
3095 case VIEW_CONVERT_EXPR:
3096 return build1 (TREE_CODE (exp), TREE_TYPE (exp),
3097 copy_constant (TREE_OPERAND (exp, 0)));
3099 case CONSTRUCTOR:
3101 tree copy = copy_node (exp);
3102 VEC(constructor_elt, gc) *v;
3103 unsigned HOST_WIDE_INT idx;
3104 tree purpose, value;
3106 v = VEC_alloc(constructor_elt, gc, VEC_length(constructor_elt,
3107 CONSTRUCTOR_ELTS (exp)));
3108 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (exp), idx, purpose, value)
3110 constructor_elt *ce = VEC_quick_push (constructor_elt, v, NULL);
3111 ce->index = purpose;
3112 ce->value = copy_constant (value);
3114 CONSTRUCTOR_ELTS (copy) = v;
3115 return copy;
3118 default:
3119 gcc_unreachable ();
3123 /* Return the alignment of constant EXP in bits. */
3125 static unsigned int
3126 get_constant_alignment (tree exp)
3128 unsigned int align;
3130 align = TYPE_ALIGN (TREE_TYPE (exp));
3131 #ifdef CONSTANT_ALIGNMENT
3132 align = CONSTANT_ALIGNMENT (exp, align);
3133 #endif
3134 return align;
3137 /* Return the section into which constant EXP should be placed. */
3139 static section *
3140 get_constant_section (tree exp)
3142 if (IN_NAMED_SECTION (exp))
3143 return get_named_section (exp, NULL, compute_reloc_for_constant (exp));
3144 else
3145 return targetm.asm_out.select_section (exp,
3146 compute_reloc_for_constant (exp),
3147 get_constant_alignment (exp));
3150 /* Return the size of constant EXP in bytes. */
3152 static HOST_WIDE_INT
3153 get_constant_size (tree exp)
3155 HOST_WIDE_INT size;
3157 size = int_size_in_bytes (TREE_TYPE (exp));
3158 if (TREE_CODE (exp) == STRING_CST)
3159 size = MAX (TREE_STRING_LENGTH (exp), size);
3160 return size;
3163 /* Subroutine of output_constant_def:
3164 No constant equal to EXP is known to have been output.
3165 Make a constant descriptor to enter EXP in the hash table.
3166 Assign the label number and construct RTL to refer to the
3167 constant's location in memory.
3168 Caller is responsible for updating the hash table. */
3170 static struct constant_descriptor_tree *
3171 build_constant_desc (tree exp)
3173 rtx symbol;
3174 rtx rtl;
3175 char label[256];
3176 int labelno;
3177 struct constant_descriptor_tree *desc;
3179 desc = GGC_NEW (struct constant_descriptor_tree);
3180 desc->value = copy_constant (exp);
3182 /* Propagate marked-ness to copied constant. */
3183 if (flag_mudflap && mf_marked_p (exp))
3184 mf_mark (desc->value);
3186 /* Create a string containing the label name, in LABEL. */
3187 labelno = const_labelno++;
3188 ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno);
3190 /* We have a symbol name; construct the SYMBOL_REF and the MEM. */
3191 if (use_object_blocks_p ())
3193 section *sect = get_constant_section (exp);
3194 symbol = create_block_symbol (ggc_strdup (label),
3195 get_block_for_section (sect), -1);
3197 else
3198 symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
3199 SYMBOL_REF_FLAGS (symbol) |= SYMBOL_FLAG_LOCAL;
3200 SET_SYMBOL_REF_DECL (symbol, desc->value);
3201 TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1;
3203 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), symbol);
3204 set_mem_attributes (rtl, exp, 1);
3205 set_mem_alias_set (rtl, 0);
3206 set_mem_alias_set (rtl, const_alias_set);
3208 /* Set flags or add text to the name to record information, such as
3209 that it is a local symbol. If the name is changed, the macro
3210 ASM_OUTPUT_LABELREF will have to know how to strip this
3211 information. This call might invalidate our local variable
3212 SYMBOL; we can't use it afterward. */
3214 targetm.encode_section_info (exp, rtl, true);
3216 desc->rtl = rtl;
3218 return desc;
3221 /* Return an rtx representing a reference to constant data in memory
3222 for the constant expression EXP.
3224 If assembler code for such a constant has already been output,
3225 return an rtx to refer to it.
3226 Otherwise, output such a constant in memory
3227 and generate an rtx for it.
3229 If DEFER is nonzero, this constant can be deferred and output only
3230 if referenced in the function after all optimizations.
3232 `const_desc_table' records which constants already have label strings. */
3235 output_constant_def (tree exp, int defer)
3237 struct constant_descriptor_tree *desc;
3238 struct constant_descriptor_tree key;
3239 void **loc;
3241 /* Look up EXP in the table of constant descriptors. If we didn't find
3242 it, create a new one. */
3243 key.value = exp;
3244 key.hash = const_hash_1 (exp);
3245 loc = htab_find_slot_with_hash (const_desc_htab, &key, key.hash, INSERT);
3247 desc = (struct constant_descriptor_tree *) *loc;
3248 if (desc == 0)
3250 desc = build_constant_desc (exp);
3251 desc->hash = key.hash;
3252 *loc = desc;
3255 maybe_output_constant_def_contents (desc, defer);
3256 return desc->rtl;
3259 /* Subroutine of output_constant_def: Decide whether or not we need to
3260 output the constant DESC now, and if so, do it. */
3261 static void
3262 maybe_output_constant_def_contents (struct constant_descriptor_tree *desc,
3263 int defer)
3265 rtx symbol = XEXP (desc->rtl, 0);
3266 tree exp = desc->value;
3268 if (flag_syntax_only)
3269 return;
3271 if (TREE_ASM_WRITTEN (exp))
3272 /* Already output; don't do it again. */
3273 return;
3275 /* We can always defer constants as long as the context allows
3276 doing so. */
3277 if (defer)
3279 /* Increment n_deferred_constants if it exists. It needs to be at
3280 least as large as the number of constants actually referred to
3281 by the function. If it's too small we'll stop looking too early
3282 and fail to emit constants; if it's too large we'll only look
3283 through the entire function when we could have stopped earlier. */
3284 if (cfun)
3285 n_deferred_constants++;
3286 return;
3289 output_constant_def_contents (symbol);
3292 /* Subroutine of output_constant_def_contents. Output the definition
3293 of constant EXP, which is pointed to by label LABEL. ALIGN is the
3294 constant's alignment in bits. */
3296 static void
3297 assemble_constant_contents (tree exp, const char *label, unsigned int align)
3299 HOST_WIDE_INT size;
3301 size = get_constant_size (exp);
3303 /* Do any machine/system dependent processing of the constant. */
3304 #ifdef ASM_DECLARE_CONSTANT_NAME
3305 ASM_DECLARE_CONSTANT_NAME (asm_out_file, label, exp, size);
3306 #else
3307 /* Standard thing is just output label for the constant. */
3308 ASM_OUTPUT_LABEL (asm_out_file, label);
3309 #endif /* ASM_DECLARE_CONSTANT_NAME */
3311 /* Output the value of EXP. */
3312 output_constant (exp, size, align);
3315 /* We must output the constant data referred to by SYMBOL; do so. */
3317 static void
3318 output_constant_def_contents (rtx symbol)
3320 tree exp = SYMBOL_REF_DECL (symbol);
3321 unsigned int align;
3323 /* Make sure any other constants whose addresses appear in EXP
3324 are assigned label numbers. */
3325 output_addressed_constants (exp);
3327 /* We are no longer deferring this constant. */
3328 TREE_ASM_WRITTEN (exp) = 1;
3330 /* If the constant is part of an object block, make sure that the
3331 decl has been positioned within its block, but do not write out
3332 its definition yet. output_object_blocks will do that later. */
3333 if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol) && SYMBOL_REF_BLOCK (symbol))
3334 place_block_symbol (symbol);
3335 else
3337 switch_to_section (get_constant_section (exp));
3338 align = get_constant_alignment (exp);
3339 if (align > BITS_PER_UNIT)
3340 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
3341 assemble_constant_contents (exp, XSTR (symbol, 0), align);
3343 if (flag_mudflap)
3344 mudflap_enqueue_constant (exp);
3347 /* Look up EXP in the table of constant descriptors. Return the rtl
3348 if it has been emitted, else null. */
3351 lookup_constant_def (tree exp)
3353 struct constant_descriptor_tree *desc;
3354 struct constant_descriptor_tree key;
3356 key.value = exp;
3357 key.hash = const_hash_1 (exp);
3358 desc = (struct constant_descriptor_tree *)
3359 htab_find_with_hash (const_desc_htab, &key, key.hash);
3361 return (desc ? desc->rtl : NULL_RTX);
3364 /* Used in the hash tables to avoid outputting the same constant
3365 twice. Unlike 'struct constant_descriptor_tree', RTX constants
3366 are output once per function, not once per file. */
3367 /* ??? Only a few targets need per-function constant pools. Most
3368 can use one per-file pool. Should add a targetm bit to tell the
3369 difference. */
3371 struct rtx_constant_pool GTY(())
3373 /* Pointers to first and last constant in pool, as ordered by offset. */
3374 struct constant_descriptor_rtx *first;
3375 struct constant_descriptor_rtx *last;
3377 /* Hash facility for making memory-constants from constant rtl-expressions.
3378 It is used on RISC machines where immediate integer arguments and
3379 constant addresses are restricted so that such constants must be stored
3380 in memory. */
3381 htab_t GTY((param_is (struct constant_descriptor_rtx))) const_rtx_htab;
3383 /* Current offset in constant pool (does not include any
3384 machine-specific header). */
3385 HOST_WIDE_INT offset;
3388 struct constant_descriptor_rtx GTY((chain_next ("%h.next")))
3390 struct constant_descriptor_rtx *next;
3391 rtx mem;
3392 rtx sym;
3393 rtx constant;
3394 HOST_WIDE_INT offset;
3395 hashval_t hash;
3396 enum machine_mode mode;
3397 unsigned int align;
3398 int labelno;
3399 int mark;
3402 /* Hash and compare functions for const_rtx_htab. */
3404 static hashval_t
3405 const_desc_rtx_hash (const void *ptr)
3407 const struct constant_descriptor_rtx *const desc
3408 = (const struct constant_descriptor_rtx *) ptr;
3409 return desc->hash;
3412 static int
3413 const_desc_rtx_eq (const void *a, const void *b)
3415 const struct constant_descriptor_rtx *const x
3416 = (const struct constant_descriptor_rtx *) a;
3417 const struct constant_descriptor_rtx *const y
3418 = (const struct constant_descriptor_rtx *) b;
3420 if (x->mode != y->mode)
3421 return 0;
3422 return rtx_equal_p (x->constant, y->constant);
3425 /* This is the worker function for const_rtx_hash, called via for_each_rtx. */
3427 static int
3428 const_rtx_hash_1 (rtx *xp, void *data)
3430 unsigned HOST_WIDE_INT hwi;
3431 enum machine_mode mode;
3432 enum rtx_code code;
3433 hashval_t h, *hp;
3434 rtx x;
3436 x = *xp;
3437 code = GET_CODE (x);
3438 mode = GET_MODE (x);
3439 h = (hashval_t) code * 1048573 + mode;
3441 switch (code)
3443 case CONST_INT:
3444 hwi = INTVAL (x);
3445 fold_hwi:
3447 const int shift = sizeof (hashval_t) * CHAR_BIT;
3448 const int n = sizeof (HOST_WIDE_INT) / sizeof (hashval_t);
3449 int i;
3451 h ^= (hashval_t) hwi;
3452 for (i = 1; i < n; ++i)
3454 hwi >>= shift;
3455 h ^= (hashval_t) hwi;
3458 break;
3460 case CONST_DOUBLE:
3461 if (mode == VOIDmode)
3463 hwi = CONST_DOUBLE_LOW (x) ^ CONST_DOUBLE_HIGH (x);
3464 goto fold_hwi;
3466 else
3467 h ^= real_hash (CONST_DOUBLE_REAL_VALUE (x));
3468 break;
3470 case CONST_FIXED:
3471 h ^= fixed_hash (CONST_FIXED_VALUE (x));
3472 break;
3474 case CONST_VECTOR:
3476 int i;
3477 for (i = XVECLEN (x, 0); i-- > 0; )
3478 h = h * 251 + const_rtx_hash_1 (&XVECEXP (x, 0, i), data);
3480 break;
3482 case SYMBOL_REF:
3483 h ^= htab_hash_string (XSTR (x, 0));
3484 break;
3486 case LABEL_REF:
3487 h = h * 251 + CODE_LABEL_NUMBER (XEXP (x, 0));
3488 break;
3490 case UNSPEC:
3491 case UNSPEC_VOLATILE:
3492 h = h * 251 + XINT (x, 1);
3493 break;
3495 default:
3496 break;
3499 hp = (hashval_t *) data;
3500 *hp = *hp * 509 + h;
3501 return 0;
3504 /* Compute a hash value for X, which should be a constant. */
3506 static hashval_t
3507 const_rtx_hash (rtx x)
3509 hashval_t h = 0;
3510 for_each_rtx (&x, const_rtx_hash_1, &h);
3511 return h;
3515 /* Create and return a new rtx constant pool. */
3517 static struct rtx_constant_pool *
3518 create_constant_pool (void)
3520 struct rtx_constant_pool *pool;
3522 pool = GGC_NEW (struct rtx_constant_pool);
3523 pool->const_rtx_htab = htab_create_ggc (31, const_desc_rtx_hash,
3524 const_desc_rtx_eq, NULL);
3525 pool->first = NULL;
3526 pool->last = NULL;
3527 pool->offset = 0;
3528 return pool;
3531 /* Initialize constant pool hashing for a new function. */
3533 void
3534 init_varasm_status (void)
3536 crtl->varasm.pool = create_constant_pool ();
3537 crtl->varasm.deferred_constants = 0;
3540 /* Given a MINUS expression, simplify it if both sides
3541 include the same symbol. */
3544 simplify_subtraction (rtx x)
3546 rtx r = simplify_rtx (x);
3547 return r ? r : x;
3550 /* Given a constant rtx X, make (or find) a memory constant for its value
3551 and return a MEM rtx to refer to it in memory. */
3554 force_const_mem (enum machine_mode mode, rtx x)
3556 struct constant_descriptor_rtx *desc, tmp;
3557 struct rtx_constant_pool *pool;
3558 char label[256];
3559 rtx def, symbol;
3560 hashval_t hash;
3561 unsigned int align;
3562 void **slot;
3564 /* If we're not allowed to drop X into the constant pool, don't. */
3565 if (targetm.cannot_force_const_mem (x))
3566 return NULL_RTX;
3568 /* Record that this function has used a constant pool entry. */
3569 crtl->uses_const_pool = 1;
3571 /* Decide which pool to use. */
3572 pool = (targetm.use_blocks_for_constant_p (mode, x)
3573 ? shared_constant_pool
3574 : crtl->varasm.pool);
3576 /* Lookup the value in the hashtable. */
3577 tmp.constant = x;
3578 tmp.mode = mode;
3579 hash = const_rtx_hash (x);
3580 slot = htab_find_slot_with_hash (pool->const_rtx_htab, &tmp, hash, INSERT);
3581 desc = (struct constant_descriptor_rtx *) *slot;
3583 /* If the constant was already present, return its memory. */
3584 if (desc)
3585 return copy_rtx (desc->mem);
3587 /* Otherwise, create a new descriptor. */
3588 desc = GGC_NEW (struct constant_descriptor_rtx);
3589 *slot = desc;
3591 /* Align the location counter as required by EXP's data type. */
3592 align = GET_MODE_ALIGNMENT (mode == VOIDmode ? word_mode : mode);
3593 #ifdef CONSTANT_ALIGNMENT
3595 tree type = lang_hooks.types.type_for_mode (mode, 0);
3596 if (type != NULL_TREE)
3597 align = CONSTANT_ALIGNMENT (make_tree (type, x), align);
3599 #endif
3601 pool->offset += (align / BITS_PER_UNIT) - 1;
3602 pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
3604 desc->next = NULL;
3605 desc->constant = tmp.constant;
3606 desc->offset = pool->offset;
3607 desc->hash = hash;
3608 desc->mode = mode;
3609 desc->align = align;
3610 desc->labelno = const_labelno;
3611 desc->mark = 0;
3613 pool->offset += GET_MODE_SIZE (mode);
3614 if (pool->last)
3615 pool->last->next = desc;
3616 else
3617 pool->first = pool->last = desc;
3618 pool->last = desc;
3620 /* Create a string containing the label name, in LABEL. */
3621 ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno);
3622 ++const_labelno;
3624 /* Construct the SYMBOL_REF. Make sure to mark it as belonging to
3625 the constants pool. */
3626 if (use_object_blocks_p () && targetm.use_blocks_for_constant_p (mode, x))
3628 section *sect = targetm.asm_out.select_rtx_section (mode, x, align);
3629 symbol = create_block_symbol (ggc_strdup (label),
3630 get_block_for_section (sect), -1);
3632 else
3633 symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
3634 desc->sym = symbol;
3635 SYMBOL_REF_FLAGS (symbol) |= SYMBOL_FLAG_LOCAL;
3636 CONSTANT_POOL_ADDRESS_P (symbol) = 1;
3637 SET_SYMBOL_REF_CONSTANT (symbol, desc);
3639 /* Construct the MEM. */
3640 desc->mem = def = gen_const_mem (mode, symbol);
3641 set_mem_attributes (def, lang_hooks.types.type_for_mode (mode, 0), 1);
3642 set_mem_align (def, align);
3644 /* If we're dropping a label to the constant pool, make sure we
3645 don't delete it. */
3646 if (GET_CODE (x) == LABEL_REF)
3647 LABEL_PRESERVE_P (XEXP (x, 0)) = 1;
3649 return copy_rtx (def);
3652 /* Given a constant pool SYMBOL_REF, return the corresponding constant. */
3655 get_pool_constant (rtx addr)
3657 return SYMBOL_REF_CONSTANT (addr)->constant;
3660 /* Given a constant pool SYMBOL_REF, return the corresponding constant
3661 and whether it has been output or not. */
3664 get_pool_constant_mark (rtx addr, bool *pmarked)
3666 struct constant_descriptor_rtx *desc;
3668 desc = SYMBOL_REF_CONSTANT (addr);
3669 *pmarked = (desc->mark != 0);
3670 return desc->constant;
3673 /* Similar, return the mode. */
3675 enum machine_mode
3676 get_pool_mode (const_rtx addr)
3678 return SYMBOL_REF_CONSTANT (addr)->mode;
3681 /* Return the size of the constant pool. */
3684 get_pool_size (void)
3686 return crtl->varasm.pool->offset;
3689 /* Worker function for output_constant_pool_1. Emit assembly for X
3690 in MODE with known alignment ALIGN. */
3692 static void
3693 output_constant_pool_2 (enum machine_mode mode, rtx x, unsigned int align)
3695 switch (GET_MODE_CLASS (mode))
3697 case MODE_FLOAT:
3698 case MODE_DECIMAL_FLOAT:
3700 REAL_VALUE_TYPE r;
3702 gcc_assert (GET_CODE (x) == CONST_DOUBLE);
3703 REAL_VALUE_FROM_CONST_DOUBLE (r, x);
3704 assemble_real (r, mode, align);
3705 break;
3708 case MODE_INT:
3709 case MODE_PARTIAL_INT:
3710 case MODE_FRACT:
3711 case MODE_UFRACT:
3712 case MODE_ACCUM:
3713 case MODE_UACCUM:
3714 assemble_integer (x, GET_MODE_SIZE (mode), align, 1);
3715 break;
3717 case MODE_VECTOR_FLOAT:
3718 case MODE_VECTOR_INT:
3719 case MODE_VECTOR_FRACT:
3720 case MODE_VECTOR_UFRACT:
3721 case MODE_VECTOR_ACCUM:
3722 case MODE_VECTOR_UACCUM:
3724 int i, units;
3725 enum machine_mode submode = GET_MODE_INNER (mode);
3726 unsigned int subalign = MIN (align, GET_MODE_BITSIZE (submode));
3728 gcc_assert (GET_CODE (x) == CONST_VECTOR);
3729 units = CONST_VECTOR_NUNITS (x);
3731 for (i = 0; i < units; i++)
3733 rtx elt = CONST_VECTOR_ELT (x, i);
3734 output_constant_pool_2 (submode, elt, i ? subalign : align);
3737 break;
3739 default:
3740 gcc_unreachable ();
3744 /* Worker function for output_constant_pool. Emit constant DESC,
3745 giving it ALIGN bits of alignment. */
3747 static void
3748 output_constant_pool_1 (struct constant_descriptor_rtx *desc,
3749 unsigned int align)
3751 rtx x, tmp;
3753 x = desc->constant;
3755 /* See if X is a LABEL_REF (or a CONST referring to a LABEL_REF)
3756 whose CODE_LABEL has been deleted. This can occur if a jump table
3757 is eliminated by optimization. If so, write a constant of zero
3758 instead. Note that this can also happen by turning the
3759 CODE_LABEL into a NOTE. */
3760 /* ??? This seems completely and utterly wrong. Certainly it's
3761 not true for NOTE_INSN_DELETED_LABEL, but I disbelieve proper
3762 functioning even with INSN_DELETED_P and friends. */
3764 tmp = x;
3765 switch (GET_CODE (tmp))
3767 case CONST:
3768 if (GET_CODE (XEXP (tmp, 0)) != PLUS
3769 || GET_CODE (XEXP (XEXP (tmp, 0), 0)) != LABEL_REF)
3770 break;
3771 tmp = XEXP (XEXP (tmp, 0), 0);
3772 /* FALLTHRU */
3774 case LABEL_REF:
3775 tmp = XEXP (tmp, 0);
3776 gcc_assert (!INSN_DELETED_P (tmp));
3777 gcc_assert (!NOTE_P (tmp)
3778 || NOTE_KIND (tmp) != NOTE_INSN_DELETED);
3779 break;
3781 default:
3782 break;
3785 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3786 ASM_OUTPUT_SPECIAL_POOL_ENTRY (asm_out_file, x, desc->mode,
3787 align, desc->labelno, done);
3788 #endif
3790 assemble_align (align);
3792 /* Output the label. */
3793 targetm.asm_out.internal_label (asm_out_file, "LC", desc->labelno);
3795 /* Output the data. */
3796 output_constant_pool_2 (desc->mode, x, align);
3798 /* Make sure all constants in SECTION_MERGE and not SECTION_STRINGS
3799 sections have proper size. */
3800 if (align > GET_MODE_BITSIZE (desc->mode)
3801 && in_section
3802 && (in_section->common.flags & SECTION_MERGE))
3803 assemble_align (align);
3805 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3806 done:
3807 #endif
3808 return;
3811 /* Given a SYMBOL_REF CURRENT_RTX, mark it and all constants it refers
3812 to as used. Emit referenced deferred strings. This function can
3813 be used with for_each_rtx to mark all SYMBOL_REFs in an rtx. */
3815 static int
3816 mark_constant (rtx *current_rtx, void *data ATTRIBUTE_UNUSED)
3818 rtx x = *current_rtx;
3820 if (x == NULL_RTX || GET_CODE (x) != SYMBOL_REF)
3821 return 0;
3823 if (CONSTANT_POOL_ADDRESS_P (x))
3825 struct constant_descriptor_rtx *desc = SYMBOL_REF_CONSTANT (x);
3826 if (desc->mark == 0)
3828 desc->mark = 1;
3829 for_each_rtx (&desc->constant, mark_constant, NULL);
3832 else if (TREE_CONSTANT_POOL_ADDRESS_P (x))
3834 tree exp = SYMBOL_REF_DECL (x);
3835 if (!TREE_ASM_WRITTEN (exp))
3837 n_deferred_constants--;
3838 output_constant_def_contents (x);
3842 return -1;
3845 /* Look through appropriate parts of INSN, marking all entries in the
3846 constant pool which are actually being used. Entries that are only
3847 referenced by other constants are also marked as used. Emit
3848 deferred strings that are used. */
3850 static void
3851 mark_constants (rtx insn)
3853 if (!INSN_P (insn))
3854 return;
3856 /* Insns may appear inside a SEQUENCE. Only check the patterns of
3857 insns, not any notes that may be attached. We don't want to mark
3858 a constant just because it happens to appear in a REG_EQUIV note. */
3859 if (GET_CODE (PATTERN (insn)) == SEQUENCE)
3861 rtx seq = PATTERN (insn);
3862 int i, n = XVECLEN (seq, 0);
3863 for (i = 0; i < n; ++i)
3865 rtx subinsn = XVECEXP (seq, 0, i);
3866 if (INSN_P (subinsn))
3867 for_each_rtx (&PATTERN (subinsn), mark_constant, NULL);
3870 else
3871 for_each_rtx (&PATTERN (insn), mark_constant, NULL);
3874 /* Look through the instructions for this function, and mark all the
3875 entries in POOL which are actually being used. Emit deferred constants
3876 which have indeed been used. */
3878 static void
3879 mark_constant_pool (void)
3881 rtx insn, link;
3883 if (!crtl->uses_const_pool && n_deferred_constants == 0)
3884 return;
3886 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3887 mark_constants (insn);
3889 for (link = crtl->epilogue_delay_list;
3890 link;
3891 link = XEXP (link, 1))
3892 mark_constants (XEXP (link, 0));
3895 /* Write all the constants in POOL. */
3897 static void
3898 output_constant_pool_contents (struct rtx_constant_pool *pool)
3900 struct constant_descriptor_rtx *desc;
3902 for (desc = pool->first; desc ; desc = desc->next)
3903 if (desc->mark)
3905 /* If the constant is part of an object_block, make sure that
3906 the constant has been positioned within its block, but do not
3907 write out its definition yet. output_object_blocks will do
3908 that later. */
3909 if (SYMBOL_REF_HAS_BLOCK_INFO_P (desc->sym)
3910 && SYMBOL_REF_BLOCK (desc->sym))
3911 place_block_symbol (desc->sym);
3912 else
3914 switch_to_section (targetm.asm_out.select_rtx_section
3915 (desc->mode, desc->constant, desc->align));
3916 output_constant_pool_1 (desc, desc->align);
3921 /* Mark all constants that are used in the current function, then write
3922 out the function's private constant pool. */
3924 static void
3925 output_constant_pool (const char *fnname ATTRIBUTE_UNUSED,
3926 tree fndecl ATTRIBUTE_UNUSED)
3928 struct rtx_constant_pool *pool = crtl->varasm.pool;
3930 /* It is possible for gcc to call force_const_mem and then to later
3931 discard the instructions which refer to the constant. In such a
3932 case we do not need to output the constant. */
3933 mark_constant_pool ();
3935 #ifdef ASM_OUTPUT_POOL_PROLOGUE
3936 ASM_OUTPUT_POOL_PROLOGUE (asm_out_file, fnname, fndecl, pool->offset);
3937 #endif
3939 output_constant_pool_contents (pool);
3941 #ifdef ASM_OUTPUT_POOL_EPILOGUE
3942 ASM_OUTPUT_POOL_EPILOGUE (asm_out_file, fnname, fndecl, pool->offset);
3943 #endif
3946 /* Write the contents of the shared constant pool. */
3948 void
3949 output_shared_constant_pool (void)
3951 output_constant_pool_contents (shared_constant_pool);
3954 /* Determine what kind of relocations EXP may need. */
3957 compute_reloc_for_constant (tree exp)
3959 int reloc = 0, reloc2;
3960 tree tem;
3962 switch (TREE_CODE (exp))
3964 case ADDR_EXPR:
3965 case FDESC_EXPR:
3966 /* Go inside any operations that get_inner_reference can handle and see
3967 if what's inside is a constant: no need to do anything here for
3968 addresses of variables or functions. */
3969 for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3970 tem = TREE_OPERAND (tem, 0))
3973 if (TREE_PUBLIC (tem))
3974 reloc |= 2;
3975 else
3976 reloc |= 1;
3977 break;
3979 case PLUS_EXPR:
3980 case POINTER_PLUS_EXPR:
3981 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3982 reloc |= compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3983 break;
3985 case MINUS_EXPR:
3986 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3987 reloc2 = compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3988 /* The difference of two local labels is computable at link time. */
3989 if (reloc == 1 && reloc2 == 1)
3990 reloc = 0;
3991 else
3992 reloc |= reloc2;
3993 break;
3995 CASE_CONVERT:
3996 case VIEW_CONVERT_EXPR:
3997 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3998 break;
4000 case CONSTRUCTOR:
4002 unsigned HOST_WIDE_INT idx;
4003 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
4004 if (tem != 0)
4005 reloc |= compute_reloc_for_constant (tem);
4007 break;
4009 default:
4010 break;
4012 return reloc;
4015 /* Find all the constants whose addresses are referenced inside of EXP,
4016 and make sure assembler code with a label has been output for each one.
4017 Indicate whether an ADDR_EXPR has been encountered. */
4019 static void
4020 output_addressed_constants (tree exp)
4022 tree tem;
4024 switch (TREE_CODE (exp))
4026 case ADDR_EXPR:
4027 case FDESC_EXPR:
4028 /* Go inside any operations that get_inner_reference can handle and see
4029 if what's inside is a constant: no need to do anything here for
4030 addresses of variables or functions. */
4031 for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
4032 tem = TREE_OPERAND (tem, 0))
4035 /* If we have an initialized CONST_DECL, retrieve the initializer. */
4036 if (TREE_CODE (tem) == CONST_DECL && DECL_INITIAL (tem))
4037 tem = DECL_INITIAL (tem);
4039 if (CONSTANT_CLASS_P (tem) || TREE_CODE (tem) == CONSTRUCTOR)
4040 output_constant_def (tem, 0);
4041 break;
4043 case PLUS_EXPR:
4044 case POINTER_PLUS_EXPR:
4045 case MINUS_EXPR:
4046 output_addressed_constants (TREE_OPERAND (exp, 1));
4047 /* Fall through. */
4049 CASE_CONVERT:
4050 case VIEW_CONVERT_EXPR:
4051 output_addressed_constants (TREE_OPERAND (exp, 0));
4052 break;
4054 case CONSTRUCTOR:
4056 unsigned HOST_WIDE_INT idx;
4057 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, tem)
4058 if (tem != 0)
4059 output_addressed_constants (tem);
4061 break;
4063 default:
4064 break;
4068 /* Whether a constructor CTOR is a valid static constant initializer if all
4069 its elements are. This used to be internal to initializer_constant_valid_p
4070 and has been exposed to let other functions like categorize_ctor_elements
4071 evaluate the property while walking a constructor for other purposes. */
4073 bool
4074 constructor_static_from_elts_p (const_tree ctor)
4076 return (TREE_CONSTANT (ctor)
4077 && (TREE_CODE (TREE_TYPE (ctor)) == UNION_TYPE
4078 || TREE_CODE (TREE_TYPE (ctor)) == RECORD_TYPE)
4079 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (ctor)));
4082 /* A subroutine of initializer_constant_valid_p. VALUE is a MINUS_EXPR,
4083 PLUS_EXPR or POINTER_PLUS_EXPR. This looks for cases of VALUE
4084 which are valid when ENDTYPE is an integer of any size; in
4085 particular, this does not accept a pointer minus a constant. This
4086 returns null_pointer_node if the VALUE is an absolute constant
4087 which can be used to initialize a static variable. Otherwise it
4088 returns NULL. */
4090 static tree
4091 narrowing_initializer_constant_valid_p (tree value, tree endtype)
4093 tree op0, op1;
4095 if (!INTEGRAL_TYPE_P (endtype))
4096 return NULL_TREE;
4098 op0 = TREE_OPERAND (value, 0);
4099 op1 = TREE_OPERAND (value, 1);
4101 /* Like STRIP_NOPS except allow the operand mode to widen. This
4102 works around a feature of fold that simplifies (int)(p1 - p2) to
4103 ((int)p1 - (int)p2) under the theory that the narrower operation
4104 is cheaper. */
4106 while (CONVERT_EXPR_P (op0)
4107 || TREE_CODE (op0) == NON_LVALUE_EXPR)
4109 tree inner = TREE_OPERAND (op0, 0);
4110 if (inner == error_mark_node
4111 || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
4112 || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0)))
4113 > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
4114 break;
4115 op0 = inner;
4118 while (CONVERT_EXPR_P (op1)
4119 || TREE_CODE (op1) == NON_LVALUE_EXPR)
4121 tree inner = TREE_OPERAND (op1, 0);
4122 if (inner == error_mark_node
4123 || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
4124 || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1)))
4125 > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
4126 break;
4127 op1 = inner;
4130 op0 = initializer_constant_valid_p (op0, endtype);
4131 op1 = initializer_constant_valid_p (op1, endtype);
4133 /* Both initializers must be known. */
4134 if (op0 && op1)
4136 if (op0 == op1
4137 && (op0 == null_pointer_node
4138 || TREE_CODE (value) == MINUS_EXPR))
4139 return null_pointer_node;
4141 /* Support differences between labels. */
4142 if (TREE_CODE (op0) == LABEL_DECL
4143 && TREE_CODE (op1) == LABEL_DECL)
4144 return null_pointer_node;
4146 if (TREE_CODE (op0) == STRING_CST
4147 && TREE_CODE (op1) == STRING_CST
4148 && operand_equal_p (op0, op1, 1))
4149 return null_pointer_node;
4152 return NULL_TREE;
4155 /* Return nonzero if VALUE is a valid constant-valued expression
4156 for use in initializing a static variable; one that can be an
4157 element of a "constant" initializer.
4159 Return null_pointer_node if the value is absolute;
4160 if it is relocatable, return the variable that determines the relocation.
4161 We assume that VALUE has been folded as much as possible;
4162 therefore, we do not need to check for such things as
4163 arithmetic-combinations of integers. */
4165 tree
4166 initializer_constant_valid_p (tree value, tree endtype)
4168 tree ret;
4170 switch (TREE_CODE (value))
4172 case CONSTRUCTOR:
4173 if (constructor_static_from_elts_p (value))
4175 unsigned HOST_WIDE_INT idx;
4176 tree elt;
4177 bool absolute = true;
4179 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (value), idx, elt)
4181 tree reloc;
4182 reloc = initializer_constant_valid_p (elt, TREE_TYPE (elt));
4183 if (!reloc)
4184 return NULL_TREE;
4185 if (reloc != null_pointer_node)
4186 absolute = false;
4188 /* For a non-absolute relocation, there is no single
4189 variable that can be "the variable that determines the
4190 relocation." */
4191 return absolute ? null_pointer_node : error_mark_node;
4194 return TREE_STATIC (value) ? null_pointer_node : NULL_TREE;
4196 case INTEGER_CST:
4197 case VECTOR_CST:
4198 case REAL_CST:
4199 case FIXED_CST:
4200 case STRING_CST:
4201 case COMPLEX_CST:
4202 return null_pointer_node;
4204 case ADDR_EXPR:
4205 case FDESC_EXPR:
4207 tree op0 = staticp (TREE_OPERAND (value, 0));
4208 if (op0)
4210 /* "&(*a).f" is like unto pointer arithmetic. If "a" turns out
4211 to be a constant, this is old-skool offsetof-like nonsense. */
4212 if (TREE_CODE (op0) == INDIRECT_REF
4213 && TREE_CONSTANT (TREE_OPERAND (op0, 0)))
4214 return null_pointer_node;
4215 /* Taking the address of a nested function involves a trampoline,
4216 unless we don't need or want one. */
4217 if (TREE_CODE (op0) == FUNCTION_DECL
4218 && decl_function_context (op0)
4219 && !DECL_NO_STATIC_CHAIN (op0)
4220 && !TREE_NO_TRAMPOLINE (value))
4221 return NULL_TREE;
4222 /* "&{...}" requires a temporary to hold the constructed
4223 object. */
4224 if (TREE_CODE (op0) == CONSTRUCTOR)
4225 return NULL_TREE;
4227 return op0;
4230 case NON_LVALUE_EXPR:
4231 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4233 case VIEW_CONVERT_EXPR:
4235 tree src = TREE_OPERAND (value, 0);
4236 tree src_type = TREE_TYPE (src);
4237 tree dest_type = TREE_TYPE (value);
4239 /* Allow view-conversions from aggregate to non-aggregate type only
4240 if the bit pattern is fully preserved afterwards; otherwise, the
4241 RTL expander won't be able to apply a subsequent transformation
4242 to the underlying constructor. */
4243 if (AGGREGATE_TYPE_P (src_type) && !AGGREGATE_TYPE_P (dest_type))
4245 if (TYPE_MODE (endtype) == TYPE_MODE (dest_type))
4246 return initializer_constant_valid_p (src, endtype);
4247 else
4248 return NULL_TREE;
4251 /* Allow all other kinds of view-conversion. */
4252 return initializer_constant_valid_p (src, endtype);
4255 CASE_CONVERT:
4257 tree src = TREE_OPERAND (value, 0);
4258 tree src_type = TREE_TYPE (src);
4259 tree dest_type = TREE_TYPE (value);
4261 /* Allow conversions between pointer types, floating-point
4262 types, and offset types. */
4263 if ((POINTER_TYPE_P (dest_type) && POINTER_TYPE_P (src_type))
4264 || (FLOAT_TYPE_P (dest_type) && FLOAT_TYPE_P (src_type))
4265 || (TREE_CODE (dest_type) == OFFSET_TYPE
4266 && TREE_CODE (src_type) == OFFSET_TYPE))
4267 return initializer_constant_valid_p (src, endtype);
4269 /* Allow length-preserving conversions between integer types. */
4270 if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type)
4271 && (TYPE_PRECISION (dest_type) == TYPE_PRECISION (src_type)))
4272 return initializer_constant_valid_p (src, endtype);
4274 /* Allow conversions between other integer types only if
4275 explicit value. */
4276 if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type))
4278 tree inner = initializer_constant_valid_p (src, endtype);
4279 if (inner == null_pointer_node)
4280 return null_pointer_node;
4281 break;
4284 /* Allow (int) &foo provided int is as wide as a pointer. */
4285 if (INTEGRAL_TYPE_P (dest_type) && POINTER_TYPE_P (src_type)
4286 && (TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type)))
4287 return initializer_constant_valid_p (src, endtype);
4289 /* Likewise conversions from int to pointers, but also allow
4290 conversions from 0. */
4291 if ((POINTER_TYPE_P (dest_type)
4292 || TREE_CODE (dest_type) == OFFSET_TYPE)
4293 && INTEGRAL_TYPE_P (src_type))
4295 if (TREE_CODE (src) == INTEGER_CST
4296 && TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type))
4297 return null_pointer_node;
4298 if (integer_zerop (src))
4299 return null_pointer_node;
4300 else if (TYPE_PRECISION (dest_type) <= TYPE_PRECISION (src_type))
4301 return initializer_constant_valid_p (src, endtype);
4304 /* Allow conversions to struct or union types if the value
4305 inside is okay. */
4306 if (TREE_CODE (dest_type) == RECORD_TYPE
4307 || TREE_CODE (dest_type) == UNION_TYPE)
4308 return initializer_constant_valid_p (src, endtype);
4310 break;
4312 case POINTER_PLUS_EXPR:
4313 case PLUS_EXPR:
4314 if (! INTEGRAL_TYPE_P (endtype)
4315 || TYPE_PRECISION (endtype) >= POINTER_SIZE)
4317 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4318 endtype);
4319 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4320 endtype);
4321 /* If either term is absolute, use the other term's relocation. */
4322 if (valid0 == null_pointer_node)
4323 return valid1;
4324 if (valid1 == null_pointer_node)
4325 return valid0;
4328 /* Support narrowing pointer differences. */
4329 ret = narrowing_initializer_constant_valid_p (value, endtype);
4330 if (ret != NULL_TREE)
4331 return ret;
4333 break;
4335 case MINUS_EXPR:
4336 if (! INTEGRAL_TYPE_P (endtype)
4337 || TYPE_PRECISION (endtype) >= POINTER_SIZE)
4339 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4340 endtype);
4341 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4342 endtype);
4343 /* Win if second argument is absolute. */
4344 if (valid1 == null_pointer_node)
4345 return valid0;
4346 /* Win if both arguments have the same relocation.
4347 Then the value is absolute. */
4348 if (valid0 == valid1 && valid0 != 0)
4349 return null_pointer_node;
4351 /* Since GCC guarantees that string constants are unique in the
4352 generated code, a subtraction between two copies of the same
4353 constant string is absolute. */
4354 if (valid0 && TREE_CODE (valid0) == STRING_CST
4355 && valid1 && TREE_CODE (valid1) == STRING_CST
4356 && operand_equal_p (valid0, valid1, 1))
4357 return null_pointer_node;
4360 /* Support narrowing differences. */
4361 ret = narrowing_initializer_constant_valid_p (value, endtype);
4362 if (ret != NULL_TREE)
4363 return ret;
4365 break;
4367 default:
4368 break;
4371 return 0;
4374 /* Output assembler code for constant EXP to FILE, with no label.
4375 This includes the pseudo-op such as ".int" or ".byte", and a newline.
4376 Assumes output_addressed_constants has been done on EXP already.
4378 Generate exactly SIZE bytes of assembler data, padding at the end
4379 with zeros if necessary. SIZE must always be specified.
4381 SIZE is important for structure constructors,
4382 since trailing members may have been omitted from the constructor.
4383 It is also important for initialization of arrays from string constants
4384 since the full length of the string constant might not be wanted.
4385 It is also needed for initialization of unions, where the initializer's
4386 type is just one member, and that may not be as long as the union.
4388 There a case in which we would fail to output exactly SIZE bytes:
4389 for a structure constructor that wants to produce more than SIZE bytes.
4390 But such constructors will never be generated for any possible input.
4392 ALIGN is the alignment of the data in bits. */
4394 void
4395 output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align)
4397 enum tree_code code;
4398 unsigned HOST_WIDE_INT thissize;
4400 if (size == 0 || flag_syntax_only)
4401 return;
4403 /* See if we're trying to initialize a pointer in a non-default mode
4404 to the address of some declaration somewhere. If the target says
4405 the mode is valid for pointers, assume the target has a way of
4406 resolving it. */
4407 if (TREE_CODE (exp) == NOP_EXPR
4408 && POINTER_TYPE_P (TREE_TYPE (exp))
4409 && targetm.valid_pointer_mode (TYPE_MODE (TREE_TYPE (exp))))
4411 tree saved_type = TREE_TYPE (exp);
4413 /* Peel off any intermediate conversions-to-pointer for valid
4414 pointer modes. */
4415 while (TREE_CODE (exp) == NOP_EXPR
4416 && POINTER_TYPE_P (TREE_TYPE (exp))
4417 && targetm.valid_pointer_mode (TYPE_MODE (TREE_TYPE (exp))))
4418 exp = TREE_OPERAND (exp, 0);
4420 /* If what we're left with is the address of something, we can
4421 convert the address to the final type and output it that
4422 way. */
4423 if (TREE_CODE (exp) == ADDR_EXPR)
4424 exp = build1 (ADDR_EXPR, saved_type, TREE_OPERAND (exp, 0));
4425 /* Likewise for constant ints. */
4426 else if (TREE_CODE (exp) == INTEGER_CST)
4427 exp = build_int_cst_wide (saved_type, TREE_INT_CST_LOW (exp),
4428 TREE_INT_CST_HIGH (exp));
4432 /* Eliminate any conversions since we'll be outputting the underlying
4433 constant. */
4434 while (CONVERT_EXPR_P (exp)
4435 || TREE_CODE (exp) == NON_LVALUE_EXPR
4436 || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
4438 HOST_WIDE_INT type_size = int_size_in_bytes (TREE_TYPE (exp));
4439 HOST_WIDE_INT op_size = int_size_in_bytes (TREE_TYPE (TREE_OPERAND (exp, 0)));
4441 /* Make sure eliminating the conversion is really a no-op, except with
4442 VIEW_CONVERT_EXPRs to allow for wild Ada unchecked conversions and
4443 union types to allow for Ada unchecked unions. */
4444 if (type_size > op_size
4445 && TREE_CODE (exp) != VIEW_CONVERT_EXPR
4446 && TREE_CODE (TREE_TYPE (exp)) != UNION_TYPE)
4447 /* Keep the conversion. */
4448 break;
4449 else
4450 exp = TREE_OPERAND (exp, 0);
4453 code = TREE_CODE (TREE_TYPE (exp));
4454 thissize = int_size_in_bytes (TREE_TYPE (exp));
4456 /* Allow a constructor with no elements for any data type.
4457 This means to fill the space with zeros. */
4458 if (TREE_CODE (exp) == CONSTRUCTOR
4459 && VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (exp)))
4461 assemble_zeros (size);
4462 return;
4465 if (TREE_CODE (exp) == FDESC_EXPR)
4467 #ifdef ASM_OUTPUT_FDESC
4468 HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0);
4469 tree decl = TREE_OPERAND (exp, 0);
4470 ASM_OUTPUT_FDESC (asm_out_file, decl, part);
4471 #else
4472 gcc_unreachable ();
4473 #endif
4474 return;
4477 /* Now output the underlying data. If we've handling the padding, return.
4478 Otherwise, break and ensure SIZE is the size written. */
4479 switch (code)
4481 case BOOLEAN_TYPE:
4482 case INTEGER_TYPE:
4483 case ENUMERAL_TYPE:
4484 case POINTER_TYPE:
4485 case REFERENCE_TYPE:
4486 case OFFSET_TYPE:
4487 case FIXED_POINT_TYPE:
4488 if (! assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode,
4489 EXPAND_INITIALIZER),
4490 MIN (size, thissize), align, 0))
4491 error ("initializer for integer/fixed-point value is too complicated");
4492 break;
4494 case REAL_TYPE:
4495 if (TREE_CODE (exp) != REAL_CST)
4496 error ("initializer for floating value is not a floating constant");
4498 assemble_real (TREE_REAL_CST (exp), TYPE_MODE (TREE_TYPE (exp)), align);
4499 break;
4501 case COMPLEX_TYPE:
4502 output_constant (TREE_REALPART (exp), thissize / 2, align);
4503 output_constant (TREE_IMAGPART (exp), thissize / 2,
4504 min_align (align, BITS_PER_UNIT * (thissize / 2)));
4505 break;
4507 case ARRAY_TYPE:
4508 case VECTOR_TYPE:
4509 switch (TREE_CODE (exp))
4511 case CONSTRUCTOR:
4512 output_constructor (exp, size, align);
4513 return;
4514 case STRING_CST:
4515 thissize = MIN ((unsigned HOST_WIDE_INT)TREE_STRING_LENGTH (exp),
4516 size);
4517 assemble_string (TREE_STRING_POINTER (exp), thissize);
4518 break;
4520 case VECTOR_CST:
4522 int elt_size;
4523 tree link;
4524 unsigned int nalign;
4525 enum machine_mode inner;
4527 inner = TYPE_MODE (TREE_TYPE (TREE_TYPE (exp)));
4528 nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
4530 elt_size = GET_MODE_SIZE (inner);
4532 link = TREE_VECTOR_CST_ELTS (exp);
4533 output_constant (TREE_VALUE (link), elt_size, align);
4534 thissize = elt_size;
4535 while ((link = TREE_CHAIN (link)) != NULL)
4537 output_constant (TREE_VALUE (link), elt_size, nalign);
4538 thissize += elt_size;
4540 break;
4542 default:
4543 gcc_unreachable ();
4545 break;
4547 case RECORD_TYPE:
4548 case UNION_TYPE:
4549 gcc_assert (TREE_CODE (exp) == CONSTRUCTOR);
4550 output_constructor (exp, size, align);
4551 return;
4553 case ERROR_MARK:
4554 return;
4556 default:
4557 gcc_unreachable ();
4560 if (size > thissize)
4561 assemble_zeros (size - thissize);
4565 /* Subroutine of output_constructor, used for computing the size of
4566 arrays of unspecified length. VAL must be a CONSTRUCTOR of an array
4567 type with an unspecified upper bound. */
4569 static unsigned HOST_WIDE_INT
4570 array_size_for_constructor (tree val)
4572 tree max_index, i;
4573 unsigned HOST_WIDE_INT cnt;
4574 tree index, value, tmp;
4576 /* This code used to attempt to handle string constants that are not
4577 arrays of single-bytes, but nothing else does, so there's no point in
4578 doing it here. */
4579 if (TREE_CODE (val) == STRING_CST)
4580 return TREE_STRING_LENGTH (val);
4582 max_index = NULL_TREE;
4583 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (val), cnt, index, value)
4585 if (TREE_CODE (index) == RANGE_EXPR)
4586 index = TREE_OPERAND (index, 1);
4587 if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
4588 max_index = index;
4591 if (max_index == NULL_TREE)
4592 return 0;
4594 /* Compute the total number of array elements. */
4595 tmp = TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)));
4596 i = size_binop (MINUS_EXPR, fold_convert (sizetype, max_index),
4597 fold_convert (sizetype, tmp));
4598 i = size_binop (PLUS_EXPR, i, build_int_cst (sizetype, 1));
4600 /* Multiply by the array element unit size to find number of bytes. */
4601 i = size_binop (MULT_EXPR, i, TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (val))));
4603 return tree_low_cst (i, 1);
4606 /* Subroutine of output_constant, used for CONSTRUCTORs (aggregate constants).
4607 Generate at least SIZE bytes, padding if necessary. */
4609 static void
4610 output_constructor (tree exp, unsigned HOST_WIDE_INT size,
4611 unsigned int align)
4613 tree type = TREE_TYPE (exp);
4614 tree field = 0;
4615 tree min_index = 0;
4616 /* Number of bytes output or skipped so far.
4617 In other words, current position within the constructor. */
4618 HOST_WIDE_INT total_bytes = 0;
4619 /* Nonzero means BYTE contains part of a byte, to be output. */
4620 int byte_buffer_in_use = 0;
4621 int byte = 0;
4622 unsigned HOST_WIDE_INT cnt;
4623 constructor_elt *ce;
4625 gcc_assert (HOST_BITS_PER_WIDE_INT >= BITS_PER_UNIT);
4627 if (TREE_CODE (type) == RECORD_TYPE)
4628 field = TYPE_FIELDS (type);
4630 if (TREE_CODE (type) == ARRAY_TYPE
4631 && TYPE_DOMAIN (type) != 0)
4632 min_index = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
4634 /* As LINK goes through the elements of the constant,
4635 FIELD goes through the structure fields, if the constant is a structure.
4636 if the constant is a union, then we override this,
4637 by getting the field from the TREE_LIST element.
4638 But the constant could also be an array. Then FIELD is zero.
4640 There is always a maximum of one element in the chain LINK for unions
4641 (even if the initializer in a source program incorrectly contains
4642 more one). */
4643 for (cnt = 0;
4644 VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (exp), cnt, ce);
4645 cnt++, field = field ? TREE_CHAIN (field) : 0)
4647 tree val = ce->value;
4648 tree index = 0;
4650 /* The element in a union constructor specifies the proper field
4651 or index. */
4652 if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
4653 || TREE_CODE (type) == QUAL_UNION_TYPE)
4654 && ce->index != 0)
4655 field = ce->index;
4657 else if (TREE_CODE (type) == ARRAY_TYPE)
4658 index = ce->index;
4660 #ifdef ASM_COMMENT_START
4661 if (field && flag_verbose_asm)
4662 fprintf (asm_out_file, "%s %s:\n",
4663 ASM_COMMENT_START,
4664 DECL_NAME (field)
4665 ? IDENTIFIER_POINTER (DECL_NAME (field))
4666 : "<anonymous>");
4667 #endif
4669 /* Eliminate the marker that makes a cast not be an lvalue. */
4670 if (val != 0)
4671 STRIP_NOPS (val);
4673 if (index && TREE_CODE (index) == RANGE_EXPR)
4675 unsigned HOST_WIDE_INT fieldsize
4676 = int_size_in_bytes (TREE_TYPE (type));
4677 HOST_WIDE_INT lo_index = tree_low_cst (TREE_OPERAND (index, 0), 0);
4678 HOST_WIDE_INT hi_index = tree_low_cst (TREE_OPERAND (index, 1), 0);
4679 HOST_WIDE_INT index;
4680 unsigned int align2 = min_align (align, fieldsize * BITS_PER_UNIT);
4682 for (index = lo_index; index <= hi_index; index++)
4684 /* Output the element's initial value. */
4685 if (val == 0)
4686 assemble_zeros (fieldsize);
4687 else
4688 output_constant (val, fieldsize, align2);
4690 /* Count its size. */
4691 total_bytes += fieldsize;
4694 else if (field == 0 || !DECL_BIT_FIELD (field))
4696 /* An element that is not a bit-field. */
4698 unsigned HOST_WIDE_INT fieldsize;
4699 /* Since this structure is static,
4700 we know the positions are constant. */
4701 HOST_WIDE_INT pos = field ? int_byte_position (field) : 0;
4702 unsigned int align2;
4704 if (index != 0)
4705 pos = (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (val)), 1)
4706 * (tree_low_cst (index, 0) - tree_low_cst (min_index, 0)));
4708 /* Output any buffered-up bit-fields preceding this element. */
4709 if (byte_buffer_in_use)
4711 assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4712 total_bytes++;
4713 byte_buffer_in_use = 0;
4716 /* Advance to offset of this element.
4717 Note no alignment needed in an array, since that is guaranteed
4718 if each element has the proper size. */
4719 if ((field != 0 || index != 0) && pos != total_bytes)
4721 gcc_assert (pos >= total_bytes);
4722 assemble_zeros (pos - total_bytes);
4723 total_bytes = pos;
4726 /* Find the alignment of this element. */
4727 align2 = min_align (align, BITS_PER_UNIT * pos);
4729 /* Determine size this element should occupy. */
4730 if (field)
4732 fieldsize = 0;
4734 /* If this is an array with an unspecified upper bound,
4735 the initializer determines the size. */
4736 /* ??? This ought to only checked if DECL_SIZE_UNIT is NULL,
4737 but we cannot do this until the deprecated support for
4738 initializing zero-length array members is removed. */
4739 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
4740 && TYPE_DOMAIN (TREE_TYPE (field))
4741 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
4743 fieldsize = array_size_for_constructor (val);
4744 /* Given a non-empty initialization, this field had
4745 better be last. */
4746 gcc_assert (!fieldsize || !TREE_CHAIN (field));
4748 else if (DECL_SIZE_UNIT (field))
4750 /* ??? This can't be right. If the decl size overflows
4751 a host integer we will silently emit no data. */
4752 if (host_integerp (DECL_SIZE_UNIT (field), 1))
4753 fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 1);
4756 else
4757 fieldsize = int_size_in_bytes (TREE_TYPE (type));
4759 /* Output the element's initial value. */
4760 if (val == 0)
4761 assemble_zeros (fieldsize);
4762 else
4763 output_constant (val, fieldsize, align2);
4765 /* Count its size. */
4766 total_bytes += fieldsize;
4768 else if (val != 0 && TREE_CODE (val) != INTEGER_CST)
4769 error ("invalid initial value for member %qs",
4770 IDENTIFIER_POINTER (DECL_NAME (field)));
4771 else
4773 /* Element that is a bit-field. */
4775 HOST_WIDE_INT next_offset = int_bit_position (field);
4776 HOST_WIDE_INT end_offset
4777 = (next_offset + tree_low_cst (DECL_SIZE (field), 1));
4779 if (val == 0)
4780 val = integer_zero_node;
4782 /* If this field does not start in this (or, next) byte,
4783 skip some bytes. */
4784 if (next_offset / BITS_PER_UNIT != total_bytes)
4786 /* Output remnant of any bit field in previous bytes. */
4787 if (byte_buffer_in_use)
4789 assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4790 total_bytes++;
4791 byte_buffer_in_use = 0;
4794 /* If still not at proper byte, advance to there. */
4795 if (next_offset / BITS_PER_UNIT != total_bytes)
4797 gcc_assert (next_offset / BITS_PER_UNIT >= total_bytes);
4798 assemble_zeros (next_offset / BITS_PER_UNIT - total_bytes);
4799 total_bytes = next_offset / BITS_PER_UNIT;
4803 if (! byte_buffer_in_use)
4804 byte = 0;
4806 /* We must split the element into pieces that fall within
4807 separate bytes, and combine each byte with previous or
4808 following bit-fields. */
4810 /* next_offset is the offset n fbits from the beginning of
4811 the structure to the next bit of this element to be processed.
4812 end_offset is the offset of the first bit past the end of
4813 this element. */
4814 while (next_offset < end_offset)
4816 int this_time;
4817 int shift;
4818 HOST_WIDE_INT value;
4819 HOST_WIDE_INT next_byte = next_offset / BITS_PER_UNIT;
4820 HOST_WIDE_INT next_bit = next_offset % BITS_PER_UNIT;
4822 /* Advance from byte to byte
4823 within this element when necessary. */
4824 while (next_byte != total_bytes)
4826 assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4827 total_bytes++;
4828 byte = 0;
4831 /* Number of bits we can process at once
4832 (all part of the same byte). */
4833 this_time = MIN (end_offset - next_offset,
4834 BITS_PER_UNIT - next_bit);
4835 if (BYTES_BIG_ENDIAN)
4837 /* On big-endian machine, take the most significant bits
4838 first (of the bits that are significant)
4839 and put them into bytes from the most significant end. */
4840 shift = end_offset - next_offset - this_time;
4842 /* Don't try to take a bunch of bits that cross
4843 the word boundary in the INTEGER_CST. We can
4844 only select bits from the LOW or HIGH part
4845 not from both. */
4846 if (shift < HOST_BITS_PER_WIDE_INT
4847 && shift + this_time > HOST_BITS_PER_WIDE_INT)
4849 this_time = shift + this_time - HOST_BITS_PER_WIDE_INT;
4850 shift = HOST_BITS_PER_WIDE_INT;
4853 /* Now get the bits from the appropriate constant word. */
4854 if (shift < HOST_BITS_PER_WIDE_INT)
4855 value = TREE_INT_CST_LOW (val);
4856 else
4858 gcc_assert (shift < 2 * HOST_BITS_PER_WIDE_INT);
4859 value = TREE_INT_CST_HIGH (val);
4860 shift -= HOST_BITS_PER_WIDE_INT;
4863 /* Get the result. This works only when:
4864 1 <= this_time <= HOST_BITS_PER_WIDE_INT. */
4865 byte |= (((value >> shift)
4866 & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4867 << (BITS_PER_UNIT - this_time - next_bit));
4869 else
4871 /* On little-endian machines,
4872 take first the least significant bits of the value
4873 and pack them starting at the least significant
4874 bits of the bytes. */
4875 shift = next_offset - int_bit_position (field);
4877 /* Don't try to take a bunch of bits that cross
4878 the word boundary in the INTEGER_CST. We can
4879 only select bits from the LOW or HIGH part
4880 not from both. */
4881 if (shift < HOST_BITS_PER_WIDE_INT
4882 && shift + this_time > HOST_BITS_PER_WIDE_INT)
4883 this_time = (HOST_BITS_PER_WIDE_INT - shift);
4885 /* Now get the bits from the appropriate constant word. */
4886 if (shift < HOST_BITS_PER_WIDE_INT)
4887 value = TREE_INT_CST_LOW (val);
4888 else
4890 gcc_assert (shift < 2 * HOST_BITS_PER_WIDE_INT);
4891 value = TREE_INT_CST_HIGH (val);
4892 shift -= HOST_BITS_PER_WIDE_INT;
4895 /* Get the result. This works only when:
4896 1 <= this_time <= HOST_BITS_PER_WIDE_INT. */
4897 byte |= (((value >> shift)
4898 & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4899 << next_bit);
4902 next_offset += this_time;
4903 byte_buffer_in_use = 1;
4908 if (byte_buffer_in_use)
4910 assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4911 total_bytes++;
4914 if ((unsigned HOST_WIDE_INT)total_bytes < size)
4915 assemble_zeros (size - total_bytes);
4918 /* Mark DECL as weak. */
4920 static void
4921 mark_weak (tree decl)
4923 DECL_WEAK (decl) = 1;
4925 if (DECL_RTL_SET_P (decl)
4926 && MEM_P (DECL_RTL (decl))
4927 && XEXP (DECL_RTL (decl), 0)
4928 && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF)
4929 SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1;
4932 /* Merge weak status between NEWDECL and OLDDECL. */
4934 void
4935 merge_weak (tree newdecl, tree olddecl)
4937 if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
4939 if (DECL_WEAK (newdecl) && SUPPORTS_WEAK)
4941 tree *pwd;
4942 /* We put the NEWDECL on the weak_decls list at some point
4943 and OLDDECL as well. Keep just OLDDECL on the list. */
4944 for (pwd = &weak_decls; *pwd; pwd = &TREE_CHAIN (*pwd))
4945 if (TREE_VALUE (*pwd) == newdecl)
4947 *pwd = TREE_CHAIN (*pwd);
4948 break;
4951 return;
4954 if (DECL_WEAK (newdecl))
4956 tree wd;
4958 /* NEWDECL is weak, but OLDDECL is not. */
4960 /* If we already output the OLDDECL, we're in trouble; we can't
4961 go back and make it weak. This error cannot be caught in
4962 declare_weak because the NEWDECL and OLDDECL was not yet
4963 been merged; therefore, TREE_ASM_WRITTEN was not set. */
4964 if (TREE_ASM_WRITTEN (olddecl))
4965 error ("weak declaration of %q+D must precede definition",
4966 newdecl);
4968 /* If we've already generated rtl referencing OLDDECL, we may
4969 have done so in a way that will not function properly with
4970 a weak symbol. */
4971 else if (TREE_USED (olddecl)
4972 && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)))
4973 warning (0, "weak declaration of %q+D after first use results "
4974 "in unspecified behavior", newdecl);
4976 if (SUPPORTS_WEAK)
4978 /* We put the NEWDECL on the weak_decls list at some point.
4979 Replace it with the OLDDECL. */
4980 for (wd = weak_decls; wd; wd = TREE_CHAIN (wd))
4981 if (TREE_VALUE (wd) == newdecl)
4983 TREE_VALUE (wd) = olddecl;
4984 break;
4986 /* We may not find the entry on the list. If NEWDECL is a
4987 weak alias, then we will have already called
4988 globalize_decl to remove the entry; in that case, we do
4989 not need to do anything. */
4992 /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping. */
4993 mark_weak (olddecl);
4995 else
4996 /* OLDDECL was weak, but NEWDECL was not explicitly marked as
4997 weak. Just update NEWDECL to indicate that it's weak too. */
4998 mark_weak (newdecl);
5001 /* Declare DECL to be a weak symbol. */
5003 void
5004 declare_weak (tree decl)
5006 if (! TREE_PUBLIC (decl))
5007 error ("weak declaration of %q+D must be public", decl);
5008 else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
5009 error ("weak declaration of %q+D must precede definition", decl);
5010 else if (!SUPPORTS_WEAK)
5011 warning (0, "weak declaration of %q+D not supported", decl);
5013 mark_weak (decl);
5016 static void
5017 weak_finish_1 (tree decl)
5019 #if defined (ASM_WEAKEN_DECL) || defined (ASM_WEAKEN_LABEL)
5020 const char *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5021 #endif
5023 if (! TREE_USED (decl))
5024 return;
5026 #ifdef ASM_WEAKEN_DECL
5027 ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL);
5028 #else
5029 #ifdef ASM_WEAKEN_LABEL
5030 ASM_WEAKEN_LABEL (asm_out_file, name);
5031 #else
5032 #ifdef ASM_OUTPUT_WEAK_ALIAS
5034 static bool warn_once = 0;
5035 if (! warn_once)
5037 warning (0, "only weak aliases are supported in this configuration");
5038 warn_once = 1;
5040 return;
5042 #endif
5043 #endif
5044 #endif
5047 /* This TREE_LIST contains weakref targets. */
5049 static GTY(()) tree weakref_targets;
5051 /* Forward declaration. */
5052 static tree find_decl_and_mark_needed (tree decl, tree target);
5054 /* Emit any pending weak declarations. */
5056 void
5057 weak_finish (void)
5059 tree t;
5061 for (t = weakref_targets; t; t = TREE_CHAIN (t))
5063 tree alias_decl = TREE_PURPOSE (t);
5064 tree target = ultimate_transparent_alias_target (&TREE_VALUE (t));
5066 if (! TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (alias_decl)))
5067 /* Remove alias_decl from the weak list, but leave entries for
5068 the target alone. */
5069 target = NULL_TREE;
5070 #ifndef ASM_OUTPUT_WEAKREF
5071 else if (! TREE_SYMBOL_REFERENCED (target))
5073 /* Use ASM_WEAKEN_LABEL only if ASM_WEAKEN_DECL is not
5074 defined, otherwise we and weak_finish_1 would use
5075 different macros. */
5076 # if defined ASM_WEAKEN_LABEL && ! defined ASM_WEAKEN_DECL
5077 ASM_WEAKEN_LABEL (asm_out_file, IDENTIFIER_POINTER (target));
5078 # else
5079 tree decl = find_decl_and_mark_needed (alias_decl, target);
5081 if (! decl)
5083 decl = build_decl (TREE_CODE (alias_decl), target,
5084 TREE_TYPE (alias_decl));
5086 DECL_EXTERNAL (decl) = 1;
5087 TREE_PUBLIC (decl) = 1;
5088 DECL_ARTIFICIAL (decl) = 1;
5089 TREE_NOTHROW (decl) = TREE_NOTHROW (alias_decl);
5090 TREE_USED (decl) = 1;
5093 weak_finish_1 (decl);
5094 # endif
5096 #endif
5099 tree *p;
5100 tree t2;
5102 /* Remove the alias and the target from the pending weak list
5103 so that we do not emit any .weak directives for the former,
5104 nor multiple .weak directives for the latter. */
5105 for (p = &weak_decls; (t2 = *p) ; )
5107 if (TREE_VALUE (t2) == alias_decl
5108 || target == DECL_ASSEMBLER_NAME (TREE_VALUE (t2)))
5109 *p = TREE_CHAIN (t2);
5110 else
5111 p = &TREE_CHAIN (t2);
5114 /* Remove other weakrefs to the same target, to speed things up. */
5115 for (p = &TREE_CHAIN (t); (t2 = *p) ; )
5117 if (target == ultimate_transparent_alias_target (&TREE_VALUE (t2)))
5118 *p = TREE_CHAIN (t2);
5119 else
5120 p = &TREE_CHAIN (t2);
5125 for (t = weak_decls; t; t = TREE_CHAIN (t))
5127 tree decl = TREE_VALUE (t);
5129 weak_finish_1 (decl);
5133 /* Emit the assembly bits to indicate that DECL is globally visible. */
5135 static void
5136 globalize_decl (tree decl)
5139 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
5140 if (DECL_WEAK (decl))
5142 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
5143 tree *p, t;
5145 #ifdef ASM_WEAKEN_DECL
5146 ASM_WEAKEN_DECL (asm_out_file, decl, name, 0);
5147 #else
5148 ASM_WEAKEN_LABEL (asm_out_file, name);
5149 #endif
5151 /* Remove this function from the pending weak list so that
5152 we do not emit multiple .weak directives for it. */
5153 for (p = &weak_decls; (t = *p) ; )
5155 if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
5156 *p = TREE_CHAIN (t);
5157 else
5158 p = &TREE_CHAIN (t);
5161 /* Remove weakrefs to the same target from the pending weakref
5162 list, for the same reason. */
5163 for (p = &weakref_targets; (t = *p) ; )
5165 if (DECL_ASSEMBLER_NAME (decl)
5166 == ultimate_transparent_alias_target (&TREE_VALUE (t)))
5167 *p = TREE_CHAIN (t);
5168 else
5169 p = &TREE_CHAIN (t);
5172 return;
5174 #endif
5176 targetm.asm_out.globalize_decl_name (asm_out_file, decl);
5179 /* We have to be able to tell cgraph about the needed-ness of the target
5180 of an alias. This requires that the decl have been defined. Aliases
5181 that precede their definition have to be queued for later processing. */
5183 typedef struct alias_pair GTY(())
5185 tree decl;
5186 tree target;
5187 } alias_pair;
5189 /* Define gc'd vector type. */
5190 DEF_VEC_O(alias_pair);
5191 DEF_VEC_ALLOC_O(alias_pair,gc);
5193 static GTY(()) VEC(alias_pair,gc) *alias_pairs;
5195 /* Given an assembly name, find the decl it is associated with. At the
5196 same time, mark it needed for cgraph. */
5198 static tree
5199 find_decl_and_mark_needed (tree decl, tree target)
5201 struct cgraph_node *fnode = NULL;
5202 struct varpool_node *vnode = NULL;
5204 if (TREE_CODE (decl) == FUNCTION_DECL)
5206 fnode = cgraph_node_for_asm (target);
5207 if (fnode == NULL)
5208 vnode = varpool_node_for_asm (target);
5210 else
5212 vnode = varpool_node_for_asm (target);
5213 if (vnode == NULL)
5214 fnode = cgraph_node_for_asm (target);
5217 if (fnode)
5219 /* We can't mark function nodes as used after cgraph global info
5220 is finished. This wouldn't generally be necessary, but C++
5221 virtual table thunks are introduced late in the game and
5222 might seem like they need marking, although in fact they
5223 don't. */
5224 if (! cgraph_global_info_ready)
5225 cgraph_mark_needed_node (fnode);
5226 return fnode->decl;
5228 else if (vnode)
5230 varpool_mark_needed_node (vnode);
5231 return vnode->decl;
5233 else
5234 return NULL_TREE;
5237 /* Output the assembler code for a define (equate) using ASM_OUTPUT_DEF
5238 or ASM_OUTPUT_DEF_FROM_DECLS. The function defines the symbol whose
5239 tree node is DECL to have the value of the tree node TARGET. */
5241 static void
5242 do_assemble_alias (tree decl, tree target)
5244 if (TREE_ASM_WRITTEN (decl))
5245 return;
5247 TREE_ASM_WRITTEN (decl) = 1;
5248 TREE_ASM_WRITTEN (DECL_ASSEMBLER_NAME (decl)) = 1;
5250 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5252 ultimate_transparent_alias_target (&target);
5254 if (!targetm.have_tls
5255 && TREE_CODE (decl) == VAR_DECL
5256 && DECL_THREAD_LOCAL_P (decl))
5258 decl = emutls_decl (decl);
5259 target = get_emutls_object_name (target);
5262 if (!TREE_SYMBOL_REFERENCED (target))
5263 weakref_targets = tree_cons (decl, target, weakref_targets);
5265 #ifdef ASM_OUTPUT_WEAKREF
5266 ASM_OUTPUT_WEAKREF (asm_out_file, decl,
5267 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
5268 IDENTIFIER_POINTER (target));
5269 #else
5270 if (!SUPPORTS_WEAK)
5272 error ("%Jweakref is not supported in this configuration", decl);
5273 return;
5275 #endif
5276 return;
5279 if (!targetm.have_tls
5280 && TREE_CODE (decl) == VAR_DECL
5281 && DECL_THREAD_LOCAL_P (decl))
5283 decl = emutls_decl (decl);
5284 target = get_emutls_object_name (target);
5287 #ifdef ASM_OUTPUT_DEF
5288 /* Make name accessible from other files, if appropriate. */
5290 if (TREE_PUBLIC (decl))
5292 globalize_decl (decl);
5293 maybe_assemble_visibility (decl);
5296 # ifdef ASM_OUTPUT_DEF_FROM_DECLS
5297 ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
5298 # else
5299 ASM_OUTPUT_DEF (asm_out_file,
5300 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
5301 IDENTIFIER_POINTER (target));
5302 # endif
5303 #elif defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
5305 const char *name;
5306 tree *p, t;
5308 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5309 # ifdef ASM_WEAKEN_DECL
5310 ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target));
5311 # else
5312 ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target));
5313 # endif
5314 /* Remove this function from the pending weak list so that
5315 we do not emit multiple .weak directives for it. */
5316 for (p = &weak_decls; (t = *p) ; )
5317 if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
5318 *p = TREE_CHAIN (t);
5319 else
5320 p = &TREE_CHAIN (t);
5322 /* Remove weakrefs to the same target from the pending weakref
5323 list, for the same reason. */
5324 for (p = &weakref_targets; (t = *p) ; )
5326 if (DECL_ASSEMBLER_NAME (decl)
5327 == ultimate_transparent_alias_target (&TREE_VALUE (t)))
5328 *p = TREE_CHAIN (t);
5329 else
5330 p = &TREE_CHAIN (t);
5333 #endif
5336 /* First pass of completing pending aliases. Make sure that cgraph knows
5337 which symbols will be required. */
5339 void
5340 finish_aliases_1 (void)
5342 unsigned i;
5343 alias_pair *p;
5345 for (i = 0; VEC_iterate (alias_pair, alias_pairs, i, p); i++)
5347 tree target_decl;
5349 target_decl = find_decl_and_mark_needed (p->decl, p->target);
5350 if (target_decl == NULL)
5352 if (! lookup_attribute ("weakref", DECL_ATTRIBUTES (p->decl)))
5353 error ("%q+D aliased to undefined symbol %qs",
5354 p->decl, IDENTIFIER_POINTER (p->target));
5356 else if (DECL_EXTERNAL (target_decl)
5357 && ! lookup_attribute ("weakref", DECL_ATTRIBUTES (p->decl)))
5358 error ("%q+D aliased to external symbol %qs",
5359 p->decl, IDENTIFIER_POINTER (p->target));
5363 /* Second pass of completing pending aliases. Emit the actual assembly.
5364 This happens at the end of compilation and thus it is assured that the
5365 target symbol has been emitted. */
5367 void
5368 finish_aliases_2 (void)
5370 unsigned i;
5371 alias_pair *p;
5373 for (i = 0; VEC_iterate (alias_pair, alias_pairs, i, p); i++)
5374 do_assemble_alias (p->decl, p->target);
5376 VEC_truncate (alias_pair, alias_pairs, 0);
5379 /* Emit an assembler directive to make the symbol for DECL an alias to
5380 the symbol for TARGET. */
5382 void
5383 assemble_alias (tree decl, tree target)
5385 tree target_decl;
5386 bool is_weakref = false;
5388 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5390 tree alias = DECL_ASSEMBLER_NAME (decl);
5392 is_weakref = true;
5394 ultimate_transparent_alias_target (&target);
5396 if (alias == target)
5397 error ("weakref %q+D ultimately targets itself", decl);
5398 else
5400 #ifndef ASM_OUTPUT_WEAKREF
5401 IDENTIFIER_TRANSPARENT_ALIAS (alias) = 1;
5402 TREE_CHAIN (alias) = target;
5403 #endif
5405 if (TREE_PUBLIC (decl))
5406 error ("weakref %q+D must have static linkage", decl);
5408 else
5410 #if !defined (ASM_OUTPUT_DEF)
5411 # if !defined(ASM_OUTPUT_WEAK_ALIAS) && !defined (ASM_WEAKEN_DECL)
5412 error ("%Jalias definitions not supported in this configuration", decl);
5413 return;
5414 # else
5415 if (!DECL_WEAK (decl))
5417 error ("%Jonly weak aliases are supported in this configuration", decl);
5418 return;
5420 # endif
5421 #endif
5424 /* We must force creation of DECL_RTL for debug info generation, even though
5425 we don't use it here. */
5426 make_decl_rtl (decl);
5427 TREE_USED (decl) = 1;
5429 /* A quirk of the initial implementation of aliases required that the user
5430 add "extern" to all of them. Which is silly, but now historical. Do
5431 note that the symbol is in fact locally defined. */
5432 if (! is_weakref)
5433 DECL_EXTERNAL (decl) = 0;
5435 /* Allow aliases to aliases. */
5436 if (TREE_CODE (decl) == FUNCTION_DECL)
5437 cgraph_node (decl)->alias = true;
5438 else
5439 varpool_node (decl)->alias = true;
5441 /* If the target has already been emitted, we don't have to queue the
5442 alias. This saves a tad of memory. */
5443 if (cgraph_global_info_ready)
5444 target_decl = find_decl_and_mark_needed (decl, target);
5445 else
5446 target_decl= NULL;
5447 if (target_decl && TREE_ASM_WRITTEN (target_decl))
5448 do_assemble_alias (decl, target);
5449 else
5451 alias_pair *p = VEC_safe_push (alias_pair, gc, alias_pairs, NULL);
5452 p->decl = decl;
5453 p->target = target;
5457 /* Emit an assembler directive to set symbol for DECL visibility to
5458 the visibility type VIS, which must not be VISIBILITY_DEFAULT. */
5460 void
5461 default_assemble_visibility (tree decl, int vis)
5463 static const char * const visibility_types[] = {
5464 NULL, "protected", "hidden", "internal"
5467 const char *name, *type;
5469 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5470 type = visibility_types[vis];
5472 #ifdef HAVE_GAS_HIDDEN
5473 fprintf (asm_out_file, "\t.%s\t", type);
5474 assemble_name (asm_out_file, name);
5475 fprintf (asm_out_file, "\n");
5476 #else
5477 warning (OPT_Wattributes, "visibility attribute not supported "
5478 "in this configuration; ignored");
5479 #endif
5482 /* A helper function to call assemble_visibility when needed for a decl. */
5485 maybe_assemble_visibility (tree decl)
5487 enum symbol_visibility vis = DECL_VISIBILITY (decl);
5489 if (vis != VISIBILITY_DEFAULT)
5491 targetm.asm_out.visibility (decl, vis);
5492 return 1;
5494 else
5495 return 0;
5498 /* Returns 1 if the target configuration supports defining public symbols
5499 so that one of them will be chosen at link time instead of generating a
5500 multiply-defined symbol error, whether through the use of weak symbols or
5501 a target-specific mechanism for having duplicates discarded. */
5504 supports_one_only (void)
5506 if (SUPPORTS_ONE_ONLY)
5507 return 1;
5508 return SUPPORTS_WEAK;
5511 /* Set up DECL as a public symbol that can be defined in multiple
5512 translation units without generating a linker error. */
5514 void
5515 make_decl_one_only (tree decl)
5517 gcc_assert (TREE_CODE (decl) == VAR_DECL
5518 || TREE_CODE (decl) == FUNCTION_DECL);
5520 TREE_PUBLIC (decl) = 1;
5522 if (SUPPORTS_ONE_ONLY)
5524 #ifdef MAKE_DECL_ONE_ONLY
5525 MAKE_DECL_ONE_ONLY (decl);
5526 #endif
5527 DECL_ONE_ONLY (decl) = 1;
5529 else if (TREE_CODE (decl) == VAR_DECL
5530 && (DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node))
5531 DECL_COMMON (decl) = 1;
5532 else
5534 gcc_assert (SUPPORTS_WEAK);
5535 DECL_WEAK (decl) = 1;
5539 void
5540 init_varasm_once (void)
5542 section_htab = htab_create_ggc (31, section_entry_hash,
5543 section_entry_eq, NULL);
5544 object_block_htab = htab_create_ggc (31, object_block_entry_hash,
5545 object_block_entry_eq, NULL);
5546 const_desc_htab = htab_create_ggc (1009, const_desc_hash,
5547 const_desc_eq, NULL);
5549 const_alias_set = new_alias_set ();
5550 shared_constant_pool = create_constant_pool ();
5552 #ifdef TEXT_SECTION_ASM_OP
5553 text_section = get_unnamed_section (SECTION_CODE, output_section_asm_op,
5554 TEXT_SECTION_ASM_OP);
5555 #endif
5557 #ifdef DATA_SECTION_ASM_OP
5558 data_section = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
5559 DATA_SECTION_ASM_OP);
5560 #endif
5562 #ifdef SDATA_SECTION_ASM_OP
5563 sdata_section = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
5564 SDATA_SECTION_ASM_OP);
5565 #endif
5567 #ifdef READONLY_DATA_SECTION_ASM_OP
5568 readonly_data_section = get_unnamed_section (0, output_section_asm_op,
5569 READONLY_DATA_SECTION_ASM_OP);
5570 #endif
5572 #ifdef CTORS_SECTION_ASM_OP
5573 ctors_section = get_unnamed_section (0, output_section_asm_op,
5574 CTORS_SECTION_ASM_OP);
5575 #endif
5577 #ifdef DTORS_SECTION_ASM_OP
5578 dtors_section = get_unnamed_section (0, output_section_asm_op,
5579 DTORS_SECTION_ASM_OP);
5580 #endif
5582 #ifdef BSS_SECTION_ASM_OP
5583 bss_section = get_unnamed_section (SECTION_WRITE | SECTION_BSS,
5584 output_section_asm_op,
5585 BSS_SECTION_ASM_OP);
5586 #endif
5588 #ifdef SBSS_SECTION_ASM_OP
5589 sbss_section = get_unnamed_section (SECTION_WRITE | SECTION_BSS,
5590 output_section_asm_op,
5591 SBSS_SECTION_ASM_OP);
5592 #endif
5594 tls_comm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
5595 | SECTION_COMMON, emit_tls_common);
5596 lcomm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
5597 | SECTION_COMMON, emit_local);
5598 comm_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS
5599 | SECTION_COMMON, emit_common);
5601 #if defined ASM_OUTPUT_ALIGNED_BSS || defined ASM_OUTPUT_BSS
5602 bss_noswitch_section = get_noswitch_section (SECTION_WRITE | SECTION_BSS,
5603 emit_bss);
5604 #endif
5606 targetm.asm_out.init_sections ();
5608 if (readonly_data_section == NULL)
5609 readonly_data_section = text_section;
5612 enum tls_model
5613 decl_default_tls_model (const_tree decl)
5615 enum tls_model kind;
5616 bool is_local;
5618 is_local = targetm.binds_local_p (decl);
5619 if (!flag_shlib)
5621 if (is_local)
5622 kind = TLS_MODEL_LOCAL_EXEC;
5623 else
5624 kind = TLS_MODEL_INITIAL_EXEC;
5627 /* Local dynamic is inefficient when we're not combining the
5628 parts of the address. */
5629 else if (optimize && is_local)
5630 kind = TLS_MODEL_LOCAL_DYNAMIC;
5631 else
5632 kind = TLS_MODEL_GLOBAL_DYNAMIC;
5633 if (kind < flag_tls_default)
5634 kind = flag_tls_default;
5636 return kind;
5639 /* Select a set of attributes for section NAME based on the properties
5640 of DECL and whether or not RELOC indicates that DECL's initializer
5641 might contain runtime relocations.
5643 We make the section read-only and executable for a function decl,
5644 read-only for a const data decl, and writable for a non-const data decl. */
5646 unsigned int
5647 default_section_type_flags (tree decl, const char *name, int reloc)
5649 unsigned int flags;
5651 if (decl && TREE_CODE (decl) == FUNCTION_DECL)
5652 flags = SECTION_CODE;
5653 else if (decl && decl_readonly_section (decl, reloc))
5654 flags = 0;
5655 else if (current_function_decl
5656 && cfun
5657 && crtl->subsections.unlikely_text_section_name
5658 && strcmp (name, crtl->subsections.unlikely_text_section_name) == 0)
5659 flags = SECTION_CODE;
5660 else if (!decl
5661 && (!current_function_decl || !cfun)
5662 && strcmp (name, UNLIKELY_EXECUTED_TEXT_SECTION_NAME) == 0)
5663 flags = SECTION_CODE;
5664 else
5665 flags = SECTION_WRITE;
5667 if (decl && DECL_ONE_ONLY (decl))
5668 flags |= SECTION_LINKONCE;
5670 if (decl && TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl))
5671 flags |= SECTION_TLS | SECTION_WRITE;
5673 if (strcmp (name, ".bss") == 0
5674 || strncmp (name, ".bss.", 5) == 0
5675 || strncmp (name, ".gnu.linkonce.b.", 16) == 0
5676 || strcmp (name, ".sbss") == 0
5677 || strncmp (name, ".sbss.", 6) == 0
5678 || strncmp (name, ".gnu.linkonce.sb.", 17) == 0)
5679 flags |= SECTION_BSS;
5681 if (strcmp (name, ".tdata") == 0
5682 || strncmp (name, ".tdata.", 7) == 0
5683 || strncmp (name, ".gnu.linkonce.td.", 17) == 0)
5684 flags |= SECTION_TLS;
5686 if (strcmp (name, ".tbss") == 0
5687 || strncmp (name, ".tbss.", 6) == 0
5688 || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
5689 flags |= SECTION_TLS | SECTION_BSS;
5691 /* These three sections have special ELF types. They are neither
5692 SHT_PROGBITS nor SHT_NOBITS, so when changing sections we don't
5693 want to print a section type (@progbits or @nobits). If someone
5694 is silly enough to emit code or TLS variables to one of these
5695 sections, then don't handle them specially. */
5696 if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS))
5697 && (strcmp (name, ".init_array") == 0
5698 || strcmp (name, ".fini_array") == 0
5699 || strcmp (name, ".preinit_array") == 0))
5700 flags |= SECTION_NOTYPE;
5702 return flags;
5705 /* Return true if the target supports some form of global BSS,
5706 either through bss_noswitch_section, or by selecting a BSS
5707 section in TARGET_ASM_SELECT_SECTION. */
5709 bool
5710 have_global_bss_p (void)
5712 return bss_noswitch_section || targetm.have_switchable_bss_sections;
5715 /* Output assembly to switch to section NAME with attribute FLAGS.
5716 Four variants for common object file formats. */
5718 void
5719 default_no_named_section (const char *name ATTRIBUTE_UNUSED,
5720 unsigned int flags ATTRIBUTE_UNUSED,
5721 tree decl ATTRIBUTE_UNUSED)
5723 /* Some object formats don't support named sections at all. The
5724 front-end should already have flagged this as an error. */
5725 gcc_unreachable ();
5728 void
5729 default_elf_asm_named_section (const char *name, unsigned int flags,
5730 tree decl ATTRIBUTE_UNUSED)
5732 char flagchars[10], *f = flagchars;
5734 /* If we have already declared this section, we can use an
5735 abbreviated form to switch back to it -- unless this section is
5736 part of a COMDAT groups, in which case GAS requires the full
5737 declaration every time. */
5738 if (!(HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
5739 && (flags & SECTION_DECLARED))
5741 fprintf (asm_out_file, "\t.section\t%s\n", name);
5742 return;
5745 if (!(flags & SECTION_DEBUG))
5746 *f++ = 'a';
5747 if (flags & SECTION_WRITE)
5748 *f++ = 'w';
5749 if (flags & SECTION_CODE)
5750 *f++ = 'x';
5751 if (flags & SECTION_SMALL)
5752 *f++ = 's';
5753 if (flags & SECTION_MERGE)
5754 *f++ = 'M';
5755 if (flags & SECTION_STRINGS)
5756 *f++ = 'S';
5757 if (flags & SECTION_TLS)
5758 *f++ = 'T';
5759 if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
5760 *f++ = 'G';
5761 *f = '\0';
5763 fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
5765 if (!(flags & SECTION_NOTYPE))
5767 const char *type;
5768 const char *format;
5770 if (flags & SECTION_BSS)
5771 type = "nobits";
5772 else
5773 type = "progbits";
5775 format = ",@%s";
5776 #ifdef ASM_COMMENT_START
5777 /* On platforms that use "@" as the assembly comment character,
5778 use "%" instead. */
5779 if (strcmp (ASM_COMMENT_START, "@") == 0)
5780 format = ",%%%s";
5781 #endif
5782 fprintf (asm_out_file, format, type);
5784 if (flags & SECTION_ENTSIZE)
5785 fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
5786 if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
5787 fprintf (asm_out_file, ",%s,comdat",
5788 lang_hooks.decls.comdat_group (decl));
5791 putc ('\n', asm_out_file);
5794 void
5795 default_coff_asm_named_section (const char *name, unsigned int flags,
5796 tree decl ATTRIBUTE_UNUSED)
5798 char flagchars[8], *f = flagchars;
5800 if (flags & SECTION_WRITE)
5801 *f++ = 'w';
5802 if (flags & SECTION_CODE)
5803 *f++ = 'x';
5804 *f = '\0';
5806 fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
5809 void
5810 default_pe_asm_named_section (const char *name, unsigned int flags,
5811 tree decl)
5813 default_coff_asm_named_section (name, flags, decl);
5815 if (flags & SECTION_LINKONCE)
5817 /* Functions may have been compiled at various levels of
5818 optimization so we can't use `same_size' here.
5819 Instead, have the linker pick one. */
5820 fprintf (asm_out_file, "\t.linkonce %s\n",
5821 (flags & SECTION_CODE ? "discard" : "same_size"));
5825 /* The lame default section selector. */
5827 section *
5828 default_select_section (tree decl, int reloc,
5829 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
5831 if (DECL_P (decl))
5833 if (decl_readonly_section (decl, reloc))
5834 return readonly_data_section;
5836 else if (TREE_CODE (decl) == CONSTRUCTOR)
5838 if (! ((flag_pic && reloc)
5839 || !TREE_READONLY (decl)
5840 || TREE_SIDE_EFFECTS (decl)
5841 || !TREE_CONSTANT (decl)))
5842 return readonly_data_section;
5844 else if (TREE_CODE (decl) == STRING_CST)
5845 return readonly_data_section;
5846 else if (! (flag_pic && reloc))
5847 return readonly_data_section;
5849 return data_section;
5852 enum section_category
5853 categorize_decl_for_section (const_tree decl, int reloc)
5855 enum section_category ret;
5857 if (TREE_CODE (decl) == FUNCTION_DECL)
5858 return SECCAT_TEXT;
5859 else if (TREE_CODE (decl) == STRING_CST)
5861 if (flag_mudflap) /* or !flag_merge_constants */
5862 return SECCAT_RODATA;
5863 else
5864 return SECCAT_RODATA_MERGE_STR;
5866 else if (TREE_CODE (decl) == VAR_DECL)
5868 if (bss_initializer_p (decl))
5869 ret = SECCAT_BSS;
5870 else if (! TREE_READONLY (decl)
5871 || TREE_SIDE_EFFECTS (decl)
5872 || ! TREE_CONSTANT (DECL_INITIAL (decl)))
5874 /* Here the reloc_rw_mask is not testing whether the section should
5875 be read-only or not, but whether the dynamic link will have to
5876 do something. If so, we wish to segregate the data in order to
5877 minimize cache misses inside the dynamic linker. */
5878 if (reloc & targetm.asm_out.reloc_rw_mask ())
5879 ret = reloc == 1 ? SECCAT_DATA_REL_LOCAL : SECCAT_DATA_REL;
5880 else
5881 ret = SECCAT_DATA;
5883 else if (reloc & targetm.asm_out.reloc_rw_mask ())
5884 ret = reloc == 1 ? SECCAT_DATA_REL_RO_LOCAL : SECCAT_DATA_REL_RO;
5885 else if (reloc || flag_merge_constants < 2)
5886 /* C and C++ don't allow different variables to share the same
5887 location. -fmerge-all-constants allows even that (at the
5888 expense of not conforming). */
5889 ret = SECCAT_RODATA;
5890 else if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
5891 ret = SECCAT_RODATA_MERGE_STR_INIT;
5892 else
5893 ret = SECCAT_RODATA_MERGE_CONST;
5895 else if (TREE_CODE (decl) == CONSTRUCTOR)
5897 if ((reloc & targetm.asm_out.reloc_rw_mask ())
5898 || TREE_SIDE_EFFECTS (decl)
5899 || ! TREE_CONSTANT (decl))
5900 ret = SECCAT_DATA;
5901 else
5902 ret = SECCAT_RODATA;
5904 else
5905 ret = SECCAT_RODATA;
5907 /* There are no read-only thread-local sections. */
5908 if (TREE_CODE (decl) == VAR_DECL && DECL_TLS_MODEL (decl))
5910 if (DECL_TLS_MODEL (decl) == TLS_MODEL_EMULATED)
5912 if (DECL_EMUTLS_VAR_P (decl))
5914 if (targetm.emutls.var_section)
5915 ret = SECCAT_EMUTLS_VAR;
5917 else
5919 if (targetm.emutls.tmpl_prefix)
5920 ret = SECCAT_EMUTLS_TMPL;
5923 /* Note that this would be *just* SECCAT_BSS, except that there's
5924 no concept of a read-only thread-local-data section. */
5925 else if (ret == SECCAT_BSS
5926 || (flag_zero_initialized_in_bss
5927 && initializer_zerop (DECL_INITIAL (decl))))
5928 ret = SECCAT_TBSS;
5929 else
5930 ret = SECCAT_TDATA;
5933 /* If the target uses small data sections, select it. */
5934 else if (targetm.in_small_data_p (decl))
5936 if (ret == SECCAT_BSS)
5937 ret = SECCAT_SBSS;
5938 else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
5939 ret = SECCAT_SRODATA;
5940 else
5941 ret = SECCAT_SDATA;
5944 return ret;
5947 bool
5948 decl_readonly_section (const_tree decl, int reloc)
5950 switch (categorize_decl_for_section (decl, reloc))
5952 case SECCAT_RODATA:
5953 case SECCAT_RODATA_MERGE_STR:
5954 case SECCAT_RODATA_MERGE_STR_INIT:
5955 case SECCAT_RODATA_MERGE_CONST:
5956 case SECCAT_SRODATA:
5957 return true;
5958 break;
5959 default:
5960 return false;
5961 break;
5965 /* Select a section based on the above categorization. */
5967 section *
5968 default_elf_select_section (tree decl, int reloc,
5969 unsigned HOST_WIDE_INT align)
5971 const char *sname;
5972 switch (categorize_decl_for_section (decl, reloc))
5974 case SECCAT_TEXT:
5975 /* We're not supposed to be called on FUNCTION_DECLs. */
5976 gcc_unreachable ();
5977 case SECCAT_RODATA:
5978 return readonly_data_section;
5979 case SECCAT_RODATA_MERGE_STR:
5980 return mergeable_string_section (decl, align, 0);
5981 case SECCAT_RODATA_MERGE_STR_INIT:
5982 return mergeable_string_section (DECL_INITIAL (decl), align, 0);
5983 case SECCAT_RODATA_MERGE_CONST:
5984 return mergeable_constant_section (DECL_MODE (decl), align, 0);
5985 case SECCAT_SRODATA:
5986 sname = ".sdata2";
5987 break;
5988 case SECCAT_DATA:
5989 return data_section;
5990 case SECCAT_DATA_REL:
5991 sname = ".data.rel";
5992 break;
5993 case SECCAT_DATA_REL_LOCAL:
5994 sname = ".data.rel.local";
5995 break;
5996 case SECCAT_DATA_REL_RO:
5997 sname = ".data.rel.ro";
5998 break;
5999 case SECCAT_DATA_REL_RO_LOCAL:
6000 sname = ".data.rel.ro.local";
6001 break;
6002 case SECCAT_SDATA:
6003 sname = ".sdata";
6004 break;
6005 case SECCAT_TDATA:
6006 sname = ".tdata";
6007 break;
6008 case SECCAT_BSS:
6009 if (bss_section)
6010 return bss_section;
6011 sname = ".bss";
6012 break;
6013 case SECCAT_SBSS:
6014 sname = ".sbss";
6015 break;
6016 case SECCAT_TBSS:
6017 sname = ".tbss";
6018 break;
6019 case SECCAT_EMUTLS_VAR:
6020 sname = targetm.emutls.var_section;
6021 break;
6022 case SECCAT_EMUTLS_TMPL:
6023 sname = targetm.emutls.tmpl_section;
6024 break;
6025 default:
6026 gcc_unreachable ();
6029 if (!DECL_P (decl))
6030 decl = NULL_TREE;
6031 return get_named_section (decl, sname, reloc);
6034 /* Construct a unique section name based on the decl name and the
6035 categorization performed above. */
6037 void
6038 default_unique_section (tree decl, int reloc)
6040 /* We only need to use .gnu.linkonce if we don't have COMDAT groups. */
6041 bool one_only = DECL_ONE_ONLY (decl) && !HAVE_COMDAT_GROUP;
6042 const char *prefix, *name, *linkonce;
6043 char *string;
6045 switch (categorize_decl_for_section (decl, reloc))
6047 case SECCAT_TEXT:
6048 prefix = one_only ? ".t" : ".text";
6049 break;
6050 case SECCAT_RODATA:
6051 case SECCAT_RODATA_MERGE_STR:
6052 case SECCAT_RODATA_MERGE_STR_INIT:
6053 case SECCAT_RODATA_MERGE_CONST:
6054 prefix = one_only ? ".r" : ".rodata";
6055 break;
6056 case SECCAT_SRODATA:
6057 prefix = one_only ? ".s2" : ".sdata2";
6058 break;
6059 case SECCAT_DATA:
6060 prefix = one_only ? ".d" : ".data";
6061 break;
6062 case SECCAT_DATA_REL:
6063 prefix = one_only ? ".d.rel" : ".data.rel";
6064 break;
6065 case SECCAT_DATA_REL_LOCAL:
6066 prefix = one_only ? ".d.rel.local" : ".data.rel.local";
6067 break;
6068 case SECCAT_DATA_REL_RO:
6069 prefix = one_only ? ".d.rel.ro" : ".data.rel.ro";
6070 break;
6071 case SECCAT_DATA_REL_RO_LOCAL:
6072 prefix = one_only ? ".d.rel.ro.local" : ".data.rel.ro.local";
6073 break;
6074 case SECCAT_SDATA:
6075 prefix = one_only ? ".s" : ".sdata";
6076 break;
6077 case SECCAT_BSS:
6078 prefix = one_only ? ".b" : ".bss";
6079 break;
6080 case SECCAT_SBSS:
6081 prefix = one_only ? ".sb" : ".sbss";
6082 break;
6083 case SECCAT_TDATA:
6084 prefix = one_only ? ".td" : ".tdata";
6085 break;
6086 case SECCAT_TBSS:
6087 prefix = one_only ? ".tb" : ".tbss";
6088 break;
6089 case SECCAT_EMUTLS_VAR:
6090 prefix = targetm.emutls.var_section;
6091 break;
6092 case SECCAT_EMUTLS_TMPL:
6093 prefix = targetm.emutls.tmpl_section;
6094 break;
6095 default:
6096 gcc_unreachable ();
6099 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
6100 name = targetm.strip_name_encoding (name);
6102 /* If we're using one_only, then there needs to be a .gnu.linkonce
6103 prefix to the section name. */
6104 linkonce = one_only ? ".gnu.linkonce" : "";
6106 string = ACONCAT ((linkonce, prefix, ".", name, NULL));
6108 DECL_SECTION_NAME (decl) = build_string (strlen (string), string);
6111 /* Like compute_reloc_for_constant, except for an RTX. The return value
6112 is a mask for which bit 1 indicates a global relocation, and bit 0
6113 indicates a local relocation. */
6115 static int
6116 compute_reloc_for_rtx_1 (rtx *xp, void *data)
6118 int *preloc = (int *) data;
6119 rtx x = *xp;
6121 switch (GET_CODE (x))
6123 case SYMBOL_REF:
6124 *preloc |= SYMBOL_REF_LOCAL_P (x) ? 1 : 2;
6125 break;
6126 case LABEL_REF:
6127 *preloc |= 1;
6128 break;
6129 default:
6130 break;
6133 return 0;
6136 static int
6137 compute_reloc_for_rtx (rtx x)
6139 int reloc;
6141 switch (GET_CODE (x))
6143 case CONST:
6144 case SYMBOL_REF:
6145 case LABEL_REF:
6146 reloc = 0;
6147 for_each_rtx (&x, compute_reloc_for_rtx_1, &reloc);
6148 return reloc;
6150 default:
6151 return 0;
6155 section *
6156 default_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED,
6157 rtx x,
6158 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
6160 if (compute_reloc_for_rtx (x) & targetm.asm_out.reloc_rw_mask ())
6161 return data_section;
6162 else
6163 return readonly_data_section;
6166 section *
6167 default_elf_select_rtx_section (enum machine_mode mode, rtx x,
6168 unsigned HOST_WIDE_INT align)
6170 int reloc = compute_reloc_for_rtx (x);
6172 /* ??? Handle small data here somehow. */
6174 if (reloc & targetm.asm_out.reloc_rw_mask ())
6176 if (reloc == 1)
6177 return get_named_section (NULL, ".data.rel.ro.local", 1);
6178 else
6179 return get_named_section (NULL, ".data.rel.ro", 3);
6182 return mergeable_constant_section (mode, align, 0);
6185 /* Set the generally applicable flags on the SYMBOL_REF for EXP. */
6187 void
6188 default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
6190 rtx symbol;
6191 int flags;
6193 /* Careful not to prod global register variables. */
6194 if (!MEM_P (rtl))
6195 return;
6196 symbol = XEXP (rtl, 0);
6197 if (GET_CODE (symbol) != SYMBOL_REF)
6198 return;
6200 flags = SYMBOL_REF_FLAGS (symbol) & SYMBOL_FLAG_HAS_BLOCK_INFO;
6201 if (TREE_CODE (decl) == FUNCTION_DECL)
6202 flags |= SYMBOL_FLAG_FUNCTION;
6203 if (targetm.binds_local_p (decl))
6204 flags |= SYMBOL_FLAG_LOCAL;
6205 if (targetm.have_tls && TREE_CODE (decl) == VAR_DECL
6206 && DECL_THREAD_LOCAL_P (decl))
6207 flags |= DECL_TLS_MODEL (decl) << SYMBOL_FLAG_TLS_SHIFT;
6208 else if (targetm.in_small_data_p (decl))
6209 flags |= SYMBOL_FLAG_SMALL;
6210 /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names? Without
6211 being PUBLIC, the thing *must* be defined in this translation unit.
6212 Prevent this buglet from being propagated into rtl code as well. */
6213 if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
6214 flags |= SYMBOL_FLAG_EXTERNAL;
6216 SYMBOL_REF_FLAGS (symbol) = flags;
6219 /* By default, we do nothing for encode_section_info, so we need not
6220 do anything but discard the '*' marker. */
6222 const char *
6223 default_strip_name_encoding (const char *str)
6225 return str + (*str == '*');
6228 #ifdef ASM_OUTPUT_DEF
6229 /* The default implementation of TARGET_ASM_OUTPUT_ANCHOR. Define the
6230 anchor relative to ".", the current section position. */
6232 void
6233 default_asm_output_anchor (rtx symbol)
6235 char buffer[100];
6237 sprintf (buffer, "*. + " HOST_WIDE_INT_PRINT_DEC,
6238 SYMBOL_REF_BLOCK_OFFSET (symbol));
6239 ASM_OUTPUT_DEF (asm_out_file, XSTR (symbol, 0), buffer);
6241 #endif
6243 /* The default implementation of TARGET_USE_ANCHORS_FOR_SYMBOL_P. */
6245 bool
6246 default_use_anchors_for_symbol_p (const_rtx symbol)
6248 section *sect;
6249 tree decl;
6251 /* Don't use anchors for mergeable sections. The linker might move
6252 the objects around. */
6253 sect = SYMBOL_REF_BLOCK (symbol)->sect;
6254 if (sect->common.flags & SECTION_MERGE)
6255 return false;
6257 /* Don't use anchors for small data sections. The small data register
6258 acts as an anchor for such sections. */
6259 if (sect->common.flags & SECTION_SMALL)
6260 return false;
6262 decl = SYMBOL_REF_DECL (symbol);
6263 if (decl && DECL_P (decl))
6265 /* Don't use section anchors for decls that might be defined by
6266 other modules. */
6267 if (!targetm.binds_local_p (decl))
6268 return false;
6270 /* Don't use section anchors for decls that will be placed in a
6271 small data section. */
6272 /* ??? Ideally, this check would be redundant with the SECTION_SMALL
6273 one above. The problem is that we only use SECTION_SMALL for
6274 sections that should be marked as small in the section directive. */
6275 if (targetm.in_small_data_p (decl))
6276 return false;
6278 return true;
6281 /* Assume ELF-ish defaults, since that's pretty much the most liberal
6282 wrt cross-module name binding. */
6284 bool
6285 default_binds_local_p (const_tree exp)
6287 return default_binds_local_p_1 (exp, flag_shlib);
6290 bool
6291 default_binds_local_p_1 (const_tree exp, int shlib)
6293 bool local_p;
6295 /* A non-decl is an entry in the constant pool. */
6296 if (!DECL_P (exp))
6297 local_p = true;
6298 /* Weakrefs may not bind locally, even though the weakref itself is
6299 always static and therefore local. */
6300 else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp)))
6301 local_p = false;
6302 /* Static variables are always local. */
6303 else if (! TREE_PUBLIC (exp))
6304 local_p = true;
6305 /* A variable is local if the user has said explicitly that it will
6306 be. */
6307 else if (DECL_VISIBILITY_SPECIFIED (exp)
6308 && DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
6309 local_p = true;
6310 /* Variables defined outside this object might not be local. */
6311 else if (DECL_EXTERNAL (exp))
6312 local_p = false;
6313 /* If defined in this object and visibility is not default, must be
6314 local. */
6315 else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
6316 local_p = true;
6317 /* Default visibility weak data can be overridden by a strong symbol
6318 in another module and so are not local. */
6319 else if (DECL_WEAK (exp))
6320 local_p = false;
6321 /* If PIC, then assume that any global name can be overridden by
6322 symbols resolved from other modules, unless we are compiling with
6323 -fwhole-program, which assumes that names are local. */
6324 else if (shlib)
6325 local_p = flag_whole_program;
6326 /* Uninitialized COMMON variable may be unified with symbols
6327 resolved from other modules. */
6328 else if (DECL_COMMON (exp)
6329 && (DECL_INITIAL (exp) == NULL
6330 || DECL_INITIAL (exp) == error_mark_node))
6331 local_p = false;
6332 /* Otherwise we're left with initialized (or non-common) global data
6333 which is of necessity defined locally. */
6334 else
6335 local_p = true;
6337 return local_p;
6340 /* Determine whether or not a pointer mode is valid. Assume defaults
6341 of ptr_mode or Pmode - can be overridden. */
6342 bool
6343 default_valid_pointer_mode (enum machine_mode mode)
6345 return (mode == ptr_mode || mode == Pmode);
6348 /* Default function to output code that will globalize a label. A
6349 target must define GLOBAL_ASM_OP or provide its own function to
6350 globalize a label. */
6351 #ifdef GLOBAL_ASM_OP
6352 void
6353 default_globalize_label (FILE * stream, const char *name)
6355 fputs (GLOBAL_ASM_OP, stream);
6356 assemble_name (stream, name);
6357 putc ('\n', stream);
6359 #endif /* GLOBAL_ASM_OP */
6361 /* Default function to output code that will globalize a declaration. */
6362 void
6363 default_globalize_decl_name (FILE * stream, tree decl)
6365 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
6366 targetm.asm_out.globalize_label (stream, name);
6369 /* Default function to output a label for unwind information. The
6370 default is to do nothing. A target that needs nonlocal labels for
6371 unwind information must provide its own function to do this. */
6372 void
6373 default_emit_unwind_label (FILE * stream ATTRIBUTE_UNUSED,
6374 tree decl ATTRIBUTE_UNUSED,
6375 int for_eh ATTRIBUTE_UNUSED,
6376 int empty ATTRIBUTE_UNUSED)
6380 /* Default function to output a label to divide up the exception table.
6381 The default is to do nothing. A target that needs/wants to divide
6382 up the table must provide it's own function to do this. */
6383 void
6384 default_emit_except_table_label (FILE * stream ATTRIBUTE_UNUSED)
6388 /* This is how to output an internal numbered label where PREFIX is
6389 the class of label and LABELNO is the number within the class. */
6391 void
6392 default_internal_label (FILE *stream, const char *prefix,
6393 unsigned long labelno)
6395 char *const buf = (char *) alloca (40 + strlen (prefix));
6396 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
6397 ASM_OUTPUT_INTERNAL_LABEL (stream, buf);
6400 /* This is the default behavior at the beginning of a file. It's
6401 controlled by two other target-hook toggles. */
6402 void
6403 default_file_start (void)
6405 if (targetm.file_start_app_off
6406 && !(flag_verbose_asm || flag_debug_asm || flag_dump_rtl_in_asm))
6407 fputs (ASM_APP_OFF, asm_out_file);
6409 if (targetm.file_start_file_directive)
6410 output_file_directive (asm_out_file, main_input_filename);
6413 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
6414 which emits a special section directive used to indicate whether or
6415 not this object file needs an executable stack. This is primarily
6416 a GNU extension to ELF but could be used on other targets. */
6418 int trampolines_created;
6420 void
6421 file_end_indicate_exec_stack (void)
6423 unsigned int flags = SECTION_DEBUG;
6424 if (trampolines_created)
6425 flags |= SECTION_CODE;
6427 switch_to_section (get_section (".note.GNU-stack", flags, NULL));
6430 /* Output DIRECTIVE (a C string) followed by a newline. This is used as
6431 a get_unnamed_section callback. */
6433 void
6434 output_section_asm_op (const void *directive)
6436 fprintf (asm_out_file, "%s\n", (const char *) directive);
6439 /* Emit assembly code to switch to section NEW_SECTION. Do nothing if
6440 the current section is NEW_SECTION. */
6442 void
6443 switch_to_section (section *new_section)
6445 if (in_section == new_section)
6446 return;
6448 if (new_section->common.flags & SECTION_FORGET)
6449 in_section = NULL;
6450 else
6451 in_section = new_section;
6453 switch (SECTION_STYLE (new_section))
6455 case SECTION_NAMED:
6456 if (cfun
6457 && !crtl->subsections.unlikely_text_section_name
6458 && strcmp (new_section->named.name,
6459 UNLIKELY_EXECUTED_TEXT_SECTION_NAME) == 0)
6460 crtl->subsections.unlikely_text_section_name = UNLIKELY_EXECUTED_TEXT_SECTION_NAME;
6462 targetm.asm_out.named_section (new_section->named.name,
6463 new_section->named.common.flags,
6464 new_section->named.decl);
6465 break;
6467 case SECTION_UNNAMED:
6468 new_section->unnamed.callback (new_section->unnamed.data);
6469 break;
6471 case SECTION_NOSWITCH:
6472 gcc_unreachable ();
6473 break;
6476 new_section->common.flags |= SECTION_DECLARED;
6479 /* If block symbol SYMBOL has not yet been assigned an offset, place
6480 it at the end of its block. */
6482 void
6483 place_block_symbol (rtx symbol)
6485 unsigned HOST_WIDE_INT size, mask, offset;
6486 struct constant_descriptor_rtx *desc;
6487 unsigned int alignment;
6488 struct object_block *block;
6489 tree decl;
6491 gcc_assert (SYMBOL_REF_BLOCK (symbol));
6492 if (SYMBOL_REF_BLOCK_OFFSET (symbol) >= 0)
6493 return;
6495 /* Work out the symbol's size and alignment. */
6496 if (CONSTANT_POOL_ADDRESS_P (symbol))
6498 desc = SYMBOL_REF_CONSTANT (symbol);
6499 alignment = desc->align;
6500 size = GET_MODE_SIZE (desc->mode);
6502 else if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
6504 decl = SYMBOL_REF_DECL (symbol);
6505 alignment = get_constant_alignment (decl);
6506 size = get_constant_size (decl);
6508 else
6510 decl = SYMBOL_REF_DECL (symbol);
6511 alignment = DECL_ALIGN (decl);
6512 size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
6515 /* Calculate the object's offset from the start of the block. */
6516 block = SYMBOL_REF_BLOCK (symbol);
6517 mask = alignment / BITS_PER_UNIT - 1;
6518 offset = (block->size + mask) & ~mask;
6519 SYMBOL_REF_BLOCK_OFFSET (symbol) = offset;
6521 /* Record the block's new alignment and size. */
6522 block->alignment = MAX (block->alignment, alignment);
6523 block->size = offset + size;
6525 VEC_safe_push (rtx, gc, block->objects, symbol);
6528 /* Return the anchor that should be used to address byte offset OFFSET
6529 from the first object in BLOCK. MODEL is the TLS model used
6530 to access it. */
6533 get_section_anchor (struct object_block *block, HOST_WIDE_INT offset,
6534 enum tls_model model)
6536 char label[100];
6537 unsigned int begin, middle, end;
6538 unsigned HOST_WIDE_INT min_offset, max_offset, range, bias, delta;
6539 rtx anchor;
6541 /* Work out the anchor's offset. Use an offset of 0 for the first
6542 anchor so that we don't pessimize the case where we take the address
6543 of a variable at the beginning of the block. This is particularly
6544 useful when a block has only one variable assigned to it.
6546 We try to place anchors RANGE bytes apart, so there can then be
6547 anchors at +/-RANGE, +/-2 * RANGE, and so on, up to the limits of
6548 a ptr_mode offset. With some target settings, the lowest such
6549 anchor might be out of range for the lowest ptr_mode offset;
6550 likewise the highest anchor for the highest offset. Use anchors
6551 at the extreme ends of the ptr_mode range in such cases.
6553 All arithmetic uses unsigned integers in order to avoid
6554 signed overflow. */
6555 max_offset = (unsigned HOST_WIDE_INT) targetm.max_anchor_offset;
6556 min_offset = (unsigned HOST_WIDE_INT) targetm.min_anchor_offset;
6557 range = max_offset - min_offset + 1;
6558 if (range == 0)
6559 offset = 0;
6560 else
6562 bias = 1 << (GET_MODE_BITSIZE (ptr_mode) - 1);
6563 if (offset < 0)
6565 delta = -(unsigned HOST_WIDE_INT) offset + max_offset;
6566 delta -= delta % range;
6567 if (delta > bias)
6568 delta = bias;
6569 offset = (HOST_WIDE_INT) (-delta);
6571 else
6573 delta = (unsigned HOST_WIDE_INT) offset - min_offset;
6574 delta -= delta % range;
6575 if (delta > bias - 1)
6576 delta = bias - 1;
6577 offset = (HOST_WIDE_INT) delta;
6581 /* Do a binary search to see if there's already an anchor we can use.
6582 Set BEGIN to the new anchor's index if not. */
6583 begin = 0;
6584 end = VEC_length (rtx, block->anchors);
6585 while (begin != end)
6587 middle = (end + begin) / 2;
6588 anchor = VEC_index (rtx, block->anchors, middle);
6589 if (SYMBOL_REF_BLOCK_OFFSET (anchor) > offset)
6590 end = middle;
6591 else if (SYMBOL_REF_BLOCK_OFFSET (anchor) < offset)
6592 begin = middle + 1;
6593 else if (SYMBOL_REF_TLS_MODEL (anchor) > model)
6594 end = middle;
6595 else if (SYMBOL_REF_TLS_MODEL (anchor) < model)
6596 begin = middle + 1;
6597 else
6598 return anchor;
6601 /* Create a new anchor with a unique label. */
6602 ASM_GENERATE_INTERNAL_LABEL (label, "LANCHOR", anchor_labelno++);
6603 anchor = create_block_symbol (ggc_strdup (label), block, offset);
6604 SYMBOL_REF_FLAGS (anchor) |= SYMBOL_FLAG_LOCAL | SYMBOL_FLAG_ANCHOR;
6605 SYMBOL_REF_FLAGS (anchor) |= model << SYMBOL_FLAG_TLS_SHIFT;
6607 /* Insert it at index BEGIN. */
6608 VEC_safe_insert (rtx, gc, block->anchors, begin, anchor);
6609 return anchor;
6612 /* Output the objects in BLOCK. */
6614 static void
6615 output_object_block (struct object_block *block)
6617 struct constant_descriptor_rtx *desc;
6618 unsigned int i;
6619 HOST_WIDE_INT offset;
6620 tree decl;
6621 rtx symbol;
6623 if (block->objects == NULL)
6624 return;
6626 /* Switch to the section and make sure that the first byte is
6627 suitably aligned. */
6628 switch_to_section (block->sect);
6629 assemble_align (block->alignment);
6631 /* Define the values of all anchors relative to the current section
6632 position. */
6633 for (i = 0; VEC_iterate (rtx, block->anchors, i, symbol); i++)
6634 targetm.asm_out.output_anchor (symbol);
6636 /* Output the objects themselves. */
6637 offset = 0;
6638 for (i = 0; VEC_iterate (rtx, block->objects, i, symbol); i++)
6640 /* Move to the object's offset, padding with zeros if necessary. */
6641 assemble_zeros (SYMBOL_REF_BLOCK_OFFSET (symbol) - offset);
6642 offset = SYMBOL_REF_BLOCK_OFFSET (symbol);
6643 if (CONSTANT_POOL_ADDRESS_P (symbol))
6645 desc = SYMBOL_REF_CONSTANT (symbol);
6646 output_constant_pool_1 (desc, 1);
6647 offset += GET_MODE_SIZE (desc->mode);
6649 else if (TREE_CONSTANT_POOL_ADDRESS_P (symbol))
6651 decl = SYMBOL_REF_DECL (symbol);
6652 assemble_constant_contents (decl, XSTR (symbol, 0),
6653 get_constant_alignment (decl));
6654 offset += get_constant_size (decl);
6656 else
6658 decl = SYMBOL_REF_DECL (symbol);
6659 assemble_variable_contents (decl, XSTR (symbol, 0), false);
6660 offset += tree_low_cst (DECL_SIZE_UNIT (decl), 1);
6665 /* A htab_traverse callback used to call output_object_block for
6666 each member of object_block_htab. */
6668 static int
6669 output_object_block_htab (void **slot, void *data ATTRIBUTE_UNUSED)
6671 output_object_block ((struct object_block *) (*slot));
6672 return 1;
6675 /* Output the definitions of all object_blocks. */
6677 void
6678 output_object_blocks (void)
6680 htab_traverse (object_block_htab, output_object_block_htab, NULL);
6683 /* This function provides a possible implementation of the
6684 TARGET_ASM_RECORD_GCC_SWITCHES target hook for ELF targets. When triggered
6685 by -frecord-gcc-switches it creates a new mergeable, string section in the
6686 assembler output file called TARGET_ASM_RECORD_GCC_SWITCHES_SECTION which
6687 contains the switches in ASCII format.
6689 FIXME: This code does not correctly handle double quote characters
6690 that appear inside strings, (it strips them rather than preserving them).
6691 FIXME: ASM_OUTPUT_ASCII, as defined in config/elfos.h will not emit NUL
6692 characters - instead it treats them as sub-string separators. Since
6693 we want to emit NUL strings terminators into the object file we have to use
6694 ASM_OUTPUT_SKIP. */
6697 elf_record_gcc_switches (print_switch_type type, const char * name)
6699 static char buffer[1024];
6701 /* This variable is used as part of a simplistic heuristic to detect
6702 command line switches which take an argument:
6704 "If a command line option does not start with a dash then
6705 it is an argument for the previous command line option."
6707 This fails in the case of the command line option which is the name
6708 of the file to compile, but otherwise it is pretty reasonable. */
6709 static bool previous_name_held_back = FALSE;
6711 switch (type)
6713 case SWITCH_TYPE_PASSED:
6714 if (* name != '-')
6716 if (previous_name_held_back)
6718 unsigned int len = strlen (buffer);
6720 snprintf (buffer + len, sizeof buffer - len, " %s", name);
6721 ASM_OUTPUT_ASCII (asm_out_file, buffer, strlen (buffer));
6722 ASM_OUTPUT_SKIP (asm_out_file, (unsigned HOST_WIDE_INT) 1);
6723 previous_name_held_back = FALSE;
6725 else
6727 strncpy (buffer, name, sizeof buffer);
6728 ASM_OUTPUT_ASCII (asm_out_file, buffer, strlen (buffer));
6729 ASM_OUTPUT_SKIP (asm_out_file, (unsigned HOST_WIDE_INT) 1);
6732 else
6734 if (previous_name_held_back)
6736 ASM_OUTPUT_ASCII (asm_out_file, buffer, strlen (buffer));
6737 ASM_OUTPUT_SKIP (asm_out_file, (unsigned HOST_WIDE_INT) 1);
6740 strncpy (buffer, name, sizeof buffer);
6741 previous_name_held_back = TRUE;
6743 break;
6745 case SWITCH_TYPE_DESCRIPTIVE:
6746 if (name == NULL)
6748 /* Distinguish between invocations where name is NULL. */
6749 static bool started = false;
6751 if (started)
6753 if (previous_name_held_back)
6755 ASM_OUTPUT_ASCII (asm_out_file, buffer, strlen (buffer));
6756 ASM_OUTPUT_SKIP (asm_out_file, (unsigned HOST_WIDE_INT) 1);
6759 else
6761 section * sec;
6763 sec = get_section (targetm.asm_out.record_gcc_switches_section,
6764 SECTION_DEBUG
6765 | SECTION_MERGE
6766 | SECTION_STRINGS
6767 | (SECTION_ENTSIZE & 1),
6768 NULL);
6769 switch_to_section (sec);
6770 started = true;
6774 default:
6775 break;
6778 /* The return value is currently ignored by the caller, but must be 0.
6779 For -fverbose-asm the return value would be the number of characters
6780 emitted into the assembler file. */
6781 return 0;
6784 /* Emit text to declare externally defined symbols. It is needed to
6785 properly support non-default visibility. */
6786 void
6787 default_elf_asm_output_external (FILE *file ATTRIBUTE_UNUSED,
6788 tree decl,
6789 const char *name ATTRIBUTE_UNUSED)
6791 /* We output the name if and only if TREE_SYMBOL_REFERENCED is
6792 set in order to avoid putting out names that are never really
6793 used. */
6794 if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
6795 && targetm.binds_local_p (decl))
6796 maybe_assemble_visibility (decl);
6799 #include "gt-varasm.h"