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 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
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. */
32 #include "coretypes.h"
39 #include "hard-reg-set.h"
47 #include "langhooks.h"
53 #ifdef XCOFF_DEBUGGING_INFO
54 #include "xcoffout.h" /* Needed for external data
55 declarations for e.g. AIX 4.x. */
58 #ifndef TRAMPOLINE_ALIGNMENT
59 #define TRAMPOLINE_ALIGNMENT FUNCTION_BOUNDARY
63 #define ASM_STABS_OP "\t.stabs\t"
66 /* The (assembler) name of the first globally-visible object output. */
67 const char *first_global_object_name;
68 const char *weak_global_object_name;
71 struct constant_descriptor_rtx;
75 #define MAX_RTX_HASH_TABLE 61
77 struct varasm_status GTY(())
79 /* Hash facility for making memory-constants
80 from constant rtl-expressions. It is used on RISC machines
81 where immediate integer arguments and constant addresses are restricted
82 so that such constants must be stored in memory.
84 This pool of constants is reinitialized for each function
85 so each function gets its own constants-pool that comes right before
87 struct constant_descriptor_rtx ** GTY ((length ("MAX_RTX_HASH_TABLE")))
88 x_const_rtx_hash_table;
89 struct pool_constant ** GTY ((length ("MAX_RTX_HASH_TABLE")))
90 x_const_rtx_sym_hash_table;
92 /* Pointers to first and last constant in pool. */
93 struct pool_constant *x_first_pool;
94 struct pool_constant *x_last_pool;
96 /* Current offset in constant pool (does not include any machine-specific
98 HOST_WIDE_INT x_pool_offset;
100 /* Number of tree-constants deferred during the expansion of this
102 unsigned int deferred_constants;
105 #define const_rtx_hash_table (cfun->varasm->x_const_rtx_hash_table)
106 #define const_rtx_sym_hash_table (cfun->varasm->x_const_rtx_sym_hash_table)
107 #define first_pool (cfun->varasm->x_first_pool)
108 #define last_pool (cfun->varasm->x_last_pool)
109 #define pool_offset (cfun->varasm->x_pool_offset)
110 #define n_deferred_constants (cfun->varasm->deferred_constants)
112 /* Number for making the label on the next
113 constant that is stored in memory. */
115 static GTY(()) int const_labelno;
117 /* Carry information from ASM_DECLARE_OBJECT_NAME
118 to ASM_FINISH_DECLARE_OBJECT. */
120 int size_directive_output;
122 /* The last decl for which assemble_variable was called,
123 if it did ASM_DECLARE_OBJECT_NAME.
124 If the last call to assemble_variable didn't do that,
127 tree last_assemble_variable_decl;
129 /* RTX_UNCHANGING_P in a MEM can mean it is stored into, for initialization.
130 So giving constant the alias set for the type will allow such
131 initializations to appear to conflict with the load of the constant. We
132 avoid this by giving all constants an alias set for just constants.
133 Since there will be no stores to that alias set, nothing will ever
134 conflict with them. */
136 static HOST_WIDE_INT const_alias_set;
138 static const char *strip_reg_name (const char *);
139 static int contains_pointers_p (tree);
140 static void decode_addr_const (tree, struct addr_const *);
141 static hashval_t const_desc_hash (const void *);
142 static int const_desc_eq (const void *, const void *);
143 static hashval_t const_hash_1 (const tree);
144 static int compare_constant (const tree, const tree);
145 static tree copy_constant (tree);
146 static void output_constant_def_contents (rtx);
147 static void decode_rtx_const (enum machine_mode, rtx, struct rtx_const *);
148 static unsigned int const_hash_rtx (enum machine_mode, rtx);
149 static int compare_constant_rtx (enum machine_mode, rtx,
150 struct constant_descriptor_rtx *);
151 static struct constant_descriptor_rtx * record_constant_rtx
152 (enum machine_mode, rtx);
153 static struct pool_constant *find_pool_constant (struct function *, rtx);
154 static void mark_constant_pool (void);
155 static void mark_constants (rtx);
156 static int mark_constant (rtx *current_rtx, void *data);
157 static void output_addressed_constants (tree);
158 static unsigned HOST_WIDE_INT array_size_for_constructor (tree);
159 static unsigned min_align (unsigned, unsigned);
160 static void output_constructor (tree, unsigned HOST_WIDE_INT, unsigned int);
161 static void globalize_decl (tree);
162 static void maybe_assemble_visibility (tree);
163 static int in_named_entry_eq (const void *, const void *);
164 static hashval_t in_named_entry_hash (const void *);
165 #ifdef ASM_OUTPUT_BSS
166 static void asm_output_bss (FILE *, tree, const char *,
167 unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
169 #ifdef BSS_SECTION_ASM_OP
170 #ifdef ASM_OUTPUT_ALIGNED_BSS
171 static void asm_output_aligned_bss (FILE *, tree, const char *,
172 unsigned HOST_WIDE_INT, int)
175 #endif /* BSS_SECTION_ASM_OP */
176 static bool asm_emit_uninitialised (tree, const char*,
177 unsigned HOST_WIDE_INT,
178 unsigned HOST_WIDE_INT);
179 static void mark_weak (tree);
181 enum in_section { no_section, in_text, in_data, in_named
182 #ifdef BSS_SECTION_ASM_OP
185 #ifdef CTORS_SECTION_ASM_OP
188 #ifdef DTORS_SECTION_ASM_OP
191 #ifdef READONLY_DATA_SECTION_ASM_OP
194 #ifdef EXTRA_SECTIONS
198 static GTY(()) enum in_section in_section = no_section;
200 /* Return a nonzero value if DECL has a section attribute. */
201 #ifndef IN_NAMED_SECTION
202 #define IN_NAMED_SECTION(DECL) \
203 ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \
204 && DECL_SECTION_NAME (DECL) != NULL_TREE)
207 /* Text of section name when in_section == in_named. */
208 static GTY(()) const char *in_named_name;
210 /* Hash table of flags that have been used for a particular named section. */
212 struct in_named_entry GTY(())
219 static GTY((param_is (struct in_named_entry))) htab_t in_named_htab;
221 /* Define functions like text_section for any extra sections. */
222 #ifdef EXTRA_SECTION_FUNCTIONS
223 EXTRA_SECTION_FUNCTIONS
226 /* Tell assembler to switch to text section. */
231 if (in_section != in_text)
233 in_section = in_text;
237 fprintf (asm_out_file, "%s\n", TEXT_SECTION_ASM_OP);
242 /* Tell assembler to switch to data section. */
247 if (in_section != in_data)
249 in_section = in_data;
250 if (flag_shared_data)
252 #ifdef SHARED_SECTION_ASM_OP
253 fprintf (asm_out_file, "%s\n", SHARED_SECTION_ASM_OP);
255 fprintf (asm_out_file, "%s\n", DATA_SECTION_ASM_OP);
259 fprintf (asm_out_file, "%s\n", DATA_SECTION_ASM_OP);
263 /* Tell assembler to switch to read-only data section. This is normally
267 readonly_data_section (void)
269 #ifdef READONLY_DATA_SECTION
270 READONLY_DATA_SECTION (); /* Note this can call data_section. */
272 #ifdef READONLY_DATA_SECTION_ASM_OP
273 if (in_section != in_readonly_data)
275 in_section = in_readonly_data;
276 fputs (READONLY_DATA_SECTION_ASM_OP, asm_out_file);
277 fputc ('\n', asm_out_file);
285 /* Determine if we're in the text section. */
288 in_text_section (void)
290 return in_section == in_text;
293 /* Determine if we're in the data section. */
296 in_data_section (void)
298 return in_section == in_data;
301 /* Helper routines for maintaining in_named_htab. */
304 in_named_entry_eq (const void *p1, const void *p2)
306 const struct in_named_entry *old = p1;
307 const char *new = p2;
309 return strcmp (old->name, new) == 0;
313 in_named_entry_hash (const void *p)
315 const struct in_named_entry *old = p;
316 return htab_hash_string (old->name);
319 /* If SECTION has been seen before as a named section, return the flags
320 that were used. Otherwise, return 0. Note, that 0 is a perfectly valid
321 set of flags for a section to have, so 0 does not mean that the section
322 has not been seen. */
325 get_named_section_flags (const char *section)
327 struct in_named_entry **slot;
329 slot = (struct in_named_entry **)
330 htab_find_slot_with_hash (in_named_htab, section,
331 htab_hash_string (section), NO_INSERT);
333 return slot ? (*slot)->flags : 0;
336 /* Returns true if the section has been declared before. Sets internal
337 flag on this section in in_named_hash so subsequent calls on this
338 section will return false. */
341 named_section_first_declaration (const char *name)
343 struct in_named_entry **slot;
345 slot = (struct in_named_entry **)
346 htab_find_slot_with_hash (in_named_htab, name,
347 htab_hash_string (name), NO_INSERT);
348 if (! (*slot)->declared)
350 (*slot)->declared = true;
360 /* Record FLAGS for SECTION. If SECTION was previously recorded with a
361 different set of flags, return false. */
364 set_named_section_flags (const char *section, unsigned int flags)
366 struct in_named_entry **slot, *entry;
368 slot = (struct in_named_entry **)
369 htab_find_slot_with_hash (in_named_htab, section,
370 htab_hash_string (section), INSERT);
375 entry = ggc_alloc (sizeof (*entry));
377 entry->name = ggc_strdup (section);
378 entry->flags = flags;
379 entry->declared = false;
381 else if (entry->flags != flags)
387 /* Tell assembler to change to section NAME with attributes FLAGS. */
390 named_section_flags (const char *name, unsigned int flags)
392 if (in_section != in_named || strcmp (name, in_named_name) != 0)
394 if (! set_named_section_flags (name, flags))
397 (*targetm.asm_out.named_section) (name, flags);
399 if (flags & SECTION_FORGET)
400 in_section = no_section;
403 in_named_name = ggc_strdup (name);
404 in_section = in_named;
409 /* Tell assembler to change to section NAME for DECL.
410 If DECL is NULL, just switch to section NAME.
411 If NAME is NULL, get the name from DECL.
412 If RELOC is 1, the initializer for DECL contains relocs. */
415 named_section (tree decl, const char *name, int reloc)
419 if (decl != NULL_TREE && !DECL_P (decl))
422 name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl));
424 flags = (* targetm.section_type_flags) (decl, name, reloc);
426 /* Sanity check user variables for flag changes. Non-user
427 section flag changes will abort in named_section_flags.
428 However, don't complain if SECTION_OVERRIDE is set.
429 We trust that the setter knows that it is safe to ignore
430 the default flags for this decl. */
431 if (decl && ! set_named_section_flags (name, flags))
433 flags = get_named_section_flags (name);
434 if ((flags & SECTION_OVERRIDE) == 0)
435 error ("%J%D causes a section type conflict", decl, decl);
438 named_section_flags (name, flags);
441 /* If required, set DECL_SECTION_NAME to a unique name. */
444 resolve_unique_section (tree decl, int reloc ATTRIBUTE_UNUSED,
445 int flag_function_or_data_sections)
447 if (DECL_SECTION_NAME (decl) == NULL_TREE
448 && targetm.have_named_sections
449 && (flag_function_or_data_sections
450 || DECL_ONE_ONLY (decl)))
451 (*targetm.asm_out.unique_section) (decl, reloc);
454 #ifdef BSS_SECTION_ASM_OP
456 /* Tell the assembler to switch to the bss section. */
461 if (in_section != in_bss)
463 #ifdef SHARED_BSS_SECTION_ASM_OP
464 if (flag_shared_data)
465 fprintf (asm_out_file, "%s\n", SHARED_BSS_SECTION_ASM_OP);
468 fprintf (asm_out_file, "%s\n", BSS_SECTION_ASM_OP);
474 #ifdef ASM_OUTPUT_BSS
476 /* Utility function for ASM_OUTPUT_BSS for targets to use if
477 they don't support alignments in .bss.
478 ??? It is believed that this function will work in most cases so such
479 support is localized here. */
482 asm_output_bss (FILE *file, tree decl ATTRIBUTE_UNUSED,
484 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
485 unsigned HOST_WIDE_INT rounded)
487 (*targetm.asm_out.globalize_label) (file, name);
489 #ifdef ASM_DECLARE_OBJECT_NAME
490 last_assemble_variable_decl = decl;
491 ASM_DECLARE_OBJECT_NAME (file, name, decl);
493 /* Standard thing is just output label for the object. */
494 ASM_OUTPUT_LABEL (file, name);
495 #endif /* ASM_DECLARE_OBJECT_NAME */
496 ASM_OUTPUT_SKIP (file, rounded ? rounded : 1);
501 #ifdef ASM_OUTPUT_ALIGNED_BSS
503 /* Utility function for targets to use in implementing
504 ASM_OUTPUT_ALIGNED_BSS.
505 ??? It is believed that this function will work in most cases so such
506 support is localized here. */
509 asm_output_aligned_bss (FILE *file, tree decl ATTRIBUTE_UNUSED,
510 const char *name, unsigned HOST_WIDE_INT size,
514 ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT));
515 #ifdef ASM_DECLARE_OBJECT_NAME
516 last_assemble_variable_decl = decl;
517 ASM_DECLARE_OBJECT_NAME (file, name, decl);
519 /* Standard thing is just output label for the object. */
520 ASM_OUTPUT_LABEL (file, name);
521 #endif /* ASM_DECLARE_OBJECT_NAME */
522 ASM_OUTPUT_SKIP (file, size ? size : 1);
527 #endif /* BSS_SECTION_ASM_OP */
529 /* Switch to the section for function DECL.
531 If DECL is NULL_TREE, switch to the text section.
532 ??? It's not clear that we will ever be passed NULL_TREE, but it's
533 safer to handle it. */
536 function_section (tree decl)
538 if (decl != NULL_TREE
539 && DECL_SECTION_NAME (decl) != NULL_TREE)
540 named_section (decl, (char *) 0, 0);
545 /* Switch to section for variable DECL. RELOC is the same as the
546 argument to SELECT_SECTION. */
549 variable_section (tree decl, int reloc)
551 if (IN_NAMED_SECTION (decl))
552 named_section (decl, NULL, reloc);
554 (*targetm.asm_out.select_section) (decl, reloc, DECL_ALIGN (decl));
557 /* Tell assembler to switch to the section for string merging. */
560 mergeable_string_section (tree decl ATTRIBUTE_UNUSED,
561 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED,
562 unsigned int flags ATTRIBUTE_UNUSED)
564 if (HAVE_GAS_SHF_MERGE && flag_merge_constants
565 && TREE_CODE (decl) == STRING_CST
566 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
568 && TREE_STRING_LENGTH (decl) >= int_size_in_bytes (TREE_TYPE (decl)))
570 enum machine_mode mode;
571 unsigned int modesize;
576 mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (decl)));
577 modesize = GET_MODE_BITSIZE (mode);
578 if (modesize >= 8 && modesize <= 256
579 && (modesize & (modesize - 1)) == 0)
581 if (align < modesize)
584 str = TREE_STRING_POINTER (decl);
585 len = TREE_STRING_LENGTH (decl);
586 unit = GET_MODE_SIZE (mode);
588 /* Check for embedded NUL characters. */
589 for (i = 0; i < len; i += unit)
591 for (j = 0; j < unit; j++)
592 if (str[i + j] != '\0')
599 sprintf (name, ".rodata.str%d.%d", modesize / 8,
601 flags |= (modesize / 8) | SECTION_MERGE | SECTION_STRINGS;
602 if (!i && modesize < align)
604 /* A "" string with requested alignment greater than
605 character size might cause a problem:
606 if some other string required even bigger
607 alignment than "", then linker might think the
608 "" is just part of padding after some other string
609 and not put it into the hash table initially.
610 But this means "" could have smaller alignment
612 #ifdef ASM_OUTPUT_SECTION_START
613 named_section_flags (name, flags);
614 ASM_OUTPUT_SECTION_START (asm_out_file);
616 readonly_data_section ();
621 named_section_flags (name, flags);
627 readonly_data_section ();
630 /* Tell assembler to switch to the section for constant merging. */
633 mergeable_constant_section (enum machine_mode mode ATTRIBUTE_UNUSED,
634 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED,
635 unsigned int flags ATTRIBUTE_UNUSED)
637 unsigned int modesize = GET_MODE_BITSIZE (mode);
639 if (HAVE_GAS_SHF_MERGE && flag_merge_constants
645 && (align & (align - 1)) == 0)
649 sprintf (name, ".rodata.cst%d", (int) (align / 8));
650 flags |= (align / 8) | SECTION_MERGE;
651 named_section_flags (name, flags);
655 readonly_data_section ();
658 /* Given NAME, a putative register name, discard any customary prefixes. */
661 strip_reg_name (const char *name)
663 #ifdef REGISTER_PREFIX
664 if (!strncmp (name, REGISTER_PREFIX, strlen (REGISTER_PREFIX)))
665 name += strlen (REGISTER_PREFIX);
667 if (name[0] == '%' || name[0] == '#')
672 /* Decode an `asm' spec for a declaration as a register name.
673 Return the register number, or -1 if nothing specified,
674 or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized,
675 or -3 if ASMSPEC is `cc' and is not recognized,
676 or -4 if ASMSPEC is `memory' and is not recognized.
677 Accept an exact spelling or a decimal number.
678 Prefixes such as % are optional. */
681 decode_reg_name (const char *asmspec)
687 /* Get rid of confusing prefixes. */
688 asmspec = strip_reg_name (asmspec);
690 /* Allow a decimal number as a "register name". */
691 for (i = strlen (asmspec) - 1; i >= 0; i--)
692 if (! ISDIGIT (asmspec[i]))
694 if (asmspec[0] != 0 && i < 0)
697 if (i < FIRST_PSEUDO_REGISTER && i >= 0)
703 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
705 && ! strcmp (asmspec, strip_reg_name (reg_names[i])))
708 #ifdef ADDITIONAL_REGISTER_NAMES
710 static const struct { const char *const name; const int number; } table[]
711 = ADDITIONAL_REGISTER_NAMES;
713 for (i = 0; i < (int) ARRAY_SIZE (table); i++)
714 if (! strcmp (asmspec, table[i].name))
715 return table[i].number;
717 #endif /* ADDITIONAL_REGISTER_NAMES */
719 if (!strcmp (asmspec, "memory"))
722 if (!strcmp (asmspec, "cc"))
731 /* Create the DECL_RTL for a VAR_DECL or FUNCTION_DECL. DECL should
732 have static storage duration. In other words, it should not be an
733 automatic variable, including PARM_DECLs.
735 There is, however, one exception: this function handles variables
736 explicitly placed in a particular register by the user.
738 ASMSPEC, if not 0, is the string which the user specified as the
739 assembler symbol name.
741 This is never called for PARM_DECL nodes. */
744 make_decl_rtl (tree decl, const char *asmspec)
746 const char *name = 0;
750 /* Check that we are not being given an automatic variable. */
751 /* A weak alias has TREE_PUBLIC set but not the other bits. */
752 if (TREE_CODE (decl) == PARM_DECL
753 || TREE_CODE (decl) == RESULT_DECL
754 || (TREE_CODE (decl) == VAR_DECL
755 && !TREE_STATIC (decl)
756 && !TREE_PUBLIC (decl)
757 && !DECL_EXTERNAL (decl)
758 && !DECL_REGISTER (decl)))
760 /* And that we were not given a type or a label. */
761 else if (TREE_CODE (decl) == TYPE_DECL
762 || TREE_CODE (decl) == LABEL_DECL)
765 /* For a duplicate declaration, we can be called twice on the
766 same DECL node. Don't discard the RTL already made. */
767 if (DECL_RTL_SET_P (decl))
769 /* If the old RTL had the wrong mode, fix the mode. */
770 if (GET_MODE (DECL_RTL (decl)) != DECL_MODE (decl))
771 SET_DECL_RTL (decl, adjust_address_nv (DECL_RTL (decl),
772 DECL_MODE (decl), 0));
774 /* ??? Another way to do this would be to maintain a hashed
775 table of such critters. Instead of adding stuff to a DECL
776 to give certain attributes to it, we could use an external
777 hash map from DECL to set of attributes. */
779 /* Let the target reassign the RTL if it wants.
780 This is necessary, for example, when one machine specific
781 decl attribute overrides another. */
782 (* targetm.encode_section_info) (decl, DECL_RTL (decl), false);
786 reg_number = decode_reg_name (asmspec);
787 if (reg_number == -2)
789 /* ASMSPEC is given, and not the name of a register. Mark the
790 name with a star so assemble_name won't munge it. */
791 char *starred = alloca (strlen (asmspec) + 2);
793 strcpy (starred + 1, asmspec);
794 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (starred));
797 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
799 if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
801 /* First detect errors in declaring global registers. */
802 if (reg_number == -1)
803 error ("%Jregister name not specified for '%D'", decl, decl);
804 else if (reg_number < 0)
805 error ("%Jinvalid register name for '%D'", decl, decl);
806 else if (TYPE_MODE (TREE_TYPE (decl)) == BLKmode)
807 error ("%Jdata type of '%D' isn't suitable for a register",
809 else if (! HARD_REGNO_MODE_OK (reg_number, TYPE_MODE (TREE_TYPE (decl))))
810 error ("%Jregister specified for '%D' isn't suitable for data type",
812 /* Now handle properly declared static register variables. */
817 if (DECL_INITIAL (decl) != 0 && TREE_STATIC (decl))
819 DECL_INITIAL (decl) = 0;
820 error ("global register variable has initial value");
822 if (TREE_THIS_VOLATILE (decl))
823 warning ("volatile register variables don't work as you might wish");
825 /* If the user specified one of the eliminables registers here,
826 e.g., FRAME_POINTER_REGNUM, we don't want to get this variable
827 confused with that register and be eliminated. This usage is
828 somewhat suspect... */
830 SET_DECL_RTL (decl, gen_rtx_raw_REG (DECL_MODE (decl), reg_number));
831 ORIGINAL_REGNO (DECL_RTL (decl)) = reg_number;
832 REG_USERVAR_P (DECL_RTL (decl)) = 1;
834 if (TREE_STATIC (decl))
836 /* Make this register global, so not usable for anything
838 #ifdef ASM_DECLARE_REGISTER_GLOBAL
839 ASM_DECLARE_REGISTER_GLOBAL (asm_out_file, decl, reg_number, name);
841 nregs = HARD_REGNO_NREGS (reg_number, DECL_MODE (decl));
843 globalize_reg (reg_number + --nregs);
846 /* As a register variable, it has no section. */
851 /* Now handle ordinary static variables and functions (in memory).
852 Also handle vars declared register invalidly. */
854 if (reg_number >= 0 || reg_number == -3)
855 error ("%Jregister name given for non-register variable '%D'", decl, decl);
857 /* Specifying a section attribute on a variable forces it into a
858 non-.bss section, and thus it cannot be common. */
859 if (TREE_CODE (decl) == VAR_DECL
860 && DECL_SECTION_NAME (decl) != NULL_TREE
861 && DECL_INITIAL (decl) == NULL_TREE
862 && DECL_COMMON (decl))
863 DECL_COMMON (decl) = 0;
865 /* Variables can't be both common and weak. */
866 if (TREE_CODE (decl) == VAR_DECL && DECL_WEAK (decl))
867 DECL_COMMON (decl) = 0;
869 x = gen_rtx_SYMBOL_REF (Pmode, name);
870 SYMBOL_REF_WEAK (x) = DECL_WEAK (decl);
871 SYMBOL_REF_DECL (x) = decl;
873 x = gen_rtx_MEM (DECL_MODE (decl), x);
874 if (TREE_CODE (decl) != FUNCTION_DECL)
875 set_mem_attributes (x, decl, 1);
876 SET_DECL_RTL (decl, x);
878 /* Optionally set flags or add text to the name to record information
879 such as that it is a function name.
880 If the name is changed, the macro ASM_OUTPUT_LABELREF
881 will have to know how to strip this information. */
882 (* targetm.encode_section_info) (decl, DECL_RTL (decl), true);
885 /* Make the rtl for variable VAR be volatile.
886 Use this only for static variables. */
889 make_var_volatile (tree var)
891 if (GET_CODE (DECL_RTL (var)) != MEM)
894 MEM_VOLATILE_P (DECL_RTL (var)) = 1;
897 /* Output a string of literal assembler code
898 for an `asm' keyword used between functions. */
901 assemble_asm (tree string)
905 if (TREE_CODE (string) == ADDR_EXPR)
906 string = TREE_OPERAND (string, 0);
908 fprintf (asm_out_file, "\t%s\n", TREE_STRING_POINTER (string));
911 /* Record an element in the table of global destructors. SYMBOL is
912 a SYMBOL_REF of the function to be called; PRIORITY is a number
913 between 0 and MAX_INIT_PRIORITY. */
916 default_stabs_asm_out_destructor (rtx symbol, int priority ATTRIBUTE_UNUSED)
918 /* Tell GNU LD that this is part of the static destructor set.
919 This will work for any system that uses stabs, most usefully
921 fprintf (asm_out_file, "%s\"___DTOR_LIST__\",22,0,0,", ASM_STABS_OP);
922 assemble_name (asm_out_file, XSTR (symbol, 0));
923 fputc ('\n', asm_out_file);
927 default_named_section_asm_out_destructor (rtx symbol, int priority)
929 const char *section = ".dtors";
932 /* ??? This only works reliably with the GNU linker. */
933 if (priority != DEFAULT_INIT_PRIORITY)
935 sprintf (buf, ".dtors.%.5u",
936 /* Invert the numbering so the linker puts us in the proper
937 order; constructors are run from right to left, and the
938 linker sorts in increasing order. */
939 MAX_INIT_PRIORITY - priority);
943 named_section_flags (section, SECTION_WRITE);
944 assemble_align (POINTER_SIZE);
945 assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
948 #ifdef DTORS_SECTION_ASM_OP
952 if (in_section != in_dtors)
954 in_section = in_dtors;
955 fputs (DTORS_SECTION_ASM_OP, asm_out_file);
956 fputc ('\n', asm_out_file);
961 default_dtor_section_asm_out_destructor (rtx symbol,
962 int priority ATTRIBUTE_UNUSED)
965 assemble_align (POINTER_SIZE);
966 assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
970 /* Likewise for global constructors. */
973 default_stabs_asm_out_constructor (rtx symbol, int priority ATTRIBUTE_UNUSED)
975 /* Tell GNU LD that this is part of the static destructor set.
976 This will work for any system that uses stabs, most usefully
978 fprintf (asm_out_file, "%s\"___CTOR_LIST__\",22,0,0,", ASM_STABS_OP);
979 assemble_name (asm_out_file, XSTR (symbol, 0));
980 fputc ('\n', asm_out_file);
984 default_named_section_asm_out_constructor (rtx symbol, int priority)
986 const char *section = ".ctors";
989 /* ??? This only works reliably with the GNU linker. */
990 if (priority != DEFAULT_INIT_PRIORITY)
992 sprintf (buf, ".ctors.%.5u",
993 /* Invert the numbering so the linker puts us in the proper
994 order; constructors are run from right to left, and the
995 linker sorts in increasing order. */
996 MAX_INIT_PRIORITY - priority);
1000 named_section_flags (section, SECTION_WRITE);
1001 assemble_align (POINTER_SIZE);
1002 assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
1005 #ifdef CTORS_SECTION_ASM_OP
1007 ctors_section (void)
1009 if (in_section != in_ctors)
1011 in_section = in_ctors;
1012 fputs (CTORS_SECTION_ASM_OP, asm_out_file);
1013 fputc ('\n', asm_out_file);
1018 default_ctor_section_asm_out_constructor (rtx symbol,
1019 int priority ATTRIBUTE_UNUSED)
1022 assemble_align (POINTER_SIZE);
1023 assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
1027 /* CONSTANT_POOL_BEFORE_FUNCTION may be defined as an expression with
1028 a nonzero value if the constant pool should be output before the
1029 start of the function, or a zero value if the pool should output
1030 after the end of the function. The default is to put it before the
1033 #ifndef CONSTANT_POOL_BEFORE_FUNCTION
1034 #define CONSTANT_POOL_BEFORE_FUNCTION 1
1037 /* DECL is an object (either VAR_DECL or FUNCTION_DECL) which is going
1038 to be output to assembler.
1039 Set first_global_object_name and weak_global_object_name as appropriate. */
1042 notice_global_symbol (tree decl)
1044 if ((!first_global_object_name || !weak_global_object_name)
1045 && TREE_PUBLIC (decl) && !DECL_COMMON (decl)
1046 && !DECL_EXTERNAL (decl)
1047 && (TREE_CODE (decl) == FUNCTION_DECL
1048 || (TREE_CODE (decl) == VAR_DECL
1049 && (DECL_INITIAL (decl) != 0
1050 && DECL_INITIAL (decl) != error_mark_node))))
1054 rtx decl_rtl = DECL_RTL (decl);
1056 p = (* targetm.strip_name_encoding) (XSTR (XEXP (decl_rtl, 0), 0));
1059 if (! DECL_WEAK (decl) && ! DECL_ONE_ONLY (decl))
1060 first_global_object_name = name;
1062 weak_global_object_name = name;
1066 /* Output assembler code for the constant pool of a function and associated
1067 with defining the name of the function. DECL describes the function.
1068 NAME is the function's name. For the constant pool, we use the current
1069 constant pool data. */
1072 assemble_start_function (tree decl, const char *fnname)
1076 /* The following code does not need preprocessing in the assembler. */
1080 if (CONSTANT_POOL_BEFORE_FUNCTION)
1081 output_constant_pool (fnname, decl);
1083 resolve_unique_section (decl, 0, flag_function_sections);
1084 function_section (decl);
1086 /* Tell assembler to move to target machine's alignment for functions. */
1087 align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT);
1088 if (align < force_align_functions_log)
1089 align = force_align_functions_log;
1092 ASM_OUTPUT_ALIGN (asm_out_file, align);
1095 /* Handle a user-specified function alignment.
1096 Note that we still need to align to FUNCTION_BOUNDARY, as above,
1097 because ASM_OUTPUT_MAX_SKIP_ALIGN might not do any alignment at all. */
1098 if (align_functions_log > align
1099 && cfun->function_frequency != FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
1101 #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
1102 ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file,
1103 align_functions_log, align_functions - 1);
1105 ASM_OUTPUT_ALIGN (asm_out_file, align_functions_log);
1109 #ifdef ASM_OUTPUT_FUNCTION_PREFIX
1110 ASM_OUTPUT_FUNCTION_PREFIX (asm_out_file, fnname);
1113 (*debug_hooks->begin_function) (decl);
1115 /* Make function name accessible from other files, if appropriate. */
1117 if (TREE_PUBLIC (decl))
1119 notice_global_symbol (decl);
1121 globalize_decl (decl);
1123 maybe_assemble_visibility (decl);
1126 /* Do any machine/system dependent processing of the function name */
1127 #ifdef ASM_DECLARE_FUNCTION_NAME
1128 ASM_DECLARE_FUNCTION_NAME (asm_out_file, fnname, current_function_decl);
1130 /* Standard thing is just output label for the function. */
1131 ASM_OUTPUT_LABEL (asm_out_file, fnname);
1132 #endif /* ASM_DECLARE_FUNCTION_NAME */
1135 /* Output assembler code associated with defining the size of the
1136 function. DECL describes the function. NAME is the function's name. */
1139 assemble_end_function (tree decl, const char *fnname)
1141 #ifdef ASM_DECLARE_FUNCTION_SIZE
1142 ASM_DECLARE_FUNCTION_SIZE (asm_out_file, fnname, decl);
1144 if (! CONSTANT_POOL_BEFORE_FUNCTION)
1146 output_constant_pool (fnname, decl);
1147 function_section (decl); /* need to switch back */
1151 /* Assemble code to leave SIZE bytes of zeros. */
1154 assemble_zeros (unsigned HOST_WIDE_INT size)
1156 /* Do no output if -fsyntax-only. */
1157 if (flag_syntax_only)
1160 #ifdef ASM_NO_SKIP_IN_TEXT
1161 /* The `space' pseudo in the text section outputs nop insns rather than 0s,
1162 so we must output 0s explicitly in the text section. */
1163 if (ASM_NO_SKIP_IN_TEXT && in_text_section ())
1165 unsigned HOST_WIDE_INT i;
1166 for (i = 0; i < size; i++)
1167 assemble_integer (const0_rtx, 1, BITS_PER_UNIT, 1);
1172 ASM_OUTPUT_SKIP (asm_out_file, size);
1175 /* Assemble an alignment pseudo op for an ALIGN-bit boundary. */
1178 assemble_align (int align)
1180 if (align > BITS_PER_UNIT)
1182 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
1186 /* Assemble a string constant with the specified C string as contents. */
1189 assemble_string (const char *p, int size)
1194 /* If the string is very long, split it up. */
1198 int thissize = size - pos;
1199 if (thissize > maximum)
1202 ASM_OUTPUT_ASCII (asm_out_file, p, thissize);
1210 #if defined ASM_OUTPUT_ALIGNED_DECL_LOCAL
1211 #define ASM_EMIT_LOCAL(decl, name, size, rounded) \
1212 ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, decl, name, size, DECL_ALIGN (decl))
1214 #if defined ASM_OUTPUT_ALIGNED_LOCAL
1215 #define ASM_EMIT_LOCAL(decl, name, size, rounded) \
1216 ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, DECL_ALIGN (decl))
1218 #define ASM_EMIT_LOCAL(decl, name, size, rounded) \
1219 ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded)
1223 #if defined ASM_OUTPUT_ALIGNED_BSS
1224 #define ASM_EMIT_BSS(decl, name, size, rounded) \
1225 ASM_OUTPUT_ALIGNED_BSS (asm_out_file, decl, name, size, DECL_ALIGN (decl))
1227 #if defined ASM_OUTPUT_BSS
1228 #define ASM_EMIT_BSS(decl, name, size, rounded) \
1229 ASM_OUTPUT_BSS (asm_out_file, decl, name, size, rounded)
1235 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
1236 #define ASM_EMIT_COMMON(decl, name, size, rounded) \
1237 ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, decl, name, size, DECL_ALIGN (decl))
1239 #if defined ASM_OUTPUT_ALIGNED_COMMON
1240 #define ASM_EMIT_COMMON(decl, name, size, rounded) \
1241 ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, name, size, DECL_ALIGN (decl))
1243 #define ASM_EMIT_COMMON(decl, name, size, rounded) \
1244 ASM_OUTPUT_COMMON (asm_out_file, name, size, rounded)
1249 asm_emit_uninitialised (tree decl, const char *name,
1250 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
1251 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
1259 destination = asm_dest_local;
1261 /* ??? We should handle .bss via select_section mechanisms rather than
1262 via special target hooks. That would eliminate this special case. */
1263 if (TREE_PUBLIC (decl))
1265 if (!DECL_COMMON (decl))
1267 destination = asm_dest_bss;
1272 destination = asm_dest_common;
1275 if (destination == asm_dest_bss)
1276 globalize_decl (decl);
1277 resolve_unique_section (decl, 0, flag_data_sections);
1279 if (flag_shared_data)
1281 switch (destination)
1283 #ifdef ASM_OUTPUT_SHARED_BSS
1285 ASM_OUTPUT_SHARED_BSS (asm_out_file, decl, name, size, rounded);
1288 #ifdef ASM_OUTPUT_SHARED_COMMON
1289 case asm_dest_common:
1290 ASM_OUTPUT_SHARED_COMMON (asm_out_file, name, size, rounded);
1293 #ifdef ASM_OUTPUT_SHARED_LOCAL
1294 case asm_dest_local:
1295 ASM_OUTPUT_SHARED_LOCAL (asm_out_file, name, size, rounded);
1303 switch (destination)
1307 ASM_EMIT_BSS (decl, name, size, rounded);
1310 case asm_dest_common:
1311 ASM_EMIT_COMMON (decl, name, size, rounded);
1313 case asm_dest_local:
1314 ASM_EMIT_LOCAL (decl, name, size, rounded);
1323 /* Assemble everything that is needed for a variable or function declaration.
1324 Not used for automatic variables, and not used for function definitions.
1325 Should not be called for variables of incomplete structure type.
1327 TOP_LEVEL is nonzero if this variable has file scope.
1328 AT_END is nonzero if this is the special handling, at end of compilation,
1329 to define things that have had only tentative definitions.
1330 DONT_OUTPUT_DATA if nonzero means don't actually output the
1331 initial value (that will be done by the caller). */
1334 assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED,
1335 int at_end ATTRIBUTE_UNUSED, int dont_output_data)
1342 if (lang_hooks.decls.prepare_assemble_variable)
1343 (*lang_hooks.decls.prepare_assemble_variable) (decl);
1345 last_assemble_variable_decl = 0;
1347 /* Normally no need to say anything here for external references,
1348 since assemble_external is called by the language-specific code
1349 when a declaration is first seen. */
1351 if (DECL_EXTERNAL (decl))
1354 /* Output no assembler code for a function declaration.
1355 Only definitions of functions output anything. */
1357 if (TREE_CODE (decl) == FUNCTION_DECL)
1360 /* Do nothing for global register variables. */
1361 if (DECL_RTL_SET_P (decl) && GET_CODE (DECL_RTL (decl)) == REG)
1363 TREE_ASM_WRITTEN (decl) = 1;
1367 /* If type was incomplete when the variable was declared,
1368 see if it is complete now. */
1370 if (DECL_SIZE (decl) == 0)
1371 layout_decl (decl, 0);
1373 /* Still incomplete => don't allocate it; treat the tentative defn
1374 (which is what it must have been) as an `extern' reference. */
1376 if (!dont_output_data && DECL_SIZE (decl) == 0)
1378 error ("%Jstorage size of `%D' isn't known", decl, decl);
1379 TREE_ASM_WRITTEN (decl) = 1;
1383 /* The first declaration of a variable that comes through this function
1384 decides whether it is global (in C, has external linkage)
1385 or local (in C, has internal linkage). So do nothing more
1386 if this function has already run. */
1388 if (TREE_ASM_WRITTEN (decl))
1391 /* Make sure targetm.encode_section_info is invoked before we set
1393 decl_rtl = DECL_RTL (decl);
1395 TREE_ASM_WRITTEN (decl) = 1;
1397 /* Do no output if -fsyntax-only. */
1398 if (flag_syntax_only)
1403 if (! dont_output_data
1404 && ! host_integerp (DECL_SIZE_UNIT (decl), 1))
1406 error ("%Jsize of variable '%D' is too large", decl, decl);
1410 name = XSTR (XEXP (decl_rtl, 0), 0);
1411 if (TREE_PUBLIC (decl) && DECL_NAME (decl))
1412 notice_global_symbol (decl);
1414 /* Compute the alignment of this data. */
1416 align = DECL_ALIGN (decl);
1418 /* In the case for initialing an array whose length isn't specified,
1419 where we have not yet been able to do the layout,
1420 figure out the proper alignment now. */
1421 if (dont_output_data && DECL_SIZE (decl) == 0
1422 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
1423 align = MAX (align, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (decl))));
1425 /* Some object file formats have a maximum alignment which they support.
1426 In particular, a.out format supports a maximum alignment of 4. */
1427 #ifndef MAX_OFILE_ALIGNMENT
1428 #define MAX_OFILE_ALIGNMENT BIGGEST_ALIGNMENT
1430 if (align > MAX_OFILE_ALIGNMENT)
1432 warning ("%Jalignment of '%D' is greater than maximum object "
1433 "file alignment. Using %d", decl, decl,
1434 MAX_OFILE_ALIGNMENT/BITS_PER_UNIT);
1435 align = MAX_OFILE_ALIGNMENT;
1438 /* On some machines, it is good to increase alignment sometimes. */
1439 if (! DECL_USER_ALIGN (decl))
1441 #ifdef DATA_ALIGNMENT
1442 align = DATA_ALIGNMENT (TREE_TYPE (decl), align);
1444 #ifdef CONSTANT_ALIGNMENT
1445 if (DECL_INITIAL (decl) != 0 && DECL_INITIAL (decl) != error_mark_node)
1446 align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl), align);
1450 /* Reset the alignment in case we have made it tighter, so we can benefit
1451 from it in get_pointer_alignment. */
1452 DECL_ALIGN (decl) = align;
1453 set_mem_align (decl_rtl, align);
1455 if (TREE_PUBLIC (decl))
1456 maybe_assemble_visibility (decl);
1458 /* Output any data that we will need to use the address of. */
1459 if (DECL_INITIAL (decl) == error_mark_node)
1460 reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0;
1461 else if (DECL_INITIAL (decl))
1463 reloc = compute_reloc_for_constant (DECL_INITIAL (decl));
1464 output_addressed_constants (DECL_INITIAL (decl));
1466 resolve_unique_section (decl, reloc, flag_data_sections);
1468 /* Handle uninitialized definitions. */
1470 /* If the decl has been given an explicit section name, then it
1471 isn't common, and shouldn't be handled as such. */
1472 if (DECL_SECTION_NAME (decl) || dont_output_data)
1474 /* We don't implement common thread-local data at present. */
1475 else if (DECL_THREAD_LOCAL (decl))
1477 if (DECL_COMMON (decl))
1478 sorry ("thread-local COMMON data not implemented");
1480 else if (DECL_INITIAL (decl) == 0
1481 || DECL_INITIAL (decl) == error_mark_node
1482 || (flag_zero_initialized_in_bss
1483 /* Leave constant zeroes in .rodata so they can be shared. */
1484 && !TREE_READONLY (decl)
1485 && initializer_zerop (DECL_INITIAL (decl))))
1487 unsigned HOST_WIDE_INT size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
1488 unsigned HOST_WIDE_INT rounded = size;
1490 /* Don't allocate zero bytes of common,
1491 since that means "undefined external" in the linker. */
1495 /* Round size up to multiple of BIGGEST_ALIGNMENT bits
1496 so that each uninitialized object starts on such a boundary. */
1497 rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1;
1498 rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
1499 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
1501 #if !defined(ASM_OUTPUT_ALIGNED_COMMON) && !defined(ASM_OUTPUT_ALIGNED_DECL_COMMON) && !defined(ASM_OUTPUT_ALIGNED_BSS)
1502 if ((unsigned HOST_WIDE_INT) DECL_ALIGN (decl) / BITS_PER_UNIT > rounded)
1503 warning ("%Jrequested alignment for '%D' is greater than "
1504 "implemented alignment of %d", decl, decl, rounded);
1507 /* If the target cannot output uninitialized but not common global data
1508 in .bss, then we have to use .data, so fall through. */
1509 if (asm_emit_uninitialised (decl, name, size, rounded))
1513 /* Handle initialized definitions.
1514 Also handle uninitialized global definitions if -fno-common and the
1515 target doesn't support ASM_OUTPUT_BSS. */
1517 /* First make the assembler name(s) global if appropriate. */
1518 if (TREE_PUBLIC (decl) && DECL_NAME (decl))
1519 globalize_decl (decl);
1521 /* Switch to the appropriate section. */
1522 variable_section (decl, reloc);
1524 /* dbxout.c needs to know this. */
1525 if (in_text_section ())
1526 DECL_IN_TEXT_SECTION (decl) = 1;
1528 /* Output the alignment of this data. */
1529 if (align > BITS_PER_UNIT)
1531 ASM_OUTPUT_ALIGN (asm_out_file,
1532 floor_log2 (DECL_ALIGN (decl) / BITS_PER_UNIT));
1535 /* Do any machine/system dependent processing of the object. */
1536 #ifdef ASM_DECLARE_OBJECT_NAME
1537 last_assemble_variable_decl = decl;
1538 ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl);
1540 /* Standard thing is just output label for the object. */
1541 ASM_OUTPUT_LABEL (asm_out_file, name);
1542 #endif /* ASM_DECLARE_OBJECT_NAME */
1544 if (!dont_output_data)
1546 if (DECL_INITIAL (decl) && DECL_INITIAL (decl) != error_mark_node)
1547 /* Output the actual data. */
1548 output_constant (DECL_INITIAL (decl),
1549 tree_low_cst (DECL_SIZE_UNIT (decl), 1),
1552 /* Leave space for it. */
1553 assemble_zeros (tree_low_cst (DECL_SIZE_UNIT (decl), 1));
1557 /* Return 1 if type TYPE contains any pointers. */
1560 contains_pointers_p (tree type)
1562 switch (TREE_CODE (type))
1565 case REFERENCE_TYPE:
1566 /* I'm not sure whether OFFSET_TYPE needs this treatment,
1567 so I'll play safe and return 1. */
1573 case QUAL_UNION_TYPE:
1576 /* For a type that has fields, see if the fields have pointers. */
1577 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
1578 if (TREE_CODE (fields) == FIELD_DECL
1579 && contains_pointers_p (TREE_TYPE (fields)))
1585 /* An array type contains pointers if its element type does. */
1586 return contains_pointers_p (TREE_TYPE (type));
1593 /* Output something to declare an external symbol to the assembler.
1594 (Most assemblers don't need this, so we normally output nothing.)
1595 Do nothing if DECL is not external. */
1598 assemble_external (tree decl ATTRIBUTE_UNUSED)
1600 /* Because most platforms do not define ASM_OUTPUT_EXTERNAL, the
1601 main body of this code is only rarely exercised. To provide some
1602 testing, on all platforms, we make sure that the ASM_OUT_FILE is
1603 open. If it's not, we should not be calling this function. */
1607 #ifdef ASM_OUTPUT_EXTERNAL
1608 if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
1610 rtx rtl = DECL_RTL (decl);
1612 if (GET_CODE (rtl) == MEM && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF
1613 && ! SYMBOL_REF_USED (XEXP (rtl, 0)))
1615 /* Some systems do require some output. */
1616 SYMBOL_REF_USED (XEXP (rtl, 0)) = 1;
1617 ASM_OUTPUT_EXTERNAL (asm_out_file, decl, XSTR (XEXP (rtl, 0), 0));
1623 /* Similar, for calling a library function FUN. */
1626 assemble_external_libcall (rtx fun)
1628 /* Declare library function name external when first used, if nec. */
1629 if (! SYMBOL_REF_USED (fun))
1631 SYMBOL_REF_USED (fun) = 1;
1632 (*targetm.asm_out.external_libcall) (fun);
1636 /* Assemble a label named NAME. */
1639 assemble_label (const char *name)
1641 ASM_OUTPUT_LABEL (asm_out_file, name);
1644 /* Set the symbol_referenced flag for ID and notify callgraph code. */
1646 mark_referenced (tree id)
1648 if (!TREE_SYMBOL_REFERENCED (id))
1650 struct cgraph_node *node;
1651 struct cgraph_varpool_node *vnode;
1653 if (!cgraph_global_info_ready)
1655 node = cgraph_node_for_identifier (id);
1657 cgraph_mark_needed_node (node);
1660 vnode = cgraph_varpool_node_for_identifier (id);
1662 cgraph_varpool_mark_needed_node (vnode);
1664 TREE_SYMBOL_REFERENCED (id) = 1;
1667 /* Output to FILE a reference to the assembler name of a C-level name NAME.
1668 If NAME starts with a *, the rest of NAME is output verbatim.
1669 Otherwise NAME is transformed in an implementation-defined way
1670 (usually by the addition of an underscore).
1671 Many macros in the tm file are defined to call this function. */
1674 assemble_name (FILE *file, const char *name)
1676 const char *real_name;
1679 real_name = (* targetm.strip_name_encoding) (name);
1681 id = maybe_get_identifier (real_name);
1683 mark_referenced (id);
1686 fputs (&name[1], file);
1688 ASM_OUTPUT_LABELREF (file, name);
1691 /* Allocate SIZE bytes writable static space with a gensym name
1692 and return an RTX to refer to its address. */
1695 assemble_static_space (unsigned HOST_WIDE_INT size)
1698 const char *namestring;
1702 if (flag_shared_data)
1706 ASM_GENERATE_INTERNAL_LABEL (name, "LF", const_labelno);
1708 namestring = ggc_strdup (name);
1710 x = gen_rtx_SYMBOL_REF (Pmode, namestring);
1711 SYMBOL_REF_FLAGS (x) = SYMBOL_FLAG_LOCAL;
1713 #ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
1714 ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, NULL_TREE, name, size,
1717 #ifdef ASM_OUTPUT_ALIGNED_LOCAL
1718 ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, BIGGEST_ALIGNMENT);
1721 /* Round size up to multiple of BIGGEST_ALIGNMENT bits
1722 so that each uninitialized object starts on such a boundary. */
1723 /* Variable `rounded' might or might not be used in ASM_OUTPUT_LOCAL. */
1724 unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED
1725 = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1)
1726 / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
1727 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
1728 ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
1735 /* Assemble the static constant template for function entry trampolines.
1736 This is done at most once per compilation.
1737 Returns an RTX for the address of the template. */
1739 #ifdef TRAMPOLINE_TEMPLATE
1741 assemble_trampoline_template (void)
1748 /* By default, put trampoline templates in read-only data section. */
1750 #ifdef TRAMPOLINE_SECTION
1751 TRAMPOLINE_SECTION ();
1753 readonly_data_section ();
1756 /* Write the assembler code to define one. */
1757 align = floor_log2 (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT);
1760 ASM_OUTPUT_ALIGN (asm_out_file, align);
1763 (*targetm.asm_out.internal_label) (asm_out_file, "LTRAMP", 0);
1764 TRAMPOLINE_TEMPLATE (asm_out_file);
1766 /* Record the rtl to refer to it. */
1767 ASM_GENERATE_INTERNAL_LABEL (label, "LTRAMP", 0);
1768 name = ggc_strdup (label);
1769 symbol = gen_rtx_SYMBOL_REF (Pmode, name);
1770 SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
1776 /* A and B are either alignments or offsets. Return the minimum alignment
1777 that may be assumed after adding the two together. */
1779 static inline unsigned
1780 min_align (unsigned int a, unsigned int b)
1782 return (a | b) & -(a | b);
1785 /* Return the assembler directive for creating a given kind of integer
1786 object. SIZE is the number of bytes in the object and ALIGNED_P
1787 indicates whether it is known to be aligned. Return NULL if the
1788 assembly dialect has no such directive.
1790 The returned string should be printed at the start of a new line and
1791 be followed immediately by the object's initial value. */
1794 integer_asm_op (int size, int aligned_p)
1796 struct asm_int_op *ops;
1799 ops = &targetm.asm_out.aligned_op;
1801 ops = &targetm.asm_out.unaligned_op;
1806 return targetm.asm_out.byte_op;
1820 /* Use directive OP to assemble an integer object X. Print OP at the
1821 start of the line, followed immediately by the value of X. */
1824 assemble_integer_with_op (const char *op, rtx x)
1826 fputs (op, asm_out_file);
1827 output_addr_const (asm_out_file, x);
1828 fputc ('\n', asm_out_file);
1831 /* The default implementation of the asm_out.integer target hook. */
1834 default_assemble_integer (rtx x ATTRIBUTE_UNUSED,
1835 unsigned int size ATTRIBUTE_UNUSED,
1836 int aligned_p ATTRIBUTE_UNUSED)
1838 const char *op = integer_asm_op (size, aligned_p);
1839 return op && (assemble_integer_with_op (op, x), true);
1842 /* Assemble the integer constant X into an object of SIZE bytes. ALIGN is
1843 the alignment of the integer in bits. Return 1 if we were able to output
1844 the constant, otherwise 0. If FORCE is nonzero, abort if we can't output
1848 assemble_integer (rtx x, unsigned int size, unsigned int align, int force)
1852 aligned_p = (align >= MIN (size * BITS_PER_UNIT, BIGGEST_ALIGNMENT));
1854 /* See if the target hook can handle this kind of object. */
1855 if ((*targetm.asm_out.integer) (x, size, aligned_p))
1858 /* If the object is a multi-byte one, try splitting it up. Split
1859 it into words it if is multi-word, otherwise split it into bytes. */
1862 enum machine_mode omode, imode;
1863 unsigned int subalign;
1864 unsigned int subsize, i;
1866 subsize = size > UNITS_PER_WORD? UNITS_PER_WORD : 1;
1867 subalign = MIN (align, subsize * BITS_PER_UNIT);
1868 omode = mode_for_size (subsize * BITS_PER_UNIT, MODE_INT, 0);
1869 imode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0);
1871 for (i = 0; i < size; i += subsize)
1873 rtx partial = simplify_subreg (omode, x, imode, i);
1874 if (!partial || !assemble_integer (partial, subsize, subalign, 0))
1880 /* If we've printed some of it, but not all of it, there's no going
1893 assemble_real (REAL_VALUE_TYPE d, enum machine_mode mode, unsigned int align)
1897 int bitsize, nelts, nunits, units_per;
1899 /* This is hairy. We have a quantity of known bitsize. real_to_target
1900 will put it into an array of *host* longs, 32 bits per element
1901 (even if long is more than 32 bits). We need to determine the
1902 number of array elements that are occupied (nelts) and the number
1903 of *target* min-addressable units that will be occupied in the
1904 object file (nunits). We can assume that BITS_PER_UNIT divides
1905 the mode's bitsize evenly, but we can not assume that 32 does. */
1906 bitsize = GET_MODE_BITSIZE (mode);
1907 nunits = bitsize / BITS_PER_UNIT;
1908 nelts = CEIL (bitsize, 32);
1909 units_per = 32 / BITS_PER_UNIT;
1911 real_to_target (data, &d, mode);
1913 /* Put out the first word with the specified alignment. */
1914 assemble_integer (GEN_INT (data[0]), MIN (nunits, units_per), align, 1);
1915 nunits -= units_per;
1917 /* Subsequent words need only 32-bit alignment. */
1918 align = min_align (align, 32);
1920 for (i = 1; i < nelts; i++)
1922 assemble_integer (GEN_INT (data[i]), MIN (nunits, units_per), align, 1);
1923 nunits -= units_per;
1927 /* Given an expression EXP with a constant value,
1928 reduce it to the sum of an assembler symbol and an integer.
1929 Store them both in the structure *VALUE.
1930 Abort if EXP does not reduce. */
1932 struct addr_const GTY(())
1935 HOST_WIDE_INT offset;
1939 decode_addr_const (tree exp, struct addr_const *value)
1941 tree target = TREE_OPERAND (exp, 0);
1947 if (TREE_CODE (target) == COMPONENT_REF
1948 && host_integerp (byte_position (TREE_OPERAND (target, 1)), 0))
1951 offset += int_byte_position (TREE_OPERAND (target, 1));
1952 target = TREE_OPERAND (target, 0);
1954 else if (TREE_CODE (target) == ARRAY_REF
1955 || TREE_CODE (target) == ARRAY_RANGE_REF)
1957 offset += (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (target)), 1)
1958 * tree_low_cst (TREE_OPERAND (target, 1), 0));
1959 target = TREE_OPERAND (target, 0);
1965 switch (TREE_CODE (target))
1969 x = DECL_RTL (target);
1973 x = gen_rtx_MEM (FUNCTION_MODE,
1974 gen_rtx_LABEL_REF (VOIDmode, force_label_rtx (target)));
1982 x = output_constant_def (target, 1);
1989 if (GET_CODE (x) != MEM)
1994 value->offset = offset;
1997 /* We do RTX_UNSPEC + XINT (blah), so nothing can go after RTX_UNSPEC. */
1998 enum kind { RTX_UNKNOWN, RTX_DOUBLE, RTX_VECTOR, RTX_INT, RTX_UNSPEC };
1999 struct rtx_const GTY(())
2001 ENUM_BITFIELD(kind) kind : 16;
2002 ENUM_BITFIELD(machine_mode) mode : 16;
2003 union rtx_const_un {
2004 REAL_VALUE_TYPE GTY ((tag ("4"))) du;
2005 struct rtx_const_u_addr {
2008 HOST_WIDE_INT offset;
2009 } GTY ((tag ("1"))) addr;
2010 struct rtx_const_u_di {
2013 } GTY ((tag ("0"))) di;
2015 /* The max vector size we have is 16 wide; two variants for
2016 integral and floating point vectors. */
2017 struct rtx_const_int_vec {
2020 } GTY ((tag ("2"))) int_vec[16];
2022 REAL_VALUE_TYPE GTY ((tag ("3"))) fp_vec[8];
2024 } GTY ((desc ("%1.kind >= RTX_INT"), descbits ("1"))) un;
2027 /* Uniquize all constants that appear in memory.
2028 Each constant in memory thus far output is recorded
2029 in `const_hash_table'. */
2031 struct constant_descriptor_tree GTY(())
2033 /* A MEM for the constant. */
2036 /* The value of the constant. */
2040 static GTY((param_is (struct constant_descriptor_tree)))
2041 htab_t const_desc_htab;
2043 static struct constant_descriptor_tree * build_constant_desc (tree);
2044 static void maybe_output_constant_def_contents (struct constant_descriptor_tree *, int);
2046 /* Compute a hash code for a constant expression. */
2049 const_desc_hash (const void *ptr)
2051 return const_hash_1 (((struct constant_descriptor_tree *)ptr)->value);
2055 const_hash_1 (const tree exp)
2060 enum tree_code code = TREE_CODE (exp);
2062 /* Either set P and LEN to the address and len of something to hash and
2063 exit the switch or return a value. */
2068 p = (char *) &TREE_INT_CST (exp);
2069 len = sizeof TREE_INT_CST (exp);
2073 return real_hash (TREE_REAL_CST_PTR (exp));
2076 p = TREE_STRING_POINTER (exp);
2077 len = TREE_STRING_LENGTH (exp);
2080 return (const_hash_1 (TREE_REALPART (exp)) * 5
2081 + const_hash_1 (TREE_IMAGPART (exp)));
2084 if (TREE_CODE (TREE_TYPE (exp)) == SET_TYPE)
2088 len = int_size_in_bytes (TREE_TYPE (exp));
2090 get_set_constructor_bytes (exp, (unsigned char *) tmp, len);
2098 hi = 5 + int_size_in_bytes (TREE_TYPE (exp));
2100 for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link))
2101 if (TREE_VALUE (link))
2102 hi = hi * 603 + const_hash_1 (TREE_VALUE (link));
2110 struct addr_const value;
2112 decode_addr_const (exp, &value);
2113 if (GET_CODE (value.base) == SYMBOL_REF)
2115 /* Don't hash the address of the SYMBOL_REF;
2116 only use the offset and the symbol name. */
2118 p = XSTR (value.base, 0);
2119 for (i = 0; p[i] != 0; i++)
2120 hi = ((hi * 613) + (unsigned) (p[i]));
2122 else if (GET_CODE (value.base) == LABEL_REF)
2123 hi = value.offset + CODE_LABEL_NUMBER (XEXP (value.base, 0)) * 13;
2131 return (const_hash_1 (TREE_OPERAND (exp, 0)) * 9
2132 + const_hash_1 (TREE_OPERAND (exp, 1)));
2136 case NON_LVALUE_EXPR:
2137 return const_hash_1 (TREE_OPERAND (exp, 0)) * 7 + 2;
2140 /* A language specific constant. Just hash the code. */
2144 /* Compute hashing function. */
2146 for (i = 0; i < len; i++)
2147 hi = ((hi * 613) + (unsigned) (p[i]));
2152 /* Wrapper of compare_constant, for the htab interface. */
2154 const_desc_eq (const void *p1, const void *p2)
2156 return compare_constant (((struct constant_descriptor_tree *)p1)->value,
2157 ((struct constant_descriptor_tree *)p2)->value);
2160 /* Compare t1 and t2, and return 1 only if they are known to result in
2161 the same bit pattern on output. */
2164 compare_constant (const tree t1, const tree t2)
2166 enum tree_code typecode;
2168 if (t1 == NULL_TREE)
2169 return t2 == NULL_TREE;
2170 if (t2 == NULL_TREE)
2173 if (TREE_CODE (t1) != TREE_CODE (t2))
2176 switch (TREE_CODE (t1))
2179 /* Integer constants are the same only if the same width of type. */
2180 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2182 return tree_int_cst_equal (t1, t2);
2185 /* Real constants are the same only if the same width of type. */
2186 if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2189 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2192 if (flag_writable_strings)
2195 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
2198 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2199 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2200 TREE_STRING_LENGTH (t1)));
2203 return (compare_constant (TREE_REALPART (t1), TREE_REALPART (t2))
2204 && compare_constant (TREE_IMAGPART (t1), TREE_IMAGPART (t2)));
2207 typecode = TREE_CODE (TREE_TYPE (t1));
2208 if (typecode != TREE_CODE (TREE_TYPE (t2)))
2211 if (typecode == SET_TYPE)
2213 int len = int_size_in_bytes (TREE_TYPE (t2));
2214 unsigned char *tmp1, *tmp2;
2216 if (int_size_in_bytes (TREE_TYPE (t1)) != len)
2219 tmp1 = alloca (len);
2220 tmp2 = alloca (len);
2222 if (get_set_constructor_bytes (t1, tmp1, len) != NULL_TREE)
2224 if (get_set_constructor_bytes (t2, tmp2, len) != NULL_TREE)
2227 return memcmp (tmp1, tmp2, len) == 0;
2233 if (typecode == ARRAY_TYPE)
2235 HOST_WIDE_INT size_1 = int_size_in_bytes (TREE_TYPE (t1));
2236 /* For arrays, check that the sizes all match. */
2237 if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
2239 || size_1 != int_size_in_bytes (TREE_TYPE (t2)))
2244 /* For record and union constructors, require exact type
2246 if (TREE_TYPE (t1) != TREE_TYPE (t2))
2250 for (l1 = CONSTRUCTOR_ELTS (t1), l2 = CONSTRUCTOR_ELTS (t2);
2252 l1 = TREE_CHAIN (l1), l2 = TREE_CHAIN (l2))
2254 /* Check that each value is the same... */
2255 if (! compare_constant (TREE_VALUE (l1), TREE_VALUE (l2)))
2257 /* ... and that they apply to the same fields! */
2258 if (typecode == ARRAY_TYPE)
2260 if (! compare_constant (TREE_PURPOSE (l1),
2266 if (TREE_PURPOSE (l1) != TREE_PURPOSE (l2))
2271 return l1 == NULL_TREE && l2 == NULL_TREE;
2277 struct addr_const value1, value2;
2279 decode_addr_const (t1, &value1);
2280 decode_addr_const (t2, &value2);
2281 return (value1.offset == value2.offset
2282 && strcmp (XSTR (value1.base, 0), XSTR (value2.base, 0)) == 0);
2288 return (compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
2289 && compare_constant(TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
2293 case NON_LVALUE_EXPR:
2294 return compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2299 nt1 = (*lang_hooks.expand_constant) (t1);
2300 nt2 = (*lang_hooks.expand_constant) (t2);
2301 if (nt1 != t1 || nt2 != t2)
2302 return compare_constant (nt1, nt2);
2308 /* Should not get here. */
2312 /* Make a copy of the whole tree structure for a constant. This
2313 handles the same types of nodes that compare_constant handles. */
2316 copy_constant (tree exp)
2318 switch (TREE_CODE (exp))
2321 /* For ADDR_EXPR, we do not want to copy the decl whose address
2322 is requested. We do want to copy constants though. */
2323 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, 0))) == 'c')
2324 return build1 (TREE_CODE (exp), TREE_TYPE (exp),
2325 copy_constant (TREE_OPERAND (exp, 0)));
2327 return copy_node (exp);
2332 return copy_node (exp);
2335 return build_complex (TREE_TYPE (exp),
2336 copy_constant (TREE_REALPART (exp)),
2337 copy_constant (TREE_IMAGPART (exp)));
2341 return build (TREE_CODE (exp), TREE_TYPE (exp),
2342 copy_constant (TREE_OPERAND (exp, 0)),
2343 copy_constant (TREE_OPERAND (exp, 1)));
2347 case NON_LVALUE_EXPR:
2348 case VIEW_CONVERT_EXPR:
2349 return build1 (TREE_CODE (exp), TREE_TYPE (exp),
2350 copy_constant (TREE_OPERAND (exp, 0)));
2354 tree copy = copy_node (exp);
2355 tree list = copy_list (CONSTRUCTOR_ELTS (exp));
2358 CONSTRUCTOR_ELTS (copy) = list;
2359 for (tail = list; tail; tail = TREE_CHAIN (tail))
2360 TREE_VALUE (tail) = copy_constant (TREE_VALUE (tail));
2361 if (TREE_CODE (TREE_TYPE (exp)) == SET_TYPE)
2362 for (tail = list; tail; tail = TREE_CHAIN (tail))
2363 TREE_PURPOSE (tail) = copy_constant (TREE_PURPOSE (tail));
2371 t = (*lang_hooks.expand_constant) (exp);
2373 return copy_constant (t);
2380 /* Subroutine of output_constant_def:
2381 No constant equal to EXP is known to have been output.
2382 Make a constant descriptor to enter EXP in the hash table.
2383 Assign the label number and construct RTL to refer to the
2384 constant's location in memory.
2385 Caller is responsible for updating the hash table. */
2387 static struct constant_descriptor_tree *
2388 build_constant_desc (tree exp)
2394 struct constant_descriptor_tree *desc;
2396 desc = ggc_alloc (sizeof (*desc));
2397 desc->value = copy_constant (exp);
2399 /* Create a string containing the label name, in LABEL. */
2400 labelno = const_labelno++;
2401 ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno);
2403 /* We have a symbol name; construct the SYMBOL_REF and the MEM. */
2404 symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
2405 SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2406 SYMBOL_REF_DECL (symbol) = desc->value;
2407 TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1;
2409 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), symbol);
2410 set_mem_attributes (rtl, exp, 1);
2411 set_mem_alias_set (rtl, 0);
2412 set_mem_alias_set (rtl, const_alias_set);
2414 /* Set flags or add text to the name to record information, such as
2415 that it is a local symbol. If the name is changed, the macro
2416 ASM_OUTPUT_LABELREF will have to know how to strip this
2417 information. This call might invalidate our local variable
2418 SYMBOL; we can't use it afterward. */
2420 (*targetm.encode_section_info) (exp, rtl, true);
2427 /* Return an rtx representing a reference to constant data in memory
2428 for the constant expression EXP.
2430 If assembler code for such a constant has already been output,
2431 return an rtx to refer to it.
2432 Otherwise, output such a constant in memory
2433 and generate an rtx for it.
2435 If DEFER is nonzero, this constant can be deferred and output only
2436 if referenced in the function after all optimizations.
2438 The const_hash_table records which constants already have label strings. */
2441 output_constant_def (tree exp, int defer)
2443 struct constant_descriptor_tree *desc;
2444 struct constant_descriptor_tree key;
2447 /* Look up EXP in the table of constant descriptors. If we didn't find
2448 it, create a new one. */
2450 loc = htab_find_slot (const_desc_htab, &key, INSERT);
2455 desc = build_constant_desc (exp);
2459 maybe_output_constant_def_contents (desc, defer);
2463 /* Subroutine of output_constant_def: Decide whether or not we need to
2464 output the constant DESC now, and if so, do it. */
2466 maybe_output_constant_def_contents (struct constant_descriptor_tree *desc,
2469 rtx symbol = XEXP (desc->rtl, 0);
2470 tree exp = desc->value;
2472 if (flag_syntax_only)
2475 if (TREE_ASM_WRITTEN (exp))
2476 /* Already output; don't do it again. */
2479 /* The only constants that cannot safely be deferred, assuming the
2480 context allows it, are strings under flag_writable_strings. */
2481 if (defer && (TREE_CODE (exp) != STRING_CST || !flag_writable_strings))
2483 /* Increment n_deferred_constants if it exists. It needs to be at
2484 least as large as the number of constants actually referred to
2485 by the function. If it's too small we'll stop looking too early
2486 and fail to emit constants; if it's too large we'll only look
2487 through the entire function when we could have stopped earlier. */
2489 n_deferred_constants++;
2493 output_constant_def_contents (symbol);
2496 /* We must output the constant data referred to by SYMBOL; do so. */
2499 output_constant_def_contents (rtx symbol)
2501 tree exp = SYMBOL_REF_DECL (symbol);
2502 const char *label = XSTR (symbol, 0);
2505 /* Make sure any other constants whose addresses appear in EXP
2506 are assigned label numbers. */
2507 int reloc = compute_reloc_for_constant (exp);
2509 /* Align the location counter as required by EXP's data type. */
2510 int align = TYPE_ALIGN (TREE_TYPE (exp));
2511 #ifdef CONSTANT_ALIGNMENT
2512 align = CONSTANT_ALIGNMENT (exp, align);
2515 output_addressed_constants (exp);
2517 /* We are no longer deferring this constant. */
2518 TREE_ASM_WRITTEN (exp) = 1;
2520 if (IN_NAMED_SECTION (exp))
2521 named_section (exp, NULL, reloc);
2523 (*targetm.asm_out.select_section) (exp, reloc, align);
2525 if (align > BITS_PER_UNIT)
2527 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
2530 size = int_size_in_bytes (TREE_TYPE (exp));
2531 if (TREE_CODE (exp) == STRING_CST)
2532 size = MAX (TREE_STRING_LENGTH (exp), size);
2534 /* Do any machine/system dependent processing of the constant. */
2535 #ifdef ASM_DECLARE_CONSTANT_NAME
2536 ASM_DECLARE_CONSTANT_NAME (asm_out_file, label, exp, size);
2538 /* Standard thing is just output label for the constant. */
2539 ASM_OUTPUT_LABEL (asm_out_file, label);
2540 #endif /* ASM_DECLARE_CONSTANT_NAME */
2542 /* Output the value of EXP. */
2543 output_constant (exp, size, align);
2546 /* A constant which was deferred in its original location has been
2547 inserted by the RTL inliner into a different function. The
2548 current function's deferred constant count must be incremented. */
2550 notice_rtl_inlining_of_deferred_constant (void)
2552 n_deferred_constants++;
2555 /* Look up EXP in the table of constant descriptors. Return the rtl
2556 if it has been emitted, else null. */
2559 lookup_constant_def (tree exp)
2561 struct constant_descriptor_tree *desc;
2562 struct constant_descriptor_tree key;
2565 desc = htab_find (const_desc_htab, &key);
2567 return (desc ? desc->rtl : NULL_RTX);
2570 /* Used in the hash tables to avoid outputting the same constant
2571 twice. Unlike 'struct constant_descriptor_tree', RTX constants
2572 are output once per function, not once per file; there seems
2573 to be no reason for the difference. */
2575 struct constant_descriptor_rtx GTY(())
2577 /* More constant_descriptors with the same hash code. */
2578 struct constant_descriptor_rtx *next;
2580 /* A MEM for the constant. */
2583 /* The value of the constant. */
2584 struct rtx_const value;
2587 /* Structure to represent sufficient information about a constant so that
2588 it can be output when the constant pool is output, so that function
2589 integration can be done, and to simplify handling on machines that reference
2590 constant pool as base+displacement. */
2592 struct pool_constant GTY(())
2594 struct constant_descriptor_rtx *desc;
2595 struct pool_constant *next;
2596 struct pool_constant *next_sym;
2598 enum machine_mode mode;
2601 HOST_WIDE_INT offset;
2605 /* Hash code for a SYMBOL_REF with CONSTANT_POOL_ADDRESS_P true.
2606 The argument is XSTR (... , 0) */
2608 #define SYMHASH(LABEL) (((unsigned long) (LABEL)) % MAX_RTX_HASH_TABLE)
2610 /* Initialize constant pool hashing for a new function. */
2613 init_varasm_status (struct function *f)
2615 struct varasm_status *p;
2616 p = ggc_alloc (sizeof (struct varasm_status));
2618 p->x_const_rtx_hash_table
2619 = ggc_alloc_cleared (MAX_RTX_HASH_TABLE
2620 * sizeof (struct constant_descriptor_rtx *));
2621 p->x_const_rtx_sym_hash_table
2622 = ggc_alloc_cleared (MAX_RTX_HASH_TABLE
2623 * sizeof (struct pool_constant *));
2625 p->x_first_pool = p->x_last_pool = 0;
2626 p->x_pool_offset = 0;
2627 p->deferred_constants = 0;
2631 /* Express an rtx for a constant integer (perhaps symbolic)
2632 as the sum of a symbol or label plus an explicit integer.
2633 They are stored into VALUE. */
2636 decode_rtx_const (enum machine_mode mode, rtx x, struct rtx_const *value)
2638 /* Clear the whole structure, including any gaps. */
2639 memset (value, 0, sizeof (struct rtx_const));
2641 value->kind = RTX_INT; /* Most usual kind. */
2644 switch (GET_CODE (x))
2647 value->kind = RTX_DOUBLE;
2648 if (GET_MODE (x) != VOIDmode)
2650 const REAL_VALUE_TYPE *r = CONST_DOUBLE_REAL_VALUE (x);
2652 value->mode = GET_MODE (x);
2654 /* Copy the REAL_VALUE_TYPE by members so that we don't
2655 copy garbage from the original structure into our
2656 carefully cleaned hashing structure. */
2657 value->un.du.class = r->class;
2658 value->un.du.sign = r->sign;
2665 value->un.du.exp = r->exp;
2668 memcpy (value->un.du.sig, r->sig, sizeof (r->sig));
2676 value->un.di.low = CONST_DOUBLE_LOW (x);
2677 value->un.di.high = CONST_DOUBLE_HIGH (x);
2685 units = CONST_VECTOR_NUNITS (x);
2686 value->kind = RTX_VECTOR;
2689 if (GET_MODE_CLASS (mode) == MODE_VECTOR_INT)
2691 for (i = 0; i < units; ++i)
2693 rtx elt = CONST_VECTOR_ELT (x, i);
2694 if (GET_CODE (elt) == CONST_INT)
2696 value->un.int_vec[i].low = INTVAL (elt);
2697 value->un.int_vec[i].high = 0;
2701 value->un.int_vec[i].low = CONST_DOUBLE_LOW (elt);
2702 value->un.int_vec[i].high = CONST_DOUBLE_HIGH (elt);
2706 else if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
2708 for (i = 0; i < units; ++i)
2710 const REAL_VALUE_TYPE *r
2711 = CONST_DOUBLE_REAL_VALUE (CONST_VECTOR_ELT (x, i));
2712 REAL_VALUE_TYPE *d = &value->un.fp_vec[i];
2714 /* Copy the REAL_VALUE_TYPE by members so that we don't
2715 copy garbage from the original structure into our
2716 carefully cleaned hashing structure. */
2717 d->class = r->class;
2728 memcpy (d->sig, r->sig, sizeof (r->sig));
2741 value->un.addr.offset = INTVAL (x);
2747 value->un.addr.base = x;
2752 if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT)
2754 value->un.addr.base = XEXP (x, 0);
2755 value->un.addr.offset = INTVAL (XEXP (x, 1));
2757 else if (GET_CODE (x) == MINUS && GET_CODE (XEXP (x, 1)) == CONST_INT)
2759 value->un.addr.base = XEXP (x, 0);
2760 value->un.addr.offset = - INTVAL (XEXP (x, 1));
2764 value->un.addr.base = x;
2765 value->un.addr.offset = 0;
2770 value->kind = RTX_UNKNOWN;
2774 if (value->kind == RTX_INT && value->un.addr.base != 0
2775 && GET_CODE (value->un.addr.base) == UNSPEC)
2777 /* For a simple UNSPEC, the base is set to the
2778 operand, the kind field is set to the index of
2779 the unspec expression.
2780 Together with the code below, in case that
2781 the operand is a SYMBOL_REF or LABEL_REF,
2782 the address of the string or the code_label
2783 is taken as base. */
2784 if (XVECLEN (value->un.addr.base, 0) == 1)
2786 value->kind = RTX_UNSPEC + XINT (value->un.addr.base, 1);
2787 value->un.addr.base = XVECEXP (value->un.addr.base, 0, 0);
2791 if (value->kind >= RTX_INT && value->un.addr.base != 0)
2792 switch (GET_CODE (value->un.addr.base))
2795 /* Use the string's address, not the SYMBOL_REF's address,
2796 for the sake of addresses of library routines. */
2797 value->un.addr.symbol = XSTR (value->un.addr.base, 0);
2798 value->un.addr.base = NULL_RTX;
2802 /* For a LABEL_REF, compare labels. */
2803 value->un.addr.base = XEXP (value->un.addr.base, 0);
2810 /* Given a MINUS expression, simplify it if both sides
2811 include the same symbol. */
2814 simplify_subtraction (rtx x)
2816 struct rtx_const val0, val1;
2818 decode_rtx_const (GET_MODE (x), XEXP (x, 0), &val0);
2819 decode_rtx_const (GET_MODE (x), XEXP (x, 1), &val1);
2821 if (val0.kind >= RTX_INT
2822 && val0.kind == val1.kind
2823 && val0.un.addr.base == val1.un.addr.base
2824 && val0.un.addr.symbol == val1.un.addr.symbol)
2825 return GEN_INT (val0.un.addr.offset - val1.un.addr.offset);
2830 /* Compute a hash code for a constant RTL expression. */
2833 const_hash_rtx (enum machine_mode mode, rtx x)
2836 struct rtx_const value;
2837 unsigned int data[sizeof(struct rtx_const) / sizeof (unsigned int)];
2843 decode_rtx_const (mode, x, &u.value);
2845 /* Compute hashing function. */
2847 for (i = 0; i < ARRAY_SIZE (u.data); i++)
2848 hi = hi * 613 + u.data[i];
2850 return hi % MAX_RTX_HASH_TABLE;
2853 /* Compare a constant rtl object X with a constant-descriptor DESC.
2854 Return 1 if DESC describes a constant with the same value as X. */
2857 compare_constant_rtx (enum machine_mode mode, rtx x,
2858 struct constant_descriptor_rtx *desc)
2860 struct rtx_const value;
2862 decode_rtx_const (mode, x, &value);
2864 /* Compare constant contents. */
2865 return memcmp (&value, &desc->value, sizeof (struct rtx_const)) == 0;
2868 /* Construct a constant descriptor for the rtl-expression X.
2869 It is up to the caller to enter the descriptor in the hash table. */
2871 static struct constant_descriptor_rtx *
2872 record_constant_rtx (enum machine_mode mode, rtx x)
2874 struct constant_descriptor_rtx *ptr;
2876 ptr = ggc_alloc (sizeof (*ptr));
2877 decode_rtx_const (mode, x, &ptr->value);
2882 /* Given a constant rtx X, make (or find) a memory constant for its value
2883 and return a MEM rtx to refer to it in memory. */
2886 force_const_mem (enum machine_mode mode, rtx x)
2889 struct constant_descriptor_rtx *desc;
2892 struct pool_constant *pool;
2895 /* If we're not allowed to drop X into the constant pool, don't. */
2896 if ((*targetm.cannot_force_const_mem) (x))
2899 /* Compute hash code of X. Search the descriptors for that hash code
2900 to see if any of them describes X. If yes, we have an rtx to use. */
2901 hash = const_hash_rtx (mode, x);
2902 for (desc = const_rtx_hash_table[hash]; desc; desc = desc->next)
2903 if (compare_constant_rtx (mode, x, desc))
2906 /* No constant equal to X is known to have been output.
2907 Make a constant descriptor to enter X in the hash table
2908 and make a MEM for it. */
2909 desc = record_constant_rtx (mode, x);
2910 desc->next = const_rtx_hash_table[hash];
2911 const_rtx_hash_table[hash] = desc;
2913 /* Align the location counter as required by EXP's data type. */
2914 align = GET_MODE_ALIGNMENT (mode == VOIDmode ? word_mode : mode);
2915 #ifdef CONSTANT_ALIGNMENT
2917 tree type = (*lang_hooks.types.type_for_mode) (mode, 0);
2918 if (type != NULL_TREE)
2919 align = CONSTANT_ALIGNMENT (make_tree (type, x), align);
2923 pool_offset += (align / BITS_PER_UNIT) - 1;
2924 pool_offset &= ~ ((align / BITS_PER_UNIT) - 1);
2926 if (GET_CODE (x) == LABEL_REF)
2927 LABEL_PRESERVE_P (XEXP (x, 0)) = 1;
2929 /* Allocate a pool constant descriptor, fill it in, and chain it in. */
2930 pool = ggc_alloc (sizeof (struct pool_constant));
2934 pool->labelno = const_labelno;
2935 pool->align = align;
2936 pool->offset = pool_offset;
2943 last_pool->next = pool;
2946 pool_offset += GET_MODE_SIZE (mode);
2948 /* Create a string containing the label name, in LABEL. */
2949 ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno);
2953 /* Construct the SYMBOL_REF and the MEM. */
2955 symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
2956 SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2958 pool->desc->rtl = def = gen_rtx_MEM (mode, symbol);
2959 set_mem_attributes (def, (*lang_hooks.types.type_for_mode) (mode, 0), 1);
2960 RTX_UNCHANGING_P (def) = 1;
2962 /* Add label to symbol hash table. */
2963 hash = SYMHASH (XSTR (symbol, 0));
2964 pool->next_sym = const_rtx_sym_hash_table[hash];
2965 const_rtx_sym_hash_table[hash] = pool;
2967 /* Mark the symbol_ref as belonging to this constants pool. */
2968 CONSTANT_POOL_ADDRESS_P (symbol) = 1;
2969 SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2970 current_function_uses_const_pool = 1;
2975 /* Given a SYMBOL_REF with CONSTANT_POOL_ADDRESS_P true, return a pointer to
2976 the corresponding pool_constant structure. */
2978 static struct pool_constant *
2979 find_pool_constant (struct function *f, rtx addr)
2981 struct pool_constant *pool;
2982 const char *label = XSTR (addr, 0);
2984 for (pool = f->varasm->x_const_rtx_sym_hash_table[SYMHASH (label)]; pool;
2985 pool = pool->next_sym)
2986 if (XSTR (XEXP (pool->desc->rtl, 0), 0) == label)
2992 /* Given a constant pool SYMBOL_REF, return the corresponding constant. */
2995 get_pool_constant (rtx addr)
2997 return (find_pool_constant (cfun, addr))->constant;
3000 /* Given a constant pool SYMBOL_REF, return the corresponding constant
3001 and whether it has been output or not. */
3004 get_pool_constant_mark (rtx addr, bool *pmarked)
3006 struct pool_constant *pool = find_pool_constant (cfun, addr);
3007 *pmarked = (pool->mark != 0);
3008 return pool->constant;
3011 /* Likewise, but for the constant pool of a specific function. */
3014 get_pool_constant_for_function (struct function *f, rtx addr)
3016 return (find_pool_constant (f, addr))->constant;
3019 /* Similar, return the mode. */
3022 get_pool_mode (rtx addr)
3024 return (find_pool_constant (cfun, addr))->mode;
3028 get_pool_mode_for_function (struct function *f, rtx addr)
3030 return (find_pool_constant (f, addr))->mode;
3033 /* Similar, return the offset in the constant pool. */
3036 get_pool_offset (rtx addr)
3038 return (find_pool_constant (cfun, addr))->offset;
3041 /* Return the size of the constant pool. */
3044 get_pool_size (void)
3049 /* Write all the constants in the constant pool. */
3052 output_constant_pool (const char *fnname ATTRIBUTE_UNUSED,
3053 tree fndecl ATTRIBUTE_UNUSED)
3055 struct pool_constant *pool;
3059 /* It is possible for gcc to call force_const_mem and then to later
3060 discard the instructions which refer to the constant. In such a
3061 case we do not need to output the constant. */
3062 mark_constant_pool ();
3064 #ifdef ASM_OUTPUT_POOL_PROLOGUE
3065 ASM_OUTPUT_POOL_PROLOGUE (asm_out_file, fnname, fndecl, pool_offset);
3068 for (pool = first_pool; pool; pool = pool->next)
3077 /* See if X is a LABEL_REF (or a CONST referring to a LABEL_REF)
3078 whose CODE_LABEL has been deleted. This can occur if a jump table
3079 is eliminated by optimization. If so, write a constant of zero
3080 instead. Note that this can also happen by turning the
3081 CODE_LABEL into a NOTE. */
3082 /* ??? This seems completely and utterly wrong. Certainly it's
3083 not true for NOTE_INSN_DELETED_LABEL, but I disbelieve proper
3084 functioning even with INSN_DELETED_P and friends. */
3087 switch (GET_CODE (x))
3090 if (GET_CODE (XEXP (x, 0)) != PLUS
3091 || GET_CODE (XEXP (XEXP (x, 0), 0)) != LABEL_REF)
3093 tmp = XEXP (XEXP (x, 0), 0);
3098 if (INSN_DELETED_P (tmp)
3099 || (GET_CODE (tmp) == NOTE
3100 && NOTE_LINE_NUMBER (tmp) == NOTE_INSN_DELETED))
3111 /* First switch to correct section. */
3112 (*targetm.asm_out.select_rtx_section) (pool->mode, x, pool->align);
3114 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3115 ASM_OUTPUT_SPECIAL_POOL_ENTRY (asm_out_file, x, pool->mode,
3116 pool->align, pool->labelno, done);
3119 assemble_align (pool->align);
3121 /* Output the label. */
3122 (*targetm.asm_out.internal_label) (asm_out_file, "LC", pool->labelno);
3124 /* Output the value of the constant itself. */
3125 switch (GET_MODE_CLASS (pool->mode))
3128 if (GET_CODE (x) != CONST_DOUBLE)
3131 REAL_VALUE_FROM_CONST_DOUBLE (r, x);
3132 assemble_real (r, pool->mode, pool->align);
3136 case MODE_PARTIAL_INT:
3137 assemble_integer (x, GET_MODE_SIZE (pool->mode), pool->align, 1);
3140 case MODE_VECTOR_FLOAT:
3145 if (GET_CODE (x) != CONST_VECTOR)
3148 units = CONST_VECTOR_NUNITS (x);
3150 for (i = 0; i < units; i++)
3152 elt = CONST_VECTOR_ELT (x, i);
3153 REAL_VALUE_FROM_CONST_DOUBLE (r, elt);
3154 assemble_real (r, GET_MODE_INNER (pool->mode), pool->align);
3159 case MODE_VECTOR_INT:
3164 if (GET_CODE (x) != CONST_VECTOR)
3167 units = CONST_VECTOR_NUNITS (x);
3169 for (i = 0; i < units; i++)
3171 elt = CONST_VECTOR_ELT (x, i);
3172 assemble_integer (elt, GET_MODE_UNIT_SIZE (pool->mode),
3182 /* Make sure all constants in SECTION_MERGE and not SECTION_STRINGS
3183 sections have proper size. */
3184 if (pool->align > GET_MODE_BITSIZE (pool->mode)
3185 && in_section == in_named
3186 && get_named_section_flags (in_named_name) & SECTION_MERGE)
3187 assemble_align (pool->align);
3189 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3194 #ifdef ASM_OUTPUT_POOL_EPILOGUE
3195 ASM_OUTPUT_POOL_EPILOGUE (asm_out_file, fnname, fndecl, pool_offset);
3198 /* Done with this pool. */
3199 first_pool = last_pool = 0;
3202 /* Look through the instructions for this function, and mark all the
3203 entries in the constant pool which are actually being used. Emit
3204 deferred constants which have indeed been used. */
3207 mark_constant_pool (void)
3211 struct pool_constant *pool;
3213 if (first_pool == 0 && n_deferred_constants == 0)
3216 for (pool = first_pool; pool; pool = pool->next)
3219 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3221 mark_constants (PATTERN (insn));
3223 for (link = current_function_epilogue_delay_list;
3225 link = XEXP (link, 1))
3227 insn = XEXP (link, 0);
3230 mark_constants (PATTERN (insn));
3234 /* Look through appropriate parts of X, marking all entries in the
3235 constant pool which are actually being used. Entries that are only
3236 referenced by other constants are also marked as used. Emit
3237 deferred strings that are used. */
3240 mark_constants (rtx x)
3243 const char *format_ptr;
3248 if (GET_CODE (x) == SYMBOL_REF)
3250 mark_constant (&x, NULL);
3254 /* Insns may appear inside a SEQUENCE. Only check the patterns of
3255 insns, not any notes that may be attached. We don't want to mark
3256 a constant just because it happens to appear in a REG_EQUIV note. */
3259 mark_constants (PATTERN (x));
3263 format_ptr = GET_RTX_FORMAT (GET_CODE (x));
3265 for (i = 0; i < GET_RTX_LENGTH (GET_CODE (x)); i++)
3267 switch (*format_ptr++)
3270 mark_constants (XEXP (x, i));
3274 if (XVEC (x, i) != 0)
3278 for (j = 0; j < XVECLEN (x, i); j++)
3279 mark_constants (XVECEXP (x, i, j));
3299 /* Given a SYMBOL_REF CURRENT_RTX, mark it and all constants it refers
3300 to as used. Emit referenced deferred strings. This function can
3301 be used with for_each_rtx to mark all SYMBOL_REFs in an rtx. */
3304 mark_constant (rtx *current_rtx, void *data ATTRIBUTE_UNUSED)
3306 rtx x = *current_rtx;
3311 else if (GET_CODE (x) == SYMBOL_REF)
3313 if (CONSTANT_POOL_ADDRESS_P (x))
3315 struct pool_constant *pool = find_pool_constant (cfun, x);
3316 if (pool->mark == 0)
3319 for_each_rtx (&(pool->constant), &mark_constant, NULL);
3324 else if (TREE_CONSTANT_POOL_ADDRESS_P (x))
3326 tree exp = SYMBOL_REF_DECL (x);
3327 if (!TREE_ASM_WRITTEN (exp))
3329 n_deferred_constants--;
3330 output_constant_def_contents (x);
3337 /* Determine what kind of relocations EXP may need. */
3340 compute_reloc_for_constant (tree exp)
3342 int reloc = 0, reloc2;
3345 /* Give the front-end a chance to convert VALUE to something that
3346 looks more like a constant to the back-end. */
3347 exp = (*lang_hooks.expand_constant) (exp);
3349 switch (TREE_CODE (exp))
3353 /* Go inside any operations that get_inner_reference can handle and see
3354 if what's inside is a constant: no need to do anything here for
3355 addresses of variables or functions. */
3356 for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3357 tem = TREE_OPERAND (tem, 0))
3360 if (TREE_PUBLIC (tem))
3367 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3368 reloc |= compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3372 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3373 reloc2 = compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3374 /* The difference of two local labels is computable at link time. */
3375 if (reloc == 1 && reloc2 == 1)
3383 case NON_LVALUE_EXPR:
3384 reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3388 for (tem = CONSTRUCTOR_ELTS (exp); tem; tem = TREE_CHAIN (tem))
3389 if (TREE_VALUE (tem) != 0)
3390 reloc |= compute_reloc_for_constant (TREE_VALUE (tem));
3400 /* Find all the constants whose addresses are referenced inside of EXP,
3401 and make sure assembler code with a label has been output for each one.
3402 Indicate whether an ADDR_EXPR has been encountered. */
3405 output_addressed_constants (tree exp)
3409 /* Give the front-end a chance to convert VALUE to something that
3410 looks more like a constant to the back-end. */
3411 exp = (*lang_hooks.expand_constant) (exp);
3413 switch (TREE_CODE (exp))
3417 /* Go inside any operations that get_inner_reference can handle and see
3418 if what's inside is a constant: no need to do anything here for
3419 addresses of variables or functions. */
3420 for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3421 tem = TREE_OPERAND (tem, 0))
3424 if (TREE_CODE_CLASS (TREE_CODE (tem)) == 'c'
3425 || TREE_CODE (tem) == CONSTRUCTOR)
3426 output_constant_def (tem, 0);
3431 output_addressed_constants (TREE_OPERAND (exp, 1));
3436 case NON_LVALUE_EXPR:
3437 output_addressed_constants (TREE_OPERAND (exp, 0));
3441 for (tem = CONSTRUCTOR_ELTS (exp); tem; tem = TREE_CHAIN (tem))
3442 if (TREE_VALUE (tem) != 0)
3443 output_addressed_constants (TREE_VALUE (tem));
3452 /* Return nonzero if VALUE is a valid constant-valued expression
3453 for use in initializing a static variable; one that can be an
3454 element of a "constant" initializer.
3456 Return null_pointer_node if the value is absolute;
3457 if it is relocatable, return the variable that determines the relocation.
3458 We assume that VALUE has been folded as much as possible;
3459 therefore, we do not need to check for such things as
3460 arithmetic-combinations of integers. */
3463 initializer_constant_valid_p (tree value, tree endtype)
3465 /* Give the front-end a chance to convert VALUE to something that
3466 looks more like a constant to the back-end. */
3467 value = (*lang_hooks.expand_constant) (value);
3469 switch (TREE_CODE (value))
3472 if ((TREE_CODE (TREE_TYPE (value)) == UNION_TYPE
3473 || TREE_CODE (TREE_TYPE (value)) == RECORD_TYPE)
3474 && TREE_CONSTANT (value)
3475 && CONSTRUCTOR_ELTS (value))
3478 bool absolute = true;
3480 for (elt = CONSTRUCTOR_ELTS (value); elt; elt = TREE_CHAIN (elt))
3483 value = TREE_VALUE (elt);
3484 reloc = initializer_constant_valid_p (value, TREE_TYPE (value));
3487 if (reloc != null_pointer_node)
3490 /* For a non-absolute relocation, there is no single
3491 variable that can be "the variable that determines the
3493 return absolute ? null_pointer_node : error_mark_node;
3496 return TREE_STATIC (value) ? null_pointer_node : NULL_TREE;
3503 return null_pointer_node;
3507 return staticp (TREE_OPERAND (value, 0)) ? TREE_OPERAND (value, 0) : 0;
3509 case VIEW_CONVERT_EXPR:
3510 case NON_LVALUE_EXPR:
3511 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3515 /* Allow conversions between pointer types. */
3516 if (POINTER_TYPE_P (TREE_TYPE (value))
3517 && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3518 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3520 /* Allow conversions between real types. */
3521 if (FLOAT_TYPE_P (TREE_TYPE (value))
3522 && FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3523 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3525 /* Allow length-preserving conversions between integer types. */
3526 if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3527 && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
3528 && (TYPE_PRECISION (TREE_TYPE (value))
3529 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
3530 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3532 /* Allow conversions between other integer types only if
3534 if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3535 && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3537 tree inner = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3539 if (inner == null_pointer_node)
3540 return null_pointer_node;
3544 /* Allow (int) &foo provided int is as wide as a pointer. */
3545 if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3546 && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
3547 && (TYPE_PRECISION (TREE_TYPE (value))
3548 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
3549 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3552 /* Likewise conversions from int to pointers, but also allow
3553 conversions from 0. */
3554 if (POINTER_TYPE_P (TREE_TYPE (value))
3555 && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3557 if (integer_zerop (TREE_OPERAND (value, 0)))
3558 return null_pointer_node;
3559 else if (TYPE_PRECISION (TREE_TYPE (value))
3560 <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0))))
3561 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3565 /* Allow conversions to union types if the value inside is okay. */
3566 if (TREE_CODE (TREE_TYPE (value)) == UNION_TYPE)
3567 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3572 if (! INTEGRAL_TYPE_P (endtype)
3573 || TYPE_PRECISION (endtype) >= POINTER_SIZE)
3575 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3577 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
3579 /* If either term is absolute, use the other terms relocation. */
3580 if (valid0 == null_pointer_node)
3582 if (valid1 == null_pointer_node)
3588 if (! INTEGRAL_TYPE_P (endtype)
3589 || TYPE_PRECISION (endtype) >= POINTER_SIZE)
3591 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3593 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
3595 /* Win if second argument is absolute. */
3596 if (valid1 == null_pointer_node)
3598 /* Win if both arguments have the same relocation.
3599 Then the value is absolute. */
3600 if (valid0 == valid1 && valid0 != 0)
3601 return null_pointer_node;
3603 /* Since GCC guarantees that string constants are unique in the
3604 generated code, a subtraction between two copies of the same
3605 constant string is absolute. */
3606 if (valid0 && TREE_CODE (valid0) == STRING_CST &&
3607 valid1 && TREE_CODE (valid1) == STRING_CST &&
3608 TREE_STRING_POINTER (valid0) == TREE_STRING_POINTER (valid1))
3609 return null_pointer_node;
3612 /* Support differences between labels. */
3613 if (INTEGRAL_TYPE_P (endtype))
3616 op0 = TREE_OPERAND (value, 0);
3617 op1 = TREE_OPERAND (value, 1);
3619 /* Like STRIP_NOPS except allow the operand mode to widen.
3620 This works around a feature of fold that simplifies
3621 (int)(p1 - p2) to ((int)p1 - (int)p2) under the theory
3622 that the narrower operation is cheaper. */
3624 while (TREE_CODE (op0) == NOP_EXPR
3625 || TREE_CODE (op0) == CONVERT_EXPR
3626 || TREE_CODE (op0) == NON_LVALUE_EXPR)
3628 tree inner = TREE_OPERAND (op0, 0);
3629 if (inner == error_mark_node
3630 || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
3631 || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0)))
3632 > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
3637 while (TREE_CODE (op1) == NOP_EXPR
3638 || TREE_CODE (op1) == CONVERT_EXPR
3639 || TREE_CODE (op1) == NON_LVALUE_EXPR)
3641 tree inner = TREE_OPERAND (op1, 0);
3642 if (inner == error_mark_node
3643 || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
3644 || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1)))
3645 > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
3650 if (TREE_CODE (op0) == ADDR_EXPR
3651 && TREE_CODE (TREE_OPERAND (op0, 0)) == LABEL_DECL
3652 && TREE_CODE (op1) == ADDR_EXPR
3653 && TREE_CODE (TREE_OPERAND (op1, 0)) == LABEL_DECL)
3654 return null_pointer_node;
3665 /* Output assembler code for constant EXP to FILE, with no label.
3666 This includes the pseudo-op such as ".int" or ".byte", and a newline.
3667 Assumes output_addressed_constants has been done on EXP already.
3669 Generate exactly SIZE bytes of assembler data, padding at the end
3670 with zeros if necessary. SIZE must always be specified.
3672 SIZE is important for structure constructors,
3673 since trailing members may have been omitted from the constructor.
3674 It is also important for initialization of arrays from string constants
3675 since the full length of the string constant might not be wanted.
3676 It is also needed for initialization of unions, where the initializer's
3677 type is just one member, and that may not be as long as the union.
3679 There a case in which we would fail to output exactly SIZE bytes:
3680 for a structure constructor that wants to produce more than SIZE bytes.
3681 But such constructors will never be generated for any possible input.
3683 ALIGN is the alignment of the data in bits. */
3686 output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align)
3688 enum tree_code code;
3689 unsigned HOST_WIDE_INT thissize;
3691 /* Some front-ends use constants other than the standard language-independent
3692 varieties, but which may still be output directly. Give the front-end a
3693 chance to convert EXP to a language-independent representation. */
3694 exp = (*lang_hooks.expand_constant) (exp);
3696 if (size == 0 || flag_syntax_only)
3699 /* Eliminate any conversions since we'll be outputting the underlying
3701 while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
3702 || TREE_CODE (exp) == NON_LVALUE_EXPR
3703 || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
3704 exp = TREE_OPERAND (exp, 0);
3706 code = TREE_CODE (TREE_TYPE (exp));
3707 thissize = int_size_in_bytes (TREE_TYPE (exp));
3709 /* Allow a constructor with no elements for any data type.
3710 This means to fill the space with zeros. */
3711 if (TREE_CODE (exp) == CONSTRUCTOR && CONSTRUCTOR_ELTS (exp) == 0)
3713 assemble_zeros (size);
3717 if (TREE_CODE (exp) == FDESC_EXPR)
3719 #ifdef ASM_OUTPUT_FDESC
3720 HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0);
3721 tree decl = TREE_OPERAND (exp, 0);
3722 ASM_OUTPUT_FDESC (asm_out_file, decl, part);
3729 /* Now output the underlying data. If we've handling the padding, return.
3730 Otherwise, break and ensure THISSIZE is the size written. */
3738 case REFERENCE_TYPE:
3740 if (! assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode,
3741 EXPAND_INITIALIZER),
3743 error ("initializer for integer value is too complicated");
3747 if (TREE_CODE (exp) != REAL_CST)
3748 error ("initializer for floating value is not a floating constant");
3750 assemble_real (TREE_REAL_CST (exp),
3751 mode_for_size (size * BITS_PER_UNIT, MODE_FLOAT, 0),
3756 output_constant (TREE_REALPART (exp), thissize / 2, align);
3757 output_constant (TREE_IMAGPART (exp), thissize / 2,
3758 min_align (align, BITS_PER_UNIT * (thissize / 2)));
3763 if (TREE_CODE (exp) == CONSTRUCTOR)
3765 output_constructor (exp, size, align);
3768 else if (TREE_CODE (exp) == STRING_CST)
3770 thissize = MIN ((unsigned HOST_WIDE_INT)TREE_STRING_LENGTH (exp),
3772 assemble_string (TREE_STRING_POINTER (exp), thissize);
3774 else if (TREE_CODE (exp) == VECTOR_CST)
3778 unsigned int nalign;
3779 enum machine_mode inner;
3781 inner = GET_MODE_INNER (TYPE_MODE (TREE_TYPE (exp)));
3782 nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
3784 elt_size = GET_MODE_UNIT_SIZE (TYPE_MODE (TREE_TYPE (exp)));
3786 link = TREE_VECTOR_CST_ELTS (exp);
3787 output_constant (TREE_VALUE (link), elt_size, align);
3788 while ((link = TREE_CHAIN (link)) != NULL)
3789 output_constant (TREE_VALUE (link), elt_size, nalign);
3797 if (TREE_CODE (exp) == CONSTRUCTOR)
3798 output_constructor (exp, size, align);
3804 if (TREE_CODE (exp) == INTEGER_CST)
3805 assemble_integer (expand_expr (exp, NULL_RTX,
3806 VOIDmode, EXPAND_INITIALIZER),
3807 thissize, align, 1);
3808 else if (TREE_CODE (exp) == CONSTRUCTOR)
3810 unsigned char *buffer = alloca (thissize);
3811 if (get_set_constructor_bytes (exp, buffer, thissize))
3813 assemble_string ((char *) buffer, thissize);
3816 error ("unknown set constructor type");
3826 if (size > thissize)
3827 assemble_zeros (size - thissize);
3831 /* Subroutine of output_constructor, used for computing the size of
3832 arrays of unspecified length. VAL must be a CONSTRUCTOR of an array
3833 type with an unspecified upper bound. */
3835 static unsigned HOST_WIDE_INT
3836 array_size_for_constructor (tree val)
3840 /* This code used to attempt to handle string constants that are not
3841 arrays of single-bytes, but nothing else does, so there's no point in
3843 if (TREE_CODE (val) == STRING_CST)
3844 return TREE_STRING_LENGTH (val);
3846 max_index = NULL_TREE;
3847 for (i = CONSTRUCTOR_ELTS (val); i; i = TREE_CHAIN (i))
3849 tree index = TREE_PURPOSE (i);
3851 if (TREE_CODE (index) == RANGE_EXPR)
3852 index = TREE_OPERAND (index, 1);
3853 if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
3857 if (max_index == NULL_TREE)
3860 /* Compute the total number of array elements. */
3861 i = size_binop (MINUS_EXPR, convert (sizetype, max_index),
3863 TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)))));
3864 i = size_binop (PLUS_EXPR, i, convert (sizetype, integer_one_node));
3866 /* Multiply by the array element unit size to find number of bytes. */
3867 i = size_binop (MULT_EXPR, i, TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (val))));
3869 return tree_low_cst (i, 1);
3872 /* Subroutine of output_constant, used for CONSTRUCTORs (aggregate constants).
3873 Generate at least SIZE bytes, padding if necessary. */
3876 output_constructor (tree exp, unsigned HOST_WIDE_INT size,
3879 tree type = TREE_TYPE (exp);
3880 tree link, field = 0;
3882 /* Number of bytes output or skipped so far.
3883 In other words, current position within the constructor. */
3884 HOST_WIDE_INT total_bytes = 0;
3885 /* Nonzero means BYTE contains part of a byte, to be output. */
3886 int byte_buffer_in_use = 0;
3889 if (HOST_BITS_PER_WIDE_INT < BITS_PER_UNIT)
3892 if (TREE_CODE (type) == RECORD_TYPE)
3893 field = TYPE_FIELDS (type);
3895 if (TREE_CODE (type) == ARRAY_TYPE
3896 && TYPE_DOMAIN (type) != 0)
3897 min_index = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
3899 /* As LINK goes through the elements of the constant,
3900 FIELD goes through the structure fields, if the constant is a structure.
3901 if the constant is a union, then we override this,
3902 by getting the field from the TREE_LIST element.
3903 But the constant could also be an array. Then FIELD is zero.
3905 There is always a maximum of one element in the chain LINK for unions
3906 (even if the initializer in a source program incorrectly contains
3908 for (link = CONSTRUCTOR_ELTS (exp);
3910 link = TREE_CHAIN (link),
3911 field = field ? TREE_CHAIN (field) : 0)
3913 tree val = TREE_VALUE (link);
3916 /* The element in a union constructor specifies the proper field
3918 if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
3919 || TREE_CODE (type) == QUAL_UNION_TYPE)
3920 && TREE_PURPOSE (link) != 0)
3921 field = TREE_PURPOSE (link);
3923 else if (TREE_CODE (type) == ARRAY_TYPE)
3924 index = TREE_PURPOSE (link);
3926 /* Eliminate the marker that makes a cast not be an lvalue. */
3930 if (index && TREE_CODE (index) == RANGE_EXPR)
3932 unsigned HOST_WIDE_INT fieldsize
3933 = int_size_in_bytes (TREE_TYPE (type));
3934 HOST_WIDE_INT lo_index = tree_low_cst (TREE_OPERAND (index, 0), 0);
3935 HOST_WIDE_INT hi_index = tree_low_cst (TREE_OPERAND (index, 1), 0);
3936 HOST_WIDE_INT index;
3937 unsigned int align2 = min_align (align, fieldsize * BITS_PER_UNIT);
3939 for (index = lo_index; index <= hi_index; index++)
3941 /* Output the element's initial value. */
3943 assemble_zeros (fieldsize);
3945 output_constant (val, fieldsize, align2);
3947 /* Count its size. */
3948 total_bytes += fieldsize;
3951 else if (field == 0 || !DECL_BIT_FIELD (field))
3953 /* An element that is not a bit-field. */
3955 unsigned HOST_WIDE_INT fieldsize;
3956 /* Since this structure is static,
3957 we know the positions are constant. */
3958 HOST_WIDE_INT pos = field ? int_byte_position (field) : 0;
3959 unsigned int align2;
3962 pos = (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (val)), 1)
3963 * (tree_low_cst (index, 0) - tree_low_cst (min_index, 0)));
3965 /* Output any buffered-up bit-fields preceding this element. */
3966 if (byte_buffer_in_use)
3968 assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
3970 byte_buffer_in_use = 0;
3973 /* Advance to offset of this element.
3974 Note no alignment needed in an array, since that is guaranteed
3975 if each element has the proper size. */
3976 if ((field != 0 || index != 0) && pos != total_bytes)
3978 assemble_zeros (pos - total_bytes);
3982 /* Find the alignment of this element. */
3983 align2 = min_align (align, BITS_PER_UNIT * pos);
3985 /* Determine size this element should occupy. */
3990 /* If this is an array with an unspecified upper bound,
3991 the initializer determines the size. */
3992 /* ??? This ought to only checked if DECL_SIZE_UNIT is NULL,
3993 but we cannot do this until the deprecated support for
3994 initializing zero-length array members is removed. */
3995 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
3996 && TYPE_DOMAIN (TREE_TYPE (field))
3997 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
3999 fieldsize = array_size_for_constructor (val);
4000 /* Given a non-empty initialization, this field had
4002 if (fieldsize != 0 && TREE_CHAIN (field) != NULL_TREE)
4005 else if (DECL_SIZE_UNIT (field))
4007 /* ??? This can't be right. If the decl size overflows
4008 a host integer we will silently emit no data. */
4009 if (host_integerp (DECL_SIZE_UNIT (field), 1))
4010 fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 1);
4014 fieldsize = int_size_in_bytes (TREE_TYPE (type));
4016 /* Output the element's initial value. */
4018 assemble_zeros (fieldsize);
4020 output_constant (val, fieldsize, align2);
4022 /* Count its size. */
4023 total_bytes += fieldsize;
4025 else if (val != 0 && TREE_CODE (val) != INTEGER_CST)
4026 error ("invalid initial value for member `%s'",
4027 IDENTIFIER_POINTER (DECL_NAME (field)));
4030 /* Element that is a bit-field. */
4032 HOST_WIDE_INT next_offset = int_bit_position (field);
4033 HOST_WIDE_INT end_offset
4034 = (next_offset + tree_low_cst (DECL_SIZE (field), 1));
4037 val = integer_zero_node;
4039 /* If this field does not start in this (or, next) byte,
4041 if (next_offset / BITS_PER_UNIT != total_bytes)
4043 /* Output remnant of any bit field in previous bytes. */
4044 if (byte_buffer_in_use)
4046 assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4048 byte_buffer_in_use = 0;
4051 /* If still not at proper byte, advance to there. */
4052 if (next_offset / BITS_PER_UNIT != total_bytes)
4054 assemble_zeros (next_offset / BITS_PER_UNIT - total_bytes);
4055 total_bytes = next_offset / BITS_PER_UNIT;
4059 if (! byte_buffer_in_use)
4062 /* We must split the element into pieces that fall within
4063 separate bytes, and combine each byte with previous or
4064 following bit-fields. */
4066 /* next_offset is the offset n fbits from the beginning of
4067 the structure to the next bit of this element to be processed.
4068 end_offset is the offset of the first bit past the end of
4070 while (next_offset < end_offset)
4074 HOST_WIDE_INT value;
4075 HOST_WIDE_INT next_byte = next_offset / BITS_PER_UNIT;
4076 HOST_WIDE_INT next_bit = next_offset % BITS_PER_UNIT;
4078 /* Advance from byte to byte
4079 within this element when necessary. */
4080 while (next_byte != total_bytes)
4082 assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4087 /* Number of bits we can process at once
4088 (all part of the same byte). */
4089 this_time = MIN (end_offset - next_offset,
4090 BITS_PER_UNIT - next_bit);
4091 if (BYTES_BIG_ENDIAN)
4093 /* On big-endian machine, take the most significant bits
4094 first (of the bits that are significant)
4095 and put them into bytes from the most significant end. */
4096 shift = end_offset - next_offset - this_time;
4098 /* Don't try to take a bunch of bits that cross
4099 the word boundary in the INTEGER_CST. We can
4100 only select bits from the LOW or HIGH part
4102 if (shift < HOST_BITS_PER_WIDE_INT
4103 && shift + this_time > HOST_BITS_PER_WIDE_INT)
4105 this_time = shift + this_time - HOST_BITS_PER_WIDE_INT;
4106 shift = HOST_BITS_PER_WIDE_INT;
4109 /* Now get the bits from the appropriate constant word. */
4110 if (shift < HOST_BITS_PER_WIDE_INT)
4111 value = TREE_INT_CST_LOW (val);
4112 else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
4114 value = TREE_INT_CST_HIGH (val);
4115 shift -= HOST_BITS_PER_WIDE_INT;
4120 /* Get the result. This works only when:
4121 1 <= this_time <= HOST_BITS_PER_WIDE_INT. */
4122 byte |= (((value >> shift)
4123 & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4124 << (BITS_PER_UNIT - this_time - next_bit));
4128 /* On little-endian machines,
4129 take first the least significant bits of the value
4130 and pack them starting at the least significant
4131 bits of the bytes. */
4132 shift = next_offset - int_bit_position (field);
4134 /* Don't try to take a bunch of bits that cross
4135 the word boundary in the INTEGER_CST. We can
4136 only select bits from the LOW or HIGH part
4138 if (shift < HOST_BITS_PER_WIDE_INT
4139 && shift + this_time > HOST_BITS_PER_WIDE_INT)
4140 this_time = (HOST_BITS_PER_WIDE_INT - shift);
4142 /* Now get the bits from the appropriate constant word. */
4143 if (shift < HOST_BITS_PER_WIDE_INT)
4144 value = TREE_INT_CST_LOW (val);
4145 else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
4147 value = TREE_INT_CST_HIGH (val);
4148 shift -= HOST_BITS_PER_WIDE_INT;
4153 /* Get the result. This works only when:
4154 1 <= this_time <= HOST_BITS_PER_WIDE_INT. */
4155 byte |= (((value >> shift)
4156 & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4160 next_offset += this_time;
4161 byte_buffer_in_use = 1;
4166 if (byte_buffer_in_use)
4168 assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4172 if ((unsigned HOST_WIDE_INT)total_bytes < size)
4173 assemble_zeros (size - total_bytes);
4176 /* This TREE_LIST contains any weak symbol declarations waiting
4178 static GTY(()) tree weak_decls;
4180 /* Mark DECL as weak. */
4183 mark_weak (tree decl)
4185 DECL_WEAK (decl) = 1;
4187 if (DECL_RTL_SET_P (decl)
4188 && GET_CODE (DECL_RTL (decl)) == MEM
4189 && XEXP (DECL_RTL (decl), 0)
4190 && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF)
4191 SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1;
4194 /* Merge weak status between NEWDECL and OLDDECL. */
4197 merge_weak (tree newdecl, tree olddecl)
4199 if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
4202 if (DECL_WEAK (newdecl))
4206 /* NEWDECL is weak, but OLDDECL is not. */
4208 /* If we already output the OLDDECL, we're in trouble; we can't
4209 go back and make it weak. This error cannot caught in
4210 declare_weak because the NEWDECL and OLDDECL was not yet
4211 been merged; therefore, TREE_ASM_WRITTEN was not set. */
4212 if (TREE_ASM_WRITTEN (olddecl))
4213 error ("%Jweak declaration of '%D' must precede definition",
4216 /* If we've already generated rtl referencing OLDDECL, we may
4217 have done so in a way that will not function properly with
4219 else if (TREE_USED (olddecl)
4220 && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)))
4221 warning ("%Jweak declaration of '%D' after first use results "
4222 "in unspecified behavior", newdecl, newdecl);
4226 /* We put the NEWDECL on the weak_decls list at some point.
4227 Replace it with the OLDDECL. */
4228 for (wd = weak_decls; wd; wd = TREE_CHAIN (wd))
4229 if (TREE_VALUE (wd) == newdecl)
4231 TREE_VALUE (wd) = olddecl;
4234 /* We may not find the entry on the list. If NEWDECL is a
4235 weak alias, then we will have already called
4236 globalize_decl to remove the entry; in that case, we do
4237 not need to do anything. */
4240 /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping. */
4241 mark_weak (olddecl);
4244 /* OLDDECL was weak, but NEWDECL was not explicitly marked as
4245 weak. Just update NEWDECL to indicate that it's weak too. */
4246 mark_weak (newdecl);
4249 /* Declare DECL to be a weak symbol. */
4252 declare_weak (tree decl)
4254 if (! TREE_PUBLIC (decl))
4255 error ("%Jweak declaration of '%D' must be public", decl, decl);
4256 else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
4257 error ("%Jweak declaration of '%D' must precede definition", decl, decl);
4258 else if (SUPPORTS_WEAK)
4260 if (! DECL_WEAK (decl))
4261 weak_decls = tree_cons (NULL, decl, weak_decls);
4264 warning ("%Jweak declaration of '%D' not supported", decl, decl);
4269 /* Emit any pending weak declarations. */
4276 for (t = weak_decls; t; t = TREE_CHAIN (t))
4278 tree decl = TREE_VALUE (t);
4279 #if defined (ASM_WEAKEN_DECL) || defined (ASM_WEAKEN_LABEL)
4280 const char *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4283 if (! TREE_USED (decl))
4286 #ifdef ASM_WEAKEN_DECL
4287 ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL);
4289 #ifdef ASM_WEAKEN_LABEL
4290 ASM_WEAKEN_LABEL (asm_out_file, name);
4292 #ifdef ASM_OUTPUT_WEAK_ALIAS
4293 warning ("only weak aliases are supported in this configuration");
4301 /* Emit the assembly bits to indicate that DECL is globally visible. */
4304 globalize_decl (tree decl)
4306 const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
4308 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
4309 if (DECL_WEAK (decl))
4313 #ifdef ASM_WEAKEN_DECL
4314 ASM_WEAKEN_DECL (asm_out_file, decl, name, 0);
4316 ASM_WEAKEN_LABEL (asm_out_file, name);
4319 /* Remove this function from the pending weak list so that
4320 we do not emit multiple .weak directives for it. */
4321 for (p = &weak_decls; (t = *p) ; )
4323 if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
4324 *p = TREE_CHAIN (t);
4326 p = &TREE_CHAIN (t);
4332 (*targetm.asm_out.globalize_label) (asm_out_file, name);
4335 /* Emit an assembler directive to make the symbol for DECL an alias to
4336 the symbol for TARGET. */
4339 assemble_alias (tree decl, tree target ATTRIBUTE_UNUSED)
4343 /* We must force creation of DECL_RTL for debug info generation, even though
4344 we don't use it here. */
4345 make_decl_rtl (decl, NULL);
4347 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4349 #ifdef ASM_OUTPUT_DEF
4350 /* Make name accessible from other files, if appropriate. */
4352 if (TREE_PUBLIC (decl))
4354 globalize_decl (decl);
4355 maybe_assemble_visibility (decl);
4358 #ifdef ASM_OUTPUT_DEF_FROM_DECLS
4359 ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
4361 ASM_OUTPUT_DEF (asm_out_file, name, IDENTIFIER_POINTER (target));
4363 #else /* !ASM_OUTPUT_DEF */
4364 #if defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
4365 if (! DECL_WEAK (decl))
4366 warning ("only weak aliases are supported in this configuration");
4368 #ifdef ASM_WEAKEN_DECL
4369 ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target));
4371 ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target));
4374 warning ("alias definitions not supported in this configuration; ignored");
4378 TREE_USED (decl) = 1;
4379 TREE_ASM_WRITTEN (decl) = 1;
4380 TREE_ASM_WRITTEN (DECL_ASSEMBLER_NAME (decl)) = 1;
4383 /* Emit an assembler directive to set symbol for DECL visibility to
4384 the visibility type VIS, which must not be VISIBILITY_DEFAULT. */
4387 default_assemble_visibility (tree decl, int vis)
4389 static const char * const visibility_types[] = {
4390 NULL, "internal", "hidden", "protected"
4393 const char *name, *type;
4395 name = (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
4396 type = visibility_types[vis];
4398 #ifdef HAVE_GAS_HIDDEN
4399 fprintf (asm_out_file, "\t.%s\t", type);
4400 assemble_name (asm_out_file, name);
4401 fprintf (asm_out_file, "\n");
4403 warning ("visibility attribute not supported in this configuration; ignored");
4407 /* A helper function to call assemble_visibility when needed for a decl. */
4410 maybe_assemble_visibility (tree decl)
4412 enum symbol_visibility vis = decl_visibility (decl);
4414 if (vis != VISIBILITY_DEFAULT)
4415 (* targetm.asm_out.visibility) (decl, vis);
4418 /* Returns 1 if the target configuration supports defining public symbols
4419 so that one of them will be chosen at link time instead of generating a
4420 multiply-defined symbol error, whether through the use of weak symbols or
4421 a target-specific mechanism for having duplicates discarded. */
4424 supports_one_only (void)
4426 if (SUPPORTS_ONE_ONLY)
4428 return SUPPORTS_WEAK;
4431 /* Set up DECL as a public symbol that can be defined in multiple
4432 translation units without generating a linker error. */
4435 make_decl_one_only (tree decl)
4437 if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4440 TREE_PUBLIC (decl) = 1;
4442 if (TREE_CODE (decl) == VAR_DECL
4443 && (DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node))
4444 DECL_COMMON (decl) = 1;
4445 else if (SUPPORTS_ONE_ONLY)
4447 #ifdef MAKE_DECL_ONE_ONLY
4448 MAKE_DECL_ONE_ONLY (decl);
4450 DECL_ONE_ONLY (decl) = 1;
4452 else if (SUPPORTS_WEAK)
4453 DECL_WEAK (decl) = 1;
4459 init_varasm_once (void)
4461 in_named_htab = htab_create_ggc (31, in_named_entry_hash,
4462 in_named_entry_eq, NULL);
4463 const_desc_htab = htab_create_ggc (1009, const_desc_hash,
4464 const_desc_eq, NULL);
4466 const_alias_set = new_alias_set ();
4470 decl_tls_model (tree decl)
4472 enum tls_model kind;
4473 tree attr = lookup_attribute ("tls_model", DECL_ATTRIBUTES (decl));
4478 attr = TREE_VALUE (TREE_VALUE (attr));
4479 if (TREE_CODE (attr) != STRING_CST)
4481 if (!strcmp (TREE_STRING_POINTER (attr), "local-exec"))
4482 kind = TLS_MODEL_LOCAL_EXEC;
4483 else if (!strcmp (TREE_STRING_POINTER (attr), "initial-exec"))
4484 kind = TLS_MODEL_INITIAL_EXEC;
4485 else if (!strcmp (TREE_STRING_POINTER (attr), "local-dynamic"))
4486 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
4487 else if (!strcmp (TREE_STRING_POINTER (attr), "global-dynamic"))
4488 kind = TLS_MODEL_GLOBAL_DYNAMIC;
4494 is_local = (*targetm.binds_local_p) (decl);
4498 kind = TLS_MODEL_LOCAL_EXEC;
4500 kind = TLS_MODEL_INITIAL_EXEC;
4502 /* Local dynamic is inefficient when we're not combining the
4503 parts of the address. */
4504 else if (optimize && is_local)
4505 kind = TLS_MODEL_LOCAL_DYNAMIC;
4507 kind = TLS_MODEL_GLOBAL_DYNAMIC;
4508 if (kind < flag_tls_default)
4509 kind = flag_tls_default;
4514 enum symbol_visibility
4515 decl_visibility (tree decl)
4517 tree attr = lookup_attribute ("visibility", DECL_ATTRIBUTES (decl));
4521 const char *which = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
4523 if (strcmp (which, "default") == 0)
4524 return VISIBILITY_DEFAULT;
4525 if (strcmp (which, "internal") == 0)
4526 return VISIBILITY_INTERNAL;
4527 if (strcmp (which, "hidden") == 0)
4528 return VISIBILITY_HIDDEN;
4529 if (strcmp (which, "protected") == 0)
4530 return VISIBILITY_PROTECTED;
4535 return VISIBILITY_DEFAULT;
4538 /* Select a set of attributes for section NAME based on the properties
4539 of DECL and whether or not RELOC indicates that DECL's initializer
4540 might contain runtime relocations.
4542 We make the section read-only and executable for a function decl,
4543 read-only for a const data decl, and writable for a non-const data decl. */
4546 default_section_type_flags (tree decl, const char *name, int reloc)
4548 return default_section_type_flags_1 (decl, name, reloc, flag_pic);
4552 default_section_type_flags_1 (tree decl, const char *name, int reloc,
4557 if (decl && TREE_CODE (decl) == FUNCTION_DECL)
4558 flags = SECTION_CODE;
4559 else if (decl && decl_readonly_section_1 (decl, reloc, shlib))
4562 flags = SECTION_WRITE;
4564 if (decl && DECL_ONE_ONLY (decl))
4565 flags |= SECTION_LINKONCE;
4567 if (decl && TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
4568 flags |= SECTION_TLS | SECTION_WRITE;
4570 if (strcmp (name, ".bss") == 0
4571 || strncmp (name, ".bss.", 5) == 0
4572 || strncmp (name, ".gnu.linkonce.b.", 16) == 0
4573 || strcmp (name, ".sbss") == 0
4574 || strncmp (name, ".sbss.", 6) == 0
4575 || strncmp (name, ".gnu.linkonce.sb.", 17) == 0
4576 || strcmp (name, ".tbss") == 0
4577 || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
4578 flags |= SECTION_BSS;
4580 if (strcmp (name, ".tdata") == 0
4581 || strcmp (name, ".tbss") == 0
4582 || strncmp (name, ".gnu.linkonce.td.", 17) == 0
4583 || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
4584 flags |= SECTION_TLS;
4586 /* These three sections have special ELF types. They are neither
4587 SHT_PROGBITS nor SHT_NOBITS, so when changing sections we don't
4588 want to print a section type (@progbits or @nobits). If someone
4589 is silly enough to emit code or TLS variables to one of these
4590 sections, then don't handle them specially. */
4591 if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS))
4592 && (strcmp (name, ".init_array") == 0
4593 || strcmp (name, ".fini_array") == 0
4594 || strcmp (name, ".preinit_array") == 0))
4595 flags |= SECTION_NOTYPE;
4600 /* Output assembly to switch to section NAME with attribute FLAGS.
4601 Four variants for common object file formats. */
4604 default_no_named_section (const char *name ATTRIBUTE_UNUSED,
4605 unsigned int flags ATTRIBUTE_UNUSED)
4607 /* Some object formats don't support named sections at all. The
4608 front-end should already have flagged this as an error. */
4613 default_elf_asm_named_section (const char *name, unsigned int flags)
4615 char flagchars[10], *f = flagchars;
4617 if (! named_section_first_declaration (name))
4619 fprintf (asm_out_file, "\t.section\t%s\n", name);
4623 if (!(flags & SECTION_DEBUG))
4625 if (flags & SECTION_WRITE)
4627 if (flags & SECTION_CODE)
4629 if (flags & SECTION_SMALL)
4631 if (flags & SECTION_MERGE)
4633 if (flags & SECTION_STRINGS)
4635 if (flags & SECTION_TLS)
4639 fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
4641 if (!(flags & SECTION_NOTYPE))
4645 if (flags & SECTION_BSS)
4650 fprintf (asm_out_file, ",@%s", type);
4652 if (flags & SECTION_ENTSIZE)
4653 fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
4656 putc ('\n', asm_out_file);
4660 default_coff_asm_named_section (const char *name, unsigned int flags)
4662 char flagchars[8], *f = flagchars;
4664 if (flags & SECTION_WRITE)
4666 if (flags & SECTION_CODE)
4670 fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
4674 default_pe_asm_named_section (const char *name, unsigned int flags)
4676 default_coff_asm_named_section (name, flags);
4678 if (flags & SECTION_LINKONCE)
4680 /* Functions may have been compiled at various levels of
4681 optimization so we can't use `same_size' here.
4682 Instead, have the linker pick one. */
4683 fprintf (asm_out_file, "\t.linkonce %s\n",
4684 (flags & SECTION_CODE ? "discard" : "same_size"));
4688 /* The lame default section selector. */
4691 default_select_section (tree decl, int reloc,
4692 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
4694 bool readonly = false;
4698 if (decl_readonly_section (decl, reloc))
4701 else if (TREE_CODE (decl) == CONSTRUCTOR)
4703 if (! ((flag_pic && reloc)
4704 || !TREE_READONLY (decl)
4705 || TREE_SIDE_EFFECTS (decl)
4706 || !TREE_CONSTANT (decl)))
4709 else if (TREE_CODE (decl) == STRING_CST)
4710 readonly = !flag_writable_strings;
4711 else if (! (flag_pic && reloc))
4715 readonly_data_section ();
4720 /* A helper function for default_elf_select_section and
4721 default_elf_unique_section. Categorizes the DECL. */
4723 enum section_category
4728 SECCAT_RODATA_MERGE_STR,
4729 SECCAT_RODATA_MERGE_STR_INIT,
4730 SECCAT_RODATA_MERGE_CONST,
4735 /* To optimize loading of shared programs, define following subsections
4737 _REL Contains data that has relocations, so they get grouped
4738 together and dynamic linker will visit fewer pages in memory.
4739 _RO Contains data that is otherwise read-only. This is useful
4740 with prelinking as most relocations won't be dynamically
4741 linked and thus stay read only.
4742 _LOCAL Marks data containing relocations only to local objects.
4743 These relocations will get fully resolved by prelinking. */
4745 SECCAT_DATA_REL_LOCAL,
4747 SECCAT_DATA_REL_RO_LOCAL,
4757 static enum section_category
4758 categorize_decl_for_section (tree, int, int);
4760 static enum section_category
4761 categorize_decl_for_section (tree decl, int reloc, int shlib)
4763 enum section_category ret;
4765 if (TREE_CODE (decl) == FUNCTION_DECL)
4767 else if (TREE_CODE (decl) == STRING_CST)
4769 if (flag_writable_strings)
4772 return SECCAT_RODATA_MERGE_STR;
4774 else if (TREE_CODE (decl) == VAR_DECL)
4776 if (DECL_INITIAL (decl) == NULL
4777 || DECL_INITIAL (decl) == error_mark_node)
4779 else if (! TREE_READONLY (decl)
4780 || TREE_SIDE_EFFECTS (decl)
4781 || ! TREE_CONSTANT (DECL_INITIAL (decl)))
4783 if (shlib && (reloc & 2))
4784 ret = SECCAT_DATA_REL;
4785 else if (shlib && reloc)
4786 ret = SECCAT_DATA_REL_LOCAL;
4790 else if (shlib && (reloc & 2))
4791 ret = SECCAT_DATA_REL_RO;
4792 else if (shlib && reloc)
4793 ret = SECCAT_DATA_REL_RO_LOCAL;
4794 else if (reloc || flag_merge_constants < 2)
4795 /* C and C++ don't allow different variables to share the same
4796 location. -fmerge-all-constants allows even that (at the
4797 expense of not conforming). */
4798 ret = SECCAT_RODATA;
4799 else if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
4800 ret = SECCAT_RODATA_MERGE_STR_INIT;
4802 ret = SECCAT_RODATA_MERGE_CONST;
4804 else if (TREE_CODE (decl) == CONSTRUCTOR)
4806 if ((shlib && reloc)
4807 || TREE_SIDE_EFFECTS (decl)
4808 || ! TREE_CONSTANT (decl))
4811 ret = SECCAT_RODATA;
4814 ret = SECCAT_RODATA;
4816 /* There are no read-only thread-local sections. */
4817 if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
4819 if (ret == SECCAT_BSS)
4825 /* If the target uses small data sections, select it. */
4826 else if ((*targetm.in_small_data_p) (decl))
4828 if (ret == SECCAT_BSS)
4830 else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
4831 ret = SECCAT_SRODATA;
4840 decl_readonly_section (tree decl, int reloc)
4842 return decl_readonly_section_1 (decl, reloc, flag_pic);
4846 decl_readonly_section_1 (tree decl, int reloc, int shlib)
4848 switch (categorize_decl_for_section (decl, reloc, shlib))
4851 case SECCAT_RODATA_MERGE_STR:
4852 case SECCAT_RODATA_MERGE_STR_INIT:
4853 case SECCAT_RODATA_MERGE_CONST:
4854 case SECCAT_SRODATA:
4863 /* Select a section based on the above categorization. */
4866 default_elf_select_section (tree decl, int reloc,
4867 unsigned HOST_WIDE_INT align)
4869 default_elf_select_section_1 (decl, reloc, align, flag_pic);
4873 default_elf_select_section_1 (tree decl, int reloc,
4874 unsigned HOST_WIDE_INT align, int shlib)
4876 switch (categorize_decl_for_section (decl, reloc, shlib))
4879 /* We're not supposed to be called on FUNCTION_DECLs. */
4882 readonly_data_section ();
4884 case SECCAT_RODATA_MERGE_STR:
4885 mergeable_string_section (decl, align, 0);
4887 case SECCAT_RODATA_MERGE_STR_INIT:
4888 mergeable_string_section (DECL_INITIAL (decl), align, 0);
4890 case SECCAT_RODATA_MERGE_CONST:
4891 mergeable_constant_section (DECL_MODE (decl), align, 0);
4893 case SECCAT_SRODATA:
4894 named_section (NULL_TREE, ".sdata2", reloc);
4899 case SECCAT_DATA_REL:
4900 named_section (NULL_TREE, ".data.rel", reloc);
4902 case SECCAT_DATA_REL_LOCAL:
4903 named_section (NULL_TREE, ".data.rel.local", reloc);
4905 case SECCAT_DATA_REL_RO:
4906 named_section (NULL_TREE, ".data.rel.ro", reloc);
4908 case SECCAT_DATA_REL_RO_LOCAL:
4909 named_section (NULL_TREE, ".data.rel.ro.local", reloc);
4912 named_section (NULL_TREE, ".sdata", reloc);
4915 named_section (NULL_TREE, ".tdata", reloc);
4918 #ifdef BSS_SECTION_ASM_OP
4921 named_section (NULL_TREE, ".bss", reloc);
4925 named_section (NULL_TREE, ".sbss", reloc);
4928 named_section (NULL_TREE, ".tbss", reloc);
4935 /* Construct a unique section name based on the decl name and the
4936 categorization performed above. */
4939 default_unique_section (tree decl, int reloc)
4941 default_unique_section_1 (decl, reloc, flag_pic);
4945 default_unique_section_1 (tree decl, int reloc, int shlib)
4947 bool one_only = DECL_ONE_ONLY (decl);
4948 const char *prefix, *name;
4952 switch (categorize_decl_for_section (decl, reloc, shlib))
4955 prefix = one_only ? ".gnu.linkonce.t." : ".text.";
4958 case SECCAT_RODATA_MERGE_STR:
4959 case SECCAT_RODATA_MERGE_STR_INIT:
4960 case SECCAT_RODATA_MERGE_CONST:
4961 prefix = one_only ? ".gnu.linkonce.r." : ".rodata.";
4963 case SECCAT_SRODATA:
4964 prefix = one_only ? ".gnu.linkonce.s2." : ".sdata2.";
4967 case SECCAT_DATA_REL:
4968 case SECCAT_DATA_REL_LOCAL:
4969 case SECCAT_DATA_REL_RO:
4970 case SECCAT_DATA_REL_RO_LOCAL:
4971 prefix = one_only ? ".gnu.linkonce.d." : ".data.";
4974 prefix = one_only ? ".gnu.linkonce.s." : ".sdata.";
4977 prefix = one_only ? ".gnu.linkonce.b." : ".bss.";
4980 prefix = one_only ? ".gnu.linkonce.sb." : ".sbss.";
4983 prefix = one_only ? ".gnu.linkonce.td." : ".tdata.";
4986 prefix = one_only ? ".gnu.linkonce.tb." : ".tbss.";
4991 plen = strlen (prefix);
4993 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4994 name = (* targetm.strip_name_encoding) (name);
4995 nlen = strlen (name);
4997 string = alloca (nlen + plen + 1);
4998 memcpy (string, prefix, plen);
4999 memcpy (string + plen, name, nlen + 1);
5001 DECL_SECTION_NAME (decl) = build_string (nlen + plen, string);
5005 default_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED,
5007 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
5010 switch (GET_CODE (x))
5022 readonly_data_section ();
5026 default_elf_select_rtx_section (enum machine_mode mode, rtx x,
5027 unsigned HOST_WIDE_INT align)
5029 /* ??? Handle small data here somehow. */
5032 switch (GET_CODE (x))
5036 named_section (NULL_TREE, ".data.rel.ro", 3);
5040 named_section (NULL_TREE, ".data.rel.ro.local", 1);
5047 mergeable_constant_section (mode, align, 0);
5050 /* Set the generally applicable flags on the SYMBOL_REF for EXP. */
5053 default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
5058 /* Careful not to prod global register variables. */
5059 if (GET_CODE (rtl) != MEM)
5061 symbol = XEXP (rtl, 0);
5062 if (GET_CODE (symbol) != SYMBOL_REF)
5066 if (TREE_CODE (decl) == FUNCTION_DECL)
5067 flags |= SYMBOL_FLAG_FUNCTION;
5068 if ((*targetm.binds_local_p) (decl))
5069 flags |= SYMBOL_FLAG_LOCAL;
5070 if ((*targetm.in_small_data_p) (decl))
5071 flags |= SYMBOL_FLAG_SMALL;
5072 if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
5073 flags |= decl_tls_model (decl) << SYMBOL_FLAG_TLS_SHIFT;
5074 /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names? Without
5075 being PUBLIC, the thing *must* be defined in this translation unit.
5076 Prevent this buglet from being propagated into rtl code as well. */
5077 if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
5078 flags |= SYMBOL_FLAG_EXTERNAL;
5080 SYMBOL_REF_FLAGS (symbol) = flags;
5083 /* By default, we do nothing for encode_section_info, so we need not
5084 do anything but discard the '*' marker. */
5087 default_strip_name_encoding (const char *str)
5089 return str + (*str == '*');
5092 /* Assume ELF-ish defaults, since that's pretty much the most liberal
5093 wrt cross-module name binding. */
5096 default_binds_local_p (tree exp)
5098 return default_binds_local_p_1 (exp, flag_shlib);
5102 default_binds_local_p_1 (tree exp, int shlib)
5106 /* A non-decl is an entry in the constant pool. */
5109 /* Static variables are always local. */
5110 else if (! TREE_PUBLIC (exp))
5112 /* A variable is local if the user tells us so. */
5113 else if (decl_visibility (exp) != VISIBILITY_DEFAULT)
5115 /* Otherwise, variables defined outside this object may not be local. */
5116 else if (DECL_EXTERNAL (exp))
5118 /* Linkonce and weak data are never local. */
5119 else if (DECL_ONE_ONLY (exp) || DECL_WEAK (exp))
5121 /* If PIC, then assume that any global name can be overridden by
5122 symbols resolved from other modules. */
5125 /* Uninitialized COMMON variable may be unified with symbols
5126 resolved from other modules. */
5127 else if (DECL_COMMON (exp)
5128 && (DECL_INITIAL (exp) == NULL
5129 || DECL_INITIAL (exp) == error_mark_node))
5131 /* Otherwise we're left with initialized (or non-common) global data
5132 which is of necessity defined locally. */
5139 /* Determine whether or not a pointer mode is valid. Assume defaults
5140 of ptr_mode or Pmode - can be overridden. */
5142 default_valid_pointer_mode (enum machine_mode mode)
5144 return (mode == ptr_mode || mode == Pmode);
5147 /* Default function to output code that will globalize a label. A
5148 target must define GLOBAL_ASM_OP or provide it's own function to
5149 globalize a label. */
5150 #ifdef GLOBAL_ASM_OP
5152 default_globalize_label (FILE * stream, const char *name)
5154 fputs (GLOBAL_ASM_OP, stream);
5155 assemble_name (stream, name);
5156 putc ('\n', stream);
5158 #endif /* GLOBAL_ASM_OP */
5160 /* This is how to output an internal numbered label where PREFIX is
5161 the class of label and LABELNO is the number within the class. */
5164 default_internal_label (FILE *stream, const char *prefix,
5165 unsigned long labelno)
5167 char *const buf = alloca (40 + strlen (prefix));
5168 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
5169 ASM_OUTPUT_LABEL (stream, buf);
5172 /* This is the default behavior at the beginning of a file. It's
5173 controlled by two other target-hook toggles. */
5175 default_file_start (void)
5177 if (targetm.file_start_app_off && !flag_verbose_asm)
5178 fputs (ASM_APP_OFF, asm_out_file);
5180 if (targetm.file_start_file_directive)
5181 output_file_directive (asm_out_file, main_input_filename);
5184 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
5185 which emits a special section directive used to indicate whether or
5186 not this object file needs an executable stack. This is primarily
5187 a GNU extension to ELF but could be used on other targets. */
5189 file_end_indicate_exec_stack (void)
5191 unsigned int flags = SECTION_DEBUG;
5192 if (trampolines_created)
5193 flags |= SECTION_CODE;
5195 named_section_flags (".note.GNU-stack", flags);
5198 #include "gt-varasm.h"