OSDN Git Service

* c-typeck.c (build_unary_op): Don't expand ADDR_EXPR of a
[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       value = staticp (TREE_OPERAND (value, 0));
3467       /* "&(*a).f" is like unto pointer arithmetic.  If "a" turns out to
3468          be a constant, this is old-skool offsetof-like nonsense.  */
3469       if (value
3470           && TREE_CODE (value) == INDIRECT_REF
3471           && TREE_CONSTANT (TREE_OPERAND (value, 0)))
3472         return null_pointer_node;
3473       return value;
3474
3475     case VIEW_CONVERT_EXPR:
3476     case NON_LVALUE_EXPR:
3477       return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3478
3479     case CONVERT_EXPR:
3480     case NOP_EXPR:
3481       /* Allow conversions between pointer types.  */
3482       if (POINTER_TYPE_P (TREE_TYPE (value))
3483           && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3484         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3485
3486       /* Allow conversions between real types.  */
3487       if (FLOAT_TYPE_P (TREE_TYPE (value))
3488           && FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3489         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3490
3491       /* Allow length-preserving conversions between integer types.  */
3492       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3493           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
3494           && (TYPE_PRECISION (TREE_TYPE (value))
3495               == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
3496         return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
3497
3498       /* Allow conversions between other integer types only if
3499          explicit value.  */
3500       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3501           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3502         {
3503           tree inner = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3504                                                      endtype);
3505           if (inner == null_pointer_node)
3506             return null_pointer_node;
3507           break;
3508         }
3509
3510       /* Allow (int) &foo provided int is as wide as a pointer.  */
3511       if (INTEGRAL_TYPE_P (TREE_TYPE (value))
3512           && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
3513           && (TYPE_PRECISION (TREE_TYPE (value))
3514               >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
3515         return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3516                                              endtype);
3517
3518       /* Likewise conversions from int to pointers, but also allow
3519          conversions from 0.  */
3520       if ((POINTER_TYPE_P (TREE_TYPE (value))
3521            || TREE_CODE (TREE_TYPE (value)) == OFFSET_TYPE)
3522           && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0))))
3523         {
3524           if (integer_zerop (TREE_OPERAND (value, 0)))
3525             return null_pointer_node;
3526           else if (TYPE_PRECISION (TREE_TYPE (value))
3527                    <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0))))
3528             return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3529                                                  endtype);
3530         }
3531
3532       /* Allow conversions to struct or union types if the value
3533          inside is okay.  */
3534       if (TREE_CODE (TREE_TYPE (value)) == RECORD_TYPE
3535           || TREE_CODE (TREE_TYPE (value)) == UNION_TYPE)
3536         return initializer_constant_valid_p (TREE_OPERAND (value, 0),
3537                                              endtype);
3538       break;
3539
3540     case PLUS_EXPR:
3541       if (! INTEGRAL_TYPE_P (endtype)
3542           || TYPE_PRECISION (endtype) >= POINTER_SIZE)
3543         {
3544           tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3545                                                       endtype);
3546           tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
3547                                                       endtype);
3548           /* If either term is absolute, use the other terms relocation.  */
3549           if (valid0 == null_pointer_node)
3550             return valid1;
3551           if (valid1 == null_pointer_node)
3552             return valid0;
3553         }
3554       break;
3555
3556     case MINUS_EXPR:
3557       if (! INTEGRAL_TYPE_P (endtype)
3558           || TYPE_PRECISION (endtype) >= POINTER_SIZE)
3559         {
3560           tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
3561                                                       endtype);
3562           tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
3563                                                       endtype);
3564           /* Win if second argument is absolute.  */
3565           if (valid1 == null_pointer_node)
3566             return valid0;
3567           /* Win if both arguments have the same relocation.
3568              Then the value is absolute.  */
3569           if (valid0 == valid1 && valid0 != 0)
3570             return null_pointer_node;
3571
3572           /* Since GCC guarantees that string constants are unique in the
3573              generated code, a subtraction between two copies of the same
3574              constant string is absolute.  */
3575           if (valid0 && TREE_CODE (valid0) == STRING_CST
3576               && valid1 && TREE_CODE (valid1) == STRING_CST
3577               && operand_equal_p (valid0, valid1, 1))
3578             return null_pointer_node;
3579         }
3580
3581       /* Support narrowing differences.  */
3582       if (INTEGRAL_TYPE_P (endtype))
3583         {
3584           tree op0, op1;
3585
3586           op0 = TREE_OPERAND (value, 0);
3587           op1 = TREE_OPERAND (value, 1);
3588
3589           /* Like STRIP_NOPS except allow the operand mode to widen.
3590              This works around a feature of fold that simplifies
3591              (int)(p1 - p2) to ((int)p1 - (int)p2) under the theory
3592              that the narrower operation is cheaper.  */
3593
3594           while (TREE_CODE (op0) == NOP_EXPR
3595                  || TREE_CODE (op0) == CONVERT_EXPR
3596                  || TREE_CODE (op0) == NON_LVALUE_EXPR)
3597             {
3598               tree inner = TREE_OPERAND (op0, 0);
3599               if (inner == error_mark_node
3600                   || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
3601                   || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0)))
3602                       > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
3603                 break;
3604               op0 = inner;
3605             }
3606
3607           while (TREE_CODE (op1) == NOP_EXPR
3608                  || TREE_CODE (op1) == CONVERT_EXPR
3609                  || TREE_CODE (op1) == NON_LVALUE_EXPR)
3610             {
3611               tree inner = TREE_OPERAND (op1, 0);
3612               if (inner == error_mark_node
3613                   || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
3614                   || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1)))
3615                       > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
3616                 break;
3617               op1 = inner;
3618             }
3619
3620           op0 = initializer_constant_valid_p (op0, endtype);
3621           op1 = initializer_constant_valid_p (op1, endtype);
3622
3623           /* Both initializers must be known.  */
3624           if (op0 && op1)
3625             {
3626               if (op0 == op1)
3627                 return null_pointer_node;
3628
3629               /* Support differences between labels.  */
3630               if (TREE_CODE (op0) == LABEL_DECL
3631                   && TREE_CODE (op1) == LABEL_DECL)
3632                 return null_pointer_node;
3633
3634               if (TREE_CODE (op0) == STRING_CST
3635                   && TREE_CODE (op1) == STRING_CST
3636                   && operand_equal_p (op0, op1, 1))
3637                 return null_pointer_node;
3638             }
3639         }
3640       break;
3641
3642     default:
3643       break;
3644     }
3645
3646   return 0;
3647 }
3648 \f
3649 /* Output assembler code for constant EXP to FILE, with no label.
3650    This includes the pseudo-op such as ".int" or ".byte", and a newline.
3651    Assumes output_addressed_constants has been done on EXP already.
3652
3653    Generate exactly SIZE bytes of assembler data, padding at the end
3654    with zeros if necessary.  SIZE must always be specified.
3655
3656    SIZE is important for structure constructors,
3657    since trailing members may have been omitted from the constructor.
3658    It is also important for initialization of arrays from string constants
3659    since the full length of the string constant might not be wanted.
3660    It is also needed for initialization of unions, where the initializer's
3661    type is just one member, and that may not be as long as the union.
3662
3663    There a case in which we would fail to output exactly SIZE bytes:
3664    for a structure constructor that wants to produce more than SIZE bytes.
3665    But such constructors will never be generated for any possible input.
3666
3667    ALIGN is the alignment of the data in bits.  */
3668
3669 void
3670 output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align)
3671 {
3672   enum tree_code code;
3673   unsigned HOST_WIDE_INT thissize;
3674
3675   /* Some front-ends use constants other than the standard language-independent
3676      varieties, but which may still be output directly.  Give the front-end a
3677      chance to convert EXP to a language-independent representation.  */
3678   exp = lang_hooks.expand_constant (exp);
3679
3680   if (size == 0 || flag_syntax_only)
3681     return;
3682
3683   /* Eliminate any conversions since we'll be outputting the underlying
3684      constant.  */
3685   while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
3686          || TREE_CODE (exp) == NON_LVALUE_EXPR
3687          || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
3688     exp = TREE_OPERAND (exp, 0);
3689
3690   code = TREE_CODE (TREE_TYPE (exp));
3691   thissize = int_size_in_bytes (TREE_TYPE (exp));
3692
3693   /* Allow a constructor with no elements for any data type.
3694      This means to fill the space with zeros.  */
3695   if (TREE_CODE (exp) == CONSTRUCTOR && CONSTRUCTOR_ELTS (exp) == 0)
3696     {
3697       assemble_zeros (size);
3698       return;
3699     }
3700
3701   if (TREE_CODE (exp) == FDESC_EXPR)
3702     {
3703 #ifdef ASM_OUTPUT_FDESC
3704       HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0);
3705       tree decl = TREE_OPERAND (exp, 0);
3706       ASM_OUTPUT_FDESC (asm_out_file, decl, part);
3707 #else
3708       abort ();
3709 #endif
3710       return;
3711     }
3712
3713   /* Now output the underlying data.  If we've handling the padding, return.
3714      Otherwise, break and ensure SIZE is the size written.  */
3715   switch (code)
3716     {
3717     case CHAR_TYPE:
3718     case BOOLEAN_TYPE:
3719     case INTEGER_TYPE:
3720     case ENUMERAL_TYPE:
3721     case POINTER_TYPE:
3722     case REFERENCE_TYPE:
3723     case OFFSET_TYPE:
3724       if (! assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode,
3725                                            EXPAND_INITIALIZER),
3726                               MIN (size, thissize), align, 0))
3727         error ("initializer for integer value is too complicated");
3728       break;
3729
3730     case REAL_TYPE:
3731       if (TREE_CODE (exp) != REAL_CST)
3732         error ("initializer for floating value is not a floating constant");
3733
3734       assemble_real (TREE_REAL_CST (exp), TYPE_MODE (TREE_TYPE (exp)), align);
3735       break;
3736
3737     case COMPLEX_TYPE:
3738       output_constant (TREE_REALPART (exp), thissize / 2, align);
3739       output_constant (TREE_IMAGPART (exp), thissize / 2,
3740                        min_align (align, BITS_PER_UNIT * (thissize / 2)));
3741       break;
3742
3743     case ARRAY_TYPE:
3744     case VECTOR_TYPE:
3745       if (TREE_CODE (exp) == CONSTRUCTOR)
3746         {
3747           output_constructor (exp, size, align);
3748           return;
3749         }
3750       else if (TREE_CODE (exp) == STRING_CST)
3751         {
3752           thissize = MIN ((unsigned HOST_WIDE_INT)TREE_STRING_LENGTH (exp),
3753                           size);
3754           assemble_string (TREE_STRING_POINTER (exp), thissize);
3755         }
3756       else if (TREE_CODE (exp) == VECTOR_CST)
3757         {
3758           int elt_size;
3759           tree link;
3760           unsigned int nalign;
3761           enum machine_mode inner;
3762
3763           inner = TYPE_MODE (TREE_TYPE (TREE_TYPE (exp)));
3764           nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
3765
3766           elt_size = GET_MODE_SIZE (inner);
3767
3768           link = TREE_VECTOR_CST_ELTS (exp);
3769           output_constant (TREE_VALUE (link), elt_size, align);
3770           while ((link = TREE_CHAIN (link)) != NULL)
3771             output_constant (TREE_VALUE (link), elt_size, nalign);
3772         }
3773       else
3774         abort ();
3775       break;
3776
3777     case RECORD_TYPE:
3778     case UNION_TYPE:
3779       if (TREE_CODE (exp) == CONSTRUCTOR)
3780         output_constructor (exp, size, align);
3781       else
3782         abort ();
3783       return;
3784
3785     case SET_TYPE:
3786       if (TREE_CODE (exp) == INTEGER_CST)
3787         assemble_integer (expand_expr (exp, NULL_RTX,
3788                                        VOIDmode, EXPAND_INITIALIZER),
3789                           thissize, align, 1);
3790       else if (TREE_CODE (exp) == CONSTRUCTOR)
3791         {
3792           unsigned char *buffer = alloca (thissize);
3793           if (get_set_constructor_bytes (exp, buffer, thissize))
3794             abort ();
3795           assemble_string ((char *) buffer, thissize);
3796         }
3797       else
3798         error ("unknown set constructor type");
3799       return;
3800
3801     case ERROR_MARK:
3802       return;
3803
3804     default:
3805       abort ();
3806     }
3807
3808   if (size > thissize)
3809     assemble_zeros (size - thissize);
3810 }
3811
3812 \f
3813 /* Subroutine of output_constructor, used for computing the size of
3814    arrays of unspecified length.  VAL must be a CONSTRUCTOR of an array
3815    type with an unspecified upper bound.  */
3816
3817 static unsigned HOST_WIDE_INT
3818 array_size_for_constructor (tree val)
3819 {
3820   tree max_index, i;
3821
3822   /* This code used to attempt to handle string constants that are not
3823      arrays of single-bytes, but nothing else does, so there's no point in
3824      doing it here.  */
3825   if (TREE_CODE (val) == STRING_CST)
3826     return TREE_STRING_LENGTH (val);
3827
3828   max_index = NULL_TREE;
3829   for (i = CONSTRUCTOR_ELTS (val); i; i = TREE_CHAIN (i))
3830     {
3831       tree index = TREE_PURPOSE (i);
3832
3833       if (TREE_CODE (index) == RANGE_EXPR)
3834         index = TREE_OPERAND (index, 1);
3835       if (max_index == NULL_TREE || tree_int_cst_lt (max_index, index))
3836         max_index = index;
3837     }
3838
3839   if (max_index == NULL_TREE)
3840     return 0;
3841
3842   /* Compute the total number of array elements.  */
3843   i = size_binop (MINUS_EXPR, convert (sizetype, max_index),
3844                   convert (sizetype,
3845                            TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)))));
3846   i = size_binop (PLUS_EXPR, i, convert (sizetype, integer_one_node));
3847
3848   /* Multiply by the array element unit size to find number of bytes.  */
3849   i = size_binop (MULT_EXPR, i, TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (val))));
3850
3851   return tree_low_cst (i, 1);
3852 }
3853
3854 /* Subroutine of output_constant, used for CONSTRUCTORs (aggregate constants).
3855    Generate at least SIZE bytes, padding if necessary.  */
3856
3857 static void
3858 output_constructor (tree exp, unsigned HOST_WIDE_INT size,
3859                     unsigned int align)
3860 {
3861   tree type = TREE_TYPE (exp);
3862   tree link, field = 0;
3863   tree min_index = 0;
3864   /* Number of bytes output or skipped so far.
3865      In other words, current position within the constructor.  */
3866   HOST_WIDE_INT total_bytes = 0;
3867   /* Nonzero means BYTE contains part of a byte, to be output.  */
3868   int byte_buffer_in_use = 0;
3869   int byte = 0;
3870
3871   if (HOST_BITS_PER_WIDE_INT < BITS_PER_UNIT)
3872     abort ();
3873
3874   if (TREE_CODE (type) == RECORD_TYPE)
3875     field = TYPE_FIELDS (type);
3876
3877   if (TREE_CODE (type) == ARRAY_TYPE
3878       && TYPE_DOMAIN (type) != 0)
3879     min_index = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
3880
3881   /* As LINK goes through the elements of the constant,
3882      FIELD goes through the structure fields, if the constant is a structure.
3883      if the constant is a union, then we override this,
3884      by getting the field from the TREE_LIST element.
3885      But the constant could also be an array.  Then FIELD is zero.
3886
3887      There is always a maximum of one element in the chain LINK for unions
3888      (even if the initializer in a source program incorrectly contains
3889      more one).  */
3890   for (link = CONSTRUCTOR_ELTS (exp);
3891        link;
3892        link = TREE_CHAIN (link),
3893        field = field ? TREE_CHAIN (field) : 0)
3894     {
3895       tree val = TREE_VALUE (link);
3896       tree index = 0;
3897
3898       /* The element in a union constructor specifies the proper field
3899          or index.  */
3900       if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
3901            || TREE_CODE (type) == QUAL_UNION_TYPE)
3902           && TREE_PURPOSE (link) != 0)
3903         field = TREE_PURPOSE (link);
3904
3905       else if (TREE_CODE (type) == ARRAY_TYPE)
3906         index = TREE_PURPOSE (link);
3907
3908 #ifdef ASM_COMMENT_START
3909       if (field && flag_verbose_asm)
3910         fprintf (asm_out_file, "%s %s:\n",
3911                  ASM_COMMENT_START, 
3912                  DECL_NAME (field) 
3913                  ? IDENTIFIER_POINTER (DECL_NAME (field))
3914                  : "<anonymous>");
3915 #endif
3916
3917       /* Eliminate the marker that makes a cast not be an lvalue.  */
3918       if (val != 0)
3919         STRIP_NOPS (val);
3920
3921       if (index && TREE_CODE (index) == RANGE_EXPR)
3922         {
3923           unsigned HOST_WIDE_INT fieldsize
3924             = int_size_in_bytes (TREE_TYPE (type));
3925           HOST_WIDE_INT lo_index = tree_low_cst (TREE_OPERAND (index, 0), 0);
3926           HOST_WIDE_INT hi_index = tree_low_cst (TREE_OPERAND (index, 1), 0);
3927           HOST_WIDE_INT index;
3928           unsigned int align2 = min_align (align, fieldsize * BITS_PER_UNIT);
3929
3930           for (index = lo_index; index <= hi_index; index++)
3931             {
3932               /* Output the element's initial value.  */
3933               if (val == 0)
3934                 assemble_zeros (fieldsize);
3935               else
3936                 output_constant (val, fieldsize, align2);
3937
3938               /* Count its size.  */
3939               total_bytes += fieldsize;
3940             }
3941         }
3942       else if (field == 0 || !DECL_BIT_FIELD (field))
3943         {
3944           /* An element that is not a bit-field.  */
3945
3946           unsigned HOST_WIDE_INT fieldsize;
3947           /* Since this structure is static,
3948              we know the positions are constant.  */
3949           HOST_WIDE_INT pos = field ? int_byte_position (field) : 0;
3950           unsigned int align2;
3951
3952           if (index != 0)
3953             pos = (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (val)), 1)
3954                    * (tree_low_cst (index, 0) - tree_low_cst (min_index, 0)));
3955
3956           /* Output any buffered-up bit-fields preceding this element.  */
3957           if (byte_buffer_in_use)
3958             {
3959               assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
3960               total_bytes++;
3961               byte_buffer_in_use = 0;
3962             }
3963
3964           /* Advance to offset of this element.
3965              Note no alignment needed in an array, since that is guaranteed
3966              if each element has the proper size.  */
3967           if ((field != 0 || index != 0) && pos != total_bytes)
3968             {
3969               assemble_zeros (pos - total_bytes);
3970               total_bytes = pos;
3971             }
3972
3973           /* Find the alignment of this element.  */
3974           align2 = min_align (align, BITS_PER_UNIT * pos);
3975
3976           /* Determine size this element should occupy.  */
3977           if (field)
3978             {
3979               fieldsize = 0;
3980
3981               /* If this is an array with an unspecified upper bound,
3982                  the initializer determines the size.  */
3983               /* ??? This ought to only checked if DECL_SIZE_UNIT is NULL,
3984                  but we cannot do this until the deprecated support for
3985                  initializing zero-length array members is removed.  */
3986               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
3987                   && TYPE_DOMAIN (TREE_TYPE (field))
3988                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
3989                 {
3990                   fieldsize = array_size_for_constructor (val);
3991                   /* Given a non-empty initialization, this field had
3992                      better be last.  */
3993                   if (fieldsize != 0 && TREE_CHAIN (field) != NULL_TREE)
3994                     abort ();
3995                 }
3996               else if (DECL_SIZE_UNIT (field))
3997                 {
3998                   /* ??? This can't be right.  If the decl size overflows
3999                      a host integer we will silently emit no data.  */
4000                   if (host_integerp (DECL_SIZE_UNIT (field), 1))
4001                     fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 1);
4002                 }
4003             }
4004           else
4005             fieldsize = int_size_in_bytes (TREE_TYPE (type));
4006
4007           /* Output the element's initial value.  */
4008           if (val == 0)
4009             assemble_zeros (fieldsize);
4010           else
4011             output_constant (val, fieldsize, align2);
4012
4013           /* Count its size.  */
4014           total_bytes += fieldsize;
4015         }
4016       else if (val != 0 && TREE_CODE (val) != INTEGER_CST)
4017         error ("invalid initial value for member `%s'",
4018                IDENTIFIER_POINTER (DECL_NAME (field)));
4019       else
4020         {
4021           /* Element that is a bit-field.  */
4022
4023           HOST_WIDE_INT next_offset = int_bit_position (field);
4024           HOST_WIDE_INT end_offset
4025             = (next_offset + tree_low_cst (DECL_SIZE (field), 1));
4026
4027           if (val == 0)
4028             val = integer_zero_node;
4029
4030           /* If this field does not start in this (or, next) byte,
4031              skip some bytes.  */
4032           if (next_offset / BITS_PER_UNIT != total_bytes)
4033             {
4034               /* Output remnant of any bit field in previous bytes.  */
4035               if (byte_buffer_in_use)
4036                 {
4037                   assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4038                   total_bytes++;
4039                   byte_buffer_in_use = 0;
4040                 }
4041
4042               /* If still not at proper byte, advance to there.  */
4043               if (next_offset / BITS_PER_UNIT != total_bytes)
4044                 {
4045                   assemble_zeros (next_offset / BITS_PER_UNIT - total_bytes);
4046                   total_bytes = next_offset / BITS_PER_UNIT;
4047                 }
4048             }
4049
4050           if (! byte_buffer_in_use)
4051             byte = 0;
4052
4053           /* We must split the element into pieces that fall within
4054              separate bytes, and combine each byte with previous or
4055              following bit-fields.  */
4056
4057           /* next_offset is the offset n fbits from the beginning of
4058              the structure to the next bit of this element to be processed.
4059              end_offset is the offset of the first bit past the end of
4060              this element.  */
4061           while (next_offset < end_offset)
4062             {
4063               int this_time;
4064               int shift;
4065               HOST_WIDE_INT value;
4066               HOST_WIDE_INT next_byte = next_offset / BITS_PER_UNIT;
4067               HOST_WIDE_INT next_bit = next_offset % BITS_PER_UNIT;
4068
4069               /* Advance from byte to byte
4070                  within this element when necessary.  */
4071               while (next_byte != total_bytes)
4072                 {
4073                   assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4074                   total_bytes++;
4075                   byte = 0;
4076                 }
4077
4078               /* Number of bits we can process at once
4079                  (all part of the same byte).  */
4080               this_time = MIN (end_offset - next_offset,
4081                                BITS_PER_UNIT - next_bit);
4082               if (BYTES_BIG_ENDIAN)
4083                 {
4084                   /* On big-endian machine, take the most significant bits
4085                      first (of the bits that are significant)
4086                      and put them into bytes from the most significant end.  */
4087                   shift = end_offset - next_offset - this_time;
4088
4089                   /* Don't try to take a bunch of bits that cross
4090                      the word boundary in the INTEGER_CST. We can
4091                      only select bits from the LOW or HIGH part
4092                      not from both.  */
4093                   if (shift < HOST_BITS_PER_WIDE_INT
4094                       && shift + this_time > HOST_BITS_PER_WIDE_INT)
4095                     {
4096                       this_time = shift + this_time - HOST_BITS_PER_WIDE_INT;
4097                       shift = HOST_BITS_PER_WIDE_INT;
4098                     }
4099
4100                   /* Now get the bits from the appropriate constant word.  */
4101                   if (shift < HOST_BITS_PER_WIDE_INT)
4102                     value = TREE_INT_CST_LOW (val);
4103                   else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
4104                     {
4105                       value = TREE_INT_CST_HIGH (val);
4106                       shift -= HOST_BITS_PER_WIDE_INT;
4107                     }
4108                   else
4109                     abort ();
4110
4111                   /* Get the result. This works only when:
4112                      1 <= this_time <= HOST_BITS_PER_WIDE_INT.  */
4113                   byte |= (((value >> shift)
4114                             & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4115                            << (BITS_PER_UNIT - this_time - next_bit));
4116                 }
4117               else
4118                 {
4119                   /* On little-endian machines,
4120                      take first the least significant bits of the value
4121                      and pack them starting at the least significant
4122                      bits of the bytes.  */
4123                   shift = next_offset - int_bit_position (field);
4124
4125                   /* Don't try to take a bunch of bits that cross
4126                      the word boundary in the INTEGER_CST. We can
4127                      only select bits from the LOW or HIGH part
4128                      not from both.  */
4129                   if (shift < HOST_BITS_PER_WIDE_INT
4130                       && shift + this_time > HOST_BITS_PER_WIDE_INT)
4131                     this_time = (HOST_BITS_PER_WIDE_INT - shift);
4132
4133                   /* Now get the bits from the appropriate constant word.  */
4134                   if (shift < HOST_BITS_PER_WIDE_INT)
4135                     value = TREE_INT_CST_LOW (val);
4136                   else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
4137                     {
4138                       value = TREE_INT_CST_HIGH (val);
4139                       shift -= HOST_BITS_PER_WIDE_INT;
4140                     }
4141                   else
4142                     abort ();
4143
4144                   /* Get the result. This works only when:
4145                      1 <= this_time <= HOST_BITS_PER_WIDE_INT.  */
4146                   byte |= (((value >> shift)
4147                             & (((HOST_WIDE_INT) 2 << (this_time - 1)) - 1))
4148                            << next_bit);
4149                 }
4150
4151               next_offset += this_time;
4152               byte_buffer_in_use = 1;
4153             }
4154         }
4155     }
4156
4157   if (byte_buffer_in_use)
4158     {
4159       assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1);
4160       total_bytes++;
4161     }
4162
4163   if ((unsigned HOST_WIDE_INT)total_bytes < size)
4164     assemble_zeros (size - total_bytes);
4165 }
4166
4167 /* This TREE_LIST contains any weak symbol declarations waiting
4168    to be emitted.  */
4169 static GTY(()) tree weak_decls;
4170
4171 /* Mark DECL as weak.  */
4172
4173 static void
4174 mark_weak (tree decl)
4175 {
4176   DECL_WEAK (decl) = 1;
4177
4178   if (DECL_RTL_SET_P (decl)
4179       && MEM_P (DECL_RTL (decl))
4180       && XEXP (DECL_RTL (decl), 0)
4181       && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF)
4182     SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1;
4183 }
4184
4185 /* Merge weak status between NEWDECL and OLDDECL.  */
4186
4187 void
4188 merge_weak (tree newdecl, tree olddecl)
4189 {
4190   if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
4191     return;
4192
4193   if (DECL_WEAK (newdecl))
4194     {
4195       tree wd;
4196
4197       /* NEWDECL is weak, but OLDDECL is not.  */
4198
4199       /* If we already output the OLDDECL, we're in trouble; we can't
4200          go back and make it weak.  This error cannot caught in
4201          declare_weak because the NEWDECL and OLDDECL was not yet
4202          been merged; therefore, TREE_ASM_WRITTEN was not set.  */
4203       if (TREE_ASM_WRITTEN (olddecl))
4204         error ("%Jweak declaration of '%D' must precede definition",
4205                newdecl, newdecl);
4206
4207       /* If we've already generated rtl referencing OLDDECL, we may
4208          have done so in a way that will not function properly with
4209          a weak symbol.  */
4210       else if (TREE_USED (olddecl)
4211                && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)))
4212         warning ("%Jweak declaration of '%D' after first use results "
4213                  "in unspecified behavior", newdecl, newdecl);
4214
4215       if (SUPPORTS_WEAK)
4216         {
4217           /* We put the NEWDECL on the weak_decls list at some point.
4218              Replace it with the OLDDECL.  */
4219           for (wd = weak_decls; wd; wd = TREE_CHAIN (wd))
4220             if (TREE_VALUE (wd) == newdecl)
4221               {
4222                 TREE_VALUE (wd) = olddecl;
4223                 break;
4224               }
4225           /* We may not find the entry on the list.  If NEWDECL is a
4226              weak alias, then we will have already called
4227              globalize_decl to remove the entry; in that case, we do
4228              not need to do anything.  */
4229         }
4230
4231       /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping.  */
4232       mark_weak (olddecl);
4233     }
4234   else
4235     /* OLDDECL was weak, but NEWDECL was not explicitly marked as
4236        weak.  Just update NEWDECL to indicate that it's weak too.  */
4237     mark_weak (newdecl);
4238 }
4239
4240 /* Declare DECL to be a weak symbol.  */
4241
4242 void
4243 declare_weak (tree decl)
4244 {
4245   if (! TREE_PUBLIC (decl))
4246     error ("%Jweak declaration of '%D' must be public", decl, decl);
4247   else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
4248     error ("%Jweak declaration of '%D' must precede definition", decl, decl);
4249   else if (SUPPORTS_WEAK)
4250     {
4251       if (! DECL_WEAK (decl))
4252         weak_decls = tree_cons (NULL, decl, weak_decls);
4253     }
4254   else
4255     warning ("%Jweak declaration of '%D' not supported", decl, decl);
4256
4257   mark_weak (decl);
4258 }
4259
4260 /* Emit any pending weak declarations.  */
4261
4262 void
4263 weak_finish (void)
4264 {
4265   tree t;
4266
4267   for (t = weak_decls; t; t = TREE_CHAIN (t))
4268     {
4269       tree decl = TREE_VALUE (t);
4270 #if defined (ASM_WEAKEN_DECL) || defined (ASM_WEAKEN_LABEL)
4271       const char *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4272 #endif
4273
4274       if (! TREE_USED (decl))
4275         continue;
4276
4277 #ifdef ASM_WEAKEN_DECL
4278       ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL);
4279 #else
4280 #ifdef ASM_WEAKEN_LABEL
4281       ASM_WEAKEN_LABEL (asm_out_file, name);
4282 #else
4283 #ifdef ASM_OUTPUT_WEAK_ALIAS
4284       warning ("only weak aliases are supported in this configuration");
4285       return;
4286 #endif
4287 #endif
4288 #endif
4289     }
4290 }
4291
4292 /* Emit the assembly bits to indicate that DECL is globally visible.  */
4293
4294 static void
4295 globalize_decl (tree decl)
4296 {
4297   const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
4298
4299 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
4300   if (DECL_WEAK (decl))
4301     {
4302       tree *p, t;
4303
4304 #ifdef ASM_WEAKEN_DECL
4305       ASM_WEAKEN_DECL (asm_out_file, decl, name, 0);
4306 #else
4307       ASM_WEAKEN_LABEL (asm_out_file, name);
4308 #endif
4309
4310       /* Remove this function from the pending weak list so that
4311          we do not emit multiple .weak directives for it.  */
4312       for (p = &weak_decls; (t = *p) ; )
4313         {
4314           if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
4315             *p = TREE_CHAIN (t);
4316           else
4317             p = &TREE_CHAIN (t);
4318         }
4319       return;
4320     }
4321 #elif defined(ASM_MAKE_LABEL_LINKONCE)
4322   if (DECL_ONE_ONLY (decl))
4323     ASM_MAKE_LABEL_LINKONCE (asm_out_file, name);
4324 #endif
4325
4326   targetm.asm_out.globalize_label (asm_out_file, name);
4327 }
4328
4329 /* Emit an assembler directive to make the symbol for DECL an alias to
4330    the symbol for TARGET.  */
4331
4332 void
4333 assemble_alias (tree decl, tree target ATTRIBUTE_UNUSED)
4334 {
4335   const char *name;
4336
4337   /* We must force creation of DECL_RTL for debug info generation, even though
4338      we don't use it here.  */
4339   make_decl_rtl (decl);
4340
4341   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4342
4343 #ifdef ASM_OUTPUT_DEF
4344   /* Make name accessible from other files, if appropriate.  */
4345
4346   if (TREE_PUBLIC (decl))
4347     {
4348       globalize_decl (decl);
4349       maybe_assemble_visibility (decl);
4350     }
4351
4352 #ifdef ASM_OUTPUT_DEF_FROM_DECLS
4353   ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
4354 #else
4355   ASM_OUTPUT_DEF (asm_out_file, name, IDENTIFIER_POINTER (target));
4356 #endif
4357 #else /* !ASM_OUTPUT_DEF */
4358 #if defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL)
4359   if (DECL_WEAK (decl))
4360     {
4361       tree *p, t;
4362 #ifdef ASM_WEAKEN_DECL
4363       ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target));
4364 #else
4365       ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target));
4366 #endif
4367       /* Remove this function from the pending weak list so that
4368          we do not emit multiple .weak directives for it.  */
4369       for (p = &weak_decls; (t = *p) ; )
4370         if (DECL_ASSEMBLER_NAME (decl)
4371             == DECL_ASSEMBLER_NAME (TREE_VALUE (t)))
4372           *p = TREE_CHAIN (t);
4373         else
4374           p = &TREE_CHAIN (t);
4375     }
4376   else
4377     warning ("only weak aliases are supported in this configuration");
4378
4379 #else
4380   warning ("alias definitions not supported in this configuration; ignored");
4381 #endif
4382 #endif
4383
4384   TREE_USED (decl) = 1;
4385   TREE_ASM_WRITTEN (decl) = 1;
4386   TREE_ASM_WRITTEN (DECL_ASSEMBLER_NAME (decl)) = 1;
4387 }
4388
4389 /* Emit an assembler directive to set symbol for DECL visibility to
4390    the visibility type VIS, which must not be VISIBILITY_DEFAULT.  */
4391
4392 void
4393 default_assemble_visibility (tree decl, int vis)
4394 {
4395   static const char * const visibility_types[] = {
4396     NULL, "internal", "hidden", "protected"
4397   };
4398
4399   const char *name, *type;
4400
4401   name = (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
4402   type = visibility_types[vis];
4403
4404 #ifdef HAVE_GAS_HIDDEN
4405   fprintf (asm_out_file, "\t.%s\t", type);
4406   assemble_name (asm_out_file, name);
4407   fprintf (asm_out_file, "\n");
4408 #else
4409   warning ("visibility attribute not supported in this configuration; ignored");
4410 #endif
4411 }
4412
4413 /* A helper function to call assemble_visibility when needed for a decl.  */
4414
4415 static void
4416 maybe_assemble_visibility (tree decl)
4417 {
4418   enum symbol_visibility vis = DECL_VISIBILITY (decl);
4419
4420   if (vis != VISIBILITY_DEFAULT)
4421     targetm.asm_out.visibility (decl, vis);
4422 }
4423
4424 /* Returns 1 if the target configuration supports defining public symbols
4425    so that one of them will be chosen at link time instead of generating a
4426    multiply-defined symbol error, whether through the use of weak symbols or
4427    a target-specific mechanism for having duplicates discarded.  */
4428
4429 int
4430 supports_one_only (void)
4431 {
4432   if (SUPPORTS_ONE_ONLY)
4433     return 1;
4434   return SUPPORTS_WEAK;
4435 }
4436
4437 /* Set up DECL as a public symbol that can be defined in multiple
4438    translation units without generating a linker error.  */
4439
4440 void
4441 make_decl_one_only (tree decl)
4442 {
4443   if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4444     abort ();
4445
4446   TREE_PUBLIC (decl) = 1;
4447
4448   if (SUPPORTS_ONE_ONLY)
4449     {
4450 #ifdef MAKE_DECL_ONE_ONLY
4451       MAKE_DECL_ONE_ONLY (decl);
4452 #endif
4453       DECL_ONE_ONLY (decl) = 1;
4454     }
4455   else if (TREE_CODE (decl) == VAR_DECL
4456       && (DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node))
4457     DECL_COMMON (decl) = 1;
4458   else if (SUPPORTS_WEAK)
4459     DECL_WEAK (decl) = 1;
4460   else
4461     abort ();
4462 }
4463
4464 void
4465 init_varasm_once (void)
4466 {
4467   in_named_htab = htab_create_ggc (31, in_named_entry_hash,
4468                                    in_named_entry_eq, NULL);
4469   const_desc_htab = htab_create_ggc (1009, const_desc_hash,
4470                                      const_desc_eq, NULL);
4471
4472   const_alias_set = new_alias_set ();
4473 }
4474
4475 enum tls_model
4476 decl_tls_model (tree decl)
4477 {
4478   enum tls_model kind;
4479   tree attr = lookup_attribute ("tls_model", DECL_ATTRIBUTES (decl));
4480   bool is_local;
4481
4482   if (attr)
4483     {
4484       attr = TREE_VALUE (TREE_VALUE (attr));
4485       if (TREE_CODE (attr) != STRING_CST)
4486         abort ();
4487       if (!strcmp (TREE_STRING_POINTER (attr), "local-exec"))
4488         kind = TLS_MODEL_LOCAL_EXEC;
4489       else if (!strcmp (TREE_STRING_POINTER (attr), "initial-exec"))
4490         kind = TLS_MODEL_INITIAL_EXEC;
4491       else if (!strcmp (TREE_STRING_POINTER (attr), "local-dynamic"))
4492         kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
4493       else if (!strcmp (TREE_STRING_POINTER (attr), "global-dynamic"))
4494         kind = TLS_MODEL_GLOBAL_DYNAMIC;
4495       else
4496         abort ();
4497       return kind;
4498     }
4499
4500   is_local = targetm.binds_local_p (decl);
4501   if (!flag_pic)
4502     {
4503       if (is_local)
4504         kind = TLS_MODEL_LOCAL_EXEC;
4505       else
4506         kind = TLS_MODEL_INITIAL_EXEC;
4507     }
4508   /* Local dynamic is inefficient when we're not combining the
4509      parts of the address.  */
4510   else if (optimize && is_local)
4511     kind = TLS_MODEL_LOCAL_DYNAMIC;
4512   else
4513     kind = TLS_MODEL_GLOBAL_DYNAMIC;
4514   if (kind < flag_tls_default)
4515     kind = flag_tls_default;
4516
4517   return kind;
4518 }
4519
4520 /* Select a set of attributes for section NAME based on the properties
4521    of DECL and whether or not RELOC indicates that DECL's initializer
4522    might contain runtime relocations.
4523
4524    We make the section read-only and executable for a function decl,
4525    read-only for a const data decl, and writable for a non-const data decl.  */
4526
4527 unsigned int
4528 default_section_type_flags (tree decl, const char *name, int reloc)
4529 {
4530   return default_section_type_flags_1 (decl, name, reloc, flag_pic);
4531 }
4532
4533 unsigned int
4534 default_section_type_flags_1 (tree decl, const char *name, int reloc,
4535                               int shlib)
4536 {
4537   unsigned int flags;
4538
4539   if (decl && TREE_CODE (decl) == FUNCTION_DECL)
4540     flags = SECTION_CODE;
4541   else if (decl && decl_readonly_section_1 (decl, reloc, shlib))
4542     flags = 0;
4543   else if (unlikely_text_section_name
4544            && strcmp (name, unlikely_text_section_name) == 0)
4545     flags = SECTION_CODE;
4546   else
4547     flags = SECTION_WRITE;
4548
4549   if (decl && DECL_ONE_ONLY (decl))
4550     flags |= SECTION_LINKONCE;
4551
4552   if (decl && TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
4553     flags |= SECTION_TLS | SECTION_WRITE;
4554
4555   if (strcmp (name, ".bss") == 0
4556       || strncmp (name, ".bss.", 5) == 0
4557       || strncmp (name, ".gnu.linkonce.b.", 16) == 0
4558       || strcmp (name, ".sbss") == 0
4559       || strncmp (name, ".sbss.", 6) == 0
4560       || strncmp (name, ".gnu.linkonce.sb.", 17) == 0
4561       || strcmp (name, ".tbss") == 0
4562       || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
4563     flags |= SECTION_BSS;
4564
4565   if (strcmp (name, ".tdata") == 0
4566       || strcmp (name, ".tbss") == 0
4567       || strncmp (name, ".gnu.linkonce.td.", 17) == 0
4568       || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
4569     flags |= SECTION_TLS;
4570
4571   /* These three sections have special ELF types.  They are neither
4572      SHT_PROGBITS nor SHT_NOBITS, so when changing sections we don't
4573      want to print a section type (@progbits or @nobits).  If someone
4574      is silly enough to emit code or TLS variables to one of these
4575      sections, then don't handle them specially.  */
4576   if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS))
4577       && (strcmp (name, ".init_array") == 0
4578           || strcmp (name, ".fini_array") == 0
4579           || strcmp (name, ".preinit_array") == 0))
4580     flags |= SECTION_NOTYPE;
4581
4582   return flags;
4583 }
4584
4585 /* Output assembly to switch to section NAME with attribute FLAGS.
4586    Four variants for common object file formats.  */
4587
4588 void
4589 default_no_named_section (const char *name ATTRIBUTE_UNUSED,
4590                           unsigned int flags ATTRIBUTE_UNUSED)
4591 {
4592   /* Some object formats don't support named sections at all.  The
4593      front-end should already have flagged this as an error.  */
4594   abort ();
4595 }
4596
4597 void
4598 default_elf_asm_named_section (const char *name, unsigned int flags)
4599 {
4600   char flagchars[10], *f = flagchars;
4601
4602   if (! named_section_first_declaration (name))
4603     {
4604       fprintf (asm_out_file, "\t.section\t%s\n", name);
4605       return;
4606     }
4607
4608   if (!(flags & SECTION_DEBUG))
4609     *f++ = 'a';
4610   if (flags & SECTION_WRITE)
4611     *f++ = 'w';
4612   if (flags & SECTION_CODE)
4613     *f++ = 'x';
4614   if (flags & SECTION_SMALL)
4615     *f++ = 's';
4616   if (flags & SECTION_MERGE)
4617     *f++ = 'M';
4618   if (flags & SECTION_STRINGS)
4619     *f++ = 'S';
4620   if (flags & SECTION_TLS)
4621     *f++ = 'T';
4622   *f = '\0';
4623
4624   fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
4625
4626   if (!(flags & SECTION_NOTYPE))
4627     {
4628       const char *type;
4629
4630       if (flags & SECTION_BSS)
4631         type = "nobits";
4632       else
4633         type = "progbits";
4634
4635       fprintf (asm_out_file, ",@%s", type);
4636
4637       if (flags & SECTION_ENTSIZE)
4638         fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
4639     }
4640
4641   putc ('\n', asm_out_file);
4642 }
4643
4644 void
4645 default_coff_asm_named_section (const char *name, unsigned int flags)
4646 {
4647   char flagchars[8], *f = flagchars;
4648
4649   if (flags & SECTION_WRITE)
4650     *f++ = 'w';
4651   if (flags & SECTION_CODE)
4652     *f++ = 'x';
4653   *f = '\0';
4654
4655   fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
4656 }
4657
4658 void
4659 default_pe_asm_named_section (const char *name, unsigned int flags)
4660 {
4661   default_coff_asm_named_section (name, flags);
4662
4663   if (flags & SECTION_LINKONCE)
4664     {
4665       /* Functions may have been compiled at various levels of
4666          optimization so we can't use `same_size' here.
4667          Instead, have the linker pick one.  */
4668       fprintf (asm_out_file, "\t.linkonce %s\n",
4669                (flags & SECTION_CODE ? "discard" : "same_size"));
4670     }
4671 }
4672 \f
4673 /* The lame default section selector.  */
4674
4675 void
4676 default_select_section (tree decl, int reloc,
4677                         unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
4678 {
4679   bool readonly = false;
4680
4681   if (DECL_P (decl))
4682     {
4683       if (decl_readonly_section (decl, reloc))
4684         readonly = true;
4685     }
4686   else if (TREE_CODE (decl) == CONSTRUCTOR)
4687     {
4688       if (! ((flag_pic && reloc)
4689              || !TREE_READONLY (decl)
4690              || TREE_SIDE_EFFECTS (decl)
4691              || !TREE_CONSTANT (decl)))
4692         readonly = true;
4693     }
4694   else if (TREE_CODE (decl) == STRING_CST)
4695     readonly = true;
4696   else if (! (flag_pic && reloc))
4697     readonly = true;
4698
4699   if (readonly)
4700     readonly_data_section ();
4701   else
4702     data_section ();
4703 }
4704
4705 /* A helper function for default_elf_select_section and
4706    default_elf_unique_section.  Categorizes the DECL.  */
4707
4708 enum section_category
4709 {
4710   SECCAT_TEXT,
4711
4712   SECCAT_RODATA,
4713   SECCAT_RODATA_MERGE_STR,
4714   SECCAT_RODATA_MERGE_STR_INIT,
4715   SECCAT_RODATA_MERGE_CONST,
4716   SECCAT_SRODATA,
4717
4718   SECCAT_DATA,
4719
4720   /* To optimize loading of shared programs, define following subsections
4721      of data section:
4722         _REL    Contains data that has relocations, so they get grouped
4723                 together and dynamic linker will visit fewer pages in memory.
4724         _RO     Contains data that is otherwise read-only.  This is useful
4725                 with prelinking as most relocations won't be dynamically
4726                 linked and thus stay read only.
4727         _LOCAL  Marks data containing relocations only to local objects.
4728                 These relocations will get fully resolved by prelinking.  */
4729   SECCAT_DATA_REL,
4730   SECCAT_DATA_REL_LOCAL,
4731   SECCAT_DATA_REL_RO,
4732   SECCAT_DATA_REL_RO_LOCAL,
4733
4734   SECCAT_SDATA,
4735   SECCAT_TDATA,
4736
4737   SECCAT_BSS,
4738   SECCAT_SBSS,
4739   SECCAT_TBSS
4740 };
4741
4742 static enum section_category
4743 categorize_decl_for_section (tree, int, int);
4744
4745 static enum section_category
4746 categorize_decl_for_section (tree decl, int reloc, int shlib)
4747 {
4748   enum section_category ret;
4749
4750   if (TREE_CODE (decl) == FUNCTION_DECL)
4751     return SECCAT_TEXT;
4752   else if (TREE_CODE (decl) == STRING_CST)
4753     {
4754       if (flag_mudflap) /* or !flag_merge_constants */
4755         return SECCAT_RODATA;
4756       else
4757         return SECCAT_RODATA_MERGE_STR;
4758     }
4759   else if (TREE_CODE (decl) == VAR_DECL)
4760     {
4761       if (DECL_INITIAL (decl) == NULL
4762           || DECL_INITIAL (decl) == error_mark_node
4763           || (flag_zero_initialized_in_bss
4764               /* Leave constant zeroes in .rodata so they can be shared.  */
4765               && !TREE_READONLY (decl)
4766               && initializer_zerop (DECL_INITIAL (decl))))
4767         ret = SECCAT_BSS;
4768       else if (! TREE_READONLY (decl)
4769                || TREE_SIDE_EFFECTS (decl)
4770                || ! TREE_CONSTANT (DECL_INITIAL (decl)))
4771         {
4772           if (shlib && (reloc & 2))
4773             ret = SECCAT_DATA_REL;
4774           else if (shlib && reloc)
4775             ret = SECCAT_DATA_REL_LOCAL;
4776           else
4777             ret = SECCAT_DATA;
4778         }
4779       else if (shlib && (reloc & 2))
4780         ret = SECCAT_DATA_REL_RO;
4781       else if (shlib && reloc)
4782         ret = SECCAT_DATA_REL_RO_LOCAL;
4783       else if (reloc || flag_merge_constants < 2)
4784         /* C and C++ don't allow different variables to share the same
4785            location.  -fmerge-all-constants allows even that (at the
4786            expense of not conforming).  */
4787         ret = SECCAT_RODATA;
4788       else if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST)
4789         ret = SECCAT_RODATA_MERGE_STR_INIT;
4790       else
4791         ret = SECCAT_RODATA_MERGE_CONST;
4792     }
4793   else if (TREE_CODE (decl) == CONSTRUCTOR)
4794     {
4795       if ((shlib && reloc)
4796           || TREE_SIDE_EFFECTS (decl)
4797           || ! TREE_CONSTANT (decl))
4798         ret = SECCAT_DATA;
4799       else
4800         ret = SECCAT_RODATA;
4801     }
4802   else
4803     ret = SECCAT_RODATA;
4804
4805   /* There are no read-only thread-local sections.  */
4806   if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
4807     {
4808       /* Note that this would be *just* SECCAT_BSS, except that there's
4809          no concept of a read-only thread-local-data section.  */
4810       if (ret == SECCAT_BSS
4811           || (flag_zero_initialized_in_bss
4812               && initializer_zerop (DECL_INITIAL (decl))))
4813         ret = SECCAT_TBSS;
4814       else
4815         ret = SECCAT_TDATA;
4816     }
4817
4818   /* If the target uses small data sections, select it.  */
4819   else if (targetm.in_small_data_p (decl))
4820     {
4821       if (ret == SECCAT_BSS)
4822         ret = SECCAT_SBSS;
4823       else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
4824         ret = SECCAT_SRODATA;
4825       else
4826         ret = SECCAT_SDATA;
4827     }
4828
4829   return ret;
4830 }
4831
4832 bool
4833 decl_readonly_section (tree decl, int reloc)
4834 {
4835   return decl_readonly_section_1 (decl, reloc, flag_pic);
4836 }
4837
4838 bool
4839 decl_readonly_section_1 (tree decl, int reloc, int shlib)
4840 {
4841   switch (categorize_decl_for_section (decl, reloc, shlib))
4842     {
4843     case SECCAT_RODATA:
4844     case SECCAT_RODATA_MERGE_STR:
4845     case SECCAT_RODATA_MERGE_STR_INIT:
4846     case SECCAT_RODATA_MERGE_CONST:
4847     case SECCAT_SRODATA:
4848       return true;
4849       break;
4850     default:
4851       return false;
4852       break;
4853     }
4854 }
4855
4856 /* Select a section based on the above categorization.  */
4857
4858 void
4859 default_elf_select_section (tree decl, int reloc,
4860                             unsigned HOST_WIDE_INT align)
4861 {
4862   default_elf_select_section_1 (decl, reloc, align, flag_pic);
4863 }
4864
4865 void
4866 default_elf_select_section_1 (tree decl, int reloc,
4867                               unsigned HOST_WIDE_INT align, int shlib)
4868 {
4869   switch (categorize_decl_for_section (decl, reloc, shlib))
4870     {
4871     case SECCAT_TEXT:
4872       /* We're not supposed to be called on FUNCTION_DECLs.  */
4873       abort ();
4874     case SECCAT_RODATA:
4875       readonly_data_section ();
4876       break;
4877     case SECCAT_RODATA_MERGE_STR:
4878       mergeable_string_section (decl, align, 0);
4879       break;
4880     case SECCAT_RODATA_MERGE_STR_INIT:
4881       mergeable_string_section (DECL_INITIAL (decl), align, 0);
4882       break;
4883     case SECCAT_RODATA_MERGE_CONST:
4884       mergeable_constant_section (DECL_MODE (decl), align, 0);
4885       break;
4886     case SECCAT_SRODATA:
4887       named_section (NULL_TREE, ".sdata2", reloc);
4888       break;
4889     case SECCAT_DATA:
4890       data_section ();
4891       break;
4892     case SECCAT_DATA_REL:
4893       named_section (NULL_TREE, ".data.rel", reloc);
4894       break;
4895     case SECCAT_DATA_REL_LOCAL:
4896       named_section (NULL_TREE, ".data.rel.local", reloc);
4897       break;
4898     case SECCAT_DATA_REL_RO:
4899       named_section (NULL_TREE, ".data.rel.ro", reloc);
4900       break;
4901     case SECCAT_DATA_REL_RO_LOCAL:
4902       named_section (NULL_TREE, ".data.rel.ro.local", reloc);
4903       break;
4904     case SECCAT_SDATA:
4905       named_section (NULL_TREE, ".sdata", reloc);
4906       break;
4907     case SECCAT_TDATA:
4908       named_section (NULL_TREE, ".tdata", reloc);
4909       break;
4910     case SECCAT_BSS:
4911 #ifdef BSS_SECTION_ASM_OP
4912       bss_section ();
4913 #else
4914       named_section (NULL_TREE, ".bss", reloc);
4915 #endif
4916       break;
4917     case SECCAT_SBSS:
4918       named_section (NULL_TREE, ".sbss", reloc);
4919       break;
4920     case SECCAT_TBSS:
4921       named_section (NULL_TREE, ".tbss", reloc);
4922       break;
4923     default:
4924       abort ();
4925     }
4926 }
4927
4928 /* Construct a unique section name based on the decl name and the
4929    categorization performed above.  */
4930
4931 void
4932 default_unique_section (tree decl, int reloc)
4933 {
4934   default_unique_section_1 (decl, reloc, flag_pic);
4935 }
4936
4937 void
4938 default_unique_section_1 (tree decl, int reloc, int shlib)
4939 {
4940   bool one_only = DECL_ONE_ONLY (decl);
4941   const char *prefix, *name;
4942   size_t nlen, plen;
4943   char *string;
4944
4945   switch (categorize_decl_for_section (decl, reloc, shlib))
4946     {
4947     case SECCAT_TEXT:
4948       prefix = one_only ? ".gnu.linkonce.t." : ".text.";
4949       break;
4950     case SECCAT_RODATA:
4951     case SECCAT_RODATA_MERGE_STR:
4952     case SECCAT_RODATA_MERGE_STR_INIT:
4953     case SECCAT_RODATA_MERGE_CONST:
4954       prefix = one_only ? ".gnu.linkonce.r." : ".rodata.";
4955       break;
4956     case SECCAT_SRODATA:
4957       prefix = one_only ? ".gnu.linkonce.s2." : ".sdata2.";
4958       break;
4959     case SECCAT_DATA:
4960     case SECCAT_DATA_REL:
4961     case SECCAT_DATA_REL_LOCAL:
4962     case SECCAT_DATA_REL_RO:
4963     case SECCAT_DATA_REL_RO_LOCAL:
4964       prefix = one_only ? ".gnu.linkonce.d." : ".data.";
4965       break;
4966     case SECCAT_SDATA:
4967       prefix = one_only ? ".gnu.linkonce.s." : ".sdata.";
4968       break;
4969     case SECCAT_BSS:
4970       prefix = one_only ? ".gnu.linkonce.b." : ".bss.";
4971       break;
4972     case SECCAT_SBSS:
4973       prefix = one_only ? ".gnu.linkonce.sb." : ".sbss.";
4974       break;
4975     case SECCAT_TDATA:
4976       prefix = one_only ? ".gnu.linkonce.td." : ".tdata.";
4977       break;
4978     case SECCAT_TBSS:
4979       prefix = one_only ? ".gnu.linkonce.tb." : ".tbss.";
4980       break;
4981     default:
4982       abort ();
4983     }
4984   plen = strlen (prefix);
4985
4986   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
4987   name = targetm.strip_name_encoding (name);
4988   nlen = strlen (name);
4989
4990   string = alloca (nlen + plen + 1);
4991   memcpy (string, prefix, plen);
4992   memcpy (string + plen, name, nlen + 1);
4993
4994   DECL_SECTION_NAME (decl) = build_string (nlen + plen, string);
4995 }
4996
4997 void
4998 default_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED,
4999                             rtx x,
5000                             unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
5001 {
5002   if (flag_pic)
5003     switch (GET_CODE (x))
5004       {
5005       case CONST:
5006       case SYMBOL_REF:
5007       case LABEL_REF:
5008         data_section ();
5009         return;
5010
5011       default:
5012         break;
5013       }
5014
5015   readonly_data_section ();
5016 }
5017
5018 void
5019 default_elf_select_rtx_section (enum machine_mode mode, rtx x,
5020                                 unsigned HOST_WIDE_INT align)
5021 {
5022   /* ??? Handle small data here somehow.  */
5023
5024   if (flag_pic)
5025     switch (GET_CODE (x))
5026       {
5027       case CONST:
5028       case SYMBOL_REF:
5029         named_section (NULL_TREE, ".data.rel.ro", 3);
5030         return;
5031
5032       case LABEL_REF:
5033         named_section (NULL_TREE, ".data.rel.ro.local", 1);
5034         return;
5035
5036       default:
5037         break;
5038       }
5039
5040   mergeable_constant_section (mode, align, 0);
5041 }
5042
5043 /* Set the generally applicable flags on the SYMBOL_REF for EXP.  */
5044
5045 void
5046 default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
5047 {
5048   rtx symbol;
5049   int flags;
5050
5051   /* Careful not to prod global register variables.  */
5052   if (!MEM_P (rtl))
5053     return;
5054   symbol = XEXP (rtl, 0);
5055   if (GET_CODE (symbol) != SYMBOL_REF)
5056     return;
5057
5058   flags = 0;
5059   if (TREE_CODE (decl) == FUNCTION_DECL)
5060     flags |= SYMBOL_FLAG_FUNCTION;
5061   if (targetm.binds_local_p (decl))
5062     flags |= SYMBOL_FLAG_LOCAL;
5063   if (targetm.in_small_data_p (decl))
5064     flags |= SYMBOL_FLAG_SMALL;
5065   if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
5066     flags |= decl_tls_model (decl) << SYMBOL_FLAG_TLS_SHIFT;
5067   /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names?  Without
5068      being PUBLIC, the thing *must* be defined in this translation unit.
5069      Prevent this buglet from being propagated into rtl code as well.  */
5070   if (DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
5071     flags |= SYMBOL_FLAG_EXTERNAL;
5072
5073   SYMBOL_REF_FLAGS (symbol) = flags;
5074 }
5075
5076 /* By default, we do nothing for encode_section_info, so we need not
5077    do anything but discard the '*' marker.  */
5078
5079 const char *
5080 default_strip_name_encoding (const char *str)
5081 {
5082   return str + (*str == '*');
5083 }
5084
5085 /* Assume ELF-ish defaults, since that's pretty much the most liberal
5086    wrt cross-module name binding.  */
5087
5088 bool
5089 default_binds_local_p (tree exp)
5090 {
5091   return default_binds_local_p_1 (exp, flag_shlib);
5092 }
5093
5094 bool
5095 default_binds_local_p_1 (tree exp, int shlib)
5096 {
5097   bool local_p;
5098
5099   /* A non-decl is an entry in the constant pool.  */
5100   if (!DECL_P (exp))
5101     local_p = true;
5102   /* Static variables are always local.  */
5103   else if (! TREE_PUBLIC (exp))
5104     local_p = true;
5105   /* A variable is local if the user explicitly tells us so.  */
5106   else if (DECL_VISIBILITY_SPECIFIED (exp) && DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
5107     local_p = true;
5108   /* Otherwise, variables defined outside this object may not be local.  */
5109   else if (DECL_EXTERNAL (exp))
5110     local_p = false;
5111   /* Linkonce and weak data are never local.  */
5112   else if (DECL_ONE_ONLY (exp) || DECL_WEAK (exp))
5113     local_p = false;
5114   /* If none of the above and visibility is not default, make local.  */
5115   else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
5116     local_p = true;
5117   /* If PIC, then assume that any global name can be overridden by
5118      symbols resolved from other modules.  */
5119   else if (shlib)
5120     local_p = false;
5121   /* Uninitialized COMMON variable may be unified with symbols
5122      resolved from other modules.  */
5123   else if (DECL_COMMON (exp)
5124            && (DECL_INITIAL (exp) == NULL
5125                || DECL_INITIAL (exp) == error_mark_node))
5126     local_p = false;
5127   /* Otherwise we're left with initialized (or non-common) global data
5128      which is of necessity defined locally.  */
5129   else
5130     local_p = true;
5131
5132   return local_p;
5133 }
5134
5135 /* Determine whether or not a pointer mode is valid. Assume defaults
5136    of ptr_mode or Pmode - can be overridden.  */
5137 bool
5138 default_valid_pointer_mode (enum machine_mode mode)
5139 {
5140   return (mode == ptr_mode || mode == Pmode);
5141 }
5142
5143 /* Default function to output code that will globalize a label.  A
5144    target must define GLOBAL_ASM_OP or provide it's own function to
5145    globalize a label.  */
5146 #ifdef GLOBAL_ASM_OP
5147 void
5148 default_globalize_label (FILE * stream, const char *name)
5149 {
5150   fputs (GLOBAL_ASM_OP, stream);
5151   assemble_name (stream, name);
5152   putc ('\n', stream);
5153 }
5154 #endif /* GLOBAL_ASM_OP */
5155
5156 /* Default function to output a label for unwind information.  The
5157    default is to do nothing.  A target that needs nonlocal labels for
5158    unwind information must provide its own function to do this.  */
5159 void
5160 default_emit_unwind_label (FILE * stream ATTRIBUTE_UNUSED,
5161                            tree decl ATTRIBUTE_UNUSED,
5162                            int for_eh ATTRIBUTE_UNUSED,
5163                            int empty ATTRIBUTE_UNUSED)
5164
5165 }
5166
5167 /* This is how to output an internal numbered label where PREFIX is
5168    the class of label and LABELNO is the number within the class.  */
5169
5170 void
5171 default_internal_label (FILE *stream, const char *prefix,
5172                         unsigned long labelno)
5173 {
5174   char *const buf = alloca (40 + strlen (prefix));
5175   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, labelno);
5176   ASM_OUTPUT_LABEL (stream, buf);
5177 }
5178
5179 /* This is the default behavior at the beginning of a file.  It's
5180    controlled by two other target-hook toggles.  */
5181 void
5182 default_file_start (void)
5183 {
5184   if (targetm.file_start_app_off && !flag_verbose_asm)
5185     fputs (ASM_APP_OFF, asm_out_file);
5186
5187   if (targetm.file_start_file_directive)
5188     output_file_directive (asm_out_file, main_input_filename);
5189 }
5190
5191 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
5192    which emits a special section directive used to indicate whether or
5193    not this object file needs an executable stack.  This is primarily
5194    a GNU extension to ELF but could be used on other targets.  */
5195
5196 int trampolines_created;
5197
5198 void
5199 file_end_indicate_exec_stack (void)
5200 {
5201   unsigned int flags = SECTION_DEBUG;
5202   if (trampolines_created)
5203     flags |= SECTION_CODE;
5204
5205   named_section_flags (".note.GNU-stack", flags);
5206 }
5207
5208 #include "gt-varasm.h"