OSDN Git Service

* c-common.c (c_alignof_expr): Use DECL_ALIGN_UNIT and TYPE_ALIGN_UNIT.
[pf3gnuchains/gcc-fork.git] / gcc / varasm.c
1 /* Output variables, constants and external declarations, for GNU compiler.
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
3    1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
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
10 version.
11
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
15 for more details.
16
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
20 02111-1307, USA.  */
21
22
23 /* This file handles generation of all the assembler code
24    *except* the instructions of a function.
25    This includes declarations of variables and their initial values.
26
27    We also output the assembler code for constants stored in memory
28    and are responsible for combining constants with the same value.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "tm.h"
34 #include "rtl.h"
35 #include "tree.h"
36 #include "flags.h"
37 #include "function.h"
38 #include "expr.h"
39 #include "hard-reg-set.h"
40 #include "regs.h"
41 #include "real.h"
42 #include "output.h"
43 #include "toplev.h"
44 #include "hashtab.h"
45 #include "c-pragma.h"
46 #include "ggc.h"
47 #include "langhooks.h"
48 #include "tm_p.h"
49 #include "debug.h"
50 #include "target.h"
51 #include "tree-mudflap.h"
52 #include "cgraph.h"
53 #include "cfglayout.h"
54
55 #ifdef XCOFF_DEBUGGING_INFO
56 #include "xcoffout.h"           /* Needed for external data
57                                    declarations for e.g. AIX 4.x.  */
58 #endif
59
60 #ifndef ASM_STABS_OP
61 #define ASM_STABS_OP "\t.stabs\t"
62 #endif
63
64 /* The (assembler) name of the first globally-visible object output.  */
65 const char *first_global_object_name;
66 const char *weak_global_object_name;
67
68 struct addr_const;
69 struct constant_descriptor_rtx;
70 struct rtx_constant_pool;
71
72 struct varasm_status GTY(())
73 {
74   /* If we're using a per-function constant pool, this is it.  */
75   struct rtx_constant_pool *pool;
76
77   /* Number of tree-constants deferred during the expansion of this
78      function.  */
79   unsigned int deferred_constants;
80 };
81
82 #define n_deferred_constants (cfun->varasm->deferred_constants)
83
84 /* Number for making the label on the next
85    constant that is stored in memory.  */
86
87 static GTY(()) int const_labelno;
88
89 /* Carry information from ASM_DECLARE_OBJECT_NAME
90    to ASM_FINISH_DECLARE_OBJECT.  */
91
92 int size_directive_output;
93
94 /* The last decl for which assemble_variable was called,
95    if it did ASM_DECLARE_OBJECT_NAME.
96    If the last call to assemble_variable didn't do that,
97    this holds 0.  */
98
99 tree last_assemble_variable_decl;
100
101 /* The following global variable indicates if the section label for the
102    "cold" section of code has been output yet to the assembler.  The
103    label is useful when running gdb.  This is part of the optimization that
104    partitions hot and cold basic blocks into separate sections of the .o
105    file.  */
106
107 bool unlikely_section_label_printed = false;
108
109 /* The following global variable indicates the label name to be put at
110    the start of the first cold section within each function, when
111    partitioning basic blocks into hot and cold sections.  */
112
113 char *unlikely_section_label = NULL;
114  
115 /* The following global variable indicates the section name to be used
116    for the current cold section, when partitioning hot and cold basic
117    blocks into separate sections.  */
118
119 char *unlikely_text_section_name = NULL;
120
121 /* We give all constants their own alias set.  Perhaps redundant with
122    MEM_READONLY_P, but pre-dates it.  */
123
124 static HOST_WIDE_INT const_alias_set;
125
126 static const char *strip_reg_name (const char *);
127 static int contains_pointers_p (tree);
128 #ifdef ASM_OUTPUT_EXTERNAL
129 static bool incorporeal_function_p (tree);
130 #endif
131 static void decode_addr_const (tree, struct addr_const *);
132 static hashval_t const_desc_hash (const void *);
133 static int const_desc_eq (const void *, const void *);
134 static hashval_t const_hash_1 (const tree);
135 static int compare_constant (const tree, const tree);
136 static tree copy_constant (tree);
137 static void output_constant_def_contents (rtx);
138 static void output_addressed_constants (tree);
139 static unsigned HOST_WIDE_INT array_size_for_constructor (tree);
140 static unsigned min_align (unsigned, unsigned);
141 static void output_constructor (tree, unsigned HOST_WIDE_INT, unsigned int);
142 static void globalize_decl (tree);
143 static void maybe_assemble_visibility (tree);
144 static int in_named_entry_eq (const void *, const void *);
145 static hashval_t in_named_entry_hash (const void *);
146 #ifdef BSS_SECTION_ASM_OP
147 #ifdef ASM_OUTPUT_BSS
148 static void asm_output_bss (FILE *, tree, const char *,
149                             unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
150 #endif
151 #ifdef ASM_OUTPUT_ALIGNED_BSS
152 static void asm_output_aligned_bss (FILE *, tree, const char *,
153                                     unsigned HOST_WIDE_INT, int)
154      ATTRIBUTE_UNUSED;
155 #endif
156 #endif /* BSS_SECTION_ASM_OP */
157 static bool asm_emit_uninitialised (tree, const char*,
158                                     unsigned HOST_WIDE_INT,
159                                     unsigned HOST_WIDE_INT);
160 static void mark_weak (tree);
161 \f
162 enum in_section { no_section, in_text, in_unlikely_executed_text, in_data, 
163                   in_named
164 #ifdef BSS_SECTION_ASM_OP
165   , in_bss
166 #endif
167 #ifdef CTORS_SECTION_ASM_OP
168   , in_ctors
169 #endif
170 #ifdef DTORS_SECTION_ASM_OP
171   , in_dtors
172 #endif
173 #ifdef READONLY_DATA_SECTION_ASM_OP
174   , in_readonly_data
175 #endif
176 #ifdef EXTRA_SECTIONS
177   , EXTRA_SECTIONS
178 #endif
179 };
180 static GTY(()) enum in_section in_section = no_section;
181
182 /* Return a nonzero value if DECL has a section attribute.  */
183 #ifndef IN_NAMED_SECTION
184 #define IN_NAMED_SECTION(DECL) \
185   ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \
186    && DECL_SECTION_NAME (DECL) != NULL_TREE)
187 #endif
188
189 /* Text of section name when in_section == in_named.  */
190 static GTY(()) const char *in_named_name;
191
192 /* Hash table of flags that have been used for a particular named section.  */
193
194 struct in_named_entry GTY(())
195 {
196   const char *name;
197   unsigned int flags;
198   bool declared;
199 };
200
201 static GTY((param_is (struct in_named_entry))) htab_t in_named_htab;
202
203 /* Define functions like text_section for any extra sections.  */
204 #ifdef EXTRA_SECTION_FUNCTIONS
205 EXTRA_SECTION_FUNCTIONS
206 #endif
207
208 /* Tell assembler to switch to text section.  */
209
210 void
211 text_section (void)
212 {
213   if (in_section != in_text)
214     {
215       in_section = in_text;
216       fprintf (asm_out_file, "%s\n", TEXT_SECTION_ASM_OP);
217     }
218 }
219
220 /* Tell assembler to switch to unlikely-to-be-executed text section.  */
221
222 void
223 unlikely_text_section (void)
224 {
225   const char *name;
226   int len;
227
228   if (! unlikely_text_section_name)
229     {
230       if (DECL_SECTION_NAME (current_function_decl)
231           && (strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME
232                                            (current_function_decl)),
233                       HOT_TEXT_SECTION_NAME) != 0)
234           && (strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME
235                                            (current_function_decl)),
236                       UNLIKELY_EXECUTED_TEXT_SECTION_NAME) != 0))
237         {
238           name = TREE_STRING_POINTER (DECL_SECTION_NAME 
239                                                    (current_function_decl));
240           len = strlen (name);
241           unlikely_text_section_name = xmalloc ((len + 10) * sizeof (char));
242           strcpy (unlikely_text_section_name, name);
243           strcat (unlikely_text_section_name, "_unlikely");
244         }
245       else
246         {
247           len = strlen (UNLIKELY_EXECUTED_TEXT_SECTION_NAME);
248           unlikely_text_section_name = xmalloc (len+1 * sizeof (char));
249           strcpy (unlikely_text_section_name, 
250                   UNLIKELY_EXECUTED_TEXT_SECTION_NAME);
251         }
252     }
253
254   if ((in_section != in_unlikely_executed_text)
255       &&  (in_section != in_named 
256            || strcmp (in_named_name, unlikely_text_section_name) != 0))
257     {
258       named_section (NULL_TREE, unlikely_text_section_name, 0);
259       in_section = in_unlikely_executed_text;
260
261       if (!unlikely_section_label_printed)
262         {
263           ASM_OUTPUT_LABEL (asm_out_file, unlikely_section_label);
264           unlikely_section_label_printed = true;
265         }
266     }
267 }
268
269 /* Tell assembler to switch to data section.  */
270
271 void
272 data_section (void)
273 {
274   if (in_section != in_data)
275     {
276       in_section = in_data;
277       fprintf (asm_out_file, "%s\n", DATA_SECTION_ASM_OP);
278     }
279 }
280
281 /* Tell assembler to switch to read-only data section.  This is normally
282    the text section.  */
283
284 void
285 readonly_data_section (void)
286 {
287 #ifdef READONLY_DATA_SECTION
288   READONLY_DATA_SECTION ();  /* Note this can call data_section.  */
289 #else
290 #ifdef READONLY_DATA_SECTION_ASM_OP
291   if (in_section != in_readonly_data)
292     {
293       in_section = in_readonly_data;
294       fputs (READONLY_DATA_SECTION_ASM_OP, asm_out_file);
295       fputc ('\n', asm_out_file);
296     }
297 #else
298   text_section ();
299 #endif
300 #endif
301 }
302
303 /* Determine if we're in the text section.  */
304
305 int
306 in_text_section (void)
307 {
308   return in_section == in_text;
309 }
310
311 /* Determine if we're in the unlikely-to-be-executed text section.  */
312
313 int
314 in_unlikely_text_section (void)
315 {
316   bool ret_val;
317
318   ret_val = ((in_section == in_unlikely_executed_text)
319              || (in_section == in_named
320                  && unlikely_text_section_name
321                  && strcmp (in_named_name, unlikely_text_section_name) == 0));
322
323   return ret_val;
324 }
325
326 /* Determine if we're in the data section.  */
327
328 int
329 in_data_section (void)
330 {
331   return in_section == in_data;
332 }
333
334 /* Helper routines for maintaining in_named_htab.  */
335
336 static int
337 in_named_entry_eq (const void *p1, const void *p2)
338 {
339   const struct in_named_entry *old = p1;
340   const char *new = p2;
341
342   return strcmp (old->name, new) == 0;
343 }
344
345 static hashval_t
346 in_named_entry_hash (const void *p)
347 {
348   const struct in_named_entry *old = p;
349   return htab_hash_string (old->name);
350 }
351
352 /* If SECTION has been seen before as a named section, return the flags
353    that were used.  Otherwise, return 0.  Note, that 0 is a perfectly valid
354    set of flags for a section to have, so 0 does not mean that the section
355    has not been seen.  */
356
357 unsigned int
358 get_named_section_flags (const char *section)
359 {
360   struct in_named_entry **slot;
361
362   slot = (struct in_named_entry **)
363     htab_find_slot_with_hash (in_named_htab, section,
364                               htab_hash_string (section), NO_INSERT);
365
366   return slot ? (*slot)->flags : 0;
367 }
368
369 /* Returns true if the section has been declared before.   Sets internal
370    flag on this section in in_named_hash so subsequent calls on this
371    section will return false.  */
372
373 bool
374 named_section_first_declaration (const char *name)
375 {
376   struct in_named_entry **slot;
377
378   slot = (struct in_named_entry **)
379     htab_find_slot_with_hash (in_named_htab, name,
380                               htab_hash_string (name), NO_INSERT);
381   if (! (*slot)->declared)
382     {
383       (*slot)->declared = true;
384       return true;
385     }
386   else
387     {
388       return false;
389     }
390 }
391
392
393 /* Record FLAGS for SECTION.  If SECTION was previously recorded with a
394    different set of flags, return false.  */
395
396 bool
397 set_named_section_flags (const char *section, unsigned int flags)
398 {
399   struct in_named_entry **slot, *entry;
400
401   slot = (struct in_named_entry **)
402     htab_find_slot_with_hash (in_named_htab, section,
403                               htab_hash_string (section), INSERT);
404   entry = *slot;
405
406   if (!entry)
407     {
408       entry = ggc_alloc (sizeof (*entry));
409       *slot = entry;
410       entry->name = ggc_strdup (section);
411       entry->flags = flags;
412       entry->declared = false;
413     }
414   else if (entry->flags != flags)
415     return false;
416
417   return true;
418 }
419
420 /* Tell assembler to change to section NAME with attributes FLAGS.  */
421
422 void
423 named_section_flags (const char *name, unsigned int flags)
424 {
425   if (in_section != in_named || strcmp (name, in_named_name) != 0)
426     {
427       if (! set_named_section_flags (name, flags))
428         abort ();
429
430       targetm.asm_out.named_section (name, flags);
431
432       if (flags & SECTION_FORGET)
433         in_section = no_section;
434       else
435         {
436           in_named_name = ggc_strdup (name);
437           in_section = in_named;
438         }
439     }
440 }
441
442 /* Tell assembler to change to section NAME for DECL.
443    If DECL is NULL, just switch to section NAME.
444    If NAME is NULL, get the name from DECL.
445    If RELOC is 1, the initializer for DECL contains relocs.  */
446
447 void
448 named_section (tree decl, const char *name, int reloc)
449 {
450   unsigned int flags;
451
452   if (decl != NULL_TREE && !DECL_P (decl))
453     abort ();
454   if (name == NULL)
455     name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl));
456
457   if (strcmp (name, UNLIKELY_EXECUTED_TEXT_SECTION_NAME) == 0
458       && !unlikely_text_section_name)
459     {
460       unlikely_text_section_name = xmalloc 
461              (strlen (UNLIKELY_EXECUTED_TEXT_SECTION_NAME) + 1 
462               * sizeof (char));
463       strcpy (unlikely_text_section_name, 
464               UNLIKELY_EXECUTED_TEXT_SECTION_NAME);
465     }
466
467   flags = targetm.section_type_flags (decl, name, reloc);
468
469   /* Sanity check user variables for flag changes.  Non-user
470      section flag changes will abort in named_section_flags.
471      However, don't complain if SECTION_OVERRIDE is set.
472      We trust that the setter knows that it is safe to ignore
473      the default flags for this decl.  */
474   if (decl && ! set_named_section_flags (name, flags))
475     {
476       flags = get_named_section_flags (name);
477       if ((flags & SECTION_OVERRIDE) == 0)
478         error ("%J%D causes a section type conflict", decl, decl);
479     }
480
481   named_section_flags (name, flags);
482 }
483
484 /* If required, set DECL_SECTION_NAME to a unique name.  */
485
486 void
487 resolve_unique_section (tree decl, int reloc ATTRIBUTE_UNUSED,
488                         int flag_function_or_data_sections)
489 {
490   if (DECL_SECTION_NAME (decl) == NULL_TREE
491       && targetm.have_named_sections
492       && (flag_function_or_data_sections
493           || DECL_ONE_ONLY (decl)))
494     targetm.asm_out.unique_section (decl, reloc);
495 }
496
497 #ifdef BSS_SECTION_ASM_OP
498
499 /* Tell the assembler to switch to the bss section.  */
500
501 void
502 bss_section (void)
503 {
504   if (in_section != in_bss)
505     {
506       fprintf (asm_out_file, "%s\n", BSS_SECTION_ASM_OP);
507       in_section = in_bss;
508     }
509 }
510
511 #ifdef ASM_OUTPUT_BSS
512
513 /* Utility function for ASM_OUTPUT_BSS for targets to use if
514    they don't support alignments in .bss.
515    ??? It is believed that this function will work in most cases so such
516    support is localized here.  */
517
518 static void
519 asm_output_bss (FILE *file, tree decl ATTRIBUTE_UNUSED,
520                 const char *name,
521                 unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
522                 unsigned HOST_WIDE_INT rounded)
523 {
524   targetm.asm_out.globalize_label (file, name);
525   bss_section ();
526 #ifdef ASM_DECLARE_OBJECT_NAME
527   last_assemble_variable_decl = decl;
528   ASM_DECLARE_OBJECT_NAME (file, name, decl);
529 #else
530   /* Standard thing is just output label for the object.  */
531   ASM_OUTPUT_LABEL (file, name);
532 #endif /* ASM_DECLARE_OBJECT_NAME */
533   ASM_OUTPUT_SKIP (file, rounded ? rounded : 1);
534 }
535
536 #endif
537
538 #ifdef ASM_OUTPUT_ALIGNED_BSS
539
540 /* Utility function for targets to use in implementing
541    ASM_OUTPUT_ALIGNED_BSS.
542    ??? It is believed that this function will work in most cases so such
543    support is localized here.  */
544
545 static void
546 asm_output_aligned_bss (FILE *file, tree decl ATTRIBUTE_UNUSED,
547                         const char *name, unsigned HOST_WIDE_INT size,
548                         int align)
549 {
550   bss_section ();
551   ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT));
552 #ifdef ASM_DECLARE_OBJECT_NAME
553   last_assemble_variable_decl = decl;
554   ASM_DECLARE_OBJECT_NAME (file, name, decl);
555 #else
556   /* Standard thing is just output label for the object.  */
557   ASM_OUTPUT_LABEL (file, name);
558 #endif /* ASM_DECLARE_OBJECT_NAME */
559   ASM_OUTPUT_SKIP (file, size ? size : 1);
560 }
561
562 #endif
563
564 #endif /* BSS_SECTION_ASM_OP */
565
566 /* Switch to the section for function DECL.
567
568    If DECL is NULL_TREE, switch to the text section.
569    ??? It's not clear that we will ever be passed NULL_TREE, but it's
570    safer to handle it.  */
571
572 void
573 function_section (tree decl)
574 {
575   if (scan_ahead_for_unlikely_executed_note (get_insns()))
576     unlikely_text_section ();
577   else if (decl != NULL_TREE
578            && DECL_SECTION_NAME (decl) != NULL_TREE)
579     named_section (decl, (char *) 0, 0);
580   else
581     text_section (); 
582 }
583
584 /* Switch to read-only data section associated with function DECL.  */
585
586 void
587 default_function_rodata_section (tree decl)
588 {
589   if (decl != NULL_TREE && DECL_SECTION_NAME (decl))
590     {
591       const char *name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl));
592
593       /* For .gnu.linkonce.t.foo we want to use .gnu.linkonce.r.foo.  */
594       if (DECL_ONE_ONLY (decl) && strncmp (name, ".gnu.linkonce.t.", 16) == 0)
595         {
596           size_t len = strlen (name) + 1;
597           char *rname = alloca (len);
598
599           memcpy (rname, name, len);
600           rname[14] = 'r';
601           named_section_flags (rname, SECTION_LINKONCE);
602           return;
603         }
604       /* For .text.foo we want to use .rodata.foo.  */
605       else if (flag_function_sections && flag_data_sections
606                && strncmp (name, ".text.", 6) == 0)
607         {
608           size_t len = strlen (name) + 1;
609           char *rname = alloca (len + 2);
610
611           memcpy (rname, ".rodata", 7);
612           memcpy (rname + 7, name + 5, len - 5);
613           named_section_flags (rname, 0);
614           return;
615         }
616     }
617
618   readonly_data_section ();
619 }
620
621 /* Switch to read-only data section associated with function DECL
622    for targets where that section should be always the single
623    readonly data section.  */
624
625 void
626 default_no_function_rodata_section (tree decl ATTRIBUTE_UNUSED)
627 {
628   readonly_data_section ();
629 }
630
631 /* Switch to section for variable DECL.  RELOC is the same as the
632    argument to SELECT_SECTION.  */
633
634 void
635 variable_section (tree decl, int reloc)
636 {
637   if (IN_NAMED_SECTION (decl))
638     named_section (decl, NULL, reloc);
639   else
640     targetm.asm_out.select_section (decl, reloc, DECL_ALIGN (decl));
641 }
642
643 /* Tell assembler to switch to the section for string merging.  */
644
645 void
646 mergeable_string_section (tree decl ATTRIBUTE_UNUSED,
647                           unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED,
648                           unsigned int flags ATTRIBUTE_UNUSED)
649 {
650   if (HAVE_GAS_SHF_MERGE && flag_merge_constants
651       && TREE_CODE (decl) == STRING_CST
652       && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
653       && align <= 256
654       && TREE_STRING_LENGTH (decl) >= int_size_in_bytes (TREE_TYPE (decl)))
655     {
656       enum machine_mode mode;
657       unsigned int modesize;
658       const char *str;
659       int i, j, len, unit;
660       char name[30];
661
662       mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (decl)));
663       modesize = GET_MODE_BITSIZE (mode);
664       if (modesize >= 8 && modesize <= 256
665           && (modesize & (modesize - 1)) == 0)
666         {
667           if (align < modesize)
668             align = modesize;
669
670           str = TREE_STRING_POINTER (decl);
671           len = TREE_STRING_LENGTH (decl);
672           unit = GET_MODE_SIZE (mode);
673
674           /* Check for embedded NUL characters.  */
675           for (i = 0; i < len; i += unit)
676             {
677               for (j = 0; j < unit; j++)
678                 if (str[i + j] != '\0')
679                   break;
680               if (j == unit)
681                 break;
682             }
683           if (i == len - unit)
684             {
685               sprintf (name, ".rodata.str%d.%d", modesize / 8,
686                        (int) (align / 8));
687               flags |= (modesize / 8) | SECTION_MERGE | SECTION_STRINGS;
688               if (!i && modesize < align)
689                 {
690                   /* A "" string with requested alignment greater than
691                      character size might cause a problem:
692                      if some other string required even bigger
693                      alignment than "", then linker might think the
694                      "" is just part of padding after some other string
695                      and not put it into the hash table initially.
696                      But this means "" could have smaller alignment
697                      than requested.  */
698 #ifdef ASM_OUTPUT_SECTION_START
699                   named_section_flags (name, flags);
700                   ASM_OUTPUT_SECTION_START (asm_out_file);
701 #else
702                   readonly_data_section ();
703 #endif
704                   return;
705                 }
706
707               named_section_flags (name, flags);
708               return;
709             }
710         }
711     }
712
713   readonly_data_section ();
714 }
715
716 /* Tell assembler to switch to the section for constant merging.  */
717
718 void
719 mergeable_constant_section (enum machine_mode mode ATTRIBUTE_UNUSED,
720                             unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED,
721                             unsigned int flags ATTRIBUTE_UNUSED)
722 {
723   unsigned int modesize = GET_MODE_BITSIZE (mode);
724
725   if (HAVE_GAS_SHF_MERGE && flag_merge_constants
726       && mode != VOIDmode
727       && mode != BLKmode
728       && modesize <= align
729       && align >= 8
730       && align <= 256
731       && (align & (align - 1)) == 0)
732     {
733       char name[24];
734
735       sprintf (name, ".rodata.cst%d", (int) (align / 8));
736       flags |= (align / 8) | SECTION_MERGE;
737       named_section_flags (name, flags);
738       return;
739     }
740
741   readonly_data_section ();
742 }
743 \f
744 /* Given NAME, a putative register name, discard any customary prefixes.  */
745
746 static const char *
747 strip_reg_name (const char *name)
748 {
749 #ifdef REGISTER_PREFIX
750   if (!strncmp (name, REGISTER_PREFIX, strlen (REGISTER_PREFIX)))
751     name += strlen (REGISTER_PREFIX);
752 #endif
753   if (name[0] == '%' || name[0] == '#')
754     name++;
755   return name;
756 }
757 \f
758 /* The user has asked for a DECL to have a particular name.  Set (or
759    change) it in such a way that we don't prefix an underscore to
760    it.  */
761 void
762 set_user_assembler_name (tree decl, const char *name)
763 {
764   char *starred = alloca (strlen (name) + 2);
765   starred[0] = '*';
766   strcpy (starred + 1, name);
767   change_decl_assembler_name (decl, get_identifier (starred));
768   SET_DECL_RTL (decl, NULL_RTX);
769 }
770 \f
771 /* Decode an `asm' spec for a declaration as a register name.
772    Return the register number, or -1 if nothing specified,
773    or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized,
774    or -3 if ASMSPEC is `cc' and is not recognized,
775    or -4 if ASMSPEC is `memory' and is not recognized.
776    Accept an exact spelling or a decimal number.
777    Prefixes such as % are optional.  */
778
779 int
780 decode_reg_name (const char *asmspec)
781 {
782   if (asmspec != 0 && strlen (asmspec) != 0)
783     {
784       int i;
785
786       /* Get rid of confusing prefixes.  */
787       asmspec = strip_reg_name (asmspec);
788
789       /* Allow a decimal number as a "register name".  */
790       for (i = strlen (asmspec) - 1; i >= 0; i--)
791         if (! ISDIGIT (asmspec[i]))
792           break;
793       if (asmspec[0] != 0 && i < 0)
794         {
795           i = atoi (asmspec);
796           if (i < FIRST_PSEUDO_REGISTER && i >= 0)
797             return i;
798           else
799             return -2;
800         }
801
802       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
803         if (reg_names[i][0]
804             && ! strcmp (asmspec, strip_reg_name (reg_names[i])))
805           return i;
806
807 #ifdef ADDITIONAL_REGISTER_NAMES
808       {
809         static const struct { const char *const name; const int number; } table[]
810           = ADDITIONAL_REGISTER_NAMES;
811
812         for (i = 0; i < (int) ARRAY_SIZE (table); i++)
813           if (! strcmp (asmspec, table[i].name))
814             return table[i].number;
815       }
816 #endif /* ADDITIONAL_REGISTER_NAMES */
817
818       if (!strcmp (asmspec, "memory"))
819         return -4;
820
821       if (!strcmp (asmspec, "cc"))
822         return -3;
823
824       return -2;
825     }
826
827   return -1;
828 }
829 \f
830 /* Create the DECL_RTL for a VAR_DECL or FUNCTION_DECL.  DECL should
831    have static storage duration.  In other words, it should not be an
832    automatic variable, including PARM_DECLs.
833
834    There is, however, one exception: this function handles variables
835    explicitly placed in a particular register by the user.
836
837    This is never called for PARM_DECL nodes.  */
838
839 void
840 make_decl_rtl (tree decl)
841 {
842   const char *name = 0;
843   int reg_number;
844   rtx x;
845
846   /* Check that we are not being given an automatic variable.  */
847   /* A weak alias has TREE_PUBLIC set but not the other bits.  */
848   if (TREE_CODE (decl) == PARM_DECL
849       || TREE_CODE (decl) == RESULT_DECL
850       || (TREE_CODE (decl) == VAR_DECL
851           && !TREE_STATIC (decl)
852           && !TREE_PUBLIC (decl)
853           && !DECL_EXTERNAL (decl)
854           && !DECL_REGISTER (decl)))
855     abort ();
856   /* And that we were not given a type or a label.  */
857   else if (TREE_CODE (decl) == TYPE_DECL
858            || TREE_CODE (decl) == LABEL_DECL)
859     abort ();
860
861   /* For a duplicate declaration, we can be called twice on the
862      same DECL node.  Don't discard the RTL already made.  */
863   if (DECL_RTL_SET_P (decl))
864     {
865       /* If the old RTL had the wrong mode, fix the mode.  */
866       if (GET_MODE (DECL_RTL (decl)) != DECL_MODE (decl))
867         SET_DECL_RTL (decl, adjust_address_nv (DECL_RTL (decl),
868                                                DECL_MODE (decl), 0));
869
870       if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
871         return;
872
873       /* ??? Another way to do this would be to maintain a hashed
874          table of such critters.  Instead of adding stuff to a DECL
875          to give certain attributes to it, we could use an external
876          hash map from DECL to set of attributes.  */
877
878       /* Let the target reassign the RTL if it wants.
879          This is necessary, for example, when one machine specific
880          decl attribute overrides another.  */
881       targetm.encode_section_info (decl, DECL_RTL (decl), false);
882
883       /* Make this function static known to the mudflap runtime.  */
884       if (flag_mudflap && TREE_CODE (decl) == VAR_DECL)
885         mudflap_enqueue_decl (decl);
886
887       return;
888     }
889
890   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
891
892   reg_number = decode_reg_name (name);
893
894   if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
895     {
896       /* First detect errors in declaring global registers.  */
897       if (reg_number == -1)
898         error ("%Jregister name not specified for '%D'", decl, decl);
899       else if (reg_number < 0)
900         error ("%Jinvalid register name for '%D'", decl, decl);
901       else if (TYPE_MODE (TREE_TYPE (decl)) == BLKmode)
902         error ("%Jdata type of '%D' isn't suitable for a register",
903                decl, decl);
904       else if (! HARD_REGNO_MODE_OK (reg_number, TYPE_MODE (TREE_TYPE (decl))))
905         error ("%Jregister specified for '%D' isn't suitable for data type",
906                decl, decl);
907       /* Now handle properly declared static register variables.  */
908       else
909         {
910           int nregs;
911
912           if (DECL_INITIAL (decl) != 0 && TREE_STATIC (decl))
913             {
914               DECL_INITIAL (decl) = 0;
915               error ("global register variable has initial value");
916             }
917           if (TREE_THIS_VOLATILE (decl))
918             warning ("volatile register variables don't work as you might wish");
919
920           /* If the user specified one of the eliminables registers here,
921              e.g., FRAME_POINTER_REGNUM, we don't want to get this variable
922              confused with that register and be eliminated.  This usage is
923              somewhat suspect...  */
924
925           SET_DECL_RTL (decl, gen_rtx_raw_REG (DECL_MODE (decl), reg_number));
926           ORIGINAL_REGNO (DECL_RTL (decl)) = reg_number;
927           REG_USERVAR_P (DECL_RTL (decl)) = 1;
928
929           if (TREE_STATIC (decl))
930             {
931               /* Make this register global, so not usable for anything
932                  else.  */
933 #ifdef ASM_DECLARE_REGISTER_GLOBAL
934               ASM_DECLARE_REGISTER_GLOBAL (asm_out_file, decl, reg_number, name);
935 #endif
936               nregs = hard_regno_nregs[reg_number][DECL_MODE (decl)];
937               while (nregs > 0)
938                 globalize_reg (reg_number + --nregs);
939             }
940
941           /* As a register variable, it has no section.  */
942           return;
943         }
944     }
945
946   /* Now handle ordinary static variables and functions (in memory).
947      Also handle vars declared register invalidly.  */
948
949   if (name[0] == '*' && (reg_number >= 0 || reg_number == -3))
950     error ("%Jregister name given for non-register variable '%D'", decl, decl);
951
952   /* Specifying a section attribute on a variable forces it into a
953      non-.bss section, and thus it cannot be common.  */
954   if (TREE_CODE (decl) == VAR_DECL
955       && DECL_SECTION_NAME (decl) != NULL_TREE
956       && DECL_INITIAL (decl) == NULL_TREE
957       && DECL_COMMON (decl))
958     DECL_COMMON (decl) = 0;
959
960   /* Variables can't be both common and weak.  */
961   if (TREE_CODE (decl) == VAR_DECL && DECL_WEAK (decl))
962     DECL_COMMON (decl) = 0;
963
964   x = gen_rtx_SYMBOL_REF (Pmode, name);
965   SYMBOL_REF_WEAK (x) = DECL_WEAK (decl);
966   SYMBOL_REF_DECL (x) = decl;
967
968   x = gen_rtx_MEM (DECL_MODE (decl), x);
969   if (TREE_CODE (decl) != FUNCTION_DECL)
970     set_mem_attributes (x, decl, 1);
971   SET_DECL_RTL (decl, x);
972
973   /* Optionally set flags or add text to the name to record information
974      such as that it is a function name.
975      If the name is changed, the macro ASM_OUTPUT_LABELREF
976      will have to know how to strip this information.  */
977   targetm.encode_section_info (decl, DECL_RTL (decl), true);
978
979   /* Make this function static known to the mudflap runtime.  */
980   if (flag_mudflap && TREE_CODE (decl) == VAR_DECL)
981     mudflap_enqueue_decl (decl);
982 }
983
984 /* Make the rtl for variable VAR be volatile.
985    Use this only for static variables.  */
986
987 void
988 make_var_volatile (tree var)
989 {
990   if (!MEM_P (DECL_RTL (var)))
991     abort ();
992
993   MEM_VOLATILE_P (DECL_RTL (var)) = 1;
994 }
995 \f
996 /* Output a string of literal assembler code
997    for an `asm' keyword used between functions.  */
998
999 void
1000 assemble_asm (tree string)
1001 {
1002   app_enable ();
1003
1004   if (TREE_CODE (string) == ADDR_EXPR)
1005     string = TREE_OPERAND (string, 0);
1006
1007   fprintf (asm_out_file, "\t%s\n", TREE_STRING_POINTER (string));
1008 }
1009
1010 /* Record an element in the table of global destructors.  SYMBOL is
1011    a SYMBOL_REF of the function to be called; PRIORITY is a number
1012    between 0 and MAX_INIT_PRIORITY.  */
1013
1014 void
1015 default_stabs_asm_out_destructor (rtx symbol, int priority ATTRIBUTE_UNUSED)
1016 {
1017   /* Tell GNU LD that this is part of the static destructor set.
1018      This will work for any system that uses stabs, most usefully
1019      aout systems.  */
1020   fprintf (asm_out_file, "%s\"___DTOR_LIST__\",22,0,0,", ASM_STABS_OP);
1021   assemble_name (asm_out_file, XSTR (symbol, 0));
1022   fputc ('\n', asm_out_file);
1023 }
1024
1025 void
1026 default_named_section_asm_out_destructor (rtx symbol, int priority)
1027 {
1028   const char *section = ".dtors";
1029   char buf[16];
1030
1031   /* ??? This only works reliably with the GNU linker.  */
1032   if (priority != DEFAULT_INIT_PRIORITY)
1033     {
1034       sprintf (buf, ".dtors.%.5u",
1035                /* Invert the numbering so the linker puts us in the proper
1036                   order; constructors are run from right to left, and the
1037                   linker sorts in increasing order.  */
1038                MAX_INIT_PRIORITY - priority);
1039       section = buf;
1040     }
1041
1042   named_section_flags (section, SECTION_WRITE);
1043   assemble_align (POINTER_SIZE);
1044   assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
1045 }
1046
1047 #ifdef DTORS_SECTION_ASM_OP
1048 void
1049 dtors_section (void)
1050 {
1051   if (in_section != in_dtors)
1052     {
1053       in_section = in_dtors;
1054       fputs (DTORS_SECTION_ASM_OP, asm_out_file);
1055       fputc ('\n', asm_out_file);
1056     }
1057 }
1058
1059 void
1060 default_dtor_section_asm_out_destructor (rtx symbol,
1061                                          int priority ATTRIBUTE_UNUSED)
1062 {
1063   dtors_section ();
1064   assemble_align (POINTER_SIZE);
1065   assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
1066 }
1067 #endif
1068
1069 /* Likewise for global constructors.  */
1070
1071 void
1072 default_stabs_asm_out_constructor (rtx symbol, int priority ATTRIBUTE_UNUSED)
1073 {
1074   /* Tell GNU LD that this is part of the static destructor set.
1075      This will work for any system that uses stabs, most usefully
1076      aout systems.  */
1077   fprintf (asm_out_file, "%s\"___CTOR_LIST__\",22,0,0,", ASM_STABS_OP);
1078   assemble_name (asm_out_file, XSTR (symbol, 0));
1079   fputc ('\n', asm_out_file);
1080 }
1081
1082 void
1083 default_named_section_asm_out_constructor (rtx symbol, int priority)
1084 {
1085   const char *section = ".ctors";
1086   char buf[16];
1087
1088   /* ??? This only works reliably with the GNU linker.  */
1089   if (priority != DEFAULT_INIT_PRIORITY)
1090     {
1091       sprintf (buf, ".ctors.%.5u",
1092                /* Invert the numbering so the linker puts us in the proper
1093                   order; constructors are run from right to left, and the
1094                   linker sorts in increasing order.  */
1095                MAX_INIT_PRIORITY - priority);
1096       section = buf;
1097     }
1098
1099   named_section_flags (section, SECTION_WRITE);
1100   assemble_align (POINTER_SIZE);
1101   assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
1102 }
1103
1104 #ifdef CTORS_SECTION_ASM_OP
1105 void
1106 ctors_section (void)
1107 {
1108   if (in_section != in_ctors)
1109     {
1110       in_section = in_ctors;
1111       fputs (CTORS_SECTION_ASM_OP, asm_out_file);
1112       fputc ('\n', asm_out_file);
1113     }
1114 }
1115
1116 void
1117 default_ctor_section_asm_out_constructor (rtx symbol,
1118                                           int priority ATTRIBUTE_UNUSED)
1119 {
1120   ctors_section ();
1121   assemble_align (POINTER_SIZE);
1122   assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
1123 }
1124 #endif
1125 \f
1126 /* CONSTANT_POOL_BEFORE_FUNCTION may be defined as an expression with
1127    a nonzero value if the constant pool should be output before the
1128    start of the function, or a zero value if the pool should output
1129    after the end of the function.  The default is to put it before the
1130    start.  */
1131
1132 #ifndef CONSTANT_POOL_BEFORE_FUNCTION
1133 #define CONSTANT_POOL_BEFORE_FUNCTION 1
1134 #endif
1135
1136 /* DECL is an object (either VAR_DECL or FUNCTION_DECL) which is going
1137    to be output to assembler.
1138    Set first_global_object_name and weak_global_object_name as appropriate.  */
1139
1140 void
1141 notice_global_symbol (tree decl)
1142 {
1143   const char **type = &first_global_object_name;
1144
1145   if (first_global_object_name
1146       || !TREE_PUBLIC (decl) || DECL_EXTERNAL (decl)
1147       || !DECL_NAME (decl)
1148       || (TREE_CODE (decl) != FUNCTION_DECL
1149           && (TREE_CODE (decl) != VAR_DECL
1150               || (DECL_COMMON (decl)
1151                   && (DECL_INITIAL (decl) == 0
1152                       || DECL_INITIAL (decl) == error_mark_node))))
1153       || !MEM_P (DECL_RTL (decl)))
1154     return;
1155
1156   /* We win when global object is found, but it is useful to know about weak
1157      symbol as well so we can produce nicer unique names.  */
1158   if (DECL_WEAK (decl) || DECL_ONE_ONLY (decl))
1159     type = &weak_global_object_name;
1160
1161   if (!*type)
1162     {
1163       const char *p;
1164       char *name;
1165       rtx decl_rtl = DECL_RTL (decl);
1166
1167       p = targetm.strip_name_encoding (XSTR (XEXP (decl_rtl, 0), 0));
1168       name = xstrdup (p);
1169
1170       *type = name;
1171     }
1172 }
1173
1174 /* Output assembler code for the constant pool of a function and associated
1175    with defining the name of the function.  DECL describes the function.
1176    NAME is the function's name.  For the constant pool, we use the current
1177    constant pool data.  */
1178
1179 void
1180 assemble_start_function (tree decl, const char *fnname)
1181 {
1182   int align;
1183
1184   if (unlikely_text_section_name)
1185     free (unlikely_text_section_name);
1186
1187   unlikely_section_label_printed = false;
1188   unlikely_text_section_name = NULL;
1189   
1190   if (unlikely_section_label)
1191     free (unlikely_section_label);
1192   unlikely_section_label = xmalloc ((strlen (fnname) + 18) * sizeof (char));
1193   sprintf (unlikely_section_label, "%s_unlikely_section", fnname);
1194   
1195   /* The following code does not need preprocessing in the assembler.  */
1196
1197   app_disable ();
1198
1199   if (CONSTANT_POOL_BEFORE_FUNCTION)
1200     output_constant_pool (fnname, decl);
1201
1202   /* Make sure the cold text (code) section is properly aligned.  This
1203      is necessary here in the case where the function has both hot and
1204      cold sections, because we don't want to re-set the alignment when the
1205      section switch happens mid-function.  We don't need to set the hot
1206      section alignment here, because code further down in this function
1207      sets the alignment for whichever section comes first, and if there
1208      is a hot section it is guaranteed to be first.  */
1209
1210   if (flag_reorder_blocks_and_partition)
1211     {
1212       unlikely_text_section ();
1213       assemble_align (FUNCTION_BOUNDARY);
1214     }
1215
1216   resolve_unique_section (decl, 0, flag_function_sections);
1217   function_section (decl);
1218
1219   /* Tell assembler to move to target machine's alignment for functions.  */
1220   align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT);
1221   if (align < force_align_functions_log)
1222     align = force_align_functions_log;
1223   if (align > 0)
1224     {
1225       ASM_OUTPUT_ALIGN (asm_out_file, align);
1226     }
1227
1228   /* Handle a user-specified function alignment.
1229      Note that we still need to align to FUNCTION_BOUNDARY, as above,
1230      because ASM_OUTPUT_MAX_SKIP_ALIGN might not do any alignment at all.  */
1231   if (align_functions_log > align
1232       && cfun->function_frequency != FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
1233     {
1234 #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
1235       ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file,
1236                                  align_functions_log, align_functions - 1);
1237 #else
1238       ASM_OUTPUT_ALIGN (asm_out_file, align_functions_log);
1239 #endif
1240     }
1241
1242 #ifdef ASM_OUTPUT_FUNCTION_PREFIX
1243   ASM_OUTPUT_FUNCTION_PREFIX (asm_out_file, fnname);
1244 #endif
1245
1246   (*debug_hooks->begin_function) (decl);
1247
1248   /* Make function name accessible from other files, if appropriate.  */
1249
1250   if (TREE_PUBLIC (decl))
1251     {
1252       notice_global_symbol (decl);
1253
1254       globalize_decl (decl);
1255
1256       maybe_assemble_visibility (decl);
1257     }
1258
1259   if (DECL_PRESERVE_P (decl))
1260     targetm.asm_out.mark_decl_preserved (fnname);
1261
1262   /* Do any machine/system dependent processing of the function name.  */
1263 #ifdef ASM_DECLARE_FUNCTION_NAME
1264   ASM_DECLARE_FUNCTION_NAME (asm_out_file, fnname, current_function_decl);
1265 #else
1266   /* Standard thing is just output label for the function.  */
1267   ASM_OUTPUT_LABEL (asm_out_file, fnname);
1268 #endif /* ASM_DECLARE_FUNCTION_NAME */
1269
1270   if (in_unlikely_text_section ()
1271       && !unlikely_section_label_printed)
1272     {
1273       ASM_OUTPUT_LABEL (asm_out_file, unlikely_section_label);
1274       unlikely_section_label_printed = true;
1275     }
1276 }
1277
1278 /* Output assembler code associated with defining the size of the
1279    function.  DECL describes the function.  NAME is the function's name.  */
1280
1281 void
1282 assemble_end_function (tree decl, const char *fnname)
1283 {
1284 #ifdef ASM_DECLARE_FUNCTION_SIZE
1285   ASM_DECLARE_FUNCTION_SIZE (asm_out_file, fnname, decl);
1286 #endif
1287   if (! CONSTANT_POOL_BEFORE_FUNCTION)
1288     {
1289       output_constant_pool (fnname, decl);
1290       function_section (decl);  /* need to switch back */
1291     }
1292 }
1293 \f
1294 /* Assemble code to leave SIZE bytes of zeros.  */
1295
1296 void
1297 assemble_zeros (unsigned HOST_WIDE_INT size)
1298 {
1299   /* Do no output if -fsyntax-only.  */
1300   if (flag_syntax_only)
1301     return;
1302
1303 #ifdef ASM_NO_SKIP_IN_TEXT
1304   /* The `space' pseudo in the text section outputs nop insns rather than 0s,
1305      so we must output 0s explicitly in the text section.  */
1306   if ((ASM_NO_SKIP_IN_TEXT && in_text_section ())
1307       || (ASM_NO_SKIP_IN_TEXT && in_unlikely_text_section ()))
1308     {
1309       unsigned HOST_WIDE_INT i;
1310       for (i = 0; i < size; i++)
1311         assemble_integer (const0_rtx, 1, BITS_PER_UNIT, 1);
1312     }
1313   else
1314 #endif
1315     if (size > 0)
1316       ASM_OUTPUT_SKIP (asm_out_file, size);
1317 }
1318
1319 /* Assemble an alignment pseudo op for an ALIGN-bit boundary.  */
1320
1321 void
1322 assemble_align (int align)
1323 {
1324   if (align > BITS_PER_UNIT)
1325     {
1326       ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
1327     }
1328 }
1329
1330 /* Assemble a string constant with the specified C string as contents.  */
1331
1332 void
1333 assemble_string (const char *p, int size)
1334 {
1335   int pos = 0;
1336   int maximum = 2000;
1337
1338   /* If the string is very long, split it up.  */
1339
1340   while (pos < size)
1341     {
1342       int thissize = size - pos;
1343       if (thissize > maximum)
1344         thissize = maximum;
1345
1346       ASM_OUTPUT_ASCII (asm_out_file, p, thissize);
1347
1348       pos += thissize;
1349       p += thissize;
1350     }
1351 }
1352
1353 \f
1354 #if defined  ASM_OUTPUT_ALIGNED_DECL_LOCAL
1355 #define ASM_EMIT_LOCAL(decl, name, size, rounded) \
1356   ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, decl, name, size, DECL_ALIGN (decl))
1357 #else
1358 #if defined  ASM_OUTPUT_ALIGNED_LOCAL
1359 #define ASM_EMIT_LOCAL(decl, name, size, rounded) \
1360   ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, DECL_ALIGN (decl))
1361 #else
1362 #define ASM_EMIT_LOCAL(decl, name, size, rounded) \
1363   ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded)
1364 #endif
1365 #endif
1366
1367 #if defined ASM_OUTPUT_ALIGNED_BSS
1368 #define ASM_EMIT_BSS(decl, name, size, rounded) \
1369   ASM_OUTPUT_ALIGNED_BSS (asm_out_file, decl, name, size, DECL_ALIGN (decl))
1370 #else
1371 #if defined ASM_OUTPUT_BSS
1372 #define ASM_EMIT_BSS(decl, name, size, rounded) \
1373   ASM_OUTPUT_BSS (asm_out_file, decl, name, size, rounded)
1374 #else
1375 #undef  ASM_EMIT_BSS
1376 #endif
1377 #endif
1378
1379 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
1380 #define ASM_EMIT_COMMON(decl, name, size, rounded) \
1381   ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, decl, name, size, DECL_ALIGN (decl))
1382 #else
1383 #if defined ASM_OUTPUT_ALIGNED_COMMON
1384 #define ASM_EMIT_COMMON(decl, name, size, rounded) \
1385   ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, name, size, DECL_ALIGN (decl))
1386 #else
1387 #define ASM_EMIT_COMMON(decl, name, size, rounded) \
1388   ASM_OUTPUT_COMMON (asm_out_file, name, size, rounded)
1389 #endif
1390 #endif
1391
1392 static bool
1393 asm_emit_uninitialised (tree decl, const char *name,
1394                         unsigned HOST_WIDE_INT size ATTRIBUTE_UNUSED,
1395                         unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
1396 {
1397   enum
1398   {
1399     asm_dest_common,
1400     asm_dest_bss,
1401     asm_dest_local
1402   }
1403   destination = asm_dest_local;
1404
1405   /* ??? We should handle .bss via select_section mechanisms rather than
1406      via special target hooks.  That would eliminate this special case.  */
1407   if (TREE_PUBLIC (decl))
1408     {
1409       if (!DECL_COMMON (decl))
1410 #ifdef ASM_EMIT_BSS
1411         destination = asm_dest_bss;
1412 #else
1413         return false;
1414 #endif
1415       else
1416         destination = asm_dest_common;
1417     }
1418
1419   if (destination == asm_dest_bss)
1420     globalize_decl (decl);
1421   resolve_unique_section (decl, 0, flag_data_sections);
1422
1423   if (flag_shared_data)
1424     {
1425       switch (destination)
1426         {
1427 #ifdef ASM_OUTPUT_SHARED_BSS
1428         case asm_dest_bss:
1429           ASM_OUTPUT_SHARED_BSS (asm_out_file, decl, name, size, rounded);
1430           return;
1431 #endif
1432 #ifdef ASM_OUTPUT_SHARED_COMMON
1433         case asm_dest_common:
1434           ASM_OUTPUT_SHARED_COMMON (asm_out_file, name, size, rounded);
1435           return;
1436 #endif
1437 #ifdef ASM_OUTPUT_SHARED_LOCAL
1438         case asm_dest_local:
1439           ASM_OUTPUT_SHARED_LOCAL (asm_out_file, name, size, rounded);
1440           return;
1441 #endif
1442         default:
1443           break;
1444         }
1445     }
1446
1447   switch (destination)
1448     {
1449 #ifdef ASM_EMIT_BSS
1450     case asm_dest_bss:
1451       ASM_EMIT_BSS (decl, name, size, rounded);
1452       break;
1453 #endif
1454     case asm_dest_common:
1455       ASM_EMIT_COMMON (decl, name, size, rounded);
1456       break;
1457     case asm_dest_local:
1458       ASM_EMIT_LOCAL (decl, name, size, rounded);
1459       break;
1460     default:
1461       abort ();
1462     }
1463
1464   return true;
1465 }
1466
1467 /* Assemble everything that is needed for a variable or function declaration.
1468    Not used for automatic variables, and not used for function definitions.
1469    Should not be called for variables of incomplete structure type.
1470
1471    TOP_LEVEL is nonzero if this variable has file scope.
1472    AT_END is nonzero if this is the special handling, at end of compilation,
1473    to define things that have had only tentative definitions.
1474    DONT_OUTPUT_DATA if nonzero means don't actually output the
1475    initial value (that will be done by the caller).  */
1476
1477 void
1478 assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED,
1479                    int at_end ATTRIBUTE_UNUSED, int dont_output_data)
1480 {
1481   const char *name;
1482   unsigned int align;
1483   int reloc = 0;
1484   rtx decl_rtl;
1485
1486   if (lang_hooks.decls.prepare_assemble_variable)
1487     lang_hooks.decls.prepare_assemble_variable (decl);
1488
1489   last_assemble_variable_decl = 0;
1490
1491   /* Normally no need to say anything here for external references,
1492      since assemble_external is called by the language-specific code
1493      when a declaration is first seen.  */
1494
1495   if (DECL_EXTERNAL (decl))
1496     return;
1497
1498   /* Output no assembler code for a function declaration.
1499      Only definitions of functions output anything.  */
1500
1501   if (TREE_CODE (decl) == FUNCTION_DECL)
1502     return;
1503
1504   /* Do nothing for global register variables.  */
1505   if (DECL_RTL_SET_P (decl) && REG_P (DECL_RTL (decl)))
1506     {
1507       TREE_ASM_WRITTEN (decl) = 1;
1508       return;
1509     }
1510
1511   /* If type was incomplete when the variable was declared,
1512      see if it is complete now.  */
1513
1514   if (DECL_SIZE (decl) == 0)
1515     layout_decl (decl, 0);
1516
1517   /* Still incomplete => don't allocate it; treat the tentative defn
1518      (which is what it must have been) as an `extern' reference.  */
1519
1520   if (!dont_output_data && DECL_SIZE (decl) == 0)
1521     {
1522       error ("%Jstorage size of `%D' isn't known", decl, decl);
1523       TREE_ASM_WRITTEN (decl) = 1;
1524       return;
1525     }
1526
1527   /* The first declaration of a variable that comes through this function
1528      decides whether it is global (in C, has external linkage)
1529      or local (in C, has internal linkage).  So do nothing more
1530      if this function has already run.  */
1531
1532   if (TREE_ASM_WRITTEN (decl))
1533     return;
1534
1535   /* Make sure targetm.encode_section_info is invoked before we set
1536      ASM_WRITTEN.  */
1537   decl_rtl = DECL_RTL (decl);
1538
1539   TREE_ASM_WRITTEN (decl) = 1;
1540
1541   /* Do no output if -fsyntax-only.  */
1542   if (flag_syntax_only)
1543     return;
1544
1545   app_disable ();
1546
1547   if (! dont_output_data
1548       && ! host_integerp (DECL_SIZE_UNIT (decl), 1))
1549     {
1550       error ("%Jsize of variable '%D' is too large", decl, decl);
1551       return;
1552     }
1553
1554   name = XSTR (XEXP (decl_rtl, 0), 0);
1555   if (TREE_PUBLIC (decl) && DECL_NAME (decl))
1556     notice_global_symbol (decl);
1557
1558   /* Compute the alignment of this data.  */
1559
1560   align = DECL_ALIGN (decl);
1561
1562   /* In the case for initialing an array whose length isn't specified,
1563      where we have not yet been able to do the layout,
1564      figure out the proper alignment now.  */
1565   if (dont_output_data && DECL_SIZE (decl) == 0
1566       && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
1567     align = MAX (align, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (decl))));
1568
1569   /* Some object file formats have a maximum alignment which they support.
1570      In particular, a.out format supports a maximum alignment of 4.  */
1571   if (align > MAX_OFILE_ALIGNMENT)
1572     {
1573       warning ("%Jalignment of '%D' is greater than maximum object "
1574                "file alignment.  Using %d", decl, decl,
1575                MAX_OFILE_ALIGNMENT/BITS_PER_UNIT);
1576       align = MAX_OFILE_ALIGNMENT;
1577     }
1578
1579   /* On some machines, it is good to increase alignment sometimes.  */
1580   if (! DECL_USER_ALIGN (decl))
1581     {
1582 #ifdef DATA_ALIGNMENT
1583       align = DATA_ALIGNMENT (TREE_TYPE (decl), align);
1584 #endif
1585 #ifdef CONSTANT_ALIGNMENT
1586       if (DECL_INITIAL (decl) != 0 && DECL_INITIAL (decl) != error_mark_node)
1587         align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl), align);
1588 #endif
1589     }
1590
1591   /* Reset the alignment in case we have made it tighter, so we can benefit
1592      from it in get_pointer_alignment.  */
1593   DECL_ALIGN (decl) = align;
1594   set_mem_align (decl_rtl, align);
1595
1596   if (TREE_PUBLIC (decl))
1597     maybe_assemble_visibility (decl);
1598
1599   if (DECL_PRESERVE_P (decl))
1600     targetm.asm_out.mark_decl_preserved (name);
1601
1602   /* Output any data that we will need to use the address of.  */
1603   if (DECL_INITIAL (decl) == error_mark_node)
1604     reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0;
1605   else if (DECL_INITIAL (decl))
1606     {
1607       reloc = compute_reloc_for_constant (DECL_INITIAL (decl));
1608       output_addressed_constants (DECL_INITIAL (decl));
1609     }
1610   resolve_unique_section (decl, reloc, flag_data_sections);
1611
1612   /* Handle uninitialized definitions.  */
1613
1614   /* If the decl has been given an explicit section name, then it
1615      isn't common, and shouldn't be handled as such.  */
1616   if (DECL_SECTION_NAME (decl) || dont_output_data)
1617     ;
1618   /* We don't implement common thread-local data at present.  */
1619   else if (DECL_THREAD_LOCAL (decl))
1620     {
1621       if (DECL_COMMON (decl))
1622         sorry ("thread-local COMMON data not implemented");
1623     }
1624   else if (DECL_INITIAL (decl) == 0
1625            || DECL_INITIAL (decl) == error_mark_node
1626            || (flag_zero_initialized_in_bss
1627                /* Leave constant zeroes in .rodata so they can be shared.  */
1628                && !TREE_READONLY (decl)
1629                && initializer_zerop (DECL_INITIAL (decl))))
1630     {
1631       unsigned HOST_WIDE_INT size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
1632       unsigned HOST_WIDE_INT rounded = size;
1633
1634       /* Don't allocate zero bytes of common,
1635          since that means "undefined external" in the linker.  */
1636       if (size == 0)
1637         rounded = 1;
1638
1639       /* Round size up to multiple of BIGGEST_ALIGNMENT bits
1640          so that each uninitialized object starts on such a boundary.  */
1641       rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1;
1642       rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
1643                  * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
1644
1645 #if !defined(ASM_OUTPUT_ALIGNED_COMMON) && !defined(ASM_OUTPUT_ALIGNED_DECL_COMMON) && !defined(ASM_OUTPUT_ALIGNED_BSS)
1646       if ((unsigned HOST_WIDE_INT) DECL_ALIGN_UNIT (decl) > rounded)
1647         warning ("%Jrequested alignment for '%D' is greater than "
1648                  "implemented alignment of %d", decl, decl, rounded);
1649 #endif
1650
1651       /* If the target cannot output uninitialized but not common global data
1652          in .bss, then we have to use .data, so fall through.  */
1653       if (asm_emit_uninitialised (decl, name, size, rounded))
1654         return;
1655     }
1656
1657   /* Handle initialized definitions.
1658      Also handle uninitialized global definitions if -fno-common and the
1659      target doesn't support ASM_OUTPUT_BSS.  */
1660
1661   /* First make the assembler name(s) global if appropriate.  */
1662   if (TREE_PUBLIC (decl) && DECL_NAME (decl))
1663     globalize_decl (decl);
1664
1665   /* Switch to the appropriate section.  */
1666   variable_section (decl, reloc);
1667
1668   /* dbxout.c needs to know this.  */
1669   if (in_text_section () || in_unlikely_text_section ())
1670     DECL_IN_TEXT_SECTION (decl) = 1;
1671
1672   /* Output the alignment of this data.  */
1673   if (align > BITS_PER_UNIT)
1674     ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DECL_ALIGN_UNIT (decl)));
1675
1676   /* Do any machine/system dependent processing of the object.  */
1677 #ifdef ASM_DECLARE_OBJECT_NAME
1678   last_assemble_variable_decl = decl;
1679   ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl);
1680 #else
1681   /* Standard thing is just output label for the object.  */
1682   ASM_OUTPUT_LABEL (asm_out_file, name);
1683 #endif /* ASM_DECLARE_OBJECT_NAME */
1684
1685   if (!dont_output_data)
1686     {
1687       if (DECL_INITIAL (decl)
1688           && DECL_INITIAL (decl) != error_mark_node
1689           && !initializer_zerop (DECL_INITIAL (decl)))
1690         /* Output the actual data.  */
1691         output_constant (DECL_INITIAL (decl),
1692                          tree_low_cst (DECL_SIZE_UNIT (decl), 1),
1693                          align);
1694       else
1695         /* Leave space for it.  */
1696         assemble_zeros (tree_low_cst (DECL_SIZE_UNIT (decl), 1));
1697     }
1698 }
1699
1700 /* Return 1 if type TYPE contains any pointers.  */
1701
1702 static int
1703 contains_pointers_p (tree type)
1704 {
1705   switch (TREE_CODE (type))
1706     {
1707     case POINTER_TYPE:
1708     case REFERENCE_TYPE:
1709       /* I'm not sure whether OFFSET_TYPE needs this treatment,
1710          so I'll play safe and return 1.  */
1711     case OFFSET_TYPE:
1712       return 1;
1713
1714     case RECORD_TYPE:
1715     case UNION_TYPE:
1716     case QUAL_UNION_TYPE:
1717       {
1718         tree fields;
1719         /* For a type that has fields, see if the fields have pointers.  */
1720         for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
1721           if (TREE_CODE (fields) == FIELD_DECL
1722               && contains_pointers_p (TREE_TYPE (fields)))
1723             return 1;
1724         return 0;
1725       }
1726
1727     case ARRAY_TYPE:
1728       /* An array type contains pointers if its element type does.  */
1729       return contains_pointers_p (TREE_TYPE (type));
1730
1731     default:
1732       return 0;
1733     }
1734 }
1735
1736 #ifdef ASM_OUTPUT_EXTERNAL
1737 /* True if DECL is a function decl for which no out-of-line copy exists.
1738    It is assumed that DECL's assembler name has been set.  */
1739
1740 static bool
1741 incorporeal_function_p (tree decl)
1742 {
1743   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
1744     {
1745       const char *name;
1746
1747       if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
1748           && DECL_FUNCTION_CODE (decl) == BUILT_IN_ALLOCA)
1749         return true;
1750
1751       name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
1752       if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
1753         return true;
1754     }
1755   return false;
1756 }
1757 #endif
1758
1759 /* Output something to declare an external symbol to the assembler.
1760    (Most assemblers don't need this, so we normally output nothing.)
1761    Do nothing if DECL is not external.  */
1762
1763 void
1764 assemble_external (tree decl ATTRIBUTE_UNUSED)
1765 {
1766   /* Because most platforms do not define ASM_OUTPUT_EXTERNAL, the
1767      main body of this code is only rarely exercised.  To provide some
1768      testing, on all platforms, we make sure that the ASM_OUT_FILE is
1769      open.  If it's not, we should not be calling this function.  */
1770   if (!asm_out_file)
1771     abort ();
1772
1773 #ifdef ASM_OUTPUT_EXTERNAL
1774   if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
1775     {
1776       rtx rtl = DECL_RTL (decl);
1777
1778       if (MEM_P (rtl) && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF
1779           && !SYMBOL_REF_USED (XEXP (rtl, 0))
1780           && !incorporeal_function_p (decl))
1781         {
1782           /* Some systems do require some output.  */
1783           SYMBOL_REF_USED (XEXP (rtl, 0)) = 1;
1784           ASM_OUTPUT_EXTERNAL (asm_out_file, decl, XSTR (XEXP (rtl, 0), 0));
1785         }
1786     }
1787 #endif
1788 }
1789
1790 /* Similar, for calling a library function FUN.  */
1791
1792 void
1793 assemble_external_libcall (rtx fun)
1794 {
1795   /* Declare library function name external when first used, if nec.  */
1796   if (! SYMBOL_REF_USED (fun))
1797     {
1798       SYMBOL_REF_USED (fun) = 1;
1799       targetm.asm_out.external_libcall (fun);
1800     }
1801 }
1802
1803 /* Assemble a label named NAME.  */
1804
1805 void
1806 assemble_label (const char *name)
1807 {
1808   ASM_OUTPUT_LABEL (asm_out_file, name);
1809 }
1810
1811 /* Set the symbol_referenced flag for ID.  */
1812 void
1813 mark_referenced (tree id)
1814 {
1815   TREE_SYMBOL_REFERENCED (id) = 1;
1816 }
1817
1818 /* Set the symbol_referenced flag for DECL and notify callgraph.  */
1819 void
1820 mark_decl_referenced (tree decl)
1821 {
1822   if (TREE_CODE (decl) == FUNCTION_DECL)
1823     cgraph_mark_needed_node (cgraph_node (decl));
1824   else if (TREE_CODE (decl) == VAR_DECL)
1825     cgraph_varpool_mark_needed_node (cgraph_varpool_node (decl));
1826   /* else do nothing - we can get various sorts of CST nodes here,
1827      which do not need to be marked.  */
1828 }
1829
1830 /* Output to FILE a reference to the assembler name of a C-level name NAME.
1831    If NAME starts with a *, the rest of NAME is output verbatim.
1832    Otherwise NAME is transformed in an implementation-defined way
1833    (usually by the addition of an underscore).
1834    Many macros in the tm file are defined to call this function.  */
1835
1836 void
1837 assemble_name (FILE *file, const char *name)
1838 {
1839   const char *real_name;
1840   tree id;
1841
1842   real_name = targetm.strip_name_encoding (name);
1843
1844   id = maybe_get_identifier (real_name);
1845   if (id)
1846     mark_referenced (id);
1847
1848   if (name[0] == '*')
1849     fputs (&name[1], file);
1850   else
1851     ASM_OUTPUT_LABELREF (file, name);
1852 }
1853
1854 /* Allocate SIZE bytes writable static space with a gensym name
1855    and return an RTX to refer to its address.  */
1856
1857 rtx
1858 assemble_static_space (unsigned HOST_WIDE_INT size)
1859 {
1860   char name[12];
1861   const char *namestring;
1862   rtx x;
1863
1864 #if 0
1865   if (flag_shared_data)
1866     data_section ();
1867 #endif
1868
1869   ASM_GENERATE_INTERNAL_LABEL (name, "LF", const_labelno);
1870   ++const_labelno;
1871   namestring = ggc_strdup (name);
1872
1873   x = gen_rtx_SYMBOL_REF (Pmode, namestring);
1874   SYMBOL_REF_FLAGS (x) = SYMBOL_FLAG_LOCAL;
1875
1876 #ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
1877   ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, NULL_TREE, name, size,
1878                                  BIGGEST_ALIGNMENT);
1879 #else
1880 #ifdef ASM_OUTPUT_ALIGNED_LOCAL
1881   ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, BIGGEST_ALIGNMENT);
1882 #else
1883   {
1884     /* Round size up to multiple of BIGGEST_ALIGNMENT bits
1885        so that each uninitialized object starts on such a boundary.  */
1886     /* Variable `rounded' might or might not be used in ASM_OUTPUT_LOCAL.  */
1887     unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED
1888       = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1)
1889          / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
1890          * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
1891     ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
1892   }
1893 #endif
1894 #endif
1895   return x;
1896 }
1897
1898 /* Assemble the static constant template for function entry trampolines.
1899    This is done at most once per compilation.
1900    Returns an RTX for the address of the template.  */
1901
1902 static GTY(()) rtx initial_trampoline;
1903
1904 #ifdef TRAMPOLINE_TEMPLATE
1905 rtx
1906 assemble_trampoline_template (void)
1907 {
1908   char label[256];
1909   const char *name;
1910   int align;
1911   rtx symbol;
1912
1913   if (initial_trampoline)
1914     return initial_trampoline;
1915
1916   /* By default, put trampoline templates in read-only data section.  */
1917
1918 #ifdef TRAMPOLINE_SECTION
1919   TRAMPOLINE_SECTION ();
1920 #else
1921   readonly_data_section ();
1922 #endif
1923
1924   /* Write the assembler code to define one.  */
1925   align = floor_log2 (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT);
1926   if (align > 0)
1927     {
1928       ASM_OUTPUT_ALIGN (asm_out_file, align);
1929     }
1930
1931   targetm.asm_out.internal_label (asm_out_file, "LTRAMP", 0);
1932   TRAMPOLINE_TEMPLATE (asm_out_file);
1933
1934   /* Record the rtl to refer to it.  */
1935   ASM_GENERATE_INTERNAL_LABEL (label, "LTRAMP", 0);
1936   name = ggc_strdup (label);
1937   symbol = gen_rtx_SYMBOL_REF (Pmode, name);
1938   SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
1939
1940   initial_trampoline = gen_rtx_MEM (BLKmode, symbol);
1941   set_mem_align (initial_trampoline, TRAMPOLINE_ALIGNMENT);
1942
1943   return initial_trampoline;
1944 }
1945 #endif
1946 \f
1947 /* A and B are either alignments or offsets.  Return the minimum alignment
1948    that may be assumed after adding the two together.  */
1949
1950 static inline unsigned
1951 min_align (unsigned int a, unsigned int b)
1952 {
1953   return (a | b) & -(a | b);
1954 }
1955
1956 /* Return the assembler directive for creating a given kind of integer
1957    object.  SIZE is the number of bytes in the object and ALIGNED_P
1958    indicates whether it is known to be aligned.  Return NULL if the
1959    assembly dialect has no such directive.
1960
1961    The returned string should be printed at the start of a new line and
1962    be followed immediately by the object's initial value.  */
1963
1964 const char *
1965 integer_asm_op (int size, int aligned_p)
1966 {
1967   struct asm_int_op *ops;
1968
1969   if (aligned_p)
1970     ops = &targetm.asm_out.aligned_op;
1971   else
1972     ops = &targetm.asm_out.unaligned_op;
1973
1974   switch (size)
1975     {
1976     case 1:
1977       return targetm.asm_out.byte_op;
1978     case 2:
1979       return ops->hi;
1980     case 4:
1981       return ops->si;
1982     case 8:
1983       return ops->di;
1984     case 16:
1985       return ops->ti;
1986     default:
1987       return NULL;
1988     }
1989 }
1990
1991 /* Use directive OP to assemble an integer object X.  Print OP at the
1992    start of the line, followed immediately by the value of X.  */
1993
1994 void
1995 assemble_integer_with_op (const char *op, rtx x)
1996 {
1997   fputs (op, asm_out_file);
1998   output_addr_const (asm_out_file, x);
1999   fputc ('\n', asm_out_file);
2000 }
2001
2002 /* The default implementation of the asm_out.integer target hook.  */
2003
2004 bool
2005 default_assemble_integer (rtx x ATTRIBUTE_UNUSED,
2006                           unsigned int size ATTRIBUTE_UNUSED,
2007                           int aligned_p ATTRIBUTE_UNUSED)
2008 {
2009   const char *op = integer_asm_op (size, aligned_p);
2010   return op && (assemble_integer_with_op (op, x), true);
2011 }
2012
2013 /* Assemble the integer constant X into an object of SIZE bytes.  ALIGN is
2014    the alignment of the integer in bits.  Return 1 if we were able to output
2015    the constant, otherwise 0.  If FORCE is nonzero, abort if we can't output
2016    the constant.  */
2017
2018 bool
2019 assemble_integer (rtx x, unsigned int size, unsigned int align, int force)
2020 {
2021   int aligned_p;
2022
2023   aligned_p = (align >= MIN (size * BITS_PER_UNIT, BIGGEST_ALIGNMENT));
2024
2025   /* See if the target hook can handle this kind of object.  */
2026   if (targetm.asm_out.integer (x, size, aligned_p))
2027     return true;
2028
2029   /* If the object is a multi-byte one, try splitting it up.  Split
2030      it into words it if is multi-word, otherwise split it into bytes.  */
2031   if (size > 1)
2032     {
2033       enum machine_mode omode, imode;
2034       unsigned int subalign;
2035       unsigned int subsize, i;
2036
2037       subsize = size > UNITS_PER_WORD? UNITS_PER_WORD : 1;
2038       subalign = MIN (align, subsize * BITS_PER_UNIT);
2039       omode = mode_for_size (subsize * BITS_PER_UNIT, MODE_INT, 0);
2040       imode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0);
2041
2042       for (i = 0; i < size; i += subsize)
2043         {
2044           rtx partial = simplify_subreg (omode, x, imode, i);
2045           if (!partial || !assemble_integer (partial, subsize, subalign, 0))
2046             break;
2047         }
2048       if (i == size)
2049         return true;
2050
2051       /* If we've printed some of it, but not all of it, there's no going
2052          back now.  */
2053       if (i > 0)
2054         abort ();
2055     }
2056
2057   if (force)
2058     abort ();
2059
2060   return false;
2061 }
2062 \f
2063 void
2064 assemble_real (REAL_VALUE_TYPE d, enum machine_mode mode, unsigned int align)
2065 {
2066   long data[4];
2067   int i;
2068   int bitsize, nelts, nunits, units_per;
2069
2070   /* This is hairy.  We have a quantity of known size.  real_to_target
2071      will put it into an array of *host* longs, 32 bits per element
2072      (even if long is more than 32 bits).  We need to determine the
2073      number of array elements that are occupied (nelts) and the number
2074      of *target* min-addressable units that will be occupied in the
2075      object file (nunits).  We cannot assume that 32 divides the
2076      mode's bitsize (size * BITS_PER_UNIT) evenly.
2077
2078      size * BITS_PER_UNIT is used here to make sure that padding bits
2079      (which might appear at either end of the value; real_to_target
2080      will include the padding bits in its output array) are included.  */
2081
2082   nunits = GET_MODE_SIZE (mode);
2083   bitsize = nunits * BITS_PER_UNIT;
2084   nelts = CEIL (bitsize, 32);
2085   units_per = 32 / BITS_PER_UNIT;
2086
2087   real_to_target (data, &d, mode);
2088
2089   /* Put out the first word with the specified alignment.  */
2090   assemble_integer (GEN_INT (data[0]), MIN (nunits, units_per), align, 1);
2091   nunits -= units_per;
2092
2093   /* Subsequent words need only 32-bit alignment.  */
2094   align = min_align (align, 32);
2095
2096   for (i = 1; i < nelts; i++)
2097     {
2098       assemble_integer (GEN_INT (data[i]), MIN (nunits, units_per), align, 1);
2099       nunits -= units_per;
2100     }
2101 }
2102 \f
2103 /* Given an expression EXP with a constant value,
2104    reduce it to the sum of an assembler symbol and an integer.
2105    Store them both in the structure *VALUE.
2106    Abort if EXP does not reduce.  */
2107
2108 struct addr_const GTY(())
2109 {
2110   rtx base;
2111   HOST_WIDE_INT offset;
2112 };
2113
2114 static void
2115 decode_addr_const (tree exp, struct addr_const *value)
2116 {
2117   tree target = TREE_OPERAND (exp, 0);
2118   int offset = 0;
2119   rtx x;
2120
2121   while (1)
2122     {
2123       if (TREE_CODE (target) == COMPONENT_REF
2124           && host_integerp (byte_position (TREE_OPERAND (target, 1)), 0))
2125
2126         {
2127           offset += int_byte_position (TREE_OPERAND (target, 1));
2128           target = TREE_OPERAND (target, 0);
2129         }
2130       else if (TREE_CODE (target) == ARRAY_REF
2131                || TREE_CODE (target) == ARRAY_RANGE_REF)
2132         {
2133           offset += (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (target)), 1)
2134                      * tree_low_cst (TREE_OPERAND (target, 1), 0));
2135           target = TREE_OPERAND (target, 0);
2136         }
2137       else
2138         break;
2139     }
2140
2141   switch (TREE_CODE (target))
2142     {
2143     case VAR_DECL:
2144     case FUNCTION_DECL:
2145       x = DECL_RTL (target);
2146       break;
2147
2148     case LABEL_DECL:
2149       x = gen_rtx_MEM (FUNCTION_MODE,
2150                        gen_rtx_LABEL_REF (VOIDmode, force_label_rtx (target)));
2151       break;
2152
2153     case REAL_CST:
2154     case STRING_CST:
2155     case COMPLEX_CST:
2156     case CONSTRUCTOR:
2157     case INTEGER_CST:
2158       x = output_constant_def (target, 1);
2159       break;
2160
2161     default:
2162       abort ();
2163     }
2164
2165   if (!MEM_P (x))
2166     abort ();
2167   x = XEXP (x, 0);
2168
2169   value->base = x;
2170   value->offset = offset;
2171 }
2172 \f
2173 /* Uniquize all constants that appear in memory.
2174    Each constant in memory thus far output is recorded
2175    in `const_desc_table'.  */
2176
2177 struct constant_descriptor_tree GTY(())
2178 {
2179   /* A MEM for the constant.  */
2180   rtx rtl;
2181
2182   /* The value of the constant.  */
2183   tree value;
2184 };
2185
2186 static GTY((param_is (struct constant_descriptor_tree)))
2187      htab_t const_desc_htab;
2188
2189 static struct constant_descriptor_tree * build_constant_desc (tree);
2190 static void maybe_output_constant_def_contents (struct constant_descriptor_tree *, int);
2191
2192 /* Compute a hash code for a constant expression.  */
2193
2194 static hashval_t
2195 const_desc_hash (const void *ptr)
2196 {
2197   return const_hash_1 (((struct constant_descriptor_tree *)ptr)->value);
2198 }
2199
2200 static hashval_t
2201 const_hash_1 (const tree exp)
2202 {
2203   const char *p;
2204   hashval_t hi;
2205   int len, i;
2206   enum tree_code code = TREE_CODE (exp);
2207
2208   /* Either set P and LEN to the address and len of something to hash and
2209      exit the switch or return a value.  */
2210
2211   switch (code)
2212     {
2213     case INTEGER_CST:
2214       p = (char *) &TREE_INT_CST (exp);
2215       len = sizeof TREE_INT_CST (exp);
2216       break;
2217
2218     case REAL_CST:
2219       return real_hash (TREE_REAL_CST_PTR (exp));
2220
2221     case STRING_CST:
2222       p = TREE_STRING_POINTER (exp);
2223       len = TREE_STRING_LENGTH (exp);
2224       break;
2225
2226     case COMPLEX_CST:
2227       return (const_hash_1 (TREE_REALPART (exp)) * 5
2228               + const_hash_1 (TREE_IMAGPART (exp)));
2229
2230     case CONSTRUCTOR:
2231       if (TREE_CODE (TREE_TYPE (exp)) == SET_TYPE)
2232         {
2233           char *tmp;
2234
2235           len = int_size_in_bytes (TREE_TYPE (exp));
2236           tmp = alloca (len);
2237           get_set_constructor_bytes (exp, (unsigned char *) tmp, len);
2238           p = tmp;
2239           break;
2240         }
2241       else
2242         {
2243           tree link;
2244
2245           hi = 5 + int_size_in_bytes (TREE_TYPE (exp));
2246
2247           for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link))
2248             if (TREE_VALUE (link))
2249               hi = hi * 603 + const_hash_1 (TREE_VALUE (link));
2250
2251           return hi;
2252         }
2253
2254     case ADDR_EXPR:
2255     case FDESC_EXPR:
2256       {
2257         struct addr_const value;
2258
2259         decode_addr_const (exp, &value);
2260         if (GET_CODE (value.base) == SYMBOL_REF)
2261           {
2262             /* Don't hash the address of the SYMBOL_REF;
2263                only use the offset and the symbol name.  */
2264             hi = value.offset;
2265             p = XSTR (value.base, 0);
2266             for (i = 0; p[i] != 0; i++)
2267               hi = ((hi * 613) + (unsigned) (p[i]));
2268           }
2269         else if (GET_CODE (value.base) == LABEL_REF)
2270           hi = value.offset + CODE_LABEL_NUMBER (XEXP (value.base, 0)) * 13;
2271         else
2272           abort ();
2273       }
2274       return hi;
2275
2276     case PLUS_EXPR:
2277     case MINUS_EXPR:
2278       return (const_hash_1 (TREE_OPERAND (exp, 0)) * 9
2279               + const_hash_1 (TREE_OPERAND (exp, 1)));
2280
2281     case NOP_EXPR:
2282     case CONVERT_EXPR:
2283     case NON_LVALUE_EXPR:
2284       return const_hash_1 (TREE_OPERAND (exp, 0)) * 7 + 2;
2285
2286     default:
2287       /* A language specific constant. Just hash the code.  */
2288       return code;
2289     }
2290
2291   /* Compute hashing function.  */
2292   hi = len;
2293   for (i = 0; i < len; i++)
2294     hi = ((hi * 613) + (unsigned) (p[i]));
2295
2296   return hi;
2297 }
2298
2299 /* Wrapper of compare_constant, for the htab interface.  */
2300 static int
2301 const_desc_eq (const void *p1, const void *p2)
2302 {
2303   return compare_constant (((struct constant_descriptor_tree *)p1)->value,
2304                            ((struct constant_descriptor_tree *)p2)->value);
2305 }
2306
2307 /* Compare t1 and t2, and return 1 only if they are known to result in
2308    the same bit pattern on output.  */
2309
2310 static int
2311 compare_constant (const tree t1, const tree t2)
2312 {
2313   enum tree_code typecode;
2314
2315   if (t1 == NULL_TREE)
2316     return t2 == NULL_TREE;
2317   if (t2 == NULL_TREE)
2318     return 0;
2319
2320   if (TREE_CODE (t1) != TREE_CODE (t2))
2321     return 0;
2322
2323   switch (TREE_CODE (t1))
2324     {
2325     case INTEGER_CST:
2326       /* Integer constants are the same only if the same width of type.  */
2327       if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2328         return 0;
2329       return tree_int_cst_equal (t1, t2);
2330
2331     case REAL_CST:
2332       /* Real constants are the same only if the same width of type.  */
2333       if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2334         return 0;
2335
2336       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2337
2338     case STRING_CST:
2339       if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
2340         return 0;
2341
2342       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2343               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2344                          TREE_STRING_LENGTH (t1)));
2345
2346     case COMPLEX_CST:
2347       return (compare_constant (TREE_REALPART (t1), TREE_REALPART (t2))
2348               && compare_constant (TREE_IMAGPART (t1), TREE_IMAGPART (t2)));
2349
2350     case CONSTRUCTOR:
2351       typecode = TREE_CODE (TREE_TYPE (t1));
2352       if (typecode != TREE_CODE (TREE_TYPE (t2)))
2353         return 0;
2354
2355       if (typecode == SET_TYPE)
2356         {
2357           int len = int_size_in_bytes (TREE_TYPE (t2));
2358           unsigned char *tmp1, *tmp2;
2359
2360           if (int_size_in_bytes (TREE_TYPE (t1)) != len)
2361             return 0;
2362
2363           tmp1 = alloca (len);
2364           tmp2 = alloca (len);
2365
2366           if (get_set_constructor_bytes (t1, tmp1, len) != NULL_TREE)
2367             return 0;
2368           if (get_set_constructor_bytes (t2, tmp2, len) != NULL_TREE)
2369             return 0;
2370
2371           return memcmp (tmp1, tmp2, len) == 0;
2372         }
2373       else
2374         {
2375           tree l1, l2;
2376
2377           if (typecode == ARRAY_TYPE)
2378             {
2379               HOST_WIDE_INT size_1 = int_size_in_bytes (TREE_TYPE (t1));
2380               /* For arrays, check that the sizes all match.  */
2381               if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
2382                   || size_1 == -1
2383                   || size_1 != int_size_in_bytes (TREE_TYPE (t2)))
2384                 return 0;
2385             }
2386           else
2387             {
2388               /* For record and union constructors, require exact type
2389                  equality.  */
2390               if (TREE_TYPE (t1) != TREE_TYPE (t2))
2391                 return 0;
2392             }
2393
2394           for (l1 = CONSTRUCTOR_ELTS (t1), l2 = CONSTRUCTOR_ELTS (t2);
2395                l1 && l2;
2396                l1 = TREE_CHAIN (l1), l2 = TREE_CHAIN (l2))
2397             {
2398               /* Check that each value is the same...  */
2399               if (! compare_constant (TREE_VALUE (l1), TREE_VALUE (l2)))
2400                 return 0;
2401               /* ... and that they apply to the same fields!  */
2402               if (typecode == ARRAY_TYPE)
2403                 {
2404                   if (! compare_constant (TREE_PURPOSE (l1),
2405                                           TREE_PURPOSE (l2)))
2406                     return 0;
2407                 }
2408               else
2409                 {
2410                   if (TREE_PURPOSE (l1) != TREE_PURPOSE (l2))
2411                     return 0;
2412                 }
2413             }
2414
2415           return l1 == NULL_TREE && l2 == NULL_TREE;
2416         }
2417
2418     case ADDR_EXPR:
2419     case FDESC_EXPR:
2420       {
2421         struct addr_const value1, value2;
2422
2423         decode_addr_const (t1, &value1);
2424         decode_addr_const (t2, &value2);
2425         return (value1.offset == value2.offset
2426                 && strcmp (XSTR (value1.base, 0), XSTR (value2.base, 0)) == 0);
2427       }
2428
2429     case PLUS_EXPR:
2430     case MINUS_EXPR:
2431     case RANGE_EXPR:
2432       return (compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
2433               && compare_constant(TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
2434
2435     case NOP_EXPR:
2436     case CONVERT_EXPR:
2437     case NON_LVALUE_EXPR:
2438     case VIEW_CONVERT_EXPR:
2439       return compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2440
2441     default:
2442       {
2443         tree nt1, nt2;
2444         nt1 = lang_hooks.expand_constant (t1);
2445         nt2 = lang_hooks.expand_constant (t2);
2446         if (nt1 != t1 || nt2 != t2)
2447           return compare_constant (nt1, nt2);
2448         else
2449           return 0;
2450       }
2451     }
2452
2453   /* Should not get here.  */
2454   abort ();
2455 }
2456 \f
2457 /* Make a copy of the whole tree structure for a constant.  This
2458    handles the same types of nodes that compare_constant handles.  */
2459
2460 static tree
2461 copy_constant (tree exp)
2462 {
2463   switch (TREE_CODE (exp))
2464     {
2465     case ADDR_EXPR:
2466       /* For ADDR_EXPR, we do not want to copy the decl whose address
2467          is requested.  We do want to copy constants though.  */
2468       if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, 0))) == 'c')
2469         return build1 (TREE_CODE (exp), TREE_TYPE (exp),
2470                        copy_constant (TREE_OPERAND (exp, 0)));
2471       else
2472         return copy_node (exp);
2473
2474     case INTEGER_CST:
2475     case REAL_CST:
2476     case STRING_CST:
2477       return copy_node (exp);
2478
2479     case COMPLEX_CST:
2480       return build_complex (TREE_TYPE (exp),
2481                             copy_constant (TREE_REALPART (exp)),
2482                             copy_constant (TREE_IMAGPART (exp)));
2483
2484     case PLUS_EXPR:
2485     case MINUS_EXPR:
2486       return build2 (TREE_CODE (exp), TREE_TYPE (exp),
2487                      copy_constant (TREE_OPERAND (exp, 0)),
2488                      copy_constant (TREE_OPERAND (exp, 1)));
2489
2490     case NOP_EXPR:
2491     case CONVERT_EXPR:
2492     case NON_LVALUE_EXPR:
2493     case VIEW_CONVERT_EXPR:
2494       return build1 (TREE_CODE (exp), TREE_TYPE (exp),
2495                      copy_constant (TREE_OPERAND (exp, 0)));
2496
2497     case CONSTRUCTOR:
2498       {
2499         tree copy = copy_node (exp);
2500         tree list = copy_list (CONSTRUCTOR_ELTS (exp));
2501         tree tail;
2502
2503         CONSTRUCTOR_ELTS (copy) = list;
2504         for (tail = list; tail; tail = TREE_CHAIN (tail))
2505           TREE_VALUE (tail) = copy_constant (TREE_VALUE (tail));
2506         if (TREE_CODE (TREE_TYPE (exp)) == SET_TYPE)
2507           for (tail = list; tail; tail = TREE_CHAIN (tail))
2508             TREE_PURPOSE (tail) = copy_constant (TREE_PURPOSE (tail));
2509
2510         return copy;
2511       }
2512
2513     default:
2514       {
2515         tree t;
2516         t = lang_hooks.expand_constant (exp);
2517         if (t != exp)
2518           return copy_constant (t);
2519         else
2520           abort ();
2521       }
2522     }
2523 }
2524 \f
2525 /* Subroutine of output_constant_def:
2526    No constant equal to EXP is known to have been output.
2527    Make a constant descriptor to enter EXP in the hash table.
2528    Assign the label number and construct RTL to refer to the
2529    constant's location in memory.
2530    Caller is responsible for updating the hash table.  */
2531
2532 static struct constant_descriptor_tree *
2533 build_constant_desc (tree exp)
2534 {
2535   rtx symbol;
2536   rtx rtl;
2537   char label[256];
2538   int labelno;
2539   struct constant_descriptor_tree *desc;
2540
2541   desc = ggc_alloc (sizeof (*desc));
2542   desc->value = copy_constant (exp);
2543
2544   /* Propagate marked-ness to copied constant.  */
2545   if (flag_mudflap && mf_marked_p (exp))
2546     mf_mark (desc->value);
2547
2548   /* Create a string containing the label name, in LABEL.  */
2549   labelno = const_labelno++;
2550   ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno);
2551
2552   /* We have a symbol name; construct the SYMBOL_REF and the MEM.  */
2553   symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
2554   SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2555   SYMBOL_REF_DECL (symbol) = desc->value;
2556   TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1;
2557
2558   rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), symbol);
2559   set_mem_attributes (rtl, exp, 1);
2560   set_mem_alias_set (rtl, 0);
2561   set_mem_alias_set (rtl, const_alias_set);
2562
2563   /* Set flags or add text to the name to record information, such as
2564      that it is a local symbol.  If the name is changed, the macro
2565      ASM_OUTPUT_LABELREF will have to know how to strip this
2566      information.  This call might invalidate our local variable
2567      SYMBOL; we can't use it afterward.  */
2568
2569   targetm.encode_section_info (exp, rtl, true);
2570
2571   desc->rtl = rtl;
2572
2573   return desc;
2574 }
2575
2576 /* Return an rtx representing a reference to constant data in memory
2577    for the constant expression EXP.
2578
2579    If assembler code for such a constant has already been output,
2580    return an rtx to refer to it.
2581    Otherwise, output such a constant in memory
2582    and generate an rtx for it.
2583
2584    If DEFER is nonzero, this constant can be deferred and output only
2585    if referenced in the function after all optimizations.
2586
2587    `const_desc_table' records which constants already have label strings.  */
2588
2589 rtx
2590 output_constant_def (tree exp, int defer)
2591 {
2592   struct constant_descriptor_tree *desc;
2593   struct constant_descriptor_tree key;
2594   void **loc;
2595
2596   /* Look up EXP in the table of constant descriptors.  If we didn't find
2597      it, create a new one.  */
2598   key.value = exp;
2599   loc = htab_find_slot (const_desc_htab, &key, INSERT);
2600
2601   desc = *loc;
2602   if (desc == 0)
2603     {
2604       desc = build_constant_desc (exp);
2605       *loc = desc;
2606     }
2607
2608   maybe_output_constant_def_contents (desc, defer);
2609   return desc->rtl;
2610 }
2611
2612 /* Subroutine of output_constant_def: Decide whether or not we need to
2613    output the constant DESC now, and if so, do it.  */
2614 static void
2615 maybe_output_constant_def_contents (struct constant_descriptor_tree *desc,
2616                                     int defer)
2617 {
2618   rtx symbol = XEXP (desc->rtl, 0);
2619   tree exp = desc->value;
2620
2621   if (flag_syntax_only)
2622     return;
2623
2624   if (TREE_ASM_WRITTEN (exp))
2625     /* Already output; don't do it again.  */
2626     return;
2627
2628   /* We can always defer constants as long as the context allows
2629      doing so.  */
2630   if (defer)
2631     {
2632       /* Increment n_deferred_constants if it exists.  It needs to be at
2633          least as large as the number of constants actually referred to
2634          by the function.  If it's too small we'll stop looking too early
2635          and fail to emit constants; if it's too large we'll only look
2636          through the entire function when we could have stopped earlier.  */
2637       if (cfun)
2638         n_deferred_constants++;
2639       return;
2640     }
2641
2642   output_constant_def_contents (symbol);
2643 }
2644
2645 /* We must output the constant data referred to by SYMBOL; do so.  */
2646
2647 static void
2648 output_constant_def_contents (rtx symbol)
2649 {
2650   tree exp = SYMBOL_REF_DECL (symbol);
2651   const char *label = XSTR (symbol, 0);
2652   HOST_WIDE_INT size;
2653
2654   /* Make sure any other constants whose addresses appear in EXP
2655      are assigned label numbers.  */
2656   int reloc = compute_reloc_for_constant (exp);
2657
2658   /* Align the location counter as required by EXP's data type.  */
2659   unsigned int align = TYPE_ALIGN (TREE_TYPE (exp));
2660 #ifdef CONSTANT_ALIGNMENT
2661   align = CONSTANT_ALIGNMENT (exp, align);
2662 #endif
2663
2664   output_addressed_constants (exp);
2665
2666   /* We are no longer deferring this constant.  */
2667   TREE_ASM_WRITTEN (exp) = 1;
2668
2669   if (IN_NAMED_SECTION (exp))
2670     named_section (exp, NULL, reloc);
2671   else
2672     targetm.asm_out.select_section (exp, reloc, align);
2673
2674   if (align > BITS_PER_UNIT)
2675     {
2676       ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
2677     }
2678
2679   size = int_size_in_bytes (TREE_TYPE (exp));
2680   if (TREE_CODE (exp) == STRING_CST)
2681     size = MAX (TREE_STRING_LENGTH (exp), size);
2682
2683   /* Do any machine/system dependent processing of the constant.  */
2684 #ifdef ASM_DECLARE_CONSTANT_NAME
2685   ASM_DECLARE_CONSTANT_NAME (asm_out_file, label, exp, size);
2686 #else
2687   /* Standard thing is just output label for the constant.  */
2688   ASM_OUTPUT_LABEL (asm_out_file, label);
2689 #endif /* ASM_DECLARE_CONSTANT_NAME */
2690
2691   /* Output the value of EXP.  */
2692   output_constant (exp, size, align);
2693   if (flag_mudflap)
2694     mudflap_enqueue_constant (exp);
2695 }
2696
2697 /* Look up EXP in the table of constant descriptors.  Return the rtl
2698    if it has been emitted, else null.  */
2699
2700 rtx
2701 lookup_constant_def (tree exp)
2702 {
2703   struct constant_descriptor_tree *desc;
2704   struct constant_descriptor_tree key;
2705
2706   key.value = exp;
2707   desc = htab_find (const_desc_htab, &key);
2708
2709   return (desc ? desc->rtl : NULL_RTX);
2710 }
2711 \f
2712 /* Used in the hash tables to avoid outputting the same constant
2713    twice.  Unlike 'struct constant_descriptor_tree', RTX constants
2714    are output once per function, not once per file.  */
2715 /* ??? Only a few targets need per-function constant pools.  Most
2716    can use one per-file pool.  Should add a targetm bit to tell the
2717    difference.  */
2718
2719 struct rtx_constant_pool GTY(())
2720 {
2721   /* Pointers to first and last constant in pool, as ordered by offset.  */
2722   struct constant_descriptor_rtx *first;
2723   struct constant_descriptor_rtx *last;
2724
2725   /* Hash facility for making memory-constants from constant rtl-expressions.
2726      It is used on RISC machines where immediate integer arguments and
2727      constant addresses are restricted so that such constants must be stored
2728      in memory.  */
2729   htab_t GTY((param_is (struct constant_descriptor_rtx))) const_rtx_htab;
2730   htab_t GTY((param_is (struct constant_descriptor_rtx))) const_rtx_sym_htab;
2731
2732   /* Current offset in constant pool (does not include any
2733      machine-specific header).  */
2734   HOST_WIDE_INT offset;
2735 };
2736
2737 struct constant_descriptor_rtx GTY((chain_next ("%h.next")))
2738 {
2739   struct constant_descriptor_rtx *next;
2740   rtx mem;
2741   rtx sym;
2742   rtx constant;
2743   HOST_WIDE_INT offset;
2744   hashval_t hash;
2745   enum machine_mode mode;
2746   unsigned int align;
2747   int labelno;
2748   int mark;
2749 };
2750
2751 /* Hash and compare functions for const_rtx_htab.  */
2752
2753 static hashval_t
2754 const_desc_rtx_hash (const void *ptr)
2755 {
2756   const struct constant_descriptor_rtx *desc = ptr;
2757   return desc->hash;
2758 }
2759
2760 static int
2761 const_desc_rtx_eq (const void *a, const void *b)
2762 {
2763   const struct constant_descriptor_rtx *x = a;
2764   const struct constant_descriptor_rtx *y = b;
2765
2766   if (x->mode != y->mode)
2767     return 0;
2768   return rtx_equal_p (x->constant, y->constant);
2769 }
2770
2771 /* Hash and compare functions for const_rtx_sym_htab.  */
2772
2773 static hashval_t
2774 const_desc_rtx_sym_hash (const void *ptr)
2775 {
2776   const struct constant_descriptor_rtx *desc = ptr;
2777   return htab_hash_string (XSTR (desc->sym, 0));
2778 }
2779
2780 static int
2781 const_desc_rtx_sym_eq (const void *a, const void *b)
2782 {
2783   const struct constant_descriptor_rtx *x = a;
2784   const struct constant_descriptor_rtx *y = b;
2785   return XSTR (x->sym, 0) == XSTR (y->sym, 0);
2786 }
2787
2788 /* This is the worker function for const_rtx_hash, called via for_each_rtx.  */
2789
2790 static int
2791 const_rtx_hash_1 (rtx *xp, void *data)
2792 {
2793   unsigned HOST_WIDE_INT hwi;
2794   enum machine_mode mode;
2795   enum rtx_code code;
2796   hashval_t h, *hp;
2797   rtx x;
2798
2799   x = *xp;
2800   code = GET_CODE (x);
2801   mode = GET_MODE (x);
2802   h = (hashval_t) code * 1048573 + mode;
2803
2804   switch (code)
2805     {
2806     case CONST_INT:
2807       hwi = INTVAL (x);
2808     fold_hwi:
2809       {
2810         const int shift = sizeof (hashval_t) * CHAR_BIT;
2811         const int n = sizeof (HOST_WIDE_INT) / sizeof (hashval_t);
2812         int i;
2813
2814         h ^= (hashval_t) hwi;
2815         for (i = 1; i < n; ++i)
2816           {
2817             hwi >>= shift;
2818             h ^= (hashval_t) hwi;
2819           }
2820       }
2821       break;
2822
2823     case CONST_DOUBLE:
2824       if (mode == VOIDmode)
2825         {
2826           hwi = CONST_DOUBLE_LOW (x) ^ CONST_DOUBLE_HIGH (x);
2827           goto fold_hwi;
2828         }
2829       else
2830         h ^= real_hash (CONST_DOUBLE_REAL_VALUE (x));
2831       break;
2832
2833     case SYMBOL_REF:
2834       h ^= htab_hash_string (XSTR (x, 0));
2835       break;
2836
2837     case LABEL_REF:
2838       h = h * 251 + CODE_LABEL_NUMBER (XEXP (x, 0));
2839       break;
2840
2841     case UNSPEC:
2842     case UNSPEC_VOLATILE:
2843       h = h * 251 + XINT (x, 1);
2844       break;
2845
2846     default:
2847       break;
2848     }
2849
2850   hp = data;
2851   *hp = *hp * 509 + h;
2852   return 0;
2853 }
2854
2855 /* Compute a hash value for X, which should be a constant.  */
2856
2857 static hashval_t
2858 const_rtx_hash (rtx x)
2859 {
2860   hashval_t h = 0;
2861   for_each_rtx (&x, const_rtx_hash_1, &h);
2862   return h;
2863 }
2864
2865 \f
2866 /* Initialize constant pool hashing for a new function.  */
2867
2868 void
2869 init_varasm_status (struct function *f)
2870 {
2871   struct varasm_status *p;
2872   struct rtx_constant_pool *pool;
2873
2874   p = ggc_alloc (sizeof (struct varasm_status));
2875   f->varasm = p;
2876
2877   pool = ggc_alloc (sizeof (struct rtx_constant_pool));
2878   p->pool = pool;
2879   p->deferred_constants = 0;
2880
2881   pool->const_rtx_htab = htab_create_ggc (31, const_desc_rtx_hash,
2882                                           const_desc_rtx_eq, NULL);
2883   pool->const_rtx_sym_htab = htab_create_ggc (31, const_desc_rtx_sym_hash,
2884                                               const_desc_rtx_sym_eq, NULL);
2885   pool->first = pool->last = NULL;
2886   pool->offset = 0;
2887 }
2888 \f
2889 /* Given a MINUS expression, simplify it if both sides
2890    include the same symbol.  */
2891
2892 rtx
2893 simplify_subtraction (rtx x)
2894 {
2895   rtx r = simplify_rtx (x);
2896   return r ? r : x;
2897 }
2898 \f
2899 /* Given a constant rtx X, make (or find) a memory constant for its value
2900    and return a MEM rtx to refer to it in memory.  */
2901
2902 rtx
2903 force_const_mem (enum machine_mode mode, rtx x)
2904 {
2905   struct constant_descriptor_rtx *desc, tmp;
2906   struct rtx_constant_pool *pool = cfun->varasm->pool;
2907   char label[256];
2908   rtx def, symbol;
2909   hashval_t hash;
2910   unsigned int align;
2911   void **slot;
2912
2913   /* If we're not allowed to drop X into the constant pool, don't.  */
2914   if (targetm.cannot_force_const_mem (x))
2915     return NULL_RTX;
2916
2917   /* Lookup the value in the hashtable.  */
2918   tmp.constant = x;
2919   tmp.mode = mode;
2920   hash = const_rtx_hash (x);
2921   slot = htab_find_slot_with_hash (pool->const_rtx_htab, &tmp, hash, INSERT);
2922   desc = *slot;
2923   
2924   /* If the constant was already present, return its memory.  */
2925   if (desc)
2926     return copy_rtx (desc->mem);
2927
2928   /* Otherwise, create a new descriptor.  */
2929   desc = ggc_alloc (sizeof (*desc));
2930   *slot = desc;
2931
2932   /* Align the location counter as required by EXP's data type.  */
2933   align = GET_MODE_ALIGNMENT (mode == VOIDmode ? word_mode : mode);
2934 #ifdef CONSTANT_ALIGNMENT
2935   {
2936     tree type = lang_hooks.types.type_for_mode (mode, 0);
2937     if (type != NULL_TREE)
2938       align = CONSTANT_ALIGNMENT (make_tree (type, x), align);
2939   }
2940 #endif
2941
2942   pool->offset += (align / BITS_PER_UNIT) - 1;
2943   pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
2944
2945   desc->next = NULL;
2946   desc->constant = tmp.constant;
2947   desc->offset = pool->offset;
2948   desc->hash = hash;
2949   desc->mode = mode;
2950   desc->align = align;
2951   desc->labelno = const_labelno;
2952   desc->mark = 0;
2953
2954   pool->offset += GET_MODE_SIZE (mode);
2955   if (pool->last)
2956     pool->last->next = desc;
2957   else
2958     pool->first = pool->last = desc;
2959   pool->last = desc;
2960
2961   /* Create a string containing the label name, in LABEL.  */
2962   ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno);
2963   ++const_labelno;
2964
2965   /* Construct the SYMBOL_REF.  Make sure to mark it as belonging to
2966      the constants pool.  */
2967   desc->sym = symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
2968   SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2969   CONSTANT_POOL_ADDRESS_P (symbol) = 1;
2970   current_function_uses_const_pool = 1;
2971
2972   /* Insert the descriptor into the symbol cross-reference table too.  */
2973   slot = htab_find_slot (pool->const_rtx_sym_htab, desc, INSERT);
2974   if (*slot)
2975     abort ();
2976   *slot = desc;
2977
2978   /* Construct the MEM.  */
2979   desc->mem = def = gen_const_mem (mode, symbol);
2980   set_mem_attributes (def, lang_hooks.types.type_for_mode (mode, 0), 1);
2981
2982   /* If we're dropping a label to the constant pool, make sure we
2983      don't delete it.  */
2984   if (GET_CODE (x) == LABEL_REF)
2985     LABEL_PRESERVE_P (XEXP (x, 0)) = 1;
2986
2987   return copy_rtx (def);
2988 }
2989 \f
2990 /* Given a SYMBOL_REF with CONSTANT_POOL_ADDRESS_P true, return a pointer to
2991    the corresponding constant_descriptor_rtx structure.  */
2992
2993 static struct constant_descriptor_rtx *
2994 find_pool_constant (struct rtx_constant_pool *pool, rtx sym)
2995 {
2996   struct constant_descriptor_rtx tmp;
2997   tmp.sym = sym;
2998   return htab_find (pool->const_rtx_sym_htab, &tmp);
2999 }
3000
3001 /* Given a constant pool SYMBOL_REF, return the corresponding constant.  */
3002
3003 rtx
3004 get_pool_constant (rtx addr)
3005 {
3006   return find_pool_constant (cfun->varasm->pool, addr)->constant;
3007 }
3008
3009 /* Given a constant pool SYMBOL_REF, return the corresponding constant
3010    and whether it has been output or not.  */
3011
3012 rtx
3013 get_pool_constant_mark (rtx addr, bool *pmarked)
3014 {
3015   struct constant_descriptor_rtx *desc;
3016
3017   desc = find_pool_constant (cfun->varasm->pool, addr);
3018   *pmarked = (desc->mark != 0);
3019   return desc->constant;
3020 }
3021
3022 /* Likewise, but for the constant pool of a specific function.  */
3023
3024 rtx
3025 get_pool_constant_for_function (struct function *f, rtx addr)
3026 {
3027   return find_pool_constant (f->varasm->pool, addr)->constant;
3028 }
3029
3030 /* Similar, return the mode.  */
3031
3032 enum machine_mode
3033 get_pool_mode (rtx addr)
3034 {
3035   return find_pool_constant (cfun->varasm->pool, addr)->mode;
3036 }
3037
3038 enum machine_mode
3039 get_pool_mode_for_function (struct function *f, rtx addr)
3040 {
3041   return find_pool_constant (f->varasm->pool, addr)->mode;
3042 }
3043
3044 /* Similar, return the offset in the constant pool.  */
3045
3046 int
3047 get_pool_offset (rtx addr)
3048 {
3049   return find_pool_constant (cfun->varasm->pool, addr)->offset;
3050 }
3051
3052 /* Return the size of the constant pool.  */
3053
3054 int
3055 get_pool_size (void)
3056 {
3057   return cfun->varasm->pool->offset;
3058 }
3059 \f
3060 /* Worker function for output_constant_pool_1.  Emit assembly for X
3061    in MODE with known alignment ALIGN.  */
3062
3063 static void
3064 output_constant_pool_2 (enum machine_mode mode, rtx x, unsigned int align)
3065 {
3066   switch (GET_MODE_CLASS (mode))
3067     {
3068     case MODE_FLOAT:
3069       if (GET_CODE (x) != CONST_DOUBLE)
3070         abort ();
3071       else
3072         {
3073           REAL_VALUE_TYPE r;
3074           REAL_VALUE_FROM_CONST_DOUBLE (r, x);
3075           assemble_real (r, mode, align);
3076         }
3077       break;
3078
3079     case MODE_INT:
3080     case MODE_PARTIAL_INT:
3081       assemble_integer (x, GET_MODE_SIZE (mode), align, 1);
3082       break;
3083
3084     case MODE_VECTOR_FLOAT:
3085     case MODE_VECTOR_INT:
3086       {
3087         int i, units;
3088         enum machine_mode submode = GET_MODE_INNER (mode);
3089         unsigned int subalign = MIN (align, GET_MODE_BITSIZE (submode));
3090
3091         if (GET_CODE (x) != CONST_VECTOR)
3092           abort ();
3093         units = CONST_VECTOR_NUNITS (x);
3094
3095         for (i = 0; i < units; i++)
3096           {
3097             rtx elt = CONST_VECTOR_ELT (x, i);
3098             output_constant_pool_2 (submode, elt, i ? subalign : align);
3099           }
3100       }
3101       break;
3102
3103     default:
3104       abort ();
3105     }
3106 }
3107
3108 /* Worker function for output_constant_pool.  Emit POOL.  */
3109
3110 static void
3111 output_constant_pool_1 (struct constant_descriptor_rtx *desc)
3112 {
3113   rtx x, tmp;
3114
3115   if (!desc->mark)
3116     return;
3117   x = desc->constant;
3118
3119   /* See if X is a LABEL_REF (or a CONST referring to a LABEL_REF)
3120      whose CODE_LABEL has been deleted.  This can occur if a jump table
3121      is eliminated by optimization.  If so, write a constant of zero
3122      instead.  Note that this can also happen by turning the
3123      CODE_LABEL into a NOTE.  */
3124   /* ??? This seems completely and utterly wrong.  Certainly it's
3125      not true for NOTE_INSN_DELETED_LABEL, but I disbelieve proper
3126      functioning even with INSN_DELETED_P and friends.  */
3127
3128   tmp = x;
3129   switch (GET_CODE (x))
3130     {
3131     case CONST:
3132       if (GET_CODE (XEXP (x, 0)) != PLUS
3133           || GET_CODE (XEXP (XEXP (x, 0), 0)) != LABEL_REF)
3134         break;
3135       tmp = XEXP (XEXP (x, 0), 0);
3136       /* FALLTHRU  */
3137
3138     case LABEL_REF:
3139       tmp = XEXP (x, 0);
3140       if (INSN_DELETED_P (tmp)
3141           || (NOTE_P (tmp)
3142               && NOTE_LINE_NUMBER (tmp) == NOTE_INSN_DELETED))
3143         {
3144           abort ();
3145           x = const0_rtx;
3146         }
3147       break;
3148
3149     default:
3150       break;
3151     }
3152
3153   /* First switch to correct section.  */
3154   targetm.asm_out.select_rtx_section (desc->mode, x, desc->align);
3155
3156 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3157   ASM_OUTPUT_SPECIAL_POOL_ENTRY (asm_out_file, x, desc->mode,
3158                                  desc->align, desc->labelno, done);
3159 #endif
3160
3161   assemble_align (desc->align);
3162
3163   /* Output the label.  */
3164   targetm.asm_out.internal_label (asm_out_file, "LC", desc->labelno);
3165
3166   /* Output the data.  */
3167   output_constant_pool_2 (desc->mode, x, desc->align);
3168
3169   /* Make sure all constants in SECTION_MERGE and not SECTION_STRINGS
3170      sections have proper size.  */
3171   if (desc->align > GET_MODE_BITSIZE (desc->mode)
3172       && in_section == in_named
3173       && get_named_section_flags (in_named_name) & SECTION_MERGE)
3174     assemble_align (desc->align);
3175
3176 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3177  done:
3178 #endif
3179   return;
3180 }
3181
3182 /* Given a SYMBOL_REF CURRENT_RTX, mark it and all constants it refers
3183    to as used.  Emit referenced deferred strings.  This function can
3184    be used with for_each_rtx to mark all SYMBOL_REFs in an rtx.  */
3185
3186 static int
3187 mark_constant (rtx *current_rtx, void *data)
3188 {
3189   struct rtx_constant_pool *pool = data;
3190   rtx x = *current_rtx;
3191
3192   if (x == NULL_RTX || GET_CODE (x) != SYMBOL_REF)
3193     return 0;
3194
3195   if (CONSTANT_POOL_ADDRESS_P (x))
3196     {
3197       struct constant_descriptor_rtx *desc = find_pool_constant (pool, x);
3198       if (desc->mark == 0)
3199         {
3200           desc->mark = 1;
3201           for_each_rtx (&desc->constant, mark_constant, pool);
3202         }
3203     }
3204   else if (TREE_CONSTANT_POOL_ADDRESS_P (x))
3205     {
3206       tree exp = SYMBOL_REF_DECL (x);
3207       if (!TREE_ASM_WRITTEN (exp))
3208         {
3209           n_deferred_constants--;
3210           output_constant_def_contents (x);
3211         }
3212     }
3213
3214   return -1;
3215
3216
3217 /* Look through appropriate parts of INSN, marking all entries in the
3218    constant pool which are actually being used.  Entries that are only
3219    referenced by other constants are also marked as used.  Emit
3220    deferred strings that are used.  */
3221
3222 static void
3223 mark_constants (struct rtx_constant_pool *pool, rtx insn)
3224 {
3225   if (!INSN_P (insn))
3226     return;
3227
3228   /* Insns may appear inside a SEQUENCE.  Only check the patterns of
3229      insns, not any notes that may be attached.  We don't want to mark
3230      a constant just because it happens to appear in a REG_EQUIV note.  */
3231   if (GET_CODE (PATTERN (insn)) == SEQUENCE)
3232     {
3233       rtx seq = PATTERN (insn);
3234       int i, n = XVECLEN (seq, 0);
3235       for (i = 0; i < n; ++i)
3236         {
3237           rtx subinsn = XVECEXP (seq, 0, i);
3238           if (INSN_P (subinsn))
3239             for_each_rtx (&PATTERN (subinsn), mark_constant, pool);
3240         }
3241     }
3242   else
3243     for_each_rtx (&PATTERN (insn), mark_constant, pool);
3244 }
3245
3246 /* Look through the instructions for this function, and mark all the
3247    entries in POOL which are actually being used.  Emit deferred constants
3248    which have indeed been used.  */
3249
3250 static void
3251 mark_constant_pool (struct rtx_constant_pool *pool)
3252 {
3253   rtx insn, link;
3254
3255   if (pool->first == 0 && n_deferred_constants == 0)
3256     return;
3257
3258   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3259     mark_constants (pool, insn);
3260
3261   for (link = current_function_epilogue_delay_list;
3262        link;
3263        link = XEXP (link, 1))
3264     mark_constants (pool, XEXP (link, 0));
3265 }
3266
3267 /* Write all the constants in the constant pool.  */
3268
3269 void
3270 output_constant_pool (const char *fnname ATTRIBUTE_UNUSED,
3271                       tree fndecl ATTRIBUTE_UNUSED)
3272 {
3273   struct rtx_constant_pool *pool = cfun->varasm->pool;
3274   struct constant_descriptor_rtx *desc;
3275
3276   /* It is possible for gcc to call force_const_mem and then to later
3277      discard the instructions which refer to the constant.  In such a
3278      case we do not need to output the constant.  */
3279   mark_constant_pool (pool);
3280
3281 #ifdef ASM_OUTPUT_POOL_PROLOGUE
3282   ASM_OUTPUT_POOL_PROLOGUE (asm_out_file, fnname, fndecl, pool->offset);
3283 #endif
3284
3285   for (desc = pool->first; desc ; desc = desc->next)
3286     output_constant_pool_1 (desc);
3287
3288 #ifdef ASM_OUTPUT_POOL_EPILOGUE
3289   ASM_OUTPUT_POOL_EPILOGUE (asm_out_file, fnname, fndecl, pool->offset);
3290 #endif
3291 }
3292 \f
3293 /* Determine what kind of relocations EXP may need.  */
3294
3295 int
3296 compute_reloc_for_constant (tree exp)
3297 {
3298   int reloc = 0, reloc2;
3299   tree tem;
3300
3301   /* Give the front-end a chance to convert VALUE to something that
3302      looks more like a constant to the back-end.  */
3303   exp = lang_hooks.expand_constant (exp);
3304
3305   switch (TREE_CODE (exp))
3306     {
3307     case ADDR_EXPR:
3308     case FDESC_EXPR:
3309       /* Go inside any operations that get_inner_reference can handle and see
3310          if what's inside is a constant: no need to do anything here for
3311          addresses of variables or functions.  */
3312       for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3313            tem = TREE_OPERAND (tem, 0))
3314         ;
3315
3316       if (TREE_PUBLIC (tem))
3317         reloc |= 2;
3318       else
3319         reloc |= 1;
3320       break;
3321
3322     case PLUS_EXPR:
3323       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3324       reloc |= compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3325       break;
3326
3327     case MINUS_EXPR:
3328       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3329       reloc2 = compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3330       /* The difference of two local labels is computable at link time.  */
3331       if (reloc == 1 && reloc2 == 1)
3332         reloc = 0;
3333       else
3334         reloc |= reloc2;
3335       break;
3336
3337     case NOP_EXPR:
3338     case CONVERT_EXPR:
3339     case NON_LVALUE_EXPR:
3340       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3341       break;
3342
3343     case CONSTRUCTOR:
3344       for (tem = CONSTRUCTOR_ELTS (exp); tem; tem = TREE_CHAIN (tem))
3345         if (TREE_VALUE (tem) != 0)
3346           reloc |= compute_reloc_for_constant (TREE_VALUE (tem));
3347
3348       break;
3349
3350     default:
3351       break;
3352     }
3353   return reloc;
3354 }
3355
3356 /* Find all the constants whose addresses are referenced inside of EXP,
3357    and make sure assembler code with a label has been output for each one.
3358    Indicate whether an ADDR_EXPR has been encountered.  */
3359
3360 static void
3361 output_addressed_constants (tree exp)
3362 {
3363   tree tem;
3364
3365   /* Give the front-end a chance to convert VALUE to something that
3366      looks more like a constant to the back-end.  */
3367   exp = lang_hooks.expand_constant (exp);
3368
3369   switch (TREE_CODE (exp))
3370     {
3371     case ADDR_EXPR:
3372     case FDESC_EXPR:
3373       /* Go inside any operations that get_inner_reference can handle and see
3374          if what's inside is a constant: no need to do anything here for
3375          addresses of variables or functions.  */
3376       for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3377            tem = TREE_OPERAND (tem, 0))
3378         ;
3379
3380       if (TREE_CODE_CLASS (TREE_CODE (tem)) == 'c'
3381           || TREE_CODE (tem) == CONSTRUCTOR)
3382         output_constant_def (tem, 0);
3383       break;
3384
3385     case PLUS_EXPR:
3386     case MINUS_EXPR:
3387       output_addressed_constants (TREE_OPERAND (exp, 1));
3388       /* Fall through.  */
3389
3390     case NOP_EXPR:
3391     case CONVERT_EXPR:
3392     case NON_LVALUE_EXPR:
3393       output_addressed_constants (TREE_OPERAND (exp, 0));
3394       break;
3395
3396     case CONSTRUCTOR:
3397       for (tem = CONSTRUCTOR_ELTS (exp); tem; tem = TREE_CHAIN (tem))
3398         if (TREE_VALUE (tem) != 0)
3399           output_addressed_constants (TREE_VALUE (tem));
3400
3401       break;
3402
3403     default:
3404       break;
3405     }
3406 }
3407 \f
3408 /* Return nonzero if VALUE is a valid constant-valued expression
3409    for use in initializing a static variable; one that can be an
3410    element of a "constant" initializer.
3411
3412    Return null_pointer_node if the value is absolute;
3413    if it is relocatable, return the variable that determines the relocation.
3414    We assume that VALUE has been folded as much as possible;
3415    therefore, we do not need to check for such things as
3416    arithmetic-combinations of integers.  */
3417
3418 tree
3419 initializer_constant_valid_p (tree value, tree endtype)
3420 {
3421   /* Give the front-end a chance to convert VALUE to something that
3422      looks more like a constant to the back-end.  */
3423   value = lang_hooks.expand_constant (value);
3424
3425   switch (TREE_CODE (value))
3426     {
3427     case CONSTRUCTOR:
3428       if ((TREE_CODE (TREE_TYPE (value)) == UNION_TYPE
3429            || TREE_CODE (TREE_TYPE (value)) == RECORD_TYPE)
3430           && TREE_CONSTANT (value)
3431           && CONSTRUCTOR_ELTS (value))
3432         {
3433           tree elt;
3434           bool absolute = true;
3435
3436           for (elt = CONSTRUCTOR_ELTS (value); elt; elt = TREE_CHAIN (elt))
3437             {
3438               tree reloc;
3439               value = TREE_VALUE (elt);
3440               reloc = initializer_constant_valid_p (value, TREE_TYPE (value));
3441               if (!reloc)
3442                 return NULL_TREE;
3443               if (reloc != null_pointer_node)
3444                 absolute = false;
3445             }
3446           /* For a non-absolute relocation, there is no single
3447              variable that can be "the variable that determines the
3448              relocation."  */
3449           return absolute ? null_pointer_node : error_mark_node;
3450         }
3451
3452       return TREE_STATIC (value) ? null_pointer_node : NULL_TREE;
3453
3454     case INTEGER_CST:
3455     case VECTOR_CST:
3456     case REAL_CST:
3457     case STRING_CST:
3458     case COMPLEX_CST:
3459       return null_pointer_node;
3460
3461     case ADDR_EXPR:
3462     case FDESC_EXPR:
3463       value = staticp (TREE_OPERAND (value, 0));
3464       /* "&(*a).f" is like unto pointer arithmetic.  If "a" turns out to
3465          be a constant, this is old-skool offsetof-like nonsense.  */
3466       if (value
3467           && TREE_CODE (value) == INDIRECT_REF
3468           && TREE_CONSTANT (TREE_OPERAND (value, 0)))
3469         return null_pointer_node;
3470       return value;
3471
3472     case VIEW_CONVERT_EXPR:
3473     case NON_LVALUE_EXPR:
3474       return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3475
3476     case CONVERT_EXPR:
3477     case NOP_EXPR:
3478       /* Allow conversions between pointer types.  */
3479       if (POINTER_TYPE_P (TREE_TYPE (value))
3480           && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3481         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3482
3483       /* Allow conversions between real types.  */
3484       if (FLOAT_TYPE_P (TREE_TYPE (value))
3485           && FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3486         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3487
3488       /* Allow length-preserving conversions between integer types.  */
3489       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3490           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
3491           && (TYPE_PRECISION (TREE_TYPE (value))
3492               == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
3493         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3494
3495       /* Allow conversions between other integer types only if
3496          explicit value.  */
3497       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3498           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3499         {
3500           tree inner = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3501                                                      endtype);
3502           if (inner == null_pointer_node)
3503             return null_pointer_node;
3504           break;
3505         }
3506
3507       /* Allow (int) &foo provided int is as wide as a pointer.  */
3508       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3509           && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
3510           && (TYPE_PRECISION (TREE_TYPE (value))
3511               >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
3512         return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3513                                              endtype);
3514
3515       /* Likewise conversions from int to pointers, but also allow
3516          conversions from 0.  */
3517       if ((POINTER_TYPE_P (TREE_TYPE (value))
3518            || TREE_CODE (TREE_TYPE (value)) == OFFSET_TYPE)
3519           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3520         {
3521           if (integer_zerop (TREE_OPERAND (value, 0)))
3522             return null_pointer_node;
3523           else if (TYPE_PRECISION (TREE_TYPE (value))
3524                    <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0))))
3525             return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3526                                                  endtype);
3527         }
3528
3529       /* Allow conversions to struct or union types if the value
3530          inside is okay.  */
3531       if (TREE_CODE (TREE_TYPE (value)) == RECORD_TYPE
3532           || TREE_CODE (TREE_TYPE (value)) == UNION_TYPE)
3533         return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3534                                              endtype);
3535       break;
3536
3537     case PLUS_EXPR:
3538       if (! INTEGRAL_TYPE_P (endtype)
3539           || TYPE_PRECISION (endtype) >= POINTER_SIZE)
3540         {
3541           tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3542                                                       endtype);
3543           tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
3544                                                       endtype);
3545           /* If either term is absolute, use the other terms relocation.  */
3546           if (valid0 == null_pointer_node)
3547             return valid1;
3548           if (valid1 == null_pointer_node)
3549             return valid0;
3550         }
3551       break;
3552
3553     case MINUS_EXPR:
3554       if (! INTEGRAL_TYPE_P (endtype)
3555           || TYPE_PRECISION (endtype) >= POINTER_SIZE)
3556         {
3557           tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3558                                                       endtype);
3559           tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
3560                                                       endtype);
3561           /* Win if second argument is absolute.  */
3562           if (valid1 == null_pointer_node)
3563             return valid0;
3564           /* Win if both arguments have the same relocation.
3565              Then the value is absolute.  */
3566           if (valid0 == valid1 && valid0 != 0)
3567             return null_pointer_node;
3568
3569           /* Since GCC guarantees that string constants are unique in the
3570              generated code, a subtraction between two copies of the same
3571              constant string is absolute.  */
3572           if (valid0 && TREE_CODE (valid0) == STRING_CST
3573               && valid1 && TREE_CODE (valid1) == STRING_CST
3574               && operand_equal_p (valid0, valid1, 1))
3575             return null_pointer_node;
3576         }
3577
3578       /* Support narrowing differences.  */
3579       if (INTEGRAL_TYPE_P (endtype))
3580         {
3581           tree op0, op1;
3582
3583           op0 = TREE_OPERAND (value, 0);
3584           op1 = TREE_OPERAND (value, 1);
3585
3586           /* Like STRIP_NOPS except allow the operand mode to widen.
3587              This works around a feature of fold that simplifies
3588              (int)(p1 - p2) to ((int)p1 - (int)p2) under the theory
3589              that the narrower operation is cheaper.  */
3590
3591           while (TREE_CODE (op0) == NOP_EXPR
3592                  || TREE_CODE (op0) == CONVERT_EXPR
3593                  || TREE_CODE (op0) == NON_LVALUE_EXPR)
3594             {
3595               tree inner = TREE_OPERAND (op0, 0);
3596               if (inner == error_mark_node
3597                   || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
3598                   || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0)))
3599                       > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
3600                 break;
3601               op0 = inner;
3602             }
3603
3604           while (TREE_CODE (op1) == NOP_EXPR
3605                  || TREE_CODE (op1) == CONVERT_EXPR
3606                  || TREE_CODE (op1) == NON_LVALUE_EXPR)
3607             {
3608               tree inner = TREE_OPERAND (op1, 0);
3609               if (inner == error_mark_node
3610                   || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
3611                   || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1)))
3612                       > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
3613                 break;
3614               op1 = inner;
3615             }
3616
3617           op0 = initializer_constant_valid_p (op0, endtype);
3618           op1 = initializer_constant_valid_p (op1, endtype);
3619
3620           /* Both initializers must be known.  */
3621           if (op0 && op1)
3622             {
3623               if (op0 == op1)
3624                 return null_pointer_node;
3625
3626               /* Support differences between labels.  */
3627               if (TREE_CODE (op0) == LABEL_DECL
3628                   && TREE_CODE (op1) == LABEL_DECL)
3629                 return null_pointer_node;
3630
3631               if (TREE_CODE (op0) == STRING_CST
3632                   && TREE_CODE (op1) == STRING_CST
3633                   && operand_equal_p (op0, op1, 1))
3634                 return null_pointer_node;
3635             }
3636         }
3637       break;
3638
3639     default:
3640       break;
3641     }
3642
3643   return 0;
3644 }
3645 \f
3646 /* Output assembler code for constant EXP to FILE, with no label.
3647    This includes the pseudo-op such as ".int" or ".byte", and a newline.
3648    Assumes output_addressed_constants has been done on EXP already.
3649
3650    Generate exactly SIZE bytes of assembler data, padding at the end
3651    with zeros if necessary.  SIZE must always be specified.
3652
3653    SIZE is important for structure constructors,
3654    since trailing members may have been omitted from the constructor.
3655    It is also important for initialization of arrays from string constants
3656    since the full length of the string constant might not be wanted.
3657    It is also needed for initialization of unions, where the initializer's
3658    type is just one member, and that may not be as long as the union.
3659
3660    There a case in which we would fail to output exactly SIZE bytes:
3661    for a structure constructor that wants to produce more than SIZE bytes.
3662    But such constructors will never be generated for any possible input.
3663
3664    ALIGN is the alignment of the data in bits.  */
3665
3666 void
3667 output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align)
3668 {
3669   enum tree_code code;
3670   unsigned HOST_WIDE_INT thissize;
3671
3672   /* Some front-ends use constants other than the standard language-independent
3673      varieties, but which may still be output directly.  Give the front-end a
3674      chance to convert EXP to a language-independent representation.  */
3675   exp = lang_hooks.expand_constant (exp);
3676
3677   if (size == 0 || flag_syntax_only)
3678     return;
3679
3680   /* Eliminate any conversions since we'll be outputting the underlying
3681      constant.  */
3682   while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
3683          || TREE_CODE (exp) == NON_LVALUE_EXPR
3684          || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
3685     exp = TREE_OPERAND (exp, 0);
3686
3687   code = TREE_CODE (TREE_TYPE (exp));
3688   thissize = int_size_in_bytes (TREE_TYPE (exp));
3689
3690   /* Allow a constructor with no elements for any data type.
3691      This means to fill the space with zeros.  */
3692   if (TREE_CODE (exp) == CONSTRUCTOR && CONSTRUCTOR_ELTS (exp) == 0)
3693     {
3694       assemble_zeros (size);
3695       return;
3696     }
3697
3698   if (TREE_CODE (exp) == FDESC_EXPR)
3699     {
3700 #ifdef ASM_OUTPUT_FDESC
3701       HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0);
3702       tree decl = TREE_OPERAND (exp, 0);
3703       ASM_OUTPUT_FDESC (asm_out_file, decl, part);
3704 #else
3705       abort ();
3706 #endif
3707       return;
3708     }
3709
3710   /* Now output the underlying data.  If we've handling the padding, return.
3711      Otherwise, break and ensure SIZE is the size written.  */
3712   switch (code)
3713     {
3714     case CHAR_TYPE:
3715     case BOOLEAN_TYPE:
3716     case INTEGER_TYPE:
3717     case ENUMERAL_TYPE:
3718     case POINTER_TYPE:
3719     case REFERENCE_TYPE:
3720     case OFFSET_TYPE:
3721       if (! assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode,
3722                                            EXPAND_INITIALIZER),
3723                               MIN (size, thissize), align, 0))
3724         error ("initializer for integer value is too complicated");
3725       break;
3726
3727     case REAL_TYPE:
3728       if (TREE_CODE (exp) != REAL_CST)
3729         error ("initializer for floating value is not a floating constant");
3730
3731       assemble_real (TREE_REAL_CST (exp), TYPE_MODE (TREE_TYPE (exp)), align);
3732       break;
3733
3734     case COMPLEX_TYPE:
3735       output_constant (TREE_REALPART (exp), thissize / 2, align);
3736       output_constant (TREE_IMAGPART (exp), thissize / 2,
3737                        min_align (align, BITS_PER_UNIT * (thissize / 2)));
3738       break;
3739
3740     case ARRAY_TYPE:
3741     case VECTOR_TYPE:
3742       if (TREE_CODE (exp) == CONSTRUCTOR)
3743         {
3744           output_constructor (exp, size, align);
3745           return;
3746         }
3747       else if (TREE_CODE (exp) == STRING_CST)
3748         {
3749           thissize = MIN ((unsigned HOST_WIDE_INT)TREE_STRING_LENGTH (exp),
3750                           size);
3751           assemble_string (TREE_STRING_POINTER (exp), thissize);
3752         }
3753       else if (TREE_CODE (exp) == VECTOR_CST)
3754         {
3755           int elt_size;
3756           tree link;
3757           unsigned int nalign;
3758           enum machine_mode inner;
3759
3760           inner = TYPE_MODE (TREE_TYPE (TREE_TYPE (exp)));
3761           nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
3762
3763           elt_size = GET_MODE_SIZE (inner);
3764
3765           link = TREE_VECTOR_CST_ELTS (exp);
3766           output_constant (TREE_VALUE (link), elt_size, align);
3767           while ((link = TREE_CHAIN (link)) != NULL)
3768             output_constant (TREE_VALUE (link), elt_size, nalign);
3769         }
3770       else
3771         abort ();
3772       break;
3773
3774     case RECORD_TYPE:
3775     case UNION_TYPE:
3776       if (TREE_CODE (exp) == CONSTRUCTOR)
3777         output_constructor (exp, size, align);
3778       else
3779         abort ();
3780       return;
3781
3782     case SET_TYPE:
3783       if (TREE_CODE (exp) == INTEGER_CST)
3784         assemble_integer (expand_expr (exp, NULL_RTX,
3785                                        VOIDmode, EXPAND_INITIALIZER),
3786                           thissize, align, 1);
3787       else if (TREE_CODE (exp) == CONSTRUCTOR)
3788         {
3789           unsigned char *buffer = alloca (thissize);
3790           if (get_set_constructor_bytes (exp, buffer, thissize))
3791             abort ();
3792           assemble_string ((char *) buffer, thissize);
3793         }
3794       else
3795         error ("unknown set constructor type");
3796       return;
3797
3798     case ERROR_MARK:
3799       return;
3800
3801     default:
3802       abort ();
3803     }
3804
3805   if (size > thissize)
3806     assemble_zeros (size - thissize);
3807 }
3808
3809 \f
3810 /* Subroutine of output_constructor, used for computing the size of
3811    arrays of unspecified length.  VAL must be a CONSTRUCTOR of an array
3812    type with an unspecified upper bound.  */
3813
3814 static unsigned HOST_WIDE_INT
3815 array_size_for_constructor (tree val)
3816 {
3817   tree max_index, i;
3818
3819   /* This code used to attempt to handle string constants that are not
3820      arrays of single-bytes, but nothing else does, so there's no point in
3821      doing it here.  */
3822   if (TREE_CODE (val) == STRING_CST)
3823     return TREE_STRING_LENGTH (val);
3824
3825   max_index = NULL_TREE;
3826   for (i = CONSTRUCTOR_ELTS (val); i; i = TREE_CHAIN (i))
3827     {
3828       tree index = TREE_PURPOSE (i);
3829
3830       if (TREE_CODE (index) == RANGE_EXPR)
3831         index = TREE_OPERAND (index, 1);
3832       if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
3833         max_index = index;
3834     }
3835
3836   if (max_index == NULL_TREE)
3837     return 0;
3838
3839   /* Compute the total number of array elements.  */
3840   i = size_binop (MINUS_EXPR, convert (sizetype, max_index),
3841                   convert (sizetype,
3842                            TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)))));
3843   i = size_binop (PLUS_EXPR, i, convert (sizetype, integer_one_node));
3844
3845   /* Multiply by the array element unit size to find number of bytes.  */
3846   i = size_binop (MULT_EXPR, i, TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (val))));
3847
3848   return tree_low_cst (i, 1);
3849 }
3850
3851 /* Subroutine of output_constant, used for CONSTRUCTORs (aggregate constants).
3852    Generate at least SIZE bytes, padding if necessary.  */
3853
3854 static void
3855 output_constructor (tree exp, unsigned HOST_WIDE_INT size,
3856                     unsigned int align)
3857 {
3858   tree type = TREE_TYPE (exp);
3859   tree link, field = 0;
3860   tree min_index = 0;
3861   /* Number of bytes output or skipped so far.
3862      In other words, current position within the constructor.  */
3863   HOST_WIDE_INT total_bytes = 0;
3864   /* Nonzero means BYTE contains part of a byte, to be output.  */
3865   int byte_buffer_in_use = 0;
3866   int byte = 0;
3867
3868   if (HOST_BITS_PER_WIDE_INT < BITS_PER_UNIT)
3869     abort ();
3870
3871   if (TREE_CODE (type) == RECORD_TYPE)
3872     field = TYPE_FIELDS (type);
3873
3874   if (TREE_CODE (type) == ARRAY_TYPE
3875       && TYPE_DOMAIN (type) != 0)
3876     min_index = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
3877
3878   /* As LINK goes through the elements of the constant,
3879      FIELD goes through the structure fields, if the constant is a structure.
3880      if the constant is a union, then we override this,
3881      by getting the field from the TREE_LIST element.
3882      But the constant could also be an array.  Then FIELD is zero.
3883
3884      There is always a maximum of one element in the chain LINK for unions
3885      (even if the initializer in a source program incorrectly contains
3886      more one).  */
3887   for (link = CONSTRUCTOR_ELTS (exp);
3888        link;
3889        link = TREE_CHAIN (link),
3890        field = field ? TREE_CHAIN (field) : 0)
3891     {
3892       tree val = TREE_VALUE (link);
3893       tree index = 0;
3894
3895       /* The element in a union constructor specifies the proper field
3896          or index.  */
3897       if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
3898            || TREE_CODE (type) == QUAL_UNION_TYPE)
3899           && TREE_PURPOSE (link) != 0)
3900         field = TREE_PURPOSE (link);
3901
3902       else if (TREE_CODE (type) == ARRAY_TYPE)
3903         index = TREE_PURPOSE (link);
3904
3905 #ifdef ASM_COMMENT_START
3906       if (field && flag_verbose_asm)
3907         fprintf (asm_out_file, "%s %s:\n",
3908                  ASM_COMMENT_START, 
3909                  DECL_NAME (field) 
3910                  ? IDENTIFIER_POINTER (DECL_NAME (field))
3911                  : "<anonymous>");
3912 #endif
3913
3914       /* Eliminate the marker that makes a cast not be an lvalue.  */
3915       if (val != 0)
3916         STRIP_NOPS (val);
3917
3918       if (index && TREE_CODE (index) == RANGE_EXPR)
3919         {
3920           unsigned HOST_WIDE_INT fieldsize
3921             = int_size_in_bytes (TREE_TYPE (type));
3922           HOST_WIDE_INT lo_index = tree_low_cst (TREE_OPERAND (index, 0), 0);
3923           HOST_WIDE_INT hi_index = tree_low_cst (TREE_OPERAND (index, 1), 0);
3924           HOST_WIDE_INT index;
3925           unsigned int align2 = min_align (align, fieldsize * BITS_PER_UNIT);
3926
3927           for (index = lo_index; index <= hi_index; index++)
3928             {
3929               /* Output the element's initial value.  */
3930               if (val == 0)
3931                 assemble_zeros (fieldsize);
3932               else
3933                 output_constant (val, fieldsize, align2);
3934
3935               /* Count its size.  */
3936               total_bytes += fieldsize;
3937             }
3938         }
3939       else if (field == 0 || !DECL_BIT_FIELD (field))
3940         {
3941           /* An element that is not a bit-field.  */
3942
3943           unsigned HOST_WIDE_INT fieldsize;
3944           /* Since this structure is static,
3945              we know the positions are constant.  */
3946           HOST_WIDE_INT pos = field ? int_byte_position (field) : 0;
3947           unsigned int align2;
3948
3949           if (index != 0)
3950             pos = (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (val)), 1)
3951                    * (tree_low_cst (index, 0) - tree_low_cst (min_index, 0)));
3952
3953           /* Output any buffered-up bit-fields preceding this element.  */
3954           if (byte_buffer_in_use)
3955             {
3956               assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
3957               total_bytes++;
3958               byte_buffer_in_use = 0;
3959             }
3960
3961           /* Advance to offset of this element.
3962              Note no alignment needed in an array, since that is guaranteed
3963              if each element has the proper size.  */
3964           if ((field != 0 || index != 0) && pos != total_bytes)
3965             {
3966               assemble_zeros (pos - total_bytes);
3967               total_bytes = pos;
3968             }
3969
3970           /* Find the alignment of this element.  */
3971           align2 = min_align (align, BITS_PER_UNIT * pos);
3972
3973           /* Determine size this element should occupy.  */
3974           if (field)
3975             {
3976               fieldsize = 0;
3977
3978               /* If this is an array with an unspecified upper bound,
3979                  the initializer determines the size.  */
3980               /* ??? This ought to only checked if DECL_SIZE_UNIT is NULL,
3981                  but we cannot do this until the deprecated support for
3982                  initializing zero-length array members is removed.  */
3983               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
3984                   && TYPE_DOMAIN (TREE_TYPE (field))
3985                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
3986                 {
3987                   fieldsize = array_size_for_constructor (val);
3988                   /* Given a non-empty initialization, this field had
3989                      better be last.  */
3990                   if (fieldsize != 0 && TREE_CHAIN (field) != NULL_TREE)
3991                     abort ();
3992                 }
3993               else if (DECL_SIZE_UNIT (field))
3994                 {
3995                   /* ??? This can't be right.  If the decl size overflows
3996                      a host integer we will silently emit no data.  */
3997                   if (host_integerp (DECL_SIZE_UNIT (field), 1))
3998                     fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 1);
3999                 }
4000             }
4001           else
4002             fieldsize = int_size_in_bytes (TREE_TYPE (type));
4003
4004           /* Output the element's initial value.  */
4005           if (val == 0)
4006             assemble_zeros (fieldsize);
4007           else
4008             output_constant (val, fieldsize, align2);
4009
4010           /* Count its size.  */
4011           total_bytes += fieldsize;
4012         }
4013       else if (val != 0 && TREE_CODE (val) != INTEGER_CST)
4014         error ("invalid initial value for member `%s'",
4015                IDENTIFIER_POINTER (DECL_NAME (field)));
4016       else
4017         {
4018           /* Element that is a bit-field.  */
4019
4020           HOST_WIDE_INT next_offset = int_bit_position (field);
4021           HOST_WIDE_INT end_offset
4022             = (next_offset + tree_low_cst (DECL_SIZE (field), 1));
4023
4024           if (val == 0)
4025             val = integer_zero_node;
4026
4027           /* If this field does not start in this (or, next) byte,
4028              skip some bytes.  */
4029           if (next_offset / BITS_PER_UNIT != total_bytes)
4030             {
4031               /* Output remnant of any bit field in previous bytes.  */
4032               if (byte_buffer_in_use)
4033                 {
4034                   assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4035                   total_bytes++;
4036                   byte_buffer_in_use = 0;
4037                 }
4038
4039               /* If still not at proper byte, advance to there.  */
4040               if (next_offset / BITS_PER_UNIT != total_bytes)
4041                 {
4042                   assemble_zeros (next_offset / BITS_PER_UNIT - total_bytes);
4043                   total_bytes = next_offset / BITS_PER_UNIT;
4044                 }
4045             }
4046
4047           if (! byte_buffer_in_use)
4048             byte = 0;
4049
4050           /* We must split the element into pieces that fall within
4051              separate bytes, and combine each byte with previous or
4052              following bit-fields.  */
4053
4054           /* next_offset is the offset n fbits from the beginning of
4055              the structure to the next bit of this element to be processed.
4056              end_offset is the offset of the first bit past the end of
4057              this element.  */
4058           while (next_offset < end_offset)
4059             {
4060               int this_time;
4061               int shift;
4062               HOST_WIDE_INT value;
4063               HOST_WIDE_INT next_byte = next_offset / BITS_PER_UNIT;
4064               HOST_WIDE_INT next_bit = next_offset % BITS_PER_UNIT;
4065
4066               /* Advance from byte to byte
4067                  within this element when necessary.  */
4068               while (next_byte != total_bytes)
4069                 {
4070                   assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4071                   total_bytes++;
4072                   byte = 0;
4073                 }
4074
4075               /* Number of bits we can process at once
4076                  (all part of the same byte).  */
4077               this_time = MIN (end_offset - next_offset,
4078                                BITS_PER_UNIT - next_bit);
4079               if (BYTES_BIG_ENDIAN)
4080                 {
4081                   /* On big-endian machine, take the most significant bits
4082                      first (of the bits that are significant)
4083                      and put them into bytes from the most significant end.  */
4084                   shift = end_offset - next_offset - this_time;
4085
4086                   /* Don't try to take a bunch of bits that cross
4087                      the word boundary in the INTEGER_CST. We can
4088                      only select bits from the LOW or HIGH part
4089                      not from both.  */
4090                   if (shift < HOST_BITS_PER_WIDE_INT
4091                       && shift + this_time > HOST_BITS_PER_WIDE_INT)
4092                     {
4093                       this_time = shift + this_time - HOST_BITS_PER_WIDE_INT;
4094                       shift = HOST_BITS_PER_WIDE_INT;
4095                     }
4096
4097                   /* Now get the bits from the appropriate constant word.  */
4098                   if (shift < HOST_BITS_PER_WIDE_INT)
4099                     value = TREE_INT_CST_LOW (val);
4100                   else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
4101                     {
4102                       value = TREE_INT_CST_HIGH (val);
4103                       shift -= HOST_BITS_PER_WIDE_INT;
4104                     }
4105                   else
4106                     abort ();
4107
4108                   /* Get the result. This works only when:
4109                      1 <= this_time <= HOST_BITS_PER_WIDE_INT.  */
4110                   byte |= (((value >> shift)
4111                             & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4112                            << (BITS_PER_UNIT - this_time - next_bit));
4113                 }
4114               else
4115                 {
4116                   /* On little-endian machines,
4117                      take first the least significant bits of the value
4118                      and pack them starting at the least significant
4119                      bits of the bytes.  */
4120                   shift = next_offset - int_bit_position (field);
4121
4122                   /* Don't try to take a bunch of bits that cross
4123                      the word boundary in the INTEGER_CST. We can
4124                      only select bits from the LOW or HIGH part
4125                      not from both.  */
4126                   if (shift < HOST_BITS_PER_WIDE_INT
4127                       && shift + this_time > HOST_BITS_PER_WIDE_INT)
4128                     this_time = (HOST_BITS_PER_WIDE_INT - shift);
4129
4130                   /* Now get the bits from the appropriate constant word.  */
4131                   if (shift < HOST_BITS_PER_WIDE_INT)
4132                     value = TREE_INT_CST_LOW (val);
4133                   else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
4134                     {
4135                       value = TREE_INT_CST_HIGH (val);
4136                       shift -= HOST_BITS_PER_WIDE_INT;
4137                     }
4138                   else
4139                     abort ();
4140
4141                   /* Get the result. This works only when:
4142                      1 <= this_time <= HOST_BITS_PER_WIDE_INT.  */
4143                   byte |= (((value >> shift)
4144                             & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4145                            << next_bit);
4146                 }
4147
4148               next_offset += this_time;
4149               byte_buffer_in_use = 1;
4150             }
4151         }
4152     }
4153
4154   if (byte_buffer_in_use)
4155     {
4156       assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4157       total_bytes++;
4158     }
4159
4160   if ((unsigned HOST_WIDE_INT)total_bytes < size)
4161     assemble_zeros (size - total_bytes);
4162 }
4163
4164 /* This TREE_LIST contains any weak symbol declarations waiting
4165    to be emitted.  */
4166 static GTY(()) tree weak_decls;
4167
4168 /* Mark DECL as weak.  */
4169
4170 static void
4171 mark_weak (tree decl)
4172 {
4173   DECL_WEAK (decl) = 1;
4174
4175   if (DECL_RTL_SET_P (decl)
4176       && MEM_P (DECL_RTL (decl))
4177       && XEXP (DECL_RTL (decl), 0)
4178       && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF)
4179     SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1;
4180 }
4181
4182 /* Merge weak status between NEWDECL and OLDDECL.  */
4183
4184 void
4185 merge_weak (tree newdecl, tree olddecl)
4186 {
4187   if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
4188     return;
4189
4190   if (DECL_WEAK (newdecl))
4191     {
4192       tree wd;
4193
4194       /* NEWDECL is weak, but OLDDECL is not.  */
4195
4196       /* If we already output the OLDDECL, we're in trouble; we can't
4197          go back and make it weak.  This error cannot caught in
4198          declare_weak because the NEWDECL and OLDDECL was not yet
4199          been merged; therefore, TREE_ASM_WRITTEN was not set.  */
4200       if (TREE_ASM_WRITTEN (olddecl))
4201         error ("%Jweak declaration of '%D' must precede definition",
4202                newdecl, newdecl);
4203
4204       /* If we've already generated rtl referencing OLDDECL, we may
4205          have done so in a way that will not function properly with
4206          a weak symbol.  */
4207       else if (TREE_USED (olddecl)
4208                && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)))
4209         warning ("%Jweak declaration of '%D' after first use results "
4210                  "in unspecified behavior", newdecl, newdecl);
4211
4212       if (SUPPORTS_WEAK)
4213         {
4214           /* We put the NEWDECL on the weak_decls list at some point.
4215              Replace it with the OLDDECL.  */
4216           for (wd = weak_decls; wd; wd = TREE_CHAIN (wd))
4217             if (TREE_VALUE (wd) == newdecl)
4218               {
4219                 TREE_VALUE (wd) = olddecl;
4220                 break;
4221               }
4222           /* We may not find the entry on the list.  If NEWDECL is a
4223              weak alias, then we will have already called
4224              globalize_decl to remove the entry; in that case, we do
4225              not need to do anything.  */
4226         }
4227
4228       /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping.  */
4229       mark_weak (olddecl);
4230     }
4231   else
4232     /* OLDDECL was weak, but NEWDECL was not explicitly marked as
4233        weak.  Just update NEWDECL to indicate that it's weak too.  */
4234     mark_weak (newdecl);
4235 }
4236
4237 /* Declare DECL to be a weak symbol.  */
4238
4239 void
4240 declare_weak (tree decl)
4241 {
4242   if (! TREE_PUBLIC (decl))
4243     error ("%Jweak declaration of '%D' must be public", decl, decl);
4244   else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
4245     error ("%Jweak declaration of '%D' must precede definition", decl, decl);
4246   else if (SUPPORTS_WEAK)
4247     {
4248       if (! DECL_WEAK (decl))
4249         weak_decls = tree_cons (NULL, decl, weak_decls);
4250     }
4251   else
4252     warning ("%Jweak declaration of '%D' not supported", decl, decl);
4253
4254   mark_weak (decl);
4255 }
4256
4257 /* Emit any pending weak declarations.  */
4258
4259 void
4260 weak_finish (void)
4261 {
4262   tree t;
4263
4264   for (t = weak_decls; t; t = TREE_CHAIN (t))
4265     {
4266       tree decl = TREE_VALUE (t);
4267 #if defined (ASM_WEAKEN_DECL) || defined (ASM_WEAKEN_LABEL)
4268       const char *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4269 #endif
4270
4271       if (! TREE_USED (decl))
4272         continue;
4273
4274 #ifdef ASM_WEAKEN_DECL
4275       ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL);
4276 #else
4277 #ifdef ASM_WEAKEN_LABEL
4278       ASM_WEAKEN_LABEL (asm_out_file, name);
4279 #else
4280 #ifdef ASM_OUTPUT_WEAK_ALIAS
4281       warning ("only weak aliases are supported in this configuration");
4282       return;
4283 #endif
4284 #endif
4285 #endif
4286     }
4287 }
4288
4289 /* Emit the assembly bits to indicate that DECL is globally visible.  */
4290
4291 static void
4292 globalize_decl (tree decl)
4293 {
4294   const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
4295
4296 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
4297   if (DECL_WEAK (decl))
4298     {
4299       tree *p, t;
4300
4301 #ifdef ASM_WEAKEN_DECL
4302       ASM_WEAKEN_DECL (asm_out_file, decl, name, 0);
4303 #else
4304       ASM_WEAKEN_LABEL (asm_out_file, name);
4305 #endif
4306
4307       /* Remove this function from the pending weak list so that
4308          we do not emit multiple .weak directives for it.  */
4309       for (p = &weak_decls; (t = *p) ; )
4310         {
4311           if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
4312             *p = TREE_CHAIN (t);
4313           else
4314             p = &TREE_CHAIN (t);
4315         }
4316       return;
4317     }
4318 #elif defined(ASM_MAKE_LABEL_LINKONCE)
4319   if (DECL_ONE_ONLY (decl))
4320     ASM_MAKE_LABEL_LINKONCE (asm_out_file, name);
4321 #endif
4322
4323   targetm.asm_out.globalize_label (asm_out_file, name);
4324 }
4325
4326 /* Emit an assembler directive to make the symbol for DECL an alias to
4327    the symbol for TARGET.  */
4328
4329 void
4330 assemble_alias (tree decl, tree target ATTRIBUTE_UNUSED)
4331 {
4332   const char *name;
4333
4334   /* We must force creation of DECL_RTL for debug info generation, even though
4335      we don't use it here.  */
4336   make_decl_rtl (decl);
4337
4338   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4339
4340 #ifdef ASM_OUTPUT_DEF
4341   /* Make name accessible from other files, if appropriate.  */
4342
4343   if (TREE_PUBLIC (decl))
4344     {
4345       globalize_decl (decl);
4346       maybe_assemble_visibility (decl);
4347     }
4348
4349 #ifdef ASM_OUTPUT_DEF_FROM_DECLS
4350   ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
4351 #else
4352   ASM_OUTPUT_DEF (asm_out_file, name, IDENTIFIER_POINTER (target));
4353 #endif
4354 #else /* !ASM_OUTPUT_DEF */
4355 #if defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
4356   if (DECL_WEAK (decl))
4357     {
4358       tree *p, t;
4359 #ifdef ASM_WEAKEN_DECL
4360       ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target));
4361 #else
4362       ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target));
4363 #endif
4364       /* Remove this function from the pending weak list so that
4365          we do not emit multiple .weak directives for it.  */
4366       for (p = &weak_decls; (t = *p) ; )
4367         if (DECL_ASSEMBLER_NAME (decl)
4368             == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
4369           *p = TREE_CHAIN (t);
4370         else
4371           p = &TREE_CHAIN (t);
4372     }
4373   else
4374     warning ("only weak aliases are supported in this configuration");
4375
4376 #else
4377   warning ("alias definitions not supported in this configuration; ignored");
4378 #endif
4379 #endif
4380
4381   TREE_USED (decl) = 1;
4382   TREE_ASM_WRITTEN (decl) = 1;
4383   TREE_ASM_WRITTEN (DECL_ASSEMBLER_NAME (decl)) = 1;
4384 }
4385
4386 /* Emit an assembler directive to set symbol for DECL visibility to
4387    the visibility type VIS, which must not be VISIBILITY_DEFAULT.  */
4388
4389 void
4390 default_assemble_visibility (tree decl, int vis)
4391 {
4392   static const char * const visibility_types[] = {
4393     NULL, "internal", "hidden", "protected"
4394   };
4395
4396   const char *name, *type;
4397
4398   name = (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
4399   type = visibility_types[vis];
4400
4401 #ifdef HAVE_GAS_HIDDEN
4402   fprintf (asm_out_file, "\t.%s\t", type);
4403   assemble_name (asm_out_file, name);
4404   fprintf (asm_out_file, "\n");
4405 #else
4406   warning ("visibility attribute not supported in this configuration; ignored");
4407 #endif
4408 }
4409
4410 /* A helper function to call assemble_visibility when needed for a decl.  */
4411
4412 static void
4413 maybe_assemble_visibility (tree decl)
4414 {
4415   enum symbol_visibility vis = DECL_VISIBILITY (decl);
4416
4417   if (vis != VISIBILITY_DEFAULT)
4418     targetm.asm_out.visibility (decl, vis);
4419 }
4420
4421 /* Returns 1 if the target configuration supports defining public symbols
4422    so that one of them will be chosen at link time instead of generating a
4423    multiply-defined symbol error, whether through the use of weak symbols or
4424    a target-specific mechanism for having duplicates discarded.  */
4425
4426 int
4427 supports_one_only (void)
4428 {
4429   if (SUPPORTS_ONE_ONLY)
4430     return 1;
4431   return SUPPORTS_WEAK;
4432 }
4433
4434 /* Set up DECL as a public symbol that can be defined in multiple
4435    translation units without generating a linker error.  */
4436
4437 void
4438 make_decl_one_only (tree decl)
4439 {
4440   if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4441     abort ();
4442
4443   TREE_PUBLIC (decl) = 1;
4444
4445   if (SUPPORTS_ONE_ONLY)
4446     {
4447 #ifdef MAKE_DECL_ONE_ONLY
4448       MAKE_DECL_ONE_ONLY (decl);
4449 #endif
4450       DECL_ONE_ONLY (decl) = 1;
4451     }
4452   else if (TREE_CODE (decl) == VAR_DECL
4453       && (DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node))
4454     DECL_COMMON (decl) = 1;
4455   else if (SUPPORTS_WEAK)
4456     DECL_WEAK (decl) = 1;
4457   else
4458     abort ();
4459 }
4460
4461 void
4462 init_varasm_once (void)
4463 {
4464   in_named_htab = htab_create_ggc (31, in_named_entry_hash,
4465                                    in_named_entry_eq, NULL);
4466   const_desc_htab = htab_create_ggc (1009, const_desc_hash,
4467                                      const_desc_eq, NULL);
4468
4469   const_alias_set = new_alias_set ();
4470 }
4471
4472 enum tls_model
4473 decl_tls_model (tree decl)
4474 {
4475   enum tls_model kind;
4476   tree attr = lookup_attribute ("tls_model", DECL_ATTRIBUTES (decl));
4477   bool is_local;
4478
4479   if (attr)
4480     {
4481       attr = TREE_VALUE (TREE_VALUE (attr));
4482       if (TREE_CODE (attr) != STRING_CST)
4483         abort ();
4484       if (!strcmp (TREE_STRING_POINTER (attr), "local-exec"))
4485         kind = TLS_MODEL_LOCAL_EXEC;
4486       else if (!strcmp (TREE_STRING_POINTER (attr), "initial-exec"))
4487         kind = TLS_MODEL_INITIAL_EXEC;
4488       else if (!strcmp (TREE_STRING_POINTER (attr), "local-dynamic"))
4489         kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
4490       else if (!strcmp (TREE_STRING_POINTER (attr), "global-dynamic"))
4491         kind = TLS_MODEL_GLOBAL_DYNAMIC;
4492       else
4493         abort ();
4494       return kind;
4495     }
4496
4497   is_local = targetm.binds_local_p (decl);
4498   if (!flag_pic)
4499     {
4500       if (is_local)
4501         kind = TLS_MODEL_LOCAL_EXEC;
4502       else
4503         kind = TLS_MODEL_INITIAL_EXEC;
4504     }
4505   /* Local dynamic is inefficient when we're not combining the
4506      parts of the address.  */
4507   else if (optimize && is_local)
4508     kind = TLS_MODEL_LOCAL_DYNAMIC;
4509   else
4510     kind = TLS_MODEL_GLOBAL_DYNAMIC;
4511   if (kind < flag_tls_default)
4512     kind = flag_tls_default;
4513
4514   return kind;
4515 }
4516
4517 /* Select a set of attributes for section NAME based on the properties
4518    of DECL and whether or not RELOC indicates that DECL's initializer
4519    might contain runtime relocations.
4520
4521    We make the section read-only and executable for a function decl,
4522    read-only for a const data decl, and writable for a non-const data decl.  */
4523
4524 unsigned int
4525 default_section_type_flags (tree decl, const char *name, int reloc)
4526 {
4527   return default_section_type_flags_1 (decl, name, reloc, flag_pic);
4528 }
4529
4530 unsigned int
4531 default_section_type_flags_1 (tree decl, const char *name, int reloc,
4532                               int shlib)
4533 {
4534   unsigned int flags;
4535
4536   if (decl && TREE_CODE (decl) == FUNCTION_DECL)
4537     flags = SECTION_CODE;
4538   else if (decl && decl_readonly_section_1 (decl, reloc, shlib))
4539     flags = 0;
4540   else if (unlikely_text_section_name
4541            && strcmp (name, unlikely_text_section_name) == 0)
4542     flags = SECTION_CODE;
4543   else
4544     flags = SECTION_WRITE;
4545
4546   if (decl && DECL_ONE_ONLY (decl))
4547     flags |= SECTION_LINKONCE;
4548
4549   if (decl && TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
4550     flags |= SECTION_TLS | SECTION_WRITE;
4551
4552   if (strcmp (name, ".bss") == 0
4553       || strncmp (name, ".bss.", 5) == 0
4554       || strncmp (name, ".gnu.linkonce.b.", 16) == 0
4555       || strcmp (name, ".sbss") == 0
4556       || strncmp (name, ".sbss.", 6) == 0
4557       || strncmp (name, ".gnu.linkonce.sb.", 17) == 0
4558       || strcmp (name, ".tbss") == 0
4559       || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
4560     flags |= SECTION_BSS;
4561
4562   if (strcmp (name, ".tdata") == 0
4563       || strcmp (name, ".tbss") == 0
4564       || strncmp (name, ".gnu.linkonce.td.", 17) == 0
4565       || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
4566     flags |= SECTION_TLS;
4567
4568   /* These three sections have special ELF types.  They are neither
4569      SHT_PROGBITS nor SHT_NOBITS, so when changing sections we don't
4570      want to print a section type (@progbits or @nobits).  If someone
4571      is silly enough to emit code or TLS variables to one of these
4572      sections, then don't handle them specially.  */
4573   if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS))
4574       && (strcmp (name, ".init_array") == 0
4575           || strcmp (name, ".fini_array") == 0
4576           || strcmp (name, ".preinit_array") == 0))
4577     flags |= SECTION_NOTYPE;
4578
4579   return flags;
4580 }
4581
4582 /* Output assembly to switch to section NAME with attribute FLAGS.
4583    Four variants for common object file formats.  */
4584
4585 void
4586 default_no_named_section (const char *name ATTRIBUTE_UNUSED,
4587                           unsigned int flags ATTRIBUTE_UNUSED)
4588 {
4589   /* Some object formats don't support named sections at all.  The
4590      front-end should already have flagged this as an error.  */
4591   abort ();
4592 }
4593
4594 void
4595 default_elf_asm_named_section (const char *name, unsigned int flags)
4596 {
4597   char flagchars[10], *f = flagchars;
4598
4599   if (! named_section_first_declaration (name))
4600     {
4601       fprintf (asm_out_file, "\t.section\t%s\n", name);
4602       return;
4603     }
4604
4605   if (!(flags & SECTION_DEBUG))
4606     *f++ = 'a';
4607   if (flags & SECTION_WRITE)
4608     *f++ = 'w';
4609   if (flags & SECTION_CODE)
4610     *f++ = 'x';
4611   if (flags & SECTION_SMALL)
4612     *f++ = 's';
4613   if (flags & SECTION_MERGE)
4614     *f++ = 'M';
4615   if (flags & SECTION_STRINGS)
4616     *f++ = 'S';
4617   if (flags & SECTION_TLS)
4618     *f++ = 'T';
4619   *f = '\0';
4620
4621   fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
4622
4623   if (!(flags & SECTION_NOTYPE))
4624     {
4625       const char *type;
4626
4627       if (flags & SECTION_BSS)
4628         type = "nobits";
4629       else
4630         type = "progbits";
4631
4632       fprintf (asm_out_file, ",@%s", type);
4633
4634       if (flags & SECTION_ENTSIZE)
4635         fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
4636     }
4637
4638   putc ('\n', asm_out_file);
4639 }
4640
4641 void
4642 default_coff_asm_named_section (const char *name, unsigned int flags)
4643 {
4644   char flagchars[8], *f = flagchars;
4645
4646   if (flags & SECTION_WRITE)
4647     *f++ = 'w';
4648   if (flags & SECTION_CODE)
4649     *f++ = 'x';
4650   *f = '\0';
4651
4652   fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
4653 }
4654
4655 void
4656 default_pe_asm_named_section (const char *name, unsigned int flags)
4657 {
4658   default_coff_asm_named_section (name, flags);
4659
4660   if (flags & SECTION_LINKONCE)
4661     {
4662       /* Functions may have been compiled at various levels of
4663          optimization so we can't use `same_size' here.
4664          Instead, have the linker pick one.  */
4665       fprintf (asm_out_file, "\t.linkonce %s\n",
4666                (flags & SECTION_CODE ? "discard" : "same_size"));
4667     }
4668 }
4669 \f
4670 /* The lame default section selector.  */
4671
4672 void
4673 default_select_section (tree decl, int reloc,
4674                         unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
4675 {
4676   bool readonly = false;
4677
4678   if (DECL_P (decl))
4679     {
4680       if (decl_readonly_section (decl, reloc))
4681         readonly = true;
4682     }
4683   else if (TREE_CODE (decl) == CONSTRUCTOR)
4684     {
4685       if (! ((flag_pic && reloc)
4686              || !TREE_READONLY (decl)
4687              || TREE_SIDE_EFFECTS (decl)
4688              || !TREE_CONSTANT (decl)))
4689         readonly = true;
4690     }
4691   else if (TREE_CODE (decl) == STRING_CST)
4692     readonly = true;
4693   else if (! (flag_pic && reloc))
4694     readonly = true;
4695
4696   if (readonly)
4697     readonly_data_section ();
4698   else
4699     data_section ();
4700 }
4701
4702 /* A helper function for default_elf_select_section and
4703    default_elf_unique_section.  Categorizes the DECL.  */
4704
4705 enum section_category
4706 {
4707   SECCAT_TEXT,
4708
4709   SECCAT_RODATA,
4710   SECCAT_RODATA_MERGE_STR,
4711   SECCAT_RODATA_MERGE_STR_INIT,
4712   SECCAT_RODATA_MERGE_CONST,
4713   SECCAT_SRODATA,
4714
4715   SECCAT_DATA,
4716
4717   /* To optimize loading of shared programs, define following subsections
4718      of data section:
4719         _REL    Contains data that has relocations, so they get grouped
4720                 together and dynamic linker will visit fewer pages in memory.
4721         _RO     Contains data that is otherwise read-only.  This is useful
4722                 with prelinking as most relocations won't be dynamically
4723                 linked and thus stay read only.
4724         _LOCAL  Marks data containing relocations only to local objects.
4725                 These relocations will get fully resolved by prelinking.  */
4726   SECCAT_DATA_REL,
4727   SECCAT_DATA_REL_LOCAL,
4728   SECCAT_DATA_REL_RO,
4729   SECCAT_DATA_REL_RO_LOCAL,
4730
4731   SECCAT_SDATA,
4732   SECCAT_TDATA,
4733
4734   SECCAT_BSS,
4735   SECCAT_SBSS,
4736   SECCAT_TBSS
4737 };
4738
4739 static enum section_category
4740 categorize_decl_for_section (tree, int, int);
4741
4742 static enum section_category
4743 categorize_decl_for_section (tree decl, int reloc, int shlib)
4744 {
4745   enum section_category ret;
4746
4747   if (TREE_CODE (decl) == FUNCTION_DECL)
4748     return SECCAT_TEXT;
4749   else if (TREE_CODE (decl) == STRING_CST)
4750     {
4751       if (flag_mudflap) /* or !flag_merge_constants */
4752         return SECCAT_RODATA;
4753       else
4754         return SECCAT_RODATA_MERGE_STR;
4755     }
4756   else if (TREE_CODE (decl) == VAR_DECL)
4757     {
4758       if (DECL_INITIAL (decl) == NULL
4759           || DECL_INITIAL (decl) == error_mark_node
4760           || (flag_zero_initialized_in_bss
4761               /* Leave constant zeroes in .rodata so they can be shared.  */
4762               && !TREE_READONLY (decl)
4763               && initializer_zerop (DECL_INITIAL (decl))))
4764         ret = SECCAT_BSS;
4765       else if (! TREE_READONLY (decl)
4766                || TREE_SIDE_EFFECTS (decl)
4767                || ! TREE_CONSTANT (DECL_INITIAL (decl)))
4768         {
4769           if (shlib && (reloc & 2))
4770             ret = SECCAT_DATA_REL;
4771           else if (shlib && reloc)
4772             ret = SECCAT_DATA_REL_LOCAL;
4773           else
4774             ret = SECCAT_DATA;
4775         }
4776       else if (shlib && (reloc & 2))
4777         ret = SECCAT_DATA_REL_RO;
4778       else if (shlib && reloc)
4779         ret = SECCAT_DATA_REL_RO_LOCAL;
4780       else if (reloc || flag_merge_constants < 2)
4781         /* C and C++ don't allow different variables to share the same
4782            location.  -fmerge-all-constants allows even that (at the
4783            expense of not conforming).  */
4784         ret = SECCAT_RODATA;
4785       else if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
4786         ret = SECCAT_RODATA_MERGE_STR_INIT;
4787       else
4788         ret = SECCAT_RODATA_MERGE_CONST;
4789     }
4790   else if (TREE_CODE (decl) == CONSTRUCTOR)
4791     {
4792       if ((shlib && reloc)
4793           || TREE_SIDE_EFFECTS (decl)
4794           || ! TREE_CONSTANT (decl))
4795         ret = SECCAT_DATA;
4796       else
4797         ret = SECCAT_RODATA;
4798     }
4799   else
4800     ret = SECCAT_RODATA;
4801
4802   /* There are no read-only thread-local sections.  */
4803   if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
4804     {
4805       /* Note that this would be *just* SECCAT_BSS, except that there's
4806          no concept of a read-only thread-local-data section.  */
4807       if (ret == SECCAT_BSS
4808           || (flag_zero_initialized_in_bss
4809               && initializer_zerop (DECL_INITIAL (decl))))
4810         ret = SECCAT_TBSS;
4811       else
4812         ret = SECCAT_TDATA;
4813     }
4814
4815   /* If the target uses small data sections, select it.  */
4816   else if (targetm.in_small_data_p (decl))
4817     {
4818       if (ret == SECCAT_BSS)
4819         ret = SECCAT_SBSS;
4820       else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
4821         ret = SECCAT_SRODATA;
4822       else
4823         ret = SECCAT_SDATA;
4824     }
4825
4826   return ret;
4827 }
4828
4829 bool
4830 decl_readonly_section (tree decl, int reloc)
4831 {
4832   return decl_readonly_section_1 (decl, reloc, flag_pic);
4833 }
4834
4835 bool
4836 decl_readonly_section_1 (tree decl, int reloc, int shlib)
4837 {
4838   switch (categorize_decl_for_section (decl, reloc, shlib))
4839     {
4840     case SECCAT_RODATA:
4841     case SECCAT_RODATA_MERGE_STR:
4842     case SECCAT_RODATA_MERGE_STR_INIT:
4843     case SECCAT_RODATA_MERGE_CONST:
4844     case SECCAT_SRODATA:
4845       return true;
4846       break;
4847     default:
4848       return false;
4849       break;
4850     }
4851 }
4852
4853 /* Select a section based on the above categorization.  */
4854
4855 void
4856 default_elf_select_section (tree decl, int reloc,
4857                             unsigned HOST_WIDE_INT align)
4858 {
4859   default_elf_select_section_1 (decl, reloc, align, flag_pic);
4860 }
4861
4862 void
4863 default_elf_select_section_1 (tree decl, int reloc,
4864                               unsigned HOST_WIDE_INT align, int shlib)
4865 {
4866   switch (categorize_decl_for_section (decl, reloc, shlib))
4867     {
4868     case SECCAT_TEXT:
4869       /* We're not supposed to be called on FUNCTION_DECLs.  */
4870       abort ();
4871     case SECCAT_RODATA:
4872       readonly_data_section ();
4873       break;
4874     case SECCAT_RODATA_MERGE_STR:
4875       mergeable_string_section (decl, align, 0);
4876       break;
4877     case SECCAT_RODATA_MERGE_STR_INIT:
4878       mergeable_string_section (DECL_INITIAL (decl), align, 0);
4879       break;
4880     case SECCAT_RODATA_MERGE_CONST:
4881       mergeable_constant_section (DECL_MODE (decl), align, 0);
4882       break;
4883     case SECCAT_SRODATA:
4884       named_section (NULL_TREE, ".sdata2", reloc);
4885       break;
4886     case SECCAT_DATA:
4887       data_section ();
4888       break;
4889     case SECCAT_DATA_REL:
4890       named_section (NULL_TREE, ".data.rel", reloc);
4891       break;
4892     case SECCAT_DATA_REL_LOCAL:
4893       named_section (NULL_TREE, ".data.rel.local", reloc);
4894       break;
4895     case SECCAT_DATA_REL_RO:
4896       named_section (NULL_TREE, ".data.rel.ro", reloc);
4897       break;
4898     case SECCAT_DATA_REL_RO_LOCAL:
4899       named_section (NULL_TREE, ".data.rel.ro.local", reloc);
4900       break;
4901     case SECCAT_SDATA:
4902       named_section (NULL_TREE, ".sdata", reloc);
4903       break;
4904     case SECCAT_TDATA:
4905       named_section (NULL_TREE, ".tdata", reloc);
4906       break;
4907     case SECCAT_BSS:
4908 #ifdef BSS_SECTION_ASM_OP
4909       bss_section ();
4910 #else
4911       named_section (NULL_TREE, ".bss", reloc);
4912 #endif
4913       break;
4914     case SECCAT_SBSS:
4915       named_section (NULL_TREE, ".sbss", reloc);
4916       break;
4917     case SECCAT_TBSS:
4918       named_section (NULL_TREE, ".tbss", reloc);
4919       break;
4920     default:
4921       abort ();
4922     }
4923 }
4924
4925 /* Construct a unique section name based on the decl name and the
4926    categorization performed above.  */
4927
4928 void
4929 default_unique_section (tree decl, int reloc)
4930 {
4931   default_unique_section_1 (decl, reloc, flag_pic);
4932 }
4933
4934 void
4935 default_unique_section_1 (tree decl, int reloc, int shlib)
4936 {
4937   bool one_only = DECL_ONE_ONLY (decl);
4938   const char *prefix, *name;
4939   size_t nlen, plen;
4940   char *string;
4941
4942   switch (categorize_decl_for_section (decl, reloc, shlib))
4943     {
4944     case SECCAT_TEXT:
4945       prefix = one_only ? ".gnu.linkonce.t." : ".text.";
4946       break;
4947     case SECCAT_RODATA:
4948     case SECCAT_RODATA_MERGE_STR:
4949     case SECCAT_RODATA_MERGE_STR_INIT:
4950     case SECCAT_RODATA_MERGE_CONST:
4951       prefix = one_only ? ".gnu.linkonce.r." : ".rodata.";
4952       break;
4953     case SECCAT_SRODATA:
4954       prefix = one_only ? ".gnu.linkonce.s2." : ".sdata2.";
4955       break;
4956     case SECCAT_DATA:
4957     case SECCAT_DATA_REL:
4958     case SECCAT_DATA_REL_LOCAL:
4959     case SECCAT_DATA_REL_RO:
4960     case SECCAT_DATA_REL_RO_LOCAL:
4961       prefix = one_only ? ".gnu.linkonce.d." : ".data.";
4962       break;
4963     case SECCAT_SDATA:
4964       prefix = one_only ? ".gnu.linkonce.s." : ".sdata.";
4965       break;
4966     case SECCAT_BSS:
4967       prefix = one_only ? ".gnu.linkonce.b." : ".bss.";
4968       break;
4969     case SECCAT_SBSS:
4970       prefix = one_only ? ".gnu.linkonce.sb." : ".sbss.";
4971       break;
4972     case SECCAT_TDATA:
4973       prefix = one_only ? ".gnu.linkonce.td." : ".tdata.";
4974       break;
4975     case SECCAT_TBSS:
4976       prefix = one_only ? ".gnu.linkonce.tb." : ".tbss.";
4977       break;
4978     default:
4979       abort ();
4980     }
4981   plen = strlen (prefix);
4982
4983   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4984   name = targetm.strip_name_encoding (name);
4985   nlen = strlen (name);
4986
4987   string = alloca (nlen + plen + 1);
4988   memcpy (string, prefix, plen);
4989   memcpy (string + plen, name, nlen + 1);
4990
4991   DECL_SECTION_NAME (decl) = build_string (nlen + plen, string);
4992 }
4993
4994 void
4995 default_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED,
4996                             rtx x,
4997                             unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
4998 {
4999   if (flag_pic)
5000     switch (GET_CODE (x))
5001       {
5002       case CONST:
5003       case SYMBOL_REF:
5004       case LABEL_REF:
5005         data_section ();
5006         return;
5007
5008       default:
5009         break;
5010       }
5011
5012   readonly_data_section ();
5013 }
5014
5015 void
5016 default_elf_select_rtx_section (enum machine_mode mode, rtx x,
5017                                 unsigned HOST_WIDE_INT align)
5018 {
5019   /* ??? Handle small data here somehow.  */
5020
5021   if (flag_pic)
5022     switch (GET_CODE (x))
5023       {
5024       case CONST:
5025       case SYMBOL_REF:
5026         named_section (NULL_TREE, ".data.rel.ro", 3);
5027         return;
5028
5029       case LABEL_REF:
5030         named_section (NULL_TREE, ".data.rel.ro.local", 1);
5031         return;
5032
5033       default:
5034         break;
5035       }
5036
5037   mergeable_constant_section (mode, align, 0);
5038 }
5039
5040 /* Set the generally applicable flags on the SYMBOL_REF for EXP.  */
5041
5042 void
5043 default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
5044 {
5045   rtx symbol;
5046   int flags;
5047
5048   /* Careful not to prod global register variables.  */
5049   if (!MEM_P (rtl))
5050     return;
5051   symbol = XEXP (rtl, 0);
5052   if (GET_CODE (symbol) != SYMBOL_REF)
5053     return;
5054
5055   flags = 0;
5056   if (TREE_CODE (decl) == FUNCTION_DECL)
5057     flags |= SYMBOL_FLAG_FUNCTION;
5058   if (targetm.binds_local_p (decl))
5059     flags |= SYMBOL_FLAG_LOCAL;
5060   if (targetm.in_small_data_p (decl))
5061     flags |= SYMBOL_FLAG_SMALL;
5062   if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
5063     flags |= decl_tls_model (decl) << SYMBOL_FLAG_TLS_SHIFT;
5064   /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names?  Without
5065      being PUBLIC, the thing *must* be defined in this translation unit.
5066      Prevent this buglet from being propagated into rtl code as well.  */
5067   if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
5068     flags |= SYMBOL_FLAG_EXTERNAL;
5069
5070   SYMBOL_REF_FLAGS (symbol) = flags;
5071 }
5072
5073 /* By default, we do nothing for encode_section_info, so we need not
5074    do anything but discard the '*' marker.  */
5075
5076 const char *
5077 default_strip_name_encoding (const char *str)
5078 {
5079   return str + (*str == '*');
5080 }
5081
5082 /* Assume ELF-ish defaults, since that's pretty much the most liberal
5083    wrt cross-module name binding.  */
5084
5085 bool
5086 default_binds_local_p (tree exp)
5087 {
5088   return default_binds_local_p_1 (exp, flag_shlib);
5089 }
5090
5091 bool
5092 default_binds_local_p_1 (tree exp, int shlib)
5093 {
5094   bool local_p;
5095
5096   /* A non-decl is an entry in the constant pool.  */
5097   if (!DECL_P (exp))
5098     local_p = true;
5099   /* Static variables are always local.  */
5100   else if (! TREE_PUBLIC (exp))
5101     local_p = true;
5102   /* A variable is local if the user explicitly tells us so.  */
5103   else if (DECL_VISIBILITY_SPECIFIED (exp) && DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
5104     local_p = true;
5105   /* Otherwise, variables defined outside this object may not be local.  */
5106   else if (DECL_EXTERNAL (exp))
5107     local_p = false;
5108   /* Linkonce and weak data are never local.  */
5109   else if (DECL_ONE_ONLY (exp) || DECL_WEAK (exp))
5110     local_p = false;
5111   /* If none of the above and visibility is not default, make local.  */
5112   else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
5113     local_p = true;
5114   /* If PIC, then assume that any global name can be overridden by
5115      symbols resolved from other modules.  */
5116   else if (shlib)
5117     local_p = false;
5118   /* Uninitialized COMMON variable may be unified with symbols
5119      resolved from other modules.  */
5120   else if (DECL_COMMON (exp)
5121            && (DECL_INITIAL (exp) == NULL
5122                || DECL_INITIAL (exp) == error_mark_node))
5123     local_p = false;
5124   /* Otherwise we're left with initialized (or non-common) global data
5125      which is of necessity defined locally.  */
5126   else
5127     local_p = true;
5128
5129   return local_p;
5130 }
5131
5132 /* Determine whether or not a pointer mode is valid. Assume defaults
5133    of ptr_mode or Pmode - can be overridden.  */
5134 bool
5135 default_valid_pointer_mode (enum machine_mode mode)
5136 {
5137   return (mode == ptr_mode || mode == Pmode);
5138 }
5139
5140 /* Default function to output code that will globalize a label.  A
5141    target must define GLOBAL_ASM_OP or provide it's own function to
5142    globalize a label.  */
5143 #ifdef GLOBAL_ASM_OP
5144 void
5145 default_globalize_label (FILE * stream, const char *name)
5146 {
5147   fputs (GLOBAL_ASM_OP, stream);
5148   assemble_name (stream, name);
5149   putc ('\n', stream);
5150 }
5151 #endif /* GLOBAL_ASM_OP */
5152
5153 /* Default function to output a label for unwind information.  The
5154    default is to do nothing.  A target that needs nonlocal labels for
5155    unwind information must provide its own function to do this.  */
5156 void
5157 default_emit_unwind_label (FILE * stream ATTRIBUTE_UNUSED,
5158                            tree decl ATTRIBUTE_UNUSED,
5159                            int for_eh ATTRIBUTE_UNUSED,
5160                            int empty ATTRIBUTE_UNUSED)
5161
5162 }
5163
5164 /* This is how to output an internal numbered label where PREFIX is
5165    the class of label and LABELNO is the number within the class.  */
5166
5167 void
5168 default_internal_label (FILE *stream, const char *prefix,
5169                         unsigned long labelno)
5170 {
5171   char *const buf = alloca (40 + strlen (prefix));
5172   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
5173   ASM_OUTPUT_LABEL (stream, buf);
5174 }
5175
5176 /* This is the default behavior at the beginning of a file.  It's
5177    controlled by two other target-hook toggles.  */
5178 void
5179 default_file_start (void)
5180 {
5181   if (targetm.file_start_app_off && !flag_verbose_asm)
5182     fputs (ASM_APP_OFF, asm_out_file);
5183
5184   if (targetm.file_start_file_directive)
5185     output_file_directive (asm_out_file, main_input_filename);
5186 }
5187
5188 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
5189    which emits a special section directive used to indicate whether or
5190    not this object file needs an executable stack.  This is primarily
5191    a GNU extension to ELF but could be used on other targets.  */
5192
5193 int trampolines_created;
5194
5195 void
5196 file_end_indicate_exec_stack (void)
5197 {
5198   unsigned int flags = SECTION_DEBUG;
5199   if (trampolines_created)
5200     flags |= SECTION_CODE;
5201
5202   named_section_flags (".note.GNU-stack", flags);
5203 }
5204
5205 #include "gt-varasm.h"