OSDN Git Service

2004-08-21 Bud Davis <bdavis9659@comcast.net>
[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 (decl) / BITS_PER_UNIT > 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     {
1675       ASM_OUTPUT_ALIGN (asm_out_file,
1676                         floor_log2 (DECL_ALIGN (decl) / BITS_PER_UNIT));
1677     }
1678
1679   /* Do any machine/system dependent processing of the object.  */
1680 #ifdef ASM_DECLARE_OBJECT_NAME
1681   last_assemble_variable_decl = decl;
1682   ASM_DECLARE_OBJECT_NAME (asm_out_file, name, decl);
1683 #else
1684   /* Standard thing is just output label for the object.  */
1685   ASM_OUTPUT_LABEL (asm_out_file, name);
1686 #endif /* ASM_DECLARE_OBJECT_NAME */
1687
1688   if (!dont_output_data)
1689     {
1690       if (DECL_INITIAL (decl)
1691           && DECL_INITIAL (decl) != error_mark_node
1692           && !initializer_zerop (DECL_INITIAL (decl)))
1693         /* Output the actual data.  */
1694         output_constant (DECL_INITIAL (decl),
1695                          tree_low_cst (DECL_SIZE_UNIT (decl), 1),
1696                          align);
1697       else
1698         /* Leave space for it.  */
1699         assemble_zeros (tree_low_cst (DECL_SIZE_UNIT (decl), 1));
1700     }
1701 }
1702
1703 /* Return 1 if type TYPE contains any pointers.  */
1704
1705 static int
1706 contains_pointers_p (tree type)
1707 {
1708   switch (TREE_CODE (type))
1709     {
1710     case POINTER_TYPE:
1711     case REFERENCE_TYPE:
1712       /* I'm not sure whether OFFSET_TYPE needs this treatment,
1713          so I'll play safe and return 1.  */
1714     case OFFSET_TYPE:
1715       return 1;
1716
1717     case RECORD_TYPE:
1718     case UNION_TYPE:
1719     case QUAL_UNION_TYPE:
1720       {
1721         tree fields;
1722         /* For a type that has fields, see if the fields have pointers.  */
1723         for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
1724           if (TREE_CODE (fields) == FIELD_DECL
1725               && contains_pointers_p (TREE_TYPE (fields)))
1726             return 1;
1727         return 0;
1728       }
1729
1730     case ARRAY_TYPE:
1731       /* An array type contains pointers if its element type does.  */
1732       return contains_pointers_p (TREE_TYPE (type));
1733
1734     default:
1735       return 0;
1736     }
1737 }
1738
1739 #ifdef ASM_OUTPUT_EXTERNAL
1740 /* True if DECL is a function decl for which no out-of-line copy exists.
1741    It is assumed that DECL's assembler name has been set.  */
1742
1743 static bool
1744 incorporeal_function_p (tree decl)
1745 {
1746   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
1747     {
1748       const char *name;
1749
1750       if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
1751           && DECL_FUNCTION_CODE (decl) == BUILT_IN_ALLOCA)
1752         return true;
1753
1754       name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
1755       if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
1756         return true;
1757     }
1758   return false;
1759 }
1760 #endif
1761
1762 /* Output something to declare an external symbol to the assembler.
1763    (Most assemblers don't need this, so we normally output nothing.)
1764    Do nothing if DECL is not external.  */
1765
1766 void
1767 assemble_external (tree decl ATTRIBUTE_UNUSED)
1768 {
1769   /* Because most platforms do not define ASM_OUTPUT_EXTERNAL, the
1770      main body of this code is only rarely exercised.  To provide some
1771      testing, on all platforms, we make sure that the ASM_OUT_FILE is
1772      open.  If it's not, we should not be calling this function.  */
1773   if (!asm_out_file)
1774     abort ();
1775
1776 #ifdef ASM_OUTPUT_EXTERNAL
1777   if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
1778     {
1779       rtx rtl = DECL_RTL (decl);
1780
1781       if (MEM_P (rtl) && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF
1782           && !SYMBOL_REF_USED (XEXP (rtl, 0))
1783           && !incorporeal_function_p (decl))
1784         {
1785           /* Some systems do require some output.  */
1786           SYMBOL_REF_USED (XEXP (rtl, 0)) = 1;
1787           ASM_OUTPUT_EXTERNAL (asm_out_file, decl, XSTR (XEXP (rtl, 0), 0));
1788         }
1789     }
1790 #endif
1791 }
1792
1793 /* Similar, for calling a library function FUN.  */
1794
1795 void
1796 assemble_external_libcall (rtx fun)
1797 {
1798   /* Declare library function name external when first used, if nec.  */
1799   if (! SYMBOL_REF_USED (fun))
1800     {
1801       SYMBOL_REF_USED (fun) = 1;
1802       targetm.asm_out.external_libcall (fun);
1803     }
1804 }
1805
1806 /* Assemble a label named NAME.  */
1807
1808 void
1809 assemble_label (const char *name)
1810 {
1811   ASM_OUTPUT_LABEL (asm_out_file, name);
1812 }
1813
1814 /* Set the symbol_referenced flag for ID.  */
1815 void
1816 mark_referenced (tree id)
1817 {
1818   TREE_SYMBOL_REFERENCED (id) = 1;
1819 }
1820
1821 /* Set the symbol_referenced flag for DECL and notify callgraph.  */
1822 void
1823 mark_decl_referenced (tree decl)
1824 {
1825   if (TREE_CODE (decl) == FUNCTION_DECL)
1826     cgraph_mark_needed_node (cgraph_node (decl));
1827   else if (TREE_CODE (decl) == VAR_DECL)
1828     cgraph_varpool_mark_needed_node (cgraph_varpool_node (decl));
1829   /* else do nothing - we can get various sorts of CST nodes here,
1830      which do not need to be marked.  */
1831 }
1832
1833 /* Output to FILE a reference to the assembler name of a C-level name NAME.
1834    If NAME starts with a *, the rest of NAME is output verbatim.
1835    Otherwise NAME is transformed in an implementation-defined way
1836    (usually by the addition of an underscore).
1837    Many macros in the tm file are defined to call this function.  */
1838
1839 void
1840 assemble_name (FILE *file, const char *name)
1841 {
1842   const char *real_name;
1843   tree id;
1844
1845   real_name = targetm.strip_name_encoding (name);
1846
1847   id = maybe_get_identifier (real_name);
1848   if (id)
1849     mark_referenced (id);
1850
1851   if (name[0] == '*')
1852     fputs (&name[1], file);
1853   else
1854     ASM_OUTPUT_LABELREF (file, name);
1855 }
1856
1857 /* Allocate SIZE bytes writable static space with a gensym name
1858    and return an RTX to refer to its address.  */
1859
1860 rtx
1861 assemble_static_space (unsigned HOST_WIDE_INT size)
1862 {
1863   char name[12];
1864   const char *namestring;
1865   rtx x;
1866
1867 #if 0
1868   if (flag_shared_data)
1869     data_section ();
1870 #endif
1871
1872   ASM_GENERATE_INTERNAL_LABEL (name, "LF", const_labelno);
1873   ++const_labelno;
1874   namestring = ggc_strdup (name);
1875
1876   x = gen_rtx_SYMBOL_REF (Pmode, namestring);
1877   SYMBOL_REF_FLAGS (x) = SYMBOL_FLAG_LOCAL;
1878
1879 #ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
1880   ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, NULL_TREE, name, size,
1881                                  BIGGEST_ALIGNMENT);
1882 #else
1883 #ifdef ASM_OUTPUT_ALIGNED_LOCAL
1884   ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, BIGGEST_ALIGNMENT);
1885 #else
1886   {
1887     /* Round size up to multiple of BIGGEST_ALIGNMENT bits
1888        so that each uninitialized object starts on such a boundary.  */
1889     /* Variable `rounded' might or might not be used in ASM_OUTPUT_LOCAL.  */
1890     unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED
1891       = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1)
1892          / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
1893          * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
1894     ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
1895   }
1896 #endif
1897 #endif
1898   return x;
1899 }
1900
1901 /* Assemble the static constant template for function entry trampolines.
1902    This is done at most once per compilation.
1903    Returns an RTX for the address of the template.  */
1904
1905 static GTY(()) rtx initial_trampoline;
1906
1907 #ifdef TRAMPOLINE_TEMPLATE
1908 rtx
1909 assemble_trampoline_template (void)
1910 {
1911   char label[256];
1912   const char *name;
1913   int align;
1914   rtx symbol;
1915
1916   if (initial_trampoline)
1917     return initial_trampoline;
1918
1919   /* By default, put trampoline templates in read-only data section.  */
1920
1921 #ifdef TRAMPOLINE_SECTION
1922   TRAMPOLINE_SECTION ();
1923 #else
1924   readonly_data_section ();
1925 #endif
1926
1927   /* Write the assembler code to define one.  */
1928   align = floor_log2 (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT);
1929   if (align > 0)
1930     {
1931       ASM_OUTPUT_ALIGN (asm_out_file, align);
1932     }
1933
1934   targetm.asm_out.internal_label (asm_out_file, "LTRAMP", 0);
1935   TRAMPOLINE_TEMPLATE (asm_out_file);
1936
1937   /* Record the rtl to refer to it.  */
1938   ASM_GENERATE_INTERNAL_LABEL (label, "LTRAMP", 0);
1939   name = ggc_strdup (label);
1940   symbol = gen_rtx_SYMBOL_REF (Pmode, name);
1941   SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
1942
1943   initial_trampoline = gen_rtx_MEM (BLKmode, symbol);
1944   set_mem_align (initial_trampoline, TRAMPOLINE_ALIGNMENT);
1945
1946   return initial_trampoline;
1947 }
1948 #endif
1949 \f
1950 /* A and B are either alignments or offsets.  Return the minimum alignment
1951    that may be assumed after adding the two together.  */
1952
1953 static inline unsigned
1954 min_align (unsigned int a, unsigned int b)
1955 {
1956   return (a | b) & -(a | b);
1957 }
1958
1959 /* Return the assembler directive for creating a given kind of integer
1960    object.  SIZE is the number of bytes in the object and ALIGNED_P
1961    indicates whether it is known to be aligned.  Return NULL if the
1962    assembly dialect has no such directive.
1963
1964    The returned string should be printed at the start of a new line and
1965    be followed immediately by the object's initial value.  */
1966
1967 const char *
1968 integer_asm_op (int size, int aligned_p)
1969 {
1970   struct asm_int_op *ops;
1971
1972   if (aligned_p)
1973     ops = &targetm.asm_out.aligned_op;
1974   else
1975     ops = &targetm.asm_out.unaligned_op;
1976
1977   switch (size)
1978     {
1979     case 1:
1980       return targetm.asm_out.byte_op;
1981     case 2:
1982       return ops->hi;
1983     case 4:
1984       return ops->si;
1985     case 8:
1986       return ops->di;
1987     case 16:
1988       return ops->ti;
1989     default:
1990       return NULL;
1991     }
1992 }
1993
1994 /* Use directive OP to assemble an integer object X.  Print OP at the
1995    start of the line, followed immediately by the value of X.  */
1996
1997 void
1998 assemble_integer_with_op (const char *op, rtx x)
1999 {
2000   fputs (op, asm_out_file);
2001   output_addr_const (asm_out_file, x);
2002   fputc ('\n', asm_out_file);
2003 }
2004
2005 /* The default implementation of the asm_out.integer target hook.  */
2006
2007 bool
2008 default_assemble_integer (rtx x ATTRIBUTE_UNUSED,
2009                           unsigned int size ATTRIBUTE_UNUSED,
2010                           int aligned_p ATTRIBUTE_UNUSED)
2011 {
2012   const char *op = integer_asm_op (size, aligned_p);
2013   return op && (assemble_integer_with_op (op, x), true);
2014 }
2015
2016 /* Assemble the integer constant X into an object of SIZE bytes.  ALIGN is
2017    the alignment of the integer in bits.  Return 1 if we were able to output
2018    the constant, otherwise 0.  If FORCE is nonzero, abort if we can't output
2019    the constant.  */
2020
2021 bool
2022 assemble_integer (rtx x, unsigned int size, unsigned int align, int force)
2023 {
2024   int aligned_p;
2025
2026   aligned_p = (align >= MIN (size * BITS_PER_UNIT, BIGGEST_ALIGNMENT));
2027
2028   /* See if the target hook can handle this kind of object.  */
2029   if (targetm.asm_out.integer (x, size, aligned_p))
2030     return true;
2031
2032   /* If the object is a multi-byte one, try splitting it up.  Split
2033      it into words it if is multi-word, otherwise split it into bytes.  */
2034   if (size > 1)
2035     {
2036       enum machine_mode omode, imode;
2037       unsigned int subalign;
2038       unsigned int subsize, i;
2039
2040       subsize = size > UNITS_PER_WORD? UNITS_PER_WORD : 1;
2041       subalign = MIN (align, subsize * BITS_PER_UNIT);
2042       omode = mode_for_size (subsize * BITS_PER_UNIT, MODE_INT, 0);
2043       imode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0);
2044
2045       for (i = 0; i < size; i += subsize)
2046         {
2047           rtx partial = simplify_subreg (omode, x, imode, i);
2048           if (!partial || !assemble_integer (partial, subsize, subalign, 0))
2049             break;
2050         }
2051       if (i == size)
2052         return true;
2053
2054       /* If we've printed some of it, but not all of it, there's no going
2055          back now.  */
2056       if (i > 0)
2057         abort ();
2058     }
2059
2060   if (force)
2061     abort ();
2062
2063   return false;
2064 }
2065 \f
2066 void
2067 assemble_real (REAL_VALUE_TYPE d, enum machine_mode mode, unsigned int align)
2068 {
2069   long data[4];
2070   int i;
2071   int bitsize, nelts, nunits, units_per;
2072
2073   /* This is hairy.  We have a quantity of known size.  real_to_target
2074      will put it into an array of *host* longs, 32 bits per element
2075      (even if long is more than 32 bits).  We need to determine the
2076      number of array elements that are occupied (nelts) and the number
2077      of *target* min-addressable units that will be occupied in the
2078      object file (nunits).  We cannot assume that 32 divides the
2079      mode's bitsize (size * BITS_PER_UNIT) evenly.
2080
2081      size * BITS_PER_UNIT is used here to make sure that padding bits
2082      (which might appear at either end of the value; real_to_target
2083      will include the padding bits in its output array) are included.  */
2084
2085   nunits = GET_MODE_SIZE (mode);
2086   bitsize = nunits * BITS_PER_UNIT;
2087   nelts = CEIL (bitsize, 32);
2088   units_per = 32 / BITS_PER_UNIT;
2089
2090   real_to_target (data, &d, mode);
2091
2092   /* Put out the first word with the specified alignment.  */
2093   assemble_integer (GEN_INT (data[0]), MIN (nunits, units_per), align, 1);
2094   nunits -= units_per;
2095
2096   /* Subsequent words need only 32-bit alignment.  */
2097   align = min_align (align, 32);
2098
2099   for (i = 1; i < nelts; i++)
2100     {
2101       assemble_integer (GEN_INT (data[i]), MIN (nunits, units_per), align, 1);
2102       nunits -= units_per;
2103     }
2104 }
2105 \f
2106 /* Given an expression EXP with a constant value,
2107    reduce it to the sum of an assembler symbol and an integer.
2108    Store them both in the structure *VALUE.
2109    Abort if EXP does not reduce.  */
2110
2111 struct addr_const GTY(())
2112 {
2113   rtx base;
2114   HOST_WIDE_INT offset;
2115 };
2116
2117 static void
2118 decode_addr_const (tree exp, struct addr_const *value)
2119 {
2120   tree target = TREE_OPERAND (exp, 0);
2121   int offset = 0;
2122   rtx x;
2123
2124   while (1)
2125     {
2126       if (TREE_CODE (target) == COMPONENT_REF
2127           && host_integerp (byte_position (TREE_OPERAND (target, 1)), 0))
2128
2129         {
2130           offset += int_byte_position (TREE_OPERAND (target, 1));
2131           target = TREE_OPERAND (target, 0);
2132         }
2133       else if (TREE_CODE (target) == ARRAY_REF
2134                || TREE_CODE (target) == ARRAY_RANGE_REF)
2135         {
2136           offset += (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (target)), 1)
2137                      * tree_low_cst (TREE_OPERAND (target, 1), 0));
2138           target = TREE_OPERAND (target, 0);
2139         }
2140       else
2141         break;
2142     }
2143
2144   switch (TREE_CODE (target))
2145     {
2146     case VAR_DECL:
2147     case FUNCTION_DECL:
2148       x = DECL_RTL (target);
2149       break;
2150
2151     case LABEL_DECL:
2152       x = gen_rtx_MEM (FUNCTION_MODE,
2153                        gen_rtx_LABEL_REF (VOIDmode, force_label_rtx (target)));
2154       break;
2155
2156     case REAL_CST:
2157     case STRING_CST:
2158     case COMPLEX_CST:
2159     case CONSTRUCTOR:
2160     case INTEGER_CST:
2161       x = output_constant_def (target, 1);
2162       break;
2163
2164     default:
2165       abort ();
2166     }
2167
2168   if (!MEM_P (x))
2169     abort ();
2170   x = XEXP (x, 0);
2171
2172   value->base = x;
2173   value->offset = offset;
2174 }
2175 \f
2176 /* Uniquize all constants that appear in memory.
2177    Each constant in memory thus far output is recorded
2178    in `const_desc_table'.  */
2179
2180 struct constant_descriptor_tree GTY(())
2181 {
2182   /* A MEM for the constant.  */
2183   rtx rtl;
2184
2185   /* The value of the constant.  */
2186   tree value;
2187 };
2188
2189 static GTY((param_is (struct constant_descriptor_tree)))
2190      htab_t const_desc_htab;
2191
2192 static struct constant_descriptor_tree * build_constant_desc (tree);
2193 static void maybe_output_constant_def_contents (struct constant_descriptor_tree *, int);
2194
2195 /* Compute a hash code for a constant expression.  */
2196
2197 static hashval_t
2198 const_desc_hash (const void *ptr)
2199 {
2200   return const_hash_1 (((struct constant_descriptor_tree *)ptr)->value);
2201 }
2202
2203 static hashval_t
2204 const_hash_1 (const tree exp)
2205 {
2206   const char *p;
2207   hashval_t hi;
2208   int len, i;
2209   enum tree_code code = TREE_CODE (exp);
2210
2211   /* Either set P and LEN to the address and len of something to hash and
2212      exit the switch or return a value.  */
2213
2214   switch (code)
2215     {
2216     case INTEGER_CST:
2217       p = (char *) &TREE_INT_CST (exp);
2218       len = sizeof TREE_INT_CST (exp);
2219       break;
2220
2221     case REAL_CST:
2222       return real_hash (TREE_REAL_CST_PTR (exp));
2223
2224     case STRING_CST:
2225       p = TREE_STRING_POINTER (exp);
2226       len = TREE_STRING_LENGTH (exp);
2227       break;
2228
2229     case COMPLEX_CST:
2230       return (const_hash_1 (TREE_REALPART (exp)) * 5
2231               + const_hash_1 (TREE_IMAGPART (exp)));
2232
2233     case CONSTRUCTOR:
2234       if (TREE_CODE (TREE_TYPE (exp)) == SET_TYPE)
2235         {
2236           char *tmp;
2237
2238           len = int_size_in_bytes (TREE_TYPE (exp));
2239           tmp = alloca (len);
2240           get_set_constructor_bytes (exp, (unsigned char *) tmp, len);
2241           p = tmp;
2242           break;
2243         }
2244       else
2245         {
2246           tree link;
2247
2248           hi = 5 + int_size_in_bytes (TREE_TYPE (exp));
2249
2250           for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link))
2251             if (TREE_VALUE (link))
2252               hi = hi * 603 + const_hash_1 (TREE_VALUE (link));
2253
2254           return hi;
2255         }
2256
2257     case ADDR_EXPR:
2258     case FDESC_EXPR:
2259       {
2260         struct addr_const value;
2261
2262         decode_addr_const (exp, &value);
2263         if (GET_CODE (value.base) == SYMBOL_REF)
2264           {
2265             /* Don't hash the address of the SYMBOL_REF;
2266                only use the offset and the symbol name.  */
2267             hi = value.offset;
2268             p = XSTR (value.base, 0);
2269             for (i = 0; p[i] != 0; i++)
2270               hi = ((hi * 613) + (unsigned) (p[i]));
2271           }
2272         else if (GET_CODE (value.base) == LABEL_REF)
2273           hi = value.offset + CODE_LABEL_NUMBER (XEXP (value.base, 0)) * 13;
2274         else
2275           abort ();
2276       }
2277       return hi;
2278
2279     case PLUS_EXPR:
2280     case MINUS_EXPR:
2281       return (const_hash_1 (TREE_OPERAND (exp, 0)) * 9
2282               + const_hash_1 (TREE_OPERAND (exp, 1)));
2283
2284     case NOP_EXPR:
2285     case CONVERT_EXPR:
2286     case NON_LVALUE_EXPR:
2287       return const_hash_1 (TREE_OPERAND (exp, 0)) * 7 + 2;
2288
2289     default:
2290       /* A language specific constant. Just hash the code.  */
2291       return code;
2292     }
2293
2294   /* Compute hashing function.  */
2295   hi = len;
2296   for (i = 0; i < len; i++)
2297     hi = ((hi * 613) + (unsigned) (p[i]));
2298
2299   return hi;
2300 }
2301
2302 /* Wrapper of compare_constant, for the htab interface.  */
2303 static int
2304 const_desc_eq (const void *p1, const void *p2)
2305 {
2306   return compare_constant (((struct constant_descriptor_tree *)p1)->value,
2307                            ((struct constant_descriptor_tree *)p2)->value);
2308 }
2309
2310 /* Compare t1 and t2, and return 1 only if they are known to result in
2311    the same bit pattern on output.  */
2312
2313 static int
2314 compare_constant (const tree t1, const tree t2)
2315 {
2316   enum tree_code typecode;
2317
2318   if (t1 == NULL_TREE)
2319     return t2 == NULL_TREE;
2320   if (t2 == NULL_TREE)
2321     return 0;
2322
2323   if (TREE_CODE (t1) != TREE_CODE (t2))
2324     return 0;
2325
2326   switch (TREE_CODE (t1))
2327     {
2328     case INTEGER_CST:
2329       /* Integer constants are the same only if the same width of type.  */
2330       if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2331         return 0;
2332       return tree_int_cst_equal (t1, t2);
2333
2334     case REAL_CST:
2335       /* Real constants are the same only if the same width of type.  */
2336       if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2)))
2337         return 0;
2338
2339       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2340
2341     case STRING_CST:
2342       if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2)))
2343         return 0;
2344
2345       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2346               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2347                          TREE_STRING_LENGTH (t1)));
2348
2349     case COMPLEX_CST:
2350       return (compare_constant (TREE_REALPART (t1), TREE_REALPART (t2))
2351               && compare_constant (TREE_IMAGPART (t1), TREE_IMAGPART (t2)));
2352
2353     case CONSTRUCTOR:
2354       typecode = TREE_CODE (TREE_TYPE (t1));
2355       if (typecode != TREE_CODE (TREE_TYPE (t2)))
2356         return 0;
2357
2358       if (typecode == SET_TYPE)
2359         {
2360           int len = int_size_in_bytes (TREE_TYPE (t2));
2361           unsigned char *tmp1, *tmp2;
2362
2363           if (int_size_in_bytes (TREE_TYPE (t1)) != len)
2364             return 0;
2365
2366           tmp1 = alloca (len);
2367           tmp2 = alloca (len);
2368
2369           if (get_set_constructor_bytes (t1, tmp1, len) != NULL_TREE)
2370             return 0;
2371           if (get_set_constructor_bytes (t2, tmp2, len) != NULL_TREE)
2372             return 0;
2373
2374           return memcmp (tmp1, tmp2, len) == 0;
2375         }
2376       else
2377         {
2378           tree l1, l2;
2379
2380           if (typecode == ARRAY_TYPE)
2381             {
2382               HOST_WIDE_INT size_1 = int_size_in_bytes (TREE_TYPE (t1));
2383               /* For arrays, check that the sizes all match.  */
2384               if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))
2385                   || size_1 == -1
2386                   || size_1 != int_size_in_bytes (TREE_TYPE (t2)))
2387                 return 0;
2388             }
2389           else
2390             {
2391               /* For record and union constructors, require exact type
2392                  equality.  */
2393               if (TREE_TYPE (t1) != TREE_TYPE (t2))
2394                 return 0;
2395             }
2396
2397           for (l1 = CONSTRUCTOR_ELTS (t1), l2 = CONSTRUCTOR_ELTS (t2);
2398                l1 && l2;
2399                l1 = TREE_CHAIN (l1), l2 = TREE_CHAIN (l2))
2400             {
2401               /* Check that each value is the same...  */
2402               if (! compare_constant (TREE_VALUE (l1), TREE_VALUE (l2)))
2403                 return 0;
2404               /* ... and that they apply to the same fields!  */
2405               if (typecode == ARRAY_TYPE)
2406                 {
2407                   if (! compare_constant (TREE_PURPOSE (l1),
2408                                           TREE_PURPOSE (l2)))
2409                     return 0;
2410                 }
2411               else
2412                 {
2413                   if (TREE_PURPOSE (l1) != TREE_PURPOSE (l2))
2414                     return 0;
2415                 }
2416             }
2417
2418           return l1 == NULL_TREE && l2 == NULL_TREE;
2419         }
2420
2421     case ADDR_EXPR:
2422     case FDESC_EXPR:
2423       {
2424         struct addr_const value1, value2;
2425
2426         decode_addr_const (t1, &value1);
2427         decode_addr_const (t2, &value2);
2428         return (value1.offset == value2.offset
2429                 && strcmp (XSTR (value1.base, 0), XSTR (value2.base, 0)) == 0);
2430       }
2431
2432     case PLUS_EXPR:
2433     case MINUS_EXPR:
2434     case RANGE_EXPR:
2435       return (compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
2436               && compare_constant(TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
2437
2438     case NOP_EXPR:
2439     case CONVERT_EXPR:
2440     case NON_LVALUE_EXPR:
2441     case VIEW_CONVERT_EXPR:
2442       return compare_constant (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2443
2444     default:
2445       {
2446         tree nt1, nt2;
2447         nt1 = lang_hooks.expand_constant (t1);
2448         nt2 = lang_hooks.expand_constant (t2);
2449         if (nt1 != t1 || nt2 != t2)
2450           return compare_constant (nt1, nt2);
2451         else
2452           return 0;
2453       }
2454     }
2455
2456   /* Should not get here.  */
2457   abort ();
2458 }
2459 \f
2460 /* Make a copy of the whole tree structure for a constant.  This
2461    handles the same types of nodes that compare_constant handles.  */
2462
2463 static tree
2464 copy_constant (tree exp)
2465 {
2466   switch (TREE_CODE (exp))
2467     {
2468     case ADDR_EXPR:
2469       /* For ADDR_EXPR, we do not want to copy the decl whose address
2470          is requested.  We do want to copy constants though.  */
2471       if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, 0))) == 'c')
2472         return build1 (TREE_CODE (exp), TREE_TYPE (exp),
2473                        copy_constant (TREE_OPERAND (exp, 0)));
2474       else
2475         return copy_node (exp);
2476
2477     case INTEGER_CST:
2478     case REAL_CST:
2479     case STRING_CST:
2480       return copy_node (exp);
2481
2482     case COMPLEX_CST:
2483       return build_complex (TREE_TYPE (exp),
2484                             copy_constant (TREE_REALPART (exp)),
2485                             copy_constant (TREE_IMAGPART (exp)));
2486
2487     case PLUS_EXPR:
2488     case MINUS_EXPR:
2489       return build2 (TREE_CODE (exp), TREE_TYPE (exp),
2490                      copy_constant (TREE_OPERAND (exp, 0)),
2491                      copy_constant (TREE_OPERAND (exp, 1)));
2492
2493     case NOP_EXPR:
2494     case CONVERT_EXPR:
2495     case NON_LVALUE_EXPR:
2496     case VIEW_CONVERT_EXPR:
2497       return build1 (TREE_CODE (exp), TREE_TYPE (exp),
2498                      copy_constant (TREE_OPERAND (exp, 0)));
2499
2500     case CONSTRUCTOR:
2501       {
2502         tree copy = copy_node (exp);
2503         tree list = copy_list (CONSTRUCTOR_ELTS (exp));
2504         tree tail;
2505
2506         CONSTRUCTOR_ELTS (copy) = list;
2507         for (tail = list; tail; tail = TREE_CHAIN (tail))
2508           TREE_VALUE (tail) = copy_constant (TREE_VALUE (tail));
2509         if (TREE_CODE (TREE_TYPE (exp)) == SET_TYPE)
2510           for (tail = list; tail; tail = TREE_CHAIN (tail))
2511             TREE_PURPOSE (tail) = copy_constant (TREE_PURPOSE (tail));
2512
2513         return copy;
2514       }
2515
2516     default:
2517       {
2518         tree t;
2519         t = lang_hooks.expand_constant (exp);
2520         if (t != exp)
2521           return copy_constant (t);
2522         else
2523           abort ();
2524       }
2525     }
2526 }
2527 \f
2528 /* Subroutine of output_constant_def:
2529    No constant equal to EXP is known to have been output.
2530    Make a constant descriptor to enter EXP in the hash table.
2531    Assign the label number and construct RTL to refer to the
2532    constant's location in memory.
2533    Caller is responsible for updating the hash table.  */
2534
2535 static struct constant_descriptor_tree *
2536 build_constant_desc (tree exp)
2537 {
2538   rtx symbol;
2539   rtx rtl;
2540   char label[256];
2541   int labelno;
2542   struct constant_descriptor_tree *desc;
2543
2544   desc = ggc_alloc (sizeof (*desc));
2545   desc->value = copy_constant (exp);
2546
2547   /* Propagate marked-ness to copied constant.  */
2548   if (flag_mudflap && mf_marked_p (exp))
2549     mf_mark (desc->value);
2550
2551   /* Create a string containing the label name, in LABEL.  */
2552   labelno = const_labelno++;
2553   ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno);
2554
2555   /* We have a symbol name; construct the SYMBOL_REF and the MEM.  */
2556   symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
2557   SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2558   SYMBOL_REF_DECL (symbol) = desc->value;
2559   TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1;
2560
2561   rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), symbol);
2562   set_mem_attributes (rtl, exp, 1);
2563   set_mem_alias_set (rtl, 0);
2564   set_mem_alias_set (rtl, const_alias_set);
2565
2566   /* Set flags or add text to the name to record information, such as
2567      that it is a local symbol.  If the name is changed, the macro
2568      ASM_OUTPUT_LABELREF will have to know how to strip this
2569      information.  This call might invalidate our local variable
2570      SYMBOL; we can't use it afterward.  */
2571
2572   targetm.encode_section_info (exp, rtl, true);
2573
2574   desc->rtl = rtl;
2575
2576   return desc;
2577 }
2578
2579 /* Return an rtx representing a reference to constant data in memory
2580    for the constant expression EXP.
2581
2582    If assembler code for such a constant has already been output,
2583    return an rtx to refer to it.
2584    Otherwise, output such a constant in memory
2585    and generate an rtx for it.
2586
2587    If DEFER is nonzero, this constant can be deferred and output only
2588    if referenced in the function after all optimizations.
2589
2590    `const_desc_table' records which constants already have label strings.  */
2591
2592 rtx
2593 output_constant_def (tree exp, int defer)
2594 {
2595   struct constant_descriptor_tree *desc;
2596   struct constant_descriptor_tree key;
2597   void **loc;
2598
2599   /* Look up EXP in the table of constant descriptors.  If we didn't find
2600      it, create a new one.  */
2601   key.value = exp;
2602   loc = htab_find_slot (const_desc_htab, &key, INSERT);
2603
2604   desc = *loc;
2605   if (desc == 0)
2606     {
2607       desc = build_constant_desc (exp);
2608       *loc = desc;
2609     }
2610
2611   maybe_output_constant_def_contents (desc, defer);
2612   return desc->rtl;
2613 }
2614
2615 /* Subroutine of output_constant_def: Decide whether or not we need to
2616    output the constant DESC now, and if so, do it.  */
2617 static void
2618 maybe_output_constant_def_contents (struct constant_descriptor_tree *desc,
2619                                     int defer)
2620 {
2621   rtx symbol = XEXP (desc->rtl, 0);
2622   tree exp = desc->value;
2623
2624   if (flag_syntax_only)
2625     return;
2626
2627   if (TREE_ASM_WRITTEN (exp))
2628     /* Already output; don't do it again.  */
2629     return;
2630
2631   /* We can always defer constants as long as the context allows
2632      doing so.  */
2633   if (defer)
2634     {
2635       /* Increment n_deferred_constants if it exists.  It needs to be at
2636          least as large as the number of constants actually referred to
2637          by the function.  If it's too small we'll stop looking too early
2638          and fail to emit constants; if it's too large we'll only look
2639          through the entire function when we could have stopped earlier.  */
2640       if (cfun)
2641         n_deferred_constants++;
2642       return;
2643     }
2644
2645   output_constant_def_contents (symbol);
2646 }
2647
2648 /* We must output the constant data referred to by SYMBOL; do so.  */
2649
2650 static void
2651 output_constant_def_contents (rtx symbol)
2652 {
2653   tree exp = SYMBOL_REF_DECL (symbol);
2654   const char *label = XSTR (symbol, 0);
2655   HOST_WIDE_INT size;
2656
2657   /* Make sure any other constants whose addresses appear in EXP
2658      are assigned label numbers.  */
2659   int reloc = compute_reloc_for_constant (exp);
2660
2661   /* Align the location counter as required by EXP's data type.  */
2662   int align = TYPE_ALIGN (TREE_TYPE (exp));
2663 #ifdef CONSTANT_ALIGNMENT
2664   align = CONSTANT_ALIGNMENT (exp, align);
2665 #endif
2666
2667   output_addressed_constants (exp);
2668
2669   /* We are no longer deferring this constant.  */
2670   TREE_ASM_WRITTEN (exp) = 1;
2671
2672   if (IN_NAMED_SECTION (exp))
2673     named_section (exp, NULL, reloc);
2674   else
2675     targetm.asm_out.select_section (exp, reloc, align);
2676
2677   if (align > BITS_PER_UNIT)
2678     {
2679       ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT));
2680     }
2681
2682   size = int_size_in_bytes (TREE_TYPE (exp));
2683   if (TREE_CODE (exp) == STRING_CST)
2684     size = MAX (TREE_STRING_LENGTH (exp), size);
2685
2686   /* Do any machine/system dependent processing of the constant.  */
2687 #ifdef ASM_DECLARE_CONSTANT_NAME
2688   ASM_DECLARE_CONSTANT_NAME (asm_out_file, label, exp, size);
2689 #else
2690   /* Standard thing is just output label for the constant.  */
2691   ASM_OUTPUT_LABEL (asm_out_file, label);
2692 #endif /* ASM_DECLARE_CONSTANT_NAME */
2693
2694   /* Output the value of EXP.  */
2695   output_constant (exp, size, align);
2696   if (flag_mudflap)
2697     mudflap_enqueue_constant (exp);
2698 }
2699
2700 /* Look up EXP in the table of constant descriptors.  Return the rtl
2701    if it has been emitted, else null.  */
2702
2703 rtx
2704 lookup_constant_def (tree exp)
2705 {
2706   struct constant_descriptor_tree *desc;
2707   struct constant_descriptor_tree key;
2708
2709   key.value = exp;
2710   desc = htab_find (const_desc_htab, &key);
2711
2712   return (desc ? desc->rtl : NULL_RTX);
2713 }
2714 \f
2715 /* Used in the hash tables to avoid outputting the same constant
2716    twice.  Unlike 'struct constant_descriptor_tree', RTX constants
2717    are output once per function, not once per file.  */
2718 /* ??? Only a few targets need per-function constant pools.  Most
2719    can use one per-file pool.  Should add a targetm bit to tell the
2720    difference.  */
2721
2722 struct rtx_constant_pool GTY(())
2723 {
2724   /* Pointers to first and last constant in pool, as ordered by offset.  */
2725   struct constant_descriptor_rtx *first;
2726   struct constant_descriptor_rtx *last;
2727
2728   /* Hash facility for making memory-constants from constant rtl-expressions.
2729      It is used on RISC machines where immediate integer arguments and
2730      constant addresses are restricted so that such constants must be stored
2731      in memory.  */
2732   htab_t GTY((param_is (struct constant_descriptor_rtx))) const_rtx_htab;
2733   htab_t GTY((param_is (struct constant_descriptor_rtx))) const_rtx_sym_htab;
2734
2735   /* Current offset in constant pool (does not include any
2736      machine-specific header).  */
2737   HOST_WIDE_INT offset;
2738 };
2739
2740 struct constant_descriptor_rtx GTY((chain_next ("%h.next")))
2741 {
2742   struct constant_descriptor_rtx *next;
2743   rtx mem;
2744   rtx sym;
2745   rtx constant;
2746   HOST_WIDE_INT offset;
2747   hashval_t hash;
2748   enum machine_mode mode;
2749   unsigned int align;
2750   int labelno;
2751   int mark;
2752 };
2753
2754 /* Hash and compare functions for const_rtx_htab.  */
2755
2756 static hashval_t
2757 const_desc_rtx_hash (const void *ptr)
2758 {
2759   const struct constant_descriptor_rtx *desc = ptr;
2760   return desc->hash;
2761 }
2762
2763 static int
2764 const_desc_rtx_eq (const void *a, const void *b)
2765 {
2766   const struct constant_descriptor_rtx *x = a;
2767   const struct constant_descriptor_rtx *y = b;
2768
2769   if (x->mode != y->mode)
2770     return 0;
2771   return rtx_equal_p (x->constant, y->constant);
2772 }
2773
2774 /* Hash and compare functions for const_rtx_sym_htab.  */
2775
2776 static hashval_t
2777 const_desc_rtx_sym_hash (const void *ptr)
2778 {
2779   const struct constant_descriptor_rtx *desc = ptr;
2780   return htab_hash_string (XSTR (desc->sym, 0));
2781 }
2782
2783 static int
2784 const_desc_rtx_sym_eq (const void *a, const void *b)
2785 {
2786   const struct constant_descriptor_rtx *x = a;
2787   const struct constant_descriptor_rtx *y = b;
2788   return XSTR (x->sym, 0) == XSTR (y->sym, 0);
2789 }
2790
2791 /* This is the worker function for const_rtx_hash, called via for_each_rtx.  */
2792
2793 static int
2794 const_rtx_hash_1 (rtx *xp, void *data)
2795 {
2796   unsigned HOST_WIDE_INT hwi;
2797   enum machine_mode mode;
2798   enum rtx_code code;
2799   hashval_t h, *hp;
2800   rtx x;
2801
2802   x = *xp;
2803   code = GET_CODE (x);
2804   mode = GET_MODE (x);
2805   h = (hashval_t) code * 1048573 + mode;
2806
2807   switch (code)
2808     {
2809     case CONST_INT:
2810       hwi = INTVAL (x);
2811     fold_hwi:
2812       {
2813         const int shift = sizeof (hashval_t) * CHAR_BIT;
2814         const int n = sizeof (HOST_WIDE_INT) / sizeof (hashval_t);
2815         int i;
2816
2817         h ^= (hashval_t) hwi;
2818         for (i = 1; i < n; ++i)
2819           {
2820             hwi >>= shift;
2821             h ^= (hashval_t) hwi;
2822           }
2823       }
2824       break;
2825
2826     case CONST_DOUBLE:
2827       if (mode == VOIDmode)
2828         {
2829           hwi = CONST_DOUBLE_LOW (x) ^ CONST_DOUBLE_HIGH (x);
2830           goto fold_hwi;
2831         }
2832       else
2833         h ^= real_hash (CONST_DOUBLE_REAL_VALUE (x));
2834       break;
2835
2836     case SYMBOL_REF:
2837       h ^= htab_hash_string (XSTR (x, 0));
2838       break;
2839
2840     case LABEL_REF:
2841       h = h * 251 + CODE_LABEL_NUMBER (XEXP (x, 0));
2842       break;
2843
2844     case UNSPEC:
2845     case UNSPEC_VOLATILE:
2846       h = h * 251 + XINT (x, 1);
2847       break;
2848
2849     default:
2850       break;
2851     }
2852
2853   hp = data;
2854   *hp = *hp * 509 + h;
2855   return 0;
2856 }
2857
2858 /* Compute a hash value for X, which should be a constant.  */
2859
2860 static hashval_t
2861 const_rtx_hash (rtx x)
2862 {
2863   hashval_t h = 0;
2864   for_each_rtx (&x, const_rtx_hash_1, &h);
2865   return h;
2866 }
2867
2868 \f
2869 /* Initialize constant pool hashing for a new function.  */
2870
2871 void
2872 init_varasm_status (struct function *f)
2873 {
2874   struct varasm_status *p;
2875   struct rtx_constant_pool *pool;
2876
2877   p = ggc_alloc (sizeof (struct varasm_status));
2878   f->varasm = p;
2879
2880   pool = ggc_alloc (sizeof (struct rtx_constant_pool));
2881   p->pool = pool;
2882   p->deferred_constants = 0;
2883
2884   pool->const_rtx_htab = htab_create_ggc (31, const_desc_rtx_hash,
2885                                           const_desc_rtx_eq, NULL);
2886   pool->const_rtx_sym_htab = htab_create_ggc (31, const_desc_rtx_sym_hash,
2887                                               const_desc_rtx_sym_eq, NULL);
2888   pool->first = pool->last = NULL;
2889   pool->offset = 0;
2890 }
2891 \f
2892 /* Given a MINUS expression, simplify it if both sides
2893    include the same symbol.  */
2894
2895 rtx
2896 simplify_subtraction (rtx x)
2897 {
2898   rtx r = simplify_rtx (x);
2899   return r ? r : x;
2900 }
2901 \f
2902 /* Given a constant rtx X, make (or find) a memory constant for its value
2903    and return a MEM rtx to refer to it in memory.  */
2904
2905 rtx
2906 force_const_mem (enum machine_mode mode, rtx x)
2907 {
2908   struct constant_descriptor_rtx *desc, tmp;
2909   struct rtx_constant_pool *pool = cfun->varasm->pool;
2910   char label[256];
2911   rtx def, symbol;
2912   hashval_t hash;
2913   unsigned int align;
2914   void **slot;
2915
2916   /* If we're not allowed to drop X into the constant pool, don't.  */
2917   if (targetm.cannot_force_const_mem (x))
2918     return NULL_RTX;
2919
2920   /* Lookup the value in the hashtable.  */
2921   tmp.constant = x;
2922   tmp.mode = mode;
2923   hash = const_rtx_hash (x);
2924   slot = htab_find_slot_with_hash (pool->const_rtx_htab, &tmp, hash, INSERT);
2925   desc = *slot;
2926   
2927   /* If the constant was already present, return its memory.  */
2928   if (desc)
2929     return copy_rtx (desc->mem);
2930
2931   /* Otherwise, create a new descriptor.  */
2932   desc = ggc_alloc (sizeof (*desc));
2933   *slot = desc;
2934
2935   /* Align the location counter as required by EXP's data type.  */
2936   align = GET_MODE_ALIGNMENT (mode == VOIDmode ? word_mode : mode);
2937 #ifdef CONSTANT_ALIGNMENT
2938   {
2939     tree type = lang_hooks.types.type_for_mode (mode, 0);
2940     if (type != NULL_TREE)
2941       align = CONSTANT_ALIGNMENT (make_tree (type, x), align);
2942   }
2943 #endif
2944
2945   pool->offset += (align / BITS_PER_UNIT) - 1;
2946   pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
2947
2948   desc->next = NULL;
2949   desc->constant = tmp.constant;
2950   desc->offset = pool->offset;
2951   desc->hash = hash;
2952   desc->mode = mode;
2953   desc->align = align;
2954   desc->labelno = const_labelno;
2955   desc->mark = 0;
2956
2957   pool->offset += GET_MODE_SIZE (mode);
2958   if (pool->last)
2959     pool->last->next = desc;
2960   else
2961     pool->first = pool->last = desc;
2962   pool->last = desc;
2963
2964   /* Create a string containing the label name, in LABEL.  */
2965   ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno);
2966   ++const_labelno;
2967
2968   /* Construct the SYMBOL_REF.  Make sure to mark it as belonging to
2969      the constants pool.  */
2970   desc->sym = symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label));
2971   SYMBOL_REF_FLAGS (symbol) = SYMBOL_FLAG_LOCAL;
2972   CONSTANT_POOL_ADDRESS_P (symbol) = 1;
2973   current_function_uses_const_pool = 1;
2974
2975   /* Insert the descriptor into the symbol cross-reference table too.  */
2976   slot = htab_find_slot (pool->const_rtx_sym_htab, desc, INSERT);
2977   if (*slot)
2978     abort ();
2979   *slot = desc;
2980
2981   /* Construct the MEM.  */
2982   desc->mem = def = gen_const_mem (mode, symbol);
2983   set_mem_attributes (def, lang_hooks.types.type_for_mode (mode, 0), 1);
2984
2985   /* If we're dropping a label to the constant pool, make sure we
2986      don't delete it.  */
2987   if (GET_CODE (x) == LABEL_REF)
2988     LABEL_PRESERVE_P (XEXP (x, 0)) = 1;
2989
2990   return copy_rtx (def);
2991 }
2992 \f
2993 /* Given a SYMBOL_REF with CONSTANT_POOL_ADDRESS_P true, return a pointer to
2994    the corresponding constant_descriptor_rtx structure.  */
2995
2996 static struct constant_descriptor_rtx *
2997 find_pool_constant (struct rtx_constant_pool *pool, rtx sym)
2998 {
2999   struct constant_descriptor_rtx tmp;
3000   tmp.sym = sym;
3001   return htab_find (pool->const_rtx_sym_htab, &tmp);
3002 }
3003
3004 /* Given a constant pool SYMBOL_REF, return the corresponding constant.  */
3005
3006 rtx
3007 get_pool_constant (rtx addr)
3008 {
3009   return find_pool_constant (cfun->varasm->pool, addr)->constant;
3010 }
3011
3012 /* Given a constant pool SYMBOL_REF, return the corresponding constant
3013    and whether it has been output or not.  */
3014
3015 rtx
3016 get_pool_constant_mark (rtx addr, bool *pmarked)
3017 {
3018   struct constant_descriptor_rtx *desc;
3019
3020   desc = find_pool_constant (cfun->varasm->pool, addr);
3021   *pmarked = (desc->mark != 0);
3022   return desc->constant;
3023 }
3024
3025 /* Likewise, but for the constant pool of a specific function.  */
3026
3027 rtx
3028 get_pool_constant_for_function (struct function *f, rtx addr)
3029 {
3030   return find_pool_constant (f->varasm->pool, addr)->constant;
3031 }
3032
3033 /* Similar, return the mode.  */
3034
3035 enum machine_mode
3036 get_pool_mode (rtx addr)
3037 {
3038   return find_pool_constant (cfun->varasm->pool, addr)->mode;
3039 }
3040
3041 enum machine_mode
3042 get_pool_mode_for_function (struct function *f, rtx addr)
3043 {
3044   return find_pool_constant (f->varasm->pool, addr)->mode;
3045 }
3046
3047 /* Similar, return the offset in the constant pool.  */
3048
3049 int
3050 get_pool_offset (rtx addr)
3051 {
3052   return find_pool_constant (cfun->varasm->pool, addr)->offset;
3053 }
3054
3055 /* Return the size of the constant pool.  */
3056
3057 int
3058 get_pool_size (void)
3059 {
3060   return cfun->varasm->pool->offset;
3061 }
3062 \f
3063 /* Worker function for output_constant_pool_1.  Emit assembly for X
3064    in MODE with known alignment ALIGN.  */
3065
3066 static void
3067 output_constant_pool_2 (enum machine_mode mode, rtx x, unsigned int align)
3068 {
3069   switch (GET_MODE_CLASS (mode))
3070     {
3071     case MODE_FLOAT:
3072       if (GET_CODE (x) != CONST_DOUBLE)
3073         abort ();
3074       else
3075         {
3076           REAL_VALUE_TYPE r;
3077           REAL_VALUE_FROM_CONST_DOUBLE (r, x);
3078           assemble_real (r, mode, align);
3079         }
3080       break;
3081
3082     case MODE_INT:
3083     case MODE_PARTIAL_INT:
3084       assemble_integer (x, GET_MODE_SIZE (mode), align, 1);
3085       break;
3086
3087     case MODE_VECTOR_FLOAT:
3088     case MODE_VECTOR_INT:
3089       {
3090         int i, units;
3091         enum machine_mode submode = GET_MODE_INNER (mode);
3092         unsigned int subalign = MIN (align, GET_MODE_BITSIZE (submode));
3093
3094         if (GET_CODE (x) != CONST_VECTOR)
3095           abort ();
3096         units = CONST_VECTOR_NUNITS (x);
3097
3098         for (i = 0; i < units; i++)
3099           {
3100             rtx elt = CONST_VECTOR_ELT (x, i);
3101             output_constant_pool_2 (submode, elt, i ? subalign : align);
3102           }
3103       }
3104       break;
3105
3106     default:
3107       abort ();
3108     }
3109 }
3110
3111 /* Worker function for output_constant_pool.  Emit POOL.  */
3112
3113 static void
3114 output_constant_pool_1 (struct constant_descriptor_rtx *desc)
3115 {
3116   rtx x, tmp;
3117
3118   if (!desc->mark)
3119     return;
3120   x = desc->constant;
3121
3122   /* See if X is a LABEL_REF (or a CONST referring to a LABEL_REF)
3123      whose CODE_LABEL has been deleted.  This can occur if a jump table
3124      is eliminated by optimization.  If so, write a constant of zero
3125      instead.  Note that this can also happen by turning the
3126      CODE_LABEL into a NOTE.  */
3127   /* ??? This seems completely and utterly wrong.  Certainly it's
3128      not true for NOTE_INSN_DELETED_LABEL, but I disbelieve proper
3129      functioning even with INSN_DELETED_P and friends.  */
3130
3131   tmp = x;
3132   switch (GET_CODE (x))
3133     {
3134     case CONST:
3135       if (GET_CODE (XEXP (x, 0)) != PLUS
3136           || GET_CODE (XEXP (XEXP (x, 0), 0)) != LABEL_REF)
3137         break;
3138       tmp = XEXP (XEXP (x, 0), 0);
3139       /* FALLTHRU  */
3140
3141     case LABEL_REF:
3142       tmp = XEXP (x, 0);
3143       if (INSN_DELETED_P (tmp)
3144           || (NOTE_P (tmp)
3145               && NOTE_LINE_NUMBER (tmp) == NOTE_INSN_DELETED))
3146         {
3147           abort ();
3148           x = const0_rtx;
3149         }
3150       break;
3151
3152     default:
3153       break;
3154     }
3155
3156   /* First switch to correct section.  */
3157   targetm.asm_out.select_rtx_section (desc->mode, x, desc->align);
3158
3159 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3160   ASM_OUTPUT_SPECIAL_POOL_ENTRY (asm_out_file, x, desc->mode,
3161                                  desc->align, desc->labelno, done);
3162 #endif
3163
3164   assemble_align (desc->align);
3165
3166   /* Output the label.  */
3167   targetm.asm_out.internal_label (asm_out_file, "LC", desc->labelno);
3168
3169   /* Output the data.  */
3170   output_constant_pool_2 (desc->mode, x, desc->align);
3171
3172   /* Make sure all constants in SECTION_MERGE and not SECTION_STRINGS
3173      sections have proper size.  */
3174   if (desc->align > GET_MODE_BITSIZE (desc->mode)
3175       && in_section == in_named
3176       && get_named_section_flags (in_named_name) & SECTION_MERGE)
3177     assemble_align (desc->align);
3178
3179 #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY
3180  done:
3181 #endif
3182   return;
3183 }
3184
3185 /* Given a SYMBOL_REF CURRENT_RTX, mark it and all constants it refers
3186    to as used.  Emit referenced deferred strings.  This function can
3187    be used with for_each_rtx to mark all SYMBOL_REFs in an rtx.  */
3188
3189 static int
3190 mark_constant (rtx *current_rtx, void *data)
3191 {
3192   struct rtx_constant_pool *pool = data;
3193   rtx x = *current_rtx;
3194
3195   if (x == NULL_RTX || GET_CODE (x) != SYMBOL_REF)
3196     return 0;
3197
3198   if (CONSTANT_POOL_ADDRESS_P (x))
3199     {
3200       struct constant_descriptor_rtx *desc = find_pool_constant (pool, x);
3201       if (desc->mark == 0)
3202         {
3203           desc->mark = 1;
3204           for_each_rtx (&desc->constant, mark_constant, pool);
3205         }
3206     }
3207   else if (TREE_CONSTANT_POOL_ADDRESS_P (x))
3208     {
3209       tree exp = SYMBOL_REF_DECL (x);
3210       if (!TREE_ASM_WRITTEN (exp))
3211         {
3212           n_deferred_constants--;
3213           output_constant_def_contents (x);
3214         }
3215     }
3216
3217   return -1;
3218
3219
3220 /* Look through appropriate parts of INSN, marking all entries in the
3221    constant pool which are actually being used.  Entries that are only
3222    referenced by other constants are also marked as used.  Emit
3223    deferred strings that are used.  */
3224
3225 static void
3226 mark_constants (struct rtx_constant_pool *pool, rtx insn)
3227 {
3228   if (!INSN_P (insn))
3229     return;
3230
3231   /* Insns may appear inside a SEQUENCE.  Only check the patterns of
3232      insns, not any notes that may be attached.  We don't want to mark
3233      a constant just because it happens to appear in a REG_EQUIV note.  */
3234   if (GET_CODE (PATTERN (insn)) == SEQUENCE)
3235     {
3236       rtx seq = PATTERN (insn);
3237       int i, n = XVECLEN (seq, 0);
3238       for (i = 0; i < n; ++i)
3239         {
3240           rtx subinsn = XVECEXP (seq, 0, i);
3241           if (INSN_P (subinsn))
3242             for_each_rtx (&PATTERN (subinsn), mark_constant, pool);
3243         }
3244     }
3245   else
3246     for_each_rtx (&PATTERN (insn), mark_constant, pool);
3247 }
3248
3249 /* Look through the instructions for this function, and mark all the
3250    entries in POOL which are actually being used.  Emit deferred constants
3251    which have indeed been used.  */
3252
3253 static void
3254 mark_constant_pool (struct rtx_constant_pool *pool)
3255 {
3256   rtx insn, link;
3257
3258   if (pool->first == 0 && n_deferred_constants == 0)
3259     return;
3260
3261   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3262     mark_constants (pool, insn);
3263
3264   for (link = current_function_epilogue_delay_list;
3265        link;
3266        link = XEXP (link, 1))
3267     mark_constants (pool, XEXP (link, 0));
3268 }
3269
3270 /* Write all the constants in the constant pool.  */
3271
3272 void
3273 output_constant_pool (const char *fnname ATTRIBUTE_UNUSED,
3274                       tree fndecl ATTRIBUTE_UNUSED)
3275 {
3276   struct rtx_constant_pool *pool = cfun->varasm->pool;
3277   struct constant_descriptor_rtx *desc;
3278
3279   /* It is possible for gcc to call force_const_mem and then to later
3280      discard the instructions which refer to the constant.  In such a
3281      case we do not need to output the constant.  */
3282   mark_constant_pool (pool);
3283
3284 #ifdef ASM_OUTPUT_POOL_PROLOGUE
3285   ASM_OUTPUT_POOL_PROLOGUE (asm_out_file, fnname, fndecl, pool->offset);
3286 #endif
3287
3288   for (desc = pool->first; desc ; desc = desc->next)
3289     output_constant_pool_1 (desc);
3290
3291 #ifdef ASM_OUTPUT_POOL_EPILOGUE
3292   ASM_OUTPUT_POOL_EPILOGUE (asm_out_file, fnname, fndecl, pool->offset);
3293 #endif
3294 }
3295 \f
3296 /* Determine what kind of relocations EXP may need.  */
3297
3298 int
3299 compute_reloc_for_constant (tree exp)
3300 {
3301   int reloc = 0, reloc2;
3302   tree tem;
3303
3304   /* Give the front-end a chance to convert VALUE to something that
3305      looks more like a constant to the back-end.  */
3306   exp = lang_hooks.expand_constant (exp);
3307
3308   switch (TREE_CODE (exp))
3309     {
3310     case ADDR_EXPR:
3311     case FDESC_EXPR:
3312       /* Go inside any operations that get_inner_reference can handle and see
3313          if what's inside is a constant: no need to do anything here for
3314          addresses of variables or functions.  */
3315       for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3316            tem = TREE_OPERAND (tem, 0))
3317         ;
3318
3319       if (TREE_PUBLIC (tem))
3320         reloc |= 2;
3321       else
3322         reloc |= 1;
3323       break;
3324
3325     case PLUS_EXPR:
3326       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3327       reloc |= compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3328       break;
3329
3330     case MINUS_EXPR:
3331       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3332       reloc2 = compute_reloc_for_constant (TREE_OPERAND (exp, 1));
3333       /* The difference of two local labels is computable at link time.  */
3334       if (reloc == 1 && reloc2 == 1)
3335         reloc = 0;
3336       else
3337         reloc |= reloc2;
3338       break;
3339
3340     case NOP_EXPR:
3341     case CONVERT_EXPR:
3342     case NON_LVALUE_EXPR:
3343       reloc = compute_reloc_for_constant (TREE_OPERAND (exp, 0));
3344       break;
3345
3346     case CONSTRUCTOR:
3347       for (tem = CONSTRUCTOR_ELTS (exp); tem; tem = TREE_CHAIN (tem))
3348         if (TREE_VALUE (tem) != 0)
3349           reloc |= compute_reloc_for_constant (TREE_VALUE (tem));
3350
3351       break;
3352
3353     default:
3354       break;
3355     }
3356   return reloc;
3357 }
3358
3359 /* Find all the constants whose addresses are referenced inside of EXP,
3360    and make sure assembler code with a label has been output for each one.
3361    Indicate whether an ADDR_EXPR has been encountered.  */
3362
3363 static void
3364 output_addressed_constants (tree exp)
3365 {
3366   tree tem;
3367
3368   /* Give the front-end a chance to convert VALUE to something that
3369      looks more like a constant to the back-end.  */
3370   exp = lang_hooks.expand_constant (exp);
3371
3372   switch (TREE_CODE (exp))
3373     {
3374     case ADDR_EXPR:
3375     case FDESC_EXPR:
3376       /* Go inside any operations that get_inner_reference can handle and see
3377          if what's inside is a constant: no need to do anything here for
3378          addresses of variables or functions.  */
3379       for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem);
3380            tem = TREE_OPERAND (tem, 0))
3381         ;
3382
3383       if (TREE_CODE_CLASS (TREE_CODE (tem)) == 'c'
3384           || TREE_CODE (tem) == CONSTRUCTOR)
3385         output_constant_def (tem, 0);
3386       break;
3387
3388     case PLUS_EXPR:
3389     case MINUS_EXPR:
3390       output_addressed_constants (TREE_OPERAND (exp, 1));
3391       /* Fall through.  */
3392
3393     case NOP_EXPR:
3394     case CONVERT_EXPR:
3395     case NON_LVALUE_EXPR:
3396       output_addressed_constants (TREE_OPERAND (exp, 0));
3397       break;
3398
3399     case CONSTRUCTOR:
3400       for (tem = CONSTRUCTOR_ELTS (exp); tem; tem = TREE_CHAIN (tem))
3401         if (TREE_VALUE (tem) != 0)
3402           output_addressed_constants (TREE_VALUE (tem));
3403
3404       break;
3405
3406     default:
3407       break;
3408     }
3409 }
3410 \f
3411 /* Return nonzero if VALUE is a valid constant-valued expression
3412    for use in initializing a static variable; one that can be an
3413    element of a "constant" initializer.
3414
3415    Return null_pointer_node if the value is absolute;
3416    if it is relocatable, return the variable that determines the relocation.
3417    We assume that VALUE has been folded as much as possible;
3418    therefore, we do not need to check for such things as
3419    arithmetic-combinations of integers.  */
3420
3421 tree
3422 initializer_constant_valid_p (tree value, tree endtype)
3423 {
3424   /* Give the front-end a chance to convert VALUE to something that
3425      looks more like a constant to the back-end.  */
3426   value = lang_hooks.expand_constant (value);
3427
3428   switch (TREE_CODE (value))
3429     {
3430     case CONSTRUCTOR:
3431       if ((TREE_CODE (TREE_TYPE (value)) == UNION_TYPE
3432            || TREE_CODE (TREE_TYPE (value)) == RECORD_TYPE)
3433           && TREE_CONSTANT (value)
3434           && CONSTRUCTOR_ELTS (value))
3435         {
3436           tree elt;
3437           bool absolute = true;
3438
3439           for (elt = CONSTRUCTOR_ELTS (value); elt; elt = TREE_CHAIN (elt))
3440             {
3441               tree reloc;
3442               value = TREE_VALUE (elt);
3443               reloc = initializer_constant_valid_p (value, TREE_TYPE (value));
3444               if (!reloc)
3445                 return NULL_TREE;
3446               if (reloc != null_pointer_node)
3447                 absolute = false;
3448             }
3449           /* For a non-absolute relocation, there is no single
3450              variable that can be "the variable that determines the
3451              relocation."  */
3452           return absolute ? null_pointer_node : error_mark_node;
3453         }
3454
3455       return TREE_STATIC (value) ? null_pointer_node : NULL_TREE;
3456
3457     case INTEGER_CST:
3458     case VECTOR_CST:
3459     case REAL_CST:
3460     case STRING_CST:
3461     case COMPLEX_CST:
3462       return null_pointer_node;
3463
3464     case ADDR_EXPR:
3465     case FDESC_EXPR:
3466       return staticp (TREE_OPERAND (value, 0)) ? TREE_OPERAND (value, 0) : 0;
3467
3468     case VIEW_CONVERT_EXPR:
3469     case NON_LVALUE_EXPR:
3470       return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3471
3472     case CONVERT_EXPR:
3473     case NOP_EXPR:
3474       /* Allow conversions between pointer types.  */
3475       if (POINTER_TYPE_P (TREE_TYPE (value))
3476           && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3477         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3478
3479       /* Allow conversions between real types.  */
3480       if (FLOAT_TYPE_P (TREE_TYPE (value))
3481           && FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3482         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3483
3484       /* Allow length-preserving conversions between integer types.  */
3485       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3486           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
3487           && (TYPE_PRECISION (TREE_TYPE (value))
3488               == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
3489         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3490
3491       /* Allow conversions between other integer types only if
3492          explicit value.  */
3493       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3494           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3495         {
3496           tree inner = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3497                                                      endtype);
3498           if (inner == null_pointer_node)
3499             return null_pointer_node;
3500           break;
3501         }
3502
3503       /* Allow (int) &foo provided int is as wide as a pointer.  */
3504       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3505           && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
3506           && (TYPE_PRECISION (TREE_TYPE (value))
3507               >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
3508         return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3509                                              endtype);
3510
3511       /* Likewise conversions from int to pointers, but also allow
3512          conversions from 0.  */
3513       if ((POINTER_TYPE_P (TREE_TYPE (value))
3514            || TREE_CODE (TREE_TYPE (value)) == OFFSET_TYPE)
3515           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3516         {
3517           if (integer_zerop (TREE_OPERAND (value, 0)))
3518             return null_pointer_node;
3519           else if (TYPE_PRECISION (TREE_TYPE (value))
3520                    <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0))))
3521             return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3522                                                  endtype);
3523         }
3524
3525       /* Allow conversions to struct or union types if the value
3526          inside is okay.  */
3527       if (TREE_CODE (TREE_TYPE (value)) == RECORD_TYPE
3528           || TREE_CODE (TREE_TYPE (value)) == UNION_TYPE)
3529         return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3530                                              endtype);
3531       break;
3532
3533     case PLUS_EXPR:
3534       if (! INTEGRAL_TYPE_P (endtype)
3535           || TYPE_PRECISION (endtype) >= POINTER_SIZE)
3536         {
3537           tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3538                                                       endtype);
3539           tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
3540                                                       endtype);
3541           /* If either term is absolute, use the other terms relocation.  */
3542           if (valid0 == null_pointer_node)
3543             return valid1;
3544           if (valid1 == null_pointer_node)
3545             return valid0;
3546         }
3547       break;
3548
3549     case MINUS_EXPR:
3550       if (! INTEGRAL_TYPE_P (endtype)
3551           || TYPE_PRECISION (endtype) >= POINTER_SIZE)
3552         {
3553           tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3554                                                       endtype);
3555           tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
3556                                                       endtype);
3557           /* Win if second argument is absolute.  */
3558           if (valid1 == null_pointer_node)
3559             return valid0;
3560           /* Win if both arguments have the same relocation.
3561              Then the value is absolute.  */
3562           if (valid0 == valid1 && valid0 != 0)
3563             return null_pointer_node;
3564
3565           /* Since GCC guarantees that string constants are unique in the
3566              generated code, a subtraction between two copies of the same
3567              constant string is absolute.  */
3568           if (valid0 && TREE_CODE (valid0) == STRING_CST &&
3569               valid1 && TREE_CODE (valid1) == STRING_CST &&
3570               TREE_STRING_POINTER (valid0) == TREE_STRING_POINTER (valid1))
3571             return null_pointer_node;
3572         }
3573
3574       /* Support differences between labels.  */
3575       if (INTEGRAL_TYPE_P (endtype))
3576         {
3577           tree op0, op1;
3578           op0 = TREE_OPERAND (value, 0);
3579           op1 = TREE_OPERAND (value, 1);
3580
3581           /* Like STRIP_NOPS except allow the operand mode to widen.
3582              This works around a feature of fold that simplifies
3583              (int)(p1 - p2) to ((int)p1 - (int)p2) under the theory
3584              that the narrower operation is cheaper.  */
3585
3586           while (TREE_CODE (op0) == NOP_EXPR
3587                  || TREE_CODE (op0) == CONVERT_EXPR
3588                  || TREE_CODE (op0) == NON_LVALUE_EXPR)
3589             {
3590               tree inner = TREE_OPERAND (op0, 0);
3591               if (inner == error_mark_node
3592                   || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
3593                   || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0)))
3594                       > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
3595                 break;
3596               op0 = inner;
3597             }
3598
3599           while (TREE_CODE (op1) == NOP_EXPR
3600                  || TREE_CODE (op1) == CONVERT_EXPR
3601                  || TREE_CODE (op1) == NON_LVALUE_EXPR)
3602             {
3603               tree inner = TREE_OPERAND (op1, 0);
3604               if (inner == error_mark_node
3605                   || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
3606                   || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1)))
3607                       > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
3608                 break;
3609               op1 = inner;
3610             }
3611
3612           if (TREE_CODE (op0) == ADDR_EXPR
3613               && TREE_CODE (TREE_OPERAND (op0, 0)) == LABEL_DECL
3614               && TREE_CODE (op1) == ADDR_EXPR
3615               && TREE_CODE (TREE_OPERAND (op1, 0)) == LABEL_DECL)
3616             return null_pointer_node;
3617         }
3618       break;
3619
3620     default:
3621       break;
3622     }
3623
3624   return 0;
3625 }
3626 \f
3627 /* Output assembler code for constant EXP to FILE, with no label.
3628    This includes the pseudo-op such as ".int" or ".byte", and a newline.
3629    Assumes output_addressed_constants has been done on EXP already.
3630
3631    Generate exactly SIZE bytes of assembler data, padding at the end
3632    with zeros if necessary.  SIZE must always be specified.
3633
3634    SIZE is important for structure constructors,
3635    since trailing members may have been omitted from the constructor.
3636    It is also important for initialization of arrays from string constants
3637    since the full length of the string constant might not be wanted.
3638    It is also needed for initialization of unions, where the initializer's
3639    type is just one member, and that may not be as long as the union.
3640
3641    There a case in which we would fail to output exactly SIZE bytes:
3642    for a structure constructor that wants to produce more than SIZE bytes.
3643    But such constructors will never be generated for any possible input.
3644
3645    ALIGN is the alignment of the data in bits.  */
3646
3647 void
3648 output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align)
3649 {
3650   enum tree_code code;
3651   unsigned HOST_WIDE_INT thissize;
3652
3653   /* Some front-ends use constants other than the standard language-independent
3654      varieties, but which may still be output directly.  Give the front-end a
3655      chance to convert EXP to a language-independent representation.  */
3656   exp = lang_hooks.expand_constant (exp);
3657
3658   if (size == 0 || flag_syntax_only)
3659     return;
3660
3661   /* Eliminate any conversions since we'll be outputting the underlying
3662      constant.  */
3663   while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
3664          || TREE_CODE (exp) == NON_LVALUE_EXPR
3665          || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
3666     exp = TREE_OPERAND (exp, 0);
3667
3668   code = TREE_CODE (TREE_TYPE (exp));
3669   thissize = int_size_in_bytes (TREE_TYPE (exp));
3670
3671   /* Allow a constructor with no elements for any data type.
3672      This means to fill the space with zeros.  */
3673   if (TREE_CODE (exp) == CONSTRUCTOR && CONSTRUCTOR_ELTS (exp) == 0)
3674     {
3675       assemble_zeros (size);
3676       return;
3677     }
3678
3679   if (TREE_CODE (exp) == FDESC_EXPR)
3680     {
3681 #ifdef ASM_OUTPUT_FDESC
3682       HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0);
3683       tree decl = TREE_OPERAND (exp, 0);
3684       ASM_OUTPUT_FDESC (asm_out_file, decl, part);
3685 #else
3686       abort ();
3687 #endif
3688       return;
3689     }
3690
3691   /* Now output the underlying data.  If we've handling the padding, return.
3692      Otherwise, break and ensure SIZE is the size written.  */
3693   switch (code)
3694     {
3695     case CHAR_TYPE:
3696     case BOOLEAN_TYPE:
3697     case INTEGER_TYPE:
3698     case ENUMERAL_TYPE:
3699     case POINTER_TYPE:
3700     case REFERENCE_TYPE:
3701     case OFFSET_TYPE:
3702       if (! assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode,
3703                                            EXPAND_INITIALIZER),
3704                               MIN (size, thissize), align, 0))
3705         error ("initializer for integer value is too complicated");
3706       break;
3707
3708     case REAL_TYPE:
3709       if (TREE_CODE (exp) != REAL_CST)
3710         error ("initializer for floating value is not a floating constant");
3711
3712       assemble_real (TREE_REAL_CST (exp), TYPE_MODE (TREE_TYPE (exp)), align);
3713       break;
3714
3715     case COMPLEX_TYPE:
3716       output_constant (TREE_REALPART (exp), thissize / 2, align);
3717       output_constant (TREE_IMAGPART (exp), thissize / 2,
3718                        min_align (align, BITS_PER_UNIT * (thissize / 2)));
3719       break;
3720
3721     case ARRAY_TYPE:
3722     case VECTOR_TYPE:
3723       if (TREE_CODE (exp) == CONSTRUCTOR)
3724         {
3725           output_constructor (exp, size, align);
3726           return;
3727         }
3728       else if (TREE_CODE (exp) == STRING_CST)
3729         {
3730           thissize = MIN ((unsigned HOST_WIDE_INT)TREE_STRING_LENGTH (exp),
3731                           size);
3732           assemble_string (TREE_STRING_POINTER (exp), thissize);
3733         }
3734       else if (TREE_CODE (exp) == VECTOR_CST)
3735         {
3736           int elt_size;
3737           tree link;
3738           unsigned int nalign;
3739           enum machine_mode inner;
3740
3741           inner = TYPE_MODE (TREE_TYPE (TREE_TYPE (exp)));
3742           nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
3743
3744           elt_size = GET_MODE_SIZE (inner);
3745
3746           link = TREE_VECTOR_CST_ELTS (exp);
3747           output_constant (TREE_VALUE (link), elt_size, align);
3748           while ((link = TREE_CHAIN (link)) != NULL)
3749             output_constant (TREE_VALUE (link), elt_size, nalign);
3750         }
3751       else
3752         abort ();
3753       break;
3754
3755     case RECORD_TYPE:
3756     case UNION_TYPE:
3757       if (TREE_CODE (exp) == CONSTRUCTOR)
3758         output_constructor (exp, size, align);
3759       else
3760         abort ();
3761       return;
3762
3763     case SET_TYPE:
3764       if (TREE_CODE (exp) == INTEGER_CST)
3765         assemble_integer (expand_expr (exp, NULL_RTX,
3766                                        VOIDmode, EXPAND_INITIALIZER),
3767                           thissize, align, 1);
3768       else if (TREE_CODE (exp) == CONSTRUCTOR)
3769         {
3770           unsigned char *buffer = alloca (thissize);
3771           if (get_set_constructor_bytes (exp, buffer, thissize))
3772             abort ();
3773           assemble_string ((char *) buffer, thissize);
3774         }
3775       else
3776         error ("unknown set constructor type");
3777       return;
3778
3779     case ERROR_MARK:
3780       return;
3781
3782     default:
3783       abort ();
3784     }
3785
3786   if (size > thissize)
3787     assemble_zeros (size - thissize);
3788 }
3789
3790 \f
3791 /* Subroutine of output_constructor, used for computing the size of
3792    arrays of unspecified length.  VAL must be a CONSTRUCTOR of an array
3793    type with an unspecified upper bound.  */
3794
3795 static unsigned HOST_WIDE_INT
3796 array_size_for_constructor (tree val)
3797 {
3798   tree max_index, i;
3799
3800   /* This code used to attempt to handle string constants that are not
3801      arrays of single-bytes, but nothing else does, so there's no point in
3802      doing it here.  */
3803   if (TREE_CODE (val) == STRING_CST)
3804     return TREE_STRING_LENGTH (val);
3805
3806   max_index = NULL_TREE;
3807   for (i = CONSTRUCTOR_ELTS (val); i; i = TREE_CHAIN (i))
3808     {
3809       tree index = TREE_PURPOSE (i);
3810
3811       if (TREE_CODE (index) == RANGE_EXPR)
3812         index = TREE_OPERAND (index, 1);
3813       if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
3814         max_index = index;
3815     }
3816
3817   if (max_index == NULL_TREE)
3818     return 0;
3819
3820   /* Compute the total number of array elements.  */
3821   i = size_binop (MINUS_EXPR, convert (sizetype, max_index),
3822                   convert (sizetype,
3823                            TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)))));
3824   i = size_binop (PLUS_EXPR, i, convert (sizetype, integer_one_node));
3825
3826   /* Multiply by the array element unit size to find number of bytes.  */
3827   i = size_binop (MULT_EXPR, i, TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (val))));
3828
3829   return tree_low_cst (i, 1);
3830 }
3831
3832 /* Subroutine of output_constant, used for CONSTRUCTORs (aggregate constants).
3833    Generate at least SIZE bytes, padding if necessary.  */
3834
3835 static void
3836 output_constructor (tree exp, unsigned HOST_WIDE_INT size,
3837                     unsigned int align)
3838 {
3839   tree type = TREE_TYPE (exp);
3840   tree link, field = 0;
3841   tree min_index = 0;
3842   /* Number of bytes output or skipped so far.
3843      In other words, current position within the constructor.  */
3844   HOST_WIDE_INT total_bytes = 0;
3845   /* Nonzero means BYTE contains part of a byte, to be output.  */
3846   int byte_buffer_in_use = 0;
3847   int byte = 0;
3848
3849   if (HOST_BITS_PER_WIDE_INT < BITS_PER_UNIT)
3850     abort ();
3851
3852   if (TREE_CODE (type) == RECORD_TYPE)
3853     field = TYPE_FIELDS (type);
3854
3855   if (TREE_CODE (type) == ARRAY_TYPE
3856       && TYPE_DOMAIN (type) != 0)
3857     min_index = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
3858
3859   /* As LINK goes through the elements of the constant,
3860      FIELD goes through the structure fields, if the constant is a structure.
3861      if the constant is a union, then we override this,
3862      by getting the field from the TREE_LIST element.
3863      But the constant could also be an array.  Then FIELD is zero.
3864
3865      There is always a maximum of one element in the chain LINK for unions
3866      (even if the initializer in a source program incorrectly contains
3867      more one).  */
3868   for (link = CONSTRUCTOR_ELTS (exp);
3869        link;
3870        link = TREE_CHAIN (link),
3871        field = field ? TREE_CHAIN (field) : 0)
3872     {
3873       tree val = TREE_VALUE (link);
3874       tree index = 0;
3875
3876       /* The element in a union constructor specifies the proper field
3877          or index.  */
3878       if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
3879            || TREE_CODE (type) == QUAL_UNION_TYPE)
3880           && TREE_PURPOSE (link) != 0)
3881         field = TREE_PURPOSE (link);
3882
3883       else if (TREE_CODE (type) == ARRAY_TYPE)
3884         index = TREE_PURPOSE (link);
3885
3886 #ifdef ASM_COMMENT_START
3887       if (field && flag_verbose_asm)
3888         fprintf (asm_out_file, "%s %s:\n",
3889                  ASM_COMMENT_START, 
3890                  DECL_NAME (field) 
3891                  ? IDENTIFIER_POINTER (DECL_NAME (field))
3892                  : "<anonymous>");
3893 #endif
3894
3895       /* Eliminate the marker that makes a cast not be an lvalue.  */
3896       if (val != 0)
3897         STRIP_NOPS (val);
3898
3899       if (index && TREE_CODE (index) == RANGE_EXPR)
3900         {
3901           unsigned HOST_WIDE_INT fieldsize
3902             = int_size_in_bytes (TREE_TYPE (type));
3903           HOST_WIDE_INT lo_index = tree_low_cst (TREE_OPERAND (index, 0), 0);
3904           HOST_WIDE_INT hi_index = tree_low_cst (TREE_OPERAND (index, 1), 0);
3905           HOST_WIDE_INT index;
3906           unsigned int align2 = min_align (align, fieldsize * BITS_PER_UNIT);
3907
3908           for (index = lo_index; index <= hi_index; index++)
3909             {
3910               /* Output the element's initial value.  */
3911               if (val == 0)
3912                 assemble_zeros (fieldsize);
3913               else
3914                 output_constant (val, fieldsize, align2);
3915
3916               /* Count its size.  */
3917               total_bytes += fieldsize;
3918             }
3919         }
3920       else if (field == 0 || !DECL_BIT_FIELD (field))
3921         {
3922           /* An element that is not a bit-field.  */
3923
3924           unsigned HOST_WIDE_INT fieldsize;
3925           /* Since this structure is static,
3926              we know the positions are constant.  */
3927           HOST_WIDE_INT pos = field ? int_byte_position (field) : 0;
3928           unsigned int align2;
3929
3930           if (index != 0)
3931             pos = (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (val)), 1)
3932                    * (tree_low_cst (index, 0) - tree_low_cst (min_index, 0)));
3933
3934           /* Output any buffered-up bit-fields preceding this element.  */
3935           if (byte_buffer_in_use)
3936             {
3937               assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
3938               total_bytes++;
3939               byte_buffer_in_use = 0;
3940             }
3941
3942           /* Advance to offset of this element.
3943              Note no alignment needed in an array, since that is guaranteed
3944              if each element has the proper size.  */
3945           if ((field != 0 || index != 0) && pos != total_bytes)
3946             {
3947               assemble_zeros (pos - total_bytes);
3948               total_bytes = pos;
3949             }
3950
3951           /* Find the alignment of this element.  */
3952           align2 = min_align (align, BITS_PER_UNIT * pos);
3953
3954           /* Determine size this element should occupy.  */
3955           if (field)
3956             {
3957               fieldsize = 0;
3958
3959               /* If this is an array with an unspecified upper bound,
3960                  the initializer determines the size.  */
3961               /* ??? This ought to only checked if DECL_SIZE_UNIT is NULL,
3962                  but we cannot do this until the deprecated support for
3963                  initializing zero-length array members is removed.  */
3964               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
3965                   && TYPE_DOMAIN (TREE_TYPE (field))
3966                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
3967                 {
3968                   fieldsize = array_size_for_constructor (val);
3969                   /* Given a non-empty initialization, this field had
3970                      better be last.  */
3971                   if (fieldsize != 0 && TREE_CHAIN (field) != NULL_TREE)
3972                     abort ();
3973                 }
3974               else if (DECL_SIZE_UNIT (field))
3975                 {
3976                   /* ??? This can't be right.  If the decl size overflows
3977                      a host integer we will silently emit no data.  */
3978                   if (host_integerp (DECL_SIZE_UNIT (field), 1))
3979                     fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 1);
3980                 }
3981             }
3982           else
3983             fieldsize = int_size_in_bytes (TREE_TYPE (type));
3984
3985           /* Output the element's initial value.  */
3986           if (val == 0)
3987             assemble_zeros (fieldsize);
3988           else
3989             output_constant (val, fieldsize, align2);
3990
3991           /* Count its size.  */
3992           total_bytes += fieldsize;
3993         }
3994       else if (val != 0 && TREE_CODE (val) != INTEGER_CST)
3995         error ("invalid initial value for member `%s'",
3996                IDENTIFIER_POINTER (DECL_NAME (field)));
3997       else
3998         {
3999           /* Element that is a bit-field.  */
4000
4001           HOST_WIDE_INT next_offset = int_bit_position (field);
4002           HOST_WIDE_INT end_offset
4003             = (next_offset + tree_low_cst (DECL_SIZE (field), 1));
4004
4005           if (val == 0)
4006             val = integer_zero_node;
4007
4008           /* If this field does not start in this (or, next) byte,
4009              skip some bytes.  */
4010           if (next_offset / BITS_PER_UNIT != total_bytes)
4011             {
4012               /* Output remnant of any bit field in previous bytes.  */
4013               if (byte_buffer_in_use)
4014                 {
4015                   assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4016                   total_bytes++;
4017                   byte_buffer_in_use = 0;
4018                 }
4019
4020               /* If still not at proper byte, advance to there.  */
4021               if (next_offset / BITS_PER_UNIT != total_bytes)
4022                 {
4023                   assemble_zeros (next_offset / BITS_PER_UNIT - total_bytes);
4024                   total_bytes = next_offset / BITS_PER_UNIT;
4025                 }
4026             }
4027
4028           if (! byte_buffer_in_use)
4029             byte = 0;
4030
4031           /* We must split the element into pieces that fall within
4032              separate bytes, and combine each byte with previous or
4033              following bit-fields.  */
4034
4035           /* next_offset is the offset n fbits from the beginning of
4036              the structure to the next bit of this element to be processed.
4037              end_offset is the offset of the first bit past the end of
4038              this element.  */
4039           while (next_offset < end_offset)
4040             {
4041               int this_time;
4042               int shift;
4043               HOST_WIDE_INT value;
4044               HOST_WIDE_INT next_byte = next_offset / BITS_PER_UNIT;
4045               HOST_WIDE_INT next_bit = next_offset % BITS_PER_UNIT;
4046
4047               /* Advance from byte to byte
4048                  within this element when necessary.  */
4049               while (next_byte != total_bytes)
4050                 {
4051                   assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4052                   total_bytes++;
4053                   byte = 0;
4054                 }
4055
4056               /* Number of bits we can process at once
4057                  (all part of the same byte).  */
4058               this_time = MIN (end_offset - next_offset,
4059                                BITS_PER_UNIT - next_bit);
4060               if (BYTES_BIG_ENDIAN)
4061                 {
4062                   /* On big-endian machine, take the most significant bits
4063                      first (of the bits that are significant)
4064                      and put them into bytes from the most significant end.  */
4065                   shift = end_offset - next_offset - this_time;
4066
4067                   /* Don't try to take a bunch of bits that cross
4068                      the word boundary in the INTEGER_CST. We can
4069                      only select bits from the LOW or HIGH part
4070                      not from both.  */
4071                   if (shift < HOST_BITS_PER_WIDE_INT
4072                       && shift + this_time > HOST_BITS_PER_WIDE_INT)
4073                     {
4074                       this_time = shift + this_time - HOST_BITS_PER_WIDE_INT;
4075                       shift = HOST_BITS_PER_WIDE_INT;
4076                     }
4077
4078                   /* Now get the bits from the appropriate constant word.  */
4079                   if (shift < HOST_BITS_PER_WIDE_INT)
4080                     value = TREE_INT_CST_LOW (val);
4081                   else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
4082                     {
4083                       value = TREE_INT_CST_HIGH (val);
4084                       shift -= HOST_BITS_PER_WIDE_INT;
4085                     }
4086                   else
4087                     abort ();
4088
4089                   /* Get the result. This works only when:
4090                      1 <= this_time <= HOST_BITS_PER_WIDE_INT.  */
4091                   byte |= (((value >> shift)
4092                             & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4093                            << (BITS_PER_UNIT - this_time - next_bit));
4094                 }
4095               else
4096                 {
4097                   /* On little-endian machines,
4098                      take first the least significant bits of the value
4099                      and pack them starting at the least significant
4100                      bits of the bytes.  */
4101                   shift = next_offset - int_bit_position (field);
4102
4103                   /* Don't try to take a bunch of bits that cross
4104                      the word boundary in the INTEGER_CST. We can
4105                      only select bits from the LOW or HIGH part
4106                      not from both.  */
4107                   if (shift < HOST_BITS_PER_WIDE_INT
4108                       && shift + this_time > HOST_BITS_PER_WIDE_INT)
4109                     this_time = (HOST_BITS_PER_WIDE_INT - shift);
4110
4111                   /* Now get the bits from the appropriate constant word.  */
4112                   if (shift < HOST_BITS_PER_WIDE_INT)
4113                     value = TREE_INT_CST_LOW (val);
4114                   else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
4115                     {
4116                       value = TREE_INT_CST_HIGH (val);
4117                       shift -= HOST_BITS_PER_WIDE_INT;
4118                     }
4119                   else
4120                     abort ();
4121
4122                   /* Get the result. This works only when:
4123                      1 <= this_time <= HOST_BITS_PER_WIDE_INT.  */
4124                   byte |= (((value >> shift)
4125                             & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4126                            << next_bit);
4127                 }
4128
4129               next_offset += this_time;
4130               byte_buffer_in_use = 1;
4131             }
4132         }
4133     }
4134
4135   if (byte_buffer_in_use)
4136     {
4137       assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4138       total_bytes++;
4139     }
4140
4141   if ((unsigned HOST_WIDE_INT)total_bytes < size)
4142     assemble_zeros (size - total_bytes);
4143 }
4144
4145 /* This TREE_LIST contains any weak symbol declarations waiting
4146    to be emitted.  */
4147 static GTY(()) tree weak_decls;
4148
4149 /* Mark DECL as weak.  */
4150
4151 static void
4152 mark_weak (tree decl)
4153 {
4154   DECL_WEAK (decl) = 1;
4155
4156   if (DECL_RTL_SET_P (decl)
4157       && MEM_P (DECL_RTL (decl))
4158       && XEXP (DECL_RTL (decl), 0)
4159       && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF)
4160     SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1;
4161 }
4162
4163 /* Merge weak status between NEWDECL and OLDDECL.  */
4164
4165 void
4166 merge_weak (tree newdecl, tree olddecl)
4167 {
4168   if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
4169     return;
4170
4171   if (DECL_WEAK (newdecl))
4172     {
4173       tree wd;
4174
4175       /* NEWDECL is weak, but OLDDECL is not.  */
4176
4177       /* If we already output the OLDDECL, we're in trouble; we can't
4178          go back and make it weak.  This error cannot caught in
4179          declare_weak because the NEWDECL and OLDDECL was not yet
4180          been merged; therefore, TREE_ASM_WRITTEN was not set.  */
4181       if (TREE_ASM_WRITTEN (olddecl))
4182         error ("%Jweak declaration of '%D' must precede definition",
4183                newdecl, newdecl);
4184
4185       /* If we've already generated rtl referencing OLDDECL, we may
4186          have done so in a way that will not function properly with
4187          a weak symbol.  */
4188       else if (TREE_USED (olddecl)
4189                && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)))
4190         warning ("%Jweak declaration of '%D' after first use results "
4191                  "in unspecified behavior", newdecl, newdecl);
4192
4193       if (SUPPORTS_WEAK)
4194         {
4195           /* We put the NEWDECL on the weak_decls list at some point.
4196              Replace it with the OLDDECL.  */
4197           for (wd = weak_decls; wd; wd = TREE_CHAIN (wd))
4198             if (TREE_VALUE (wd) == newdecl)
4199               {
4200                 TREE_VALUE (wd) = olddecl;
4201                 break;
4202               }
4203           /* We may not find the entry on the list.  If NEWDECL is a
4204              weak alias, then we will have already called
4205              globalize_decl to remove the entry; in that case, we do
4206              not need to do anything.  */
4207         }
4208
4209       /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping.  */
4210       mark_weak (olddecl);
4211     }
4212   else
4213     /* OLDDECL was weak, but NEWDECL was not explicitly marked as
4214        weak.  Just update NEWDECL to indicate that it's weak too.  */
4215     mark_weak (newdecl);
4216 }
4217
4218 /* Declare DECL to be a weak symbol.  */
4219
4220 void
4221 declare_weak (tree decl)
4222 {
4223   if (! TREE_PUBLIC (decl))
4224     error ("%Jweak declaration of '%D' must be public", decl, decl);
4225   else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
4226     error ("%Jweak declaration of '%D' must precede definition", decl, decl);
4227   else if (SUPPORTS_WEAK)
4228     {
4229       if (! DECL_WEAK (decl))
4230         weak_decls = tree_cons (NULL, decl, weak_decls);
4231     }
4232   else
4233     warning ("%Jweak declaration of '%D' not supported", decl, decl);
4234
4235   mark_weak (decl);
4236 }
4237
4238 /* Emit any pending weak declarations.  */
4239
4240 void
4241 weak_finish (void)
4242 {
4243   tree t;
4244
4245   for (t = weak_decls; t; t = TREE_CHAIN (t))
4246     {
4247       tree decl = TREE_VALUE (t);
4248 #if defined (ASM_WEAKEN_DECL) || defined (ASM_WEAKEN_LABEL)
4249       const char *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4250 #endif
4251
4252       if (! TREE_USED (decl))
4253         continue;
4254
4255 #ifdef ASM_WEAKEN_DECL
4256       ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL);
4257 #else
4258 #ifdef ASM_WEAKEN_LABEL
4259       ASM_WEAKEN_LABEL (asm_out_file, name);
4260 #else
4261 #ifdef ASM_OUTPUT_WEAK_ALIAS
4262       warning ("only weak aliases are supported in this configuration");
4263       return;
4264 #endif
4265 #endif
4266 #endif
4267     }
4268 }
4269
4270 /* Emit the assembly bits to indicate that DECL is globally visible.  */
4271
4272 static void
4273 globalize_decl (tree decl)
4274 {
4275   const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
4276
4277 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
4278   if (DECL_WEAK (decl))
4279     {
4280       tree *p, t;
4281
4282 #ifdef ASM_WEAKEN_DECL
4283       ASM_WEAKEN_DECL (asm_out_file, decl, name, 0);
4284 #else
4285       ASM_WEAKEN_LABEL (asm_out_file, name);
4286 #endif
4287
4288       /* Remove this function from the pending weak list so that
4289          we do not emit multiple .weak directives for it.  */
4290       for (p = &weak_decls; (t = *p) ; )
4291         {
4292           if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
4293             *p = TREE_CHAIN (t);
4294           else
4295             p = &TREE_CHAIN (t);
4296         }
4297       return;
4298     }
4299 #elif defined(ASM_MAKE_LABEL_LINKONCE)
4300   if (DECL_ONE_ONLY (decl))
4301     ASM_MAKE_LABEL_LINKONCE (asm_out_file, name);
4302 #endif
4303
4304   targetm.asm_out.globalize_label (asm_out_file, name);
4305 }
4306
4307 /* Emit an assembler directive to make the symbol for DECL an alias to
4308    the symbol for TARGET.  */
4309
4310 void
4311 assemble_alias (tree decl, tree target ATTRIBUTE_UNUSED)
4312 {
4313   const char *name;
4314
4315   /* We must force creation of DECL_RTL for debug info generation, even though
4316      we don't use it here.  */
4317   make_decl_rtl (decl);
4318
4319   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4320
4321 #ifdef ASM_OUTPUT_DEF
4322   /* Make name accessible from other files, if appropriate.  */
4323
4324   if (TREE_PUBLIC (decl))
4325     {
4326       globalize_decl (decl);
4327       maybe_assemble_visibility (decl);
4328     }
4329
4330 #ifdef ASM_OUTPUT_DEF_FROM_DECLS
4331   ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
4332 #else
4333   ASM_OUTPUT_DEF (asm_out_file, name, IDENTIFIER_POINTER (target));
4334 #endif
4335 #else /* !ASM_OUTPUT_DEF */
4336 #if defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
4337   if (DECL_WEAK (decl))
4338     {
4339       tree *p, t;
4340 #ifdef ASM_WEAKEN_DECL
4341       ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target));
4342 #else
4343       ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target));
4344 #endif
4345       /* Remove this function from the pending weak list so that
4346          we do not emit multiple .weak directives for it.  */
4347       for (p = &weak_decls; (t = *p) ; )
4348         if (DECL_ASSEMBLER_NAME (decl)
4349             == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
4350           *p = TREE_CHAIN (t);
4351         else
4352           p = &TREE_CHAIN (t);
4353     }
4354   else
4355     warning ("only weak aliases are supported in this configuration");
4356
4357 #else
4358   warning ("alias definitions not supported in this configuration; ignored");
4359 #endif
4360 #endif
4361
4362   TREE_USED (decl) = 1;
4363   TREE_ASM_WRITTEN (decl) = 1;
4364   TREE_ASM_WRITTEN (DECL_ASSEMBLER_NAME (decl)) = 1;
4365 }
4366
4367 /* Emit an assembler directive to set symbol for DECL visibility to
4368    the visibility type VIS, which must not be VISIBILITY_DEFAULT.  */
4369
4370 void
4371 default_assemble_visibility (tree decl, int vis)
4372 {
4373   static const char * const visibility_types[] = {
4374     NULL, "internal", "hidden", "protected"
4375   };
4376
4377   const char *name, *type;
4378
4379   name = (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
4380   type = visibility_types[vis];
4381
4382 #ifdef HAVE_GAS_HIDDEN
4383   fprintf (asm_out_file, "\t.%s\t", type);
4384   assemble_name (asm_out_file, name);
4385   fprintf (asm_out_file, "\n");
4386 #else
4387   warning ("visibility attribute not supported in this configuration; ignored");
4388 #endif
4389 }
4390
4391 /* A helper function to call assemble_visibility when needed for a decl.  */
4392
4393 static void
4394 maybe_assemble_visibility (tree decl)
4395 {
4396   enum symbol_visibility vis = DECL_VISIBILITY (decl);
4397
4398   if (vis != VISIBILITY_DEFAULT)
4399     targetm.asm_out.visibility (decl, vis);
4400 }
4401
4402 /* Returns 1 if the target configuration supports defining public symbols
4403    so that one of them will be chosen at link time instead of generating a
4404    multiply-defined symbol error, whether through the use of weak symbols or
4405    a target-specific mechanism for having duplicates discarded.  */
4406
4407 int
4408 supports_one_only (void)
4409 {
4410   if (SUPPORTS_ONE_ONLY)
4411     return 1;
4412   return SUPPORTS_WEAK;
4413 }
4414
4415 /* Set up DECL as a public symbol that can be defined in multiple
4416    translation units without generating a linker error.  */
4417
4418 void
4419 make_decl_one_only (tree decl)
4420 {
4421   if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4422     abort ();
4423
4424   TREE_PUBLIC (decl) = 1;
4425
4426   if (SUPPORTS_ONE_ONLY)
4427     {
4428 #ifdef MAKE_DECL_ONE_ONLY
4429       MAKE_DECL_ONE_ONLY (decl);
4430 #endif
4431       DECL_ONE_ONLY (decl) = 1;
4432     }
4433   else if (TREE_CODE (decl) == VAR_DECL
4434       && (DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node))
4435     DECL_COMMON (decl) = 1;
4436   else if (SUPPORTS_WEAK)
4437     DECL_WEAK (decl) = 1;
4438   else
4439     abort ();
4440 }
4441
4442 void
4443 init_varasm_once (void)
4444 {
4445   in_named_htab = htab_create_ggc (31, in_named_entry_hash,
4446                                    in_named_entry_eq, NULL);
4447   const_desc_htab = htab_create_ggc (1009, const_desc_hash,
4448                                      const_desc_eq, NULL);
4449
4450   const_alias_set = new_alias_set ();
4451 }
4452
4453 enum tls_model
4454 decl_tls_model (tree decl)
4455 {
4456   enum tls_model kind;
4457   tree attr = lookup_attribute ("tls_model", DECL_ATTRIBUTES (decl));
4458   bool is_local;
4459
4460   if (attr)
4461     {
4462       attr = TREE_VALUE (TREE_VALUE (attr));
4463       if (TREE_CODE (attr) != STRING_CST)
4464         abort ();
4465       if (!strcmp (TREE_STRING_POINTER (attr), "local-exec"))
4466         kind = TLS_MODEL_LOCAL_EXEC;
4467       else if (!strcmp (TREE_STRING_POINTER (attr), "initial-exec"))
4468         kind = TLS_MODEL_INITIAL_EXEC;
4469       else if (!strcmp (TREE_STRING_POINTER (attr), "local-dynamic"))
4470         kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
4471       else if (!strcmp (TREE_STRING_POINTER (attr), "global-dynamic"))
4472         kind = TLS_MODEL_GLOBAL_DYNAMIC;
4473       else
4474         abort ();
4475       return kind;
4476     }
4477
4478   is_local = targetm.binds_local_p (decl);
4479   if (!flag_pic)
4480     {
4481       if (is_local)
4482         kind = TLS_MODEL_LOCAL_EXEC;
4483       else
4484         kind = TLS_MODEL_INITIAL_EXEC;
4485     }
4486   /* Local dynamic is inefficient when we're not combining the
4487      parts of the address.  */
4488   else if (optimize && is_local)
4489     kind = TLS_MODEL_LOCAL_DYNAMIC;
4490   else
4491     kind = TLS_MODEL_GLOBAL_DYNAMIC;
4492   if (kind < flag_tls_default)
4493     kind = flag_tls_default;
4494
4495   return kind;
4496 }
4497
4498 /* Select a set of attributes for section NAME based on the properties
4499    of DECL and whether or not RELOC indicates that DECL's initializer
4500    might contain runtime relocations.
4501
4502    We make the section read-only and executable for a function decl,
4503    read-only for a const data decl, and writable for a non-const data decl.  */
4504
4505 unsigned int
4506 default_section_type_flags (tree decl, const char *name, int reloc)
4507 {
4508   return default_section_type_flags_1 (decl, name, reloc, flag_pic);
4509 }
4510
4511 unsigned int
4512 default_section_type_flags_1 (tree decl, const char *name, int reloc,
4513                               int shlib)
4514 {
4515   unsigned int flags;
4516
4517   if (decl && TREE_CODE (decl) == FUNCTION_DECL)
4518     flags = SECTION_CODE;
4519   else if (decl && decl_readonly_section_1 (decl, reloc, shlib))
4520     flags = 0;
4521   else if (unlikely_text_section_name
4522            && strcmp (name, unlikely_text_section_name) == 0)
4523     flags = SECTION_CODE;
4524   else
4525     flags = SECTION_WRITE;
4526
4527   if (decl && DECL_ONE_ONLY (decl))
4528     flags |= SECTION_LINKONCE;
4529
4530   if (decl && TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
4531     flags |= SECTION_TLS | SECTION_WRITE;
4532
4533   if (strcmp (name, ".bss") == 0
4534       || strncmp (name, ".bss.", 5) == 0
4535       || strncmp (name, ".gnu.linkonce.b.", 16) == 0
4536       || strcmp (name, ".sbss") == 0
4537       || strncmp (name, ".sbss.", 6) == 0
4538       || strncmp (name, ".gnu.linkonce.sb.", 17) == 0
4539       || strcmp (name, ".tbss") == 0
4540       || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
4541     flags |= SECTION_BSS;
4542
4543   if (strcmp (name, ".tdata") == 0
4544       || strcmp (name, ".tbss") == 0
4545       || strncmp (name, ".gnu.linkonce.td.", 17) == 0
4546       || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
4547     flags |= SECTION_TLS;
4548
4549   /* These three sections have special ELF types.  They are neither
4550      SHT_PROGBITS nor SHT_NOBITS, so when changing sections we don't
4551      want to print a section type (@progbits or @nobits).  If someone
4552      is silly enough to emit code or TLS variables to one of these
4553      sections, then don't handle them specially.  */
4554   if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS))
4555       && (strcmp (name, ".init_array") == 0
4556           || strcmp (name, ".fini_array") == 0
4557           || strcmp (name, ".preinit_array") == 0))
4558     flags |= SECTION_NOTYPE;
4559
4560   return flags;
4561 }
4562
4563 /* Output assembly to switch to section NAME with attribute FLAGS.
4564    Four variants for common object file formats.  */
4565
4566 void
4567 default_no_named_section (const char *name ATTRIBUTE_UNUSED,
4568                           unsigned int flags ATTRIBUTE_UNUSED)
4569 {
4570   /* Some object formats don't support named sections at all.  The
4571      front-end should already have flagged this as an error.  */
4572   abort ();
4573 }
4574
4575 void
4576 default_elf_asm_named_section (const char *name, unsigned int flags)
4577 {
4578   char flagchars[10], *f = flagchars;
4579
4580   if (! named_section_first_declaration (name))
4581     {
4582       fprintf (asm_out_file, "\t.section\t%s\n", name);
4583       return;
4584     }
4585
4586   if (!(flags & SECTION_DEBUG))
4587     *f++ = 'a';
4588   if (flags & SECTION_WRITE)
4589     *f++ = 'w';
4590   if (flags & SECTION_CODE)
4591     *f++ = 'x';
4592   if (flags & SECTION_SMALL)
4593     *f++ = 's';
4594   if (flags & SECTION_MERGE)
4595     *f++ = 'M';
4596   if (flags & SECTION_STRINGS)
4597     *f++ = 'S';
4598   if (flags & SECTION_TLS)
4599     *f++ = 'T';
4600   *f = '\0';
4601
4602   fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
4603
4604   if (!(flags & SECTION_NOTYPE))
4605     {
4606       const char *type;
4607
4608       if (flags & SECTION_BSS)
4609         type = "nobits";
4610       else
4611         type = "progbits";
4612
4613       fprintf (asm_out_file, ",@%s", type);
4614
4615       if (flags & SECTION_ENTSIZE)
4616         fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
4617     }
4618
4619   putc ('\n', asm_out_file);
4620 }
4621
4622 void
4623 default_coff_asm_named_section (const char *name, unsigned int flags)
4624 {
4625   char flagchars[8], *f = flagchars;
4626
4627   if (flags & SECTION_WRITE)
4628     *f++ = 'w';
4629   if (flags & SECTION_CODE)
4630     *f++ = 'x';
4631   *f = '\0';
4632
4633   fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
4634 }
4635
4636 void
4637 default_pe_asm_named_section (const char *name, unsigned int flags)
4638 {
4639   default_coff_asm_named_section (name, flags);
4640
4641   if (flags & SECTION_LINKONCE)
4642     {
4643       /* Functions may have been compiled at various levels of
4644          optimization so we can't use `same_size' here.
4645          Instead, have the linker pick one.  */
4646       fprintf (asm_out_file, "\t.linkonce %s\n",
4647                (flags & SECTION_CODE ? "discard" : "same_size"));
4648     }
4649 }
4650 \f
4651 /* The lame default section selector.  */
4652
4653 void
4654 default_select_section (tree decl, int reloc,
4655                         unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
4656 {
4657   bool readonly = false;
4658
4659   if (DECL_P (decl))
4660     {
4661       if (decl_readonly_section (decl, reloc))
4662         readonly = true;
4663     }
4664   else if (TREE_CODE (decl) == CONSTRUCTOR)
4665     {
4666       if (! ((flag_pic && reloc)
4667              || !TREE_READONLY (decl)
4668              || TREE_SIDE_EFFECTS (decl)
4669              || !TREE_CONSTANT (decl)))
4670         readonly = true;
4671     }
4672   else if (TREE_CODE (decl) == STRING_CST)
4673     readonly = true;
4674   else if (! (flag_pic && reloc))
4675     readonly = true;
4676
4677   if (readonly)
4678     readonly_data_section ();
4679   else
4680     data_section ();
4681 }
4682
4683 /* A helper function for default_elf_select_section and
4684    default_elf_unique_section.  Categorizes the DECL.  */
4685
4686 enum section_category
4687 {
4688   SECCAT_TEXT,
4689
4690   SECCAT_RODATA,
4691   SECCAT_RODATA_MERGE_STR,
4692   SECCAT_RODATA_MERGE_STR_INIT,
4693   SECCAT_RODATA_MERGE_CONST,
4694   SECCAT_SRODATA,
4695
4696   SECCAT_DATA,
4697
4698   /* To optimize loading of shared programs, define following subsections
4699      of data section:
4700         _REL    Contains data that has relocations, so they get grouped
4701                 together and dynamic linker will visit fewer pages in memory.
4702         _RO     Contains data that is otherwise read-only.  This is useful
4703                 with prelinking as most relocations won't be dynamically
4704                 linked and thus stay read only.
4705         _LOCAL  Marks data containing relocations only to local objects.
4706                 These relocations will get fully resolved by prelinking.  */
4707   SECCAT_DATA_REL,
4708   SECCAT_DATA_REL_LOCAL,
4709   SECCAT_DATA_REL_RO,
4710   SECCAT_DATA_REL_RO_LOCAL,
4711
4712   SECCAT_SDATA,
4713   SECCAT_TDATA,
4714
4715   SECCAT_BSS,
4716   SECCAT_SBSS,
4717   SECCAT_TBSS
4718 };
4719
4720 static enum section_category
4721 categorize_decl_for_section (tree, int, int);
4722
4723 static enum section_category
4724 categorize_decl_for_section (tree decl, int reloc, int shlib)
4725 {
4726   enum section_category ret;
4727
4728   if (TREE_CODE (decl) == FUNCTION_DECL)
4729     return SECCAT_TEXT;
4730   else if (TREE_CODE (decl) == STRING_CST)
4731     {
4732       if (flag_mudflap) /* or !flag_merge_constants */
4733         return SECCAT_RODATA;
4734       else
4735         return SECCAT_RODATA_MERGE_STR;
4736     }
4737   else if (TREE_CODE (decl) == VAR_DECL)
4738     {
4739       if (DECL_INITIAL (decl) == NULL
4740           || DECL_INITIAL (decl) == error_mark_node
4741           || (flag_zero_initialized_in_bss
4742               /* Leave constant zeroes in .rodata so they can be shared.  */
4743               && !TREE_READONLY (decl)
4744               && initializer_zerop (DECL_INITIAL (decl))))
4745         ret = SECCAT_BSS;
4746       else if (! TREE_READONLY (decl)
4747                || TREE_SIDE_EFFECTS (decl)
4748                || ! TREE_CONSTANT (DECL_INITIAL (decl)))
4749         {
4750           if (shlib && (reloc & 2))
4751             ret = SECCAT_DATA_REL;
4752           else if (shlib && reloc)
4753             ret = SECCAT_DATA_REL_LOCAL;
4754           else
4755             ret = SECCAT_DATA;
4756         }
4757       else if (shlib && (reloc & 2))
4758         ret = SECCAT_DATA_REL_RO;
4759       else if (shlib && reloc)
4760         ret = SECCAT_DATA_REL_RO_LOCAL;
4761       else if (reloc || flag_merge_constants < 2)
4762         /* C and C++ don't allow different variables to share the same
4763            location.  -fmerge-all-constants allows even that (at the
4764            expense of not conforming).  */
4765         ret = SECCAT_RODATA;
4766       else if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
4767         ret = SECCAT_RODATA_MERGE_STR_INIT;
4768       else
4769         ret = SECCAT_RODATA_MERGE_CONST;
4770     }
4771   else if (TREE_CODE (decl) == CONSTRUCTOR)
4772     {
4773       if ((shlib && reloc)
4774           || TREE_SIDE_EFFECTS (decl)
4775           || ! TREE_CONSTANT (decl))
4776         ret = SECCAT_DATA;
4777       else
4778         ret = SECCAT_RODATA;
4779     }
4780   else
4781     ret = SECCAT_RODATA;
4782
4783   /* There are no read-only thread-local sections.  */
4784   if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
4785     {
4786       /* Note that this would be *just* SECCAT_BSS, except that there's
4787          no concept of a read-only thread-local-data section.  */
4788       if (ret == SECCAT_BSS
4789           || (flag_zero_initialized_in_bss
4790               && initializer_zerop (DECL_INITIAL (decl))))
4791         ret = SECCAT_TBSS;
4792       else
4793         ret = SECCAT_TDATA;
4794     }
4795
4796   /* If the target uses small data sections, select it.  */
4797   else if (targetm.in_small_data_p (decl))
4798     {
4799       if (ret == SECCAT_BSS)
4800         ret = SECCAT_SBSS;
4801       else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
4802         ret = SECCAT_SRODATA;
4803       else
4804         ret = SECCAT_SDATA;
4805     }
4806
4807   return ret;
4808 }
4809
4810 bool
4811 decl_readonly_section (tree decl, int reloc)
4812 {
4813   return decl_readonly_section_1 (decl, reloc, flag_pic);
4814 }
4815
4816 bool
4817 decl_readonly_section_1 (tree decl, int reloc, int shlib)
4818 {
4819   switch (categorize_decl_for_section (decl, reloc, shlib))
4820     {
4821     case SECCAT_RODATA:
4822     case SECCAT_RODATA_MERGE_STR:
4823     case SECCAT_RODATA_MERGE_STR_INIT:
4824     case SECCAT_RODATA_MERGE_CONST:
4825     case SECCAT_SRODATA:
4826       return true;
4827       break;
4828     default:
4829       return false;
4830       break;
4831     }
4832 }
4833
4834 /* Select a section based on the above categorization.  */
4835
4836 void
4837 default_elf_select_section (tree decl, int reloc,
4838                             unsigned HOST_WIDE_INT align)
4839 {
4840   default_elf_select_section_1 (decl, reloc, align, flag_pic);
4841 }
4842
4843 void
4844 default_elf_select_section_1 (tree decl, int reloc,
4845                               unsigned HOST_WIDE_INT align, int shlib)
4846 {
4847   switch (categorize_decl_for_section (decl, reloc, shlib))
4848     {
4849     case SECCAT_TEXT:
4850       /* We're not supposed to be called on FUNCTION_DECLs.  */
4851       abort ();
4852     case SECCAT_RODATA:
4853       readonly_data_section ();
4854       break;
4855     case SECCAT_RODATA_MERGE_STR:
4856       mergeable_string_section (decl, align, 0);
4857       break;
4858     case SECCAT_RODATA_MERGE_STR_INIT:
4859       mergeable_string_section (DECL_INITIAL (decl), align, 0);
4860       break;
4861     case SECCAT_RODATA_MERGE_CONST:
4862       mergeable_constant_section (DECL_MODE (decl), align, 0);
4863       break;
4864     case SECCAT_SRODATA:
4865       named_section (NULL_TREE, ".sdata2", reloc);
4866       break;
4867     case SECCAT_DATA:
4868       data_section ();
4869       break;
4870     case SECCAT_DATA_REL:
4871       named_section (NULL_TREE, ".data.rel", reloc);
4872       break;
4873     case SECCAT_DATA_REL_LOCAL:
4874       named_section (NULL_TREE, ".data.rel.local", reloc);
4875       break;
4876     case SECCAT_DATA_REL_RO:
4877       named_section (NULL_TREE, ".data.rel.ro", reloc);
4878       break;
4879     case SECCAT_DATA_REL_RO_LOCAL:
4880       named_section (NULL_TREE, ".data.rel.ro.local", reloc);
4881       break;
4882     case SECCAT_SDATA:
4883       named_section (NULL_TREE, ".sdata", reloc);
4884       break;
4885     case SECCAT_TDATA:
4886       named_section (NULL_TREE, ".tdata", reloc);
4887       break;
4888     case SECCAT_BSS:
4889 #ifdef BSS_SECTION_ASM_OP
4890       bss_section ();
4891 #else
4892       named_section (NULL_TREE, ".bss", reloc);
4893 #endif
4894       break;
4895     case SECCAT_SBSS:
4896       named_section (NULL_TREE, ".sbss", reloc);
4897       break;
4898     case SECCAT_TBSS:
4899       named_section (NULL_TREE, ".tbss", reloc);
4900       break;
4901     default:
4902       abort ();
4903     }
4904 }
4905
4906 /* Construct a unique section name based on the decl name and the
4907    categorization performed above.  */
4908
4909 void
4910 default_unique_section (tree decl, int reloc)
4911 {
4912   default_unique_section_1 (decl, reloc, flag_pic);
4913 }
4914
4915 void
4916 default_unique_section_1 (tree decl, int reloc, int shlib)
4917 {
4918   bool one_only = DECL_ONE_ONLY (decl);
4919   const char *prefix, *name;
4920   size_t nlen, plen;
4921   char *string;
4922
4923   switch (categorize_decl_for_section (decl, reloc, shlib))
4924     {
4925     case SECCAT_TEXT:
4926       prefix = one_only ? ".gnu.linkonce.t." : ".text.";
4927       break;
4928     case SECCAT_RODATA:
4929     case SECCAT_RODATA_MERGE_STR:
4930     case SECCAT_RODATA_MERGE_STR_INIT:
4931     case SECCAT_RODATA_MERGE_CONST:
4932       prefix = one_only ? ".gnu.linkonce.r." : ".rodata.";
4933       break;
4934     case SECCAT_SRODATA:
4935       prefix = one_only ? ".gnu.linkonce.s2." : ".sdata2.";
4936       break;
4937     case SECCAT_DATA:
4938     case SECCAT_DATA_REL:
4939     case SECCAT_DATA_REL_LOCAL:
4940     case SECCAT_DATA_REL_RO:
4941     case SECCAT_DATA_REL_RO_LOCAL:
4942       prefix = one_only ? ".gnu.linkonce.d." : ".data.";
4943       break;
4944     case SECCAT_SDATA:
4945       prefix = one_only ? ".gnu.linkonce.s." : ".sdata.";
4946       break;
4947     case SECCAT_BSS:
4948       prefix = one_only ? ".gnu.linkonce.b." : ".bss.";
4949       break;
4950     case SECCAT_SBSS:
4951       prefix = one_only ? ".gnu.linkonce.sb." : ".sbss.";
4952       break;
4953     case SECCAT_TDATA:
4954       prefix = one_only ? ".gnu.linkonce.td." : ".tdata.";
4955       break;
4956     case SECCAT_TBSS:
4957       prefix = one_only ? ".gnu.linkonce.tb." : ".tbss.";
4958       break;
4959     default:
4960       abort ();
4961     }
4962   plen = strlen (prefix);
4963
4964   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4965   name = targetm.strip_name_encoding (name);
4966   nlen = strlen (name);
4967
4968   string = alloca (nlen + plen + 1);
4969   memcpy (string, prefix, plen);
4970   memcpy (string + plen, name, nlen + 1);
4971
4972   DECL_SECTION_NAME (decl) = build_string (nlen + plen, string);
4973 }
4974
4975 void
4976 default_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED,
4977                             rtx x,
4978                             unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
4979 {
4980   if (flag_pic)
4981     switch (GET_CODE (x))
4982       {
4983       case CONST:
4984       case SYMBOL_REF:
4985       case LABEL_REF:
4986         data_section ();
4987         return;
4988
4989       default:
4990         break;
4991       }
4992
4993   readonly_data_section ();
4994 }
4995
4996 void
4997 default_elf_select_rtx_section (enum machine_mode mode, rtx x,
4998                                 unsigned HOST_WIDE_INT align)
4999 {
5000   /* ??? Handle small data here somehow.  */
5001
5002   if (flag_pic)
5003     switch (GET_CODE (x))
5004       {
5005       case CONST:
5006       case SYMBOL_REF:
5007         named_section (NULL_TREE, ".data.rel.ro", 3);
5008         return;
5009
5010       case LABEL_REF:
5011         named_section (NULL_TREE, ".data.rel.ro.local", 1);
5012         return;
5013
5014       default:
5015         break;
5016       }
5017
5018   mergeable_constant_section (mode, align, 0);
5019 }
5020
5021 /* Set the generally applicable flags on the SYMBOL_REF for EXP.  */
5022
5023 void
5024 default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
5025 {
5026   rtx symbol;
5027   int flags;
5028
5029   /* Careful not to prod global register variables.  */
5030   if (!MEM_P (rtl))
5031     return;
5032   symbol = XEXP (rtl, 0);
5033   if (GET_CODE (symbol) != SYMBOL_REF)
5034     return;
5035
5036   flags = 0;
5037   if (TREE_CODE (decl) == FUNCTION_DECL)
5038     flags |= SYMBOL_FLAG_FUNCTION;
5039   if (targetm.binds_local_p (decl))
5040     flags |= SYMBOL_FLAG_LOCAL;
5041   if (targetm.in_small_data_p (decl))
5042     flags |= SYMBOL_FLAG_SMALL;
5043   if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
5044     flags |= decl_tls_model (decl) << SYMBOL_FLAG_TLS_SHIFT;
5045   /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names?  Without
5046      being PUBLIC, the thing *must* be defined in this translation unit.
5047      Prevent this buglet from being propagated into rtl code as well.  */
5048   if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
5049     flags |= SYMBOL_FLAG_EXTERNAL;
5050
5051   SYMBOL_REF_FLAGS (symbol) = flags;
5052 }
5053
5054 /* By default, we do nothing for encode_section_info, so we need not
5055    do anything but discard the '*' marker.  */
5056
5057 const char *
5058 default_strip_name_encoding (const char *str)
5059 {
5060   return str + (*str == '*');
5061 }
5062
5063 /* Assume ELF-ish defaults, since that's pretty much the most liberal
5064    wrt cross-module name binding.  */
5065
5066 bool
5067 default_binds_local_p (tree exp)
5068 {
5069   return default_binds_local_p_1 (exp, flag_shlib);
5070 }
5071
5072 bool
5073 default_binds_local_p_1 (tree exp, int shlib)
5074 {
5075   bool local_p;
5076
5077   /* A non-decl is an entry in the constant pool.  */
5078   if (!DECL_P (exp))
5079     local_p = true;
5080   /* Static variables are always local.  */
5081   else if (! TREE_PUBLIC (exp))
5082     local_p = true;
5083   /* A variable is local if the user explicitly tells us so.  */
5084   else if (DECL_VISIBILITY_SPECIFIED (exp) && DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
5085     local_p = true;
5086   /* Otherwise, variables defined outside this object may not be local.  */
5087   else if (DECL_EXTERNAL (exp))
5088     local_p = false;
5089   /* Linkonce and weak data are never local.  */
5090   else if (DECL_ONE_ONLY (exp) || DECL_WEAK (exp))
5091     local_p = false;
5092   /* If none of the above and visibility is not default, make local.  */
5093   else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
5094     local_p = true;
5095   /* If PIC, then assume that any global name can be overridden by
5096      symbols resolved from other modules.  */
5097   else if (shlib)
5098     local_p = false;
5099   /* Uninitialized COMMON variable may be unified with symbols
5100      resolved from other modules.  */
5101   else if (DECL_COMMON (exp)
5102            && (DECL_INITIAL (exp) == NULL
5103                || DECL_INITIAL (exp) == error_mark_node))
5104     local_p = false;
5105   /* Otherwise we're left with initialized (or non-common) global data
5106      which is of necessity defined locally.  */
5107   else
5108     local_p = true;
5109
5110   return local_p;
5111 }
5112
5113 /* Determine whether or not a pointer mode is valid. Assume defaults
5114    of ptr_mode or Pmode - can be overridden.  */
5115 bool
5116 default_valid_pointer_mode (enum machine_mode mode)
5117 {
5118   return (mode == ptr_mode || mode == Pmode);
5119 }
5120
5121 /* Default function to output code that will globalize a label.  A
5122    target must define GLOBAL_ASM_OP or provide it's own function to
5123    globalize a label.  */
5124 #ifdef GLOBAL_ASM_OP
5125 void
5126 default_globalize_label (FILE * stream, const char *name)
5127 {
5128   fputs (GLOBAL_ASM_OP, stream);
5129   assemble_name (stream, name);
5130   putc ('\n', stream);
5131 }
5132 #endif /* GLOBAL_ASM_OP */
5133
5134 /* Default function to output a label for unwind information.  The
5135    default is to do nothing.  A target that needs nonlocal labels for
5136    unwind information must provide its own function to do this.  */
5137 void
5138 default_emit_unwind_label (FILE * stream ATTRIBUTE_UNUSED,
5139                            tree decl ATTRIBUTE_UNUSED,
5140                            int for_eh ATTRIBUTE_UNUSED,
5141                            int empty ATTRIBUTE_UNUSED)
5142
5143 }
5144
5145 /* This is how to output an internal numbered label where PREFIX is
5146    the class of label and LABELNO is the number within the class.  */
5147
5148 void
5149 default_internal_label (FILE *stream, const char *prefix,
5150                         unsigned long labelno)
5151 {
5152   char *const buf = alloca (40 + strlen (prefix));
5153   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
5154   ASM_OUTPUT_LABEL (stream, buf);
5155 }
5156
5157 /* This is the default behavior at the beginning of a file.  It's
5158    controlled by two other target-hook toggles.  */
5159 void
5160 default_file_start (void)
5161 {
5162   if (targetm.file_start_app_off && !flag_verbose_asm)
5163     fputs (ASM_APP_OFF, asm_out_file);
5164
5165   if (targetm.file_start_file_directive)
5166     output_file_directive (asm_out_file, main_input_filename);
5167 }
5168
5169 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
5170    which emits a special section directive used to indicate whether or
5171    not this object file needs an executable stack.  This is primarily
5172    a GNU extension to ELF but could be used on other targets.  */
5173
5174 int trampolines_created;
5175
5176 void
5177 file_end_indicate_exec_stack (void)
5178 {
5179   unsigned int flags = SECTION_DEBUG;
5180   if (trampolines_created)
5181     flags |= SECTION_CODE;
5182
5183   named_section_flags (".note.GNU-stack", flags);
5184 }
5185
5186 #include "gt-varasm.h"