OSDN Git Service

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