OSDN Git Service

* dwarf2out.c (loc_descriptor): For SUBREG pass SUBREG_REG's mode as
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Contributed by Gary Funck (gary@intrepid.com).
6    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
7    Extensively modified by Jason Merrill (jason@cygnus.com).
8
9 This file is part of GCC.
10
11 GCC is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 3, or (at your option) any later
14 version.
15
16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19 for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3.  If not see
23 <http://www.gnu.org/licenses/>.  */
24
25 /* TODO: Emit .debug_line header even when there are no functions, since
26            the file numbers are used by .debug_info.  Alternately, leave
27            out locations for types and decls.
28          Avoid talking about ctors and op= for PODs.
29          Factor out common prologue sequences into multiple CIEs.  */
30
31 /* The first part of this file deals with the DWARF 2 frame unwind
32    information, which is also used by the GCC efficient exception handling
33    mechanism.  The second part, controlled only by an #ifdef
34    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35    information.  */
36
37 /* DWARF2 Abbreviation Glossary:
38
39    CFA = Canonical Frame Address
40            a fixed address on the stack which identifies a call frame.
41            We define it to be the value of SP just before the call insn.
42            The CFA register and offset, which may change during the course
43            of the function, are used to calculate its value at runtime.
44
45    CFI = Call Frame Instruction
46            an instruction for the DWARF2 abstract machine
47
48    CIE = Common Information Entry
49            information describing information common to one or more FDEs
50
51    DIE = Debugging Information Entry
52
53    FDE = Frame Description Entry
54            information describing the stack call frame, in particular,
55            how to restore registers
56
57    DW_CFA_... = DWARF2 CFA call frame instruction
58    DW_TAG_... = DWARF2 DIE tag */
59
60 #include "config.h"
61 #include "system.h"
62 #include "coretypes.h"
63 #include "tm.h"
64 #include "tree.h"
65 #include "version.h"
66 #include "flags.h"
67 #include "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "ggc.h"
82 #include "md5.h"
83 #include "tm_p.h"
84 #include "diagnostic.h"
85 #include "tree-pretty-print.h"
86 #include "debug.h"
87 #include "target.h"
88 #include "common/common-target.h"
89 #include "langhooks.h"
90 #include "hashtab.h"
91 #include "cgraph.h"
92 #include "input.h"
93 #include "gimple.h"
94 #include "tree-pass.h"
95 #include "tree-flow.h"
96 #include "cfglayout.h"
97 #include "opts.h"
98
99 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
100 static rtx last_var_location_insn;
101
102 #ifdef VMS_DEBUGGING_INFO
103 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
104
105 /* Define this macro to be a nonzero value if the directory specifications
106     which are output in the debug info should end with a separator.  */
107 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
108 /* Define this macro to evaluate to a nonzero value if GCC should refrain
109    from generating indirect strings in DWARF2 debug information, for instance
110    if your target is stuck with an old version of GDB that is unable to
111    process them properly or uses VMS Debug.  */
112 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
113 #else
114 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
115 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
116 #endif
117
118 /* ??? Poison these here until it can be done generically.  They've been
119    totally replaced in this file; make sure it stays that way.  */
120 #undef DWARF2_UNWIND_INFO
121 #undef DWARF2_FRAME_INFO
122 #if (GCC_VERSION >= 3000)
123  #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
124 #endif
125
126 /* The size of the target's pointer type.  */
127 #ifndef PTR_SIZE
128 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
129 #endif
130
131 /* Array of RTXes referenced by the debugging information, which therefore
132    must be kept around forever.  */
133 static GTY(()) VEC(rtx,gc) *used_rtx_array;
134
135 /* A pointer to the base of a list of incomplete types which might be
136    completed at some later time.  incomplete_types_list needs to be a
137    VEC(tree,gc) because we want to tell the garbage collector about
138    it.  */
139 static GTY(()) VEC(tree,gc) *incomplete_types;
140
141 /* A pointer to the base of a table of references to declaration
142    scopes.  This table is a display which tracks the nesting
143    of declaration scopes at the current scope and containing
144    scopes.  This table is used to find the proper place to
145    define type declaration DIE's.  */
146 static GTY(()) VEC(tree,gc) *decl_scope_table;
147
148 /* Pointers to various DWARF2 sections.  */
149 static GTY(()) section *debug_info_section;
150 static GTY(()) section *debug_abbrev_section;
151 static GTY(()) section *debug_aranges_section;
152 static GTY(()) section *debug_macinfo_section;
153 static GTY(()) section *debug_line_section;
154 static GTY(()) section *debug_loc_section;
155 static GTY(()) section *debug_pubnames_section;
156 static GTY(()) section *debug_pubtypes_section;
157 static GTY(()) section *debug_str_section;
158 static GTY(()) section *debug_ranges_section;
159 static GTY(()) section *debug_frame_section;
160
161 /* Maximum size (in bytes) of an artificially generated label.  */
162 #define MAX_ARTIFICIAL_LABEL_BYTES      30
163
164 /* According to the (draft) DWARF 3 specification, the initial length
165    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
166    bytes are 0xffffffff, followed by the length stored in the next 8
167    bytes.
168
169    However, the SGI/MIPS ABI uses an initial length which is equal to
170    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
171
172 #ifndef DWARF_INITIAL_LENGTH_SIZE
173 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
174 #endif
175
176 /* Round SIZE up to the nearest BOUNDARY.  */
177 #define DWARF_ROUND(SIZE,BOUNDARY) \
178   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
179
180 /* CIE identifier.  */
181 #if HOST_BITS_PER_WIDE_INT >= 64
182 #define DWARF_CIE_ID \
183   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
184 #else
185 #define DWARF_CIE_ID DW_CIE_ID
186 #endif
187
188 DEF_VEC_P (dw_fde_ref);
189 DEF_VEC_ALLOC_P (dw_fde_ref, gc);
190
191 /* A vector for a table that contains frame description
192    information for each routine.  */
193 static GTY(()) VEC(dw_fde_ref, gc) *fde_vec;
194
195 struct GTY(()) indirect_string_node {
196   const char *str;
197   unsigned int refcount;
198   enum dwarf_form form;
199   char *label;
200 };
201
202 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
203
204 static GTY(()) int dw2_string_counter;
205
206 /* True if the compilation unit places functions in more than one section.  */
207 static GTY(()) bool have_multiple_function_sections = false;
208
209 /* Whether the default text and cold text sections have been used at all.  */
210
211 static GTY(()) bool text_section_used = false;
212 static GTY(()) bool cold_text_section_used = false;
213
214 /* The default cold text section.  */
215 static GTY(()) section *cold_text_section;
216
217 /* Forward declarations for functions defined in this file.  */
218
219 static char *stripattributes (const char *);
220 static void output_call_frame_info (int);
221 static void dwarf2out_note_section_used (void);
222
223 /* Personality decl of current unit.  Used only when assembler does not support
224    personality CFI.  */
225 static GTY(()) rtx current_unit_personality;
226
227 /* Data and reference forms for relocatable data.  */
228 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
229 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
230
231 #ifndef DEBUG_FRAME_SECTION
232 #define DEBUG_FRAME_SECTION     ".debug_frame"
233 #endif
234
235 #ifndef FUNC_BEGIN_LABEL
236 #define FUNC_BEGIN_LABEL        "LFB"
237 #endif
238
239 #ifndef FUNC_END_LABEL
240 #define FUNC_END_LABEL          "LFE"
241 #endif
242
243 #ifndef PROLOGUE_END_LABEL
244 #define PROLOGUE_END_LABEL      "LPE"
245 #endif
246
247 #ifndef EPILOGUE_BEGIN_LABEL
248 #define EPILOGUE_BEGIN_LABEL    "LEB"
249 #endif
250
251 #ifndef FRAME_BEGIN_LABEL
252 #define FRAME_BEGIN_LABEL       "Lframe"
253 #endif
254 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
255 #define CIE_END_LABEL           "LECIE"
256 #define FDE_LABEL               "LSFDE"
257 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
258 #define FDE_END_LABEL           "LEFDE"
259 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
260 #define LINE_NUMBER_END_LABEL   "LELT"
261 #define LN_PROLOG_AS_LABEL      "LASLTP"
262 #define LN_PROLOG_END_LABEL     "LELTP"
263 #define DIE_LABEL_PREFIX        "DW"
264 \f
265 /* Match the base name of a file to the base name of a compilation unit. */
266
267 static int
268 matches_main_base (const char *path)
269 {
270   /* Cache the last query. */
271   static const char *last_path = NULL;
272   static int last_match = 0;
273   if (path != last_path)
274     {
275       const char *base;
276       int length = base_of_path (path, &base);
277       last_path = path;
278       last_match = (length == main_input_baselength
279                     && memcmp (base, main_input_basename, length) == 0);
280     }
281   return last_match;
282 }
283
284 #ifdef DEBUG_DEBUG_STRUCT
285
286 static int
287 dump_struct_debug (tree type, enum debug_info_usage usage,
288                    enum debug_struct_file criterion, int generic,
289                    int matches, int result)
290 {
291   /* Find the type name. */
292   tree type_decl = TYPE_STUB_DECL (type);
293   tree t = type_decl;
294   const char *name = 0;
295   if (TREE_CODE (t) == TYPE_DECL)
296     t = DECL_NAME (t);
297   if (t)
298     name = IDENTIFIER_POINTER (t);
299
300   fprintf (stderr, "    struct %d %s %s %s %s %d %p %s\n",
301            criterion,
302            DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr",
303            matches ? "bas" : "hdr",
304            generic ? "gen" : "ord",
305            usage == DINFO_USAGE_DFN ? ";" :
306              usage == DINFO_USAGE_DIR_USE ? "." : "*",
307            result,
308            (void*) type_decl, name);
309   return result;
310 }
311 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
312   dump_struct_debug (type, usage, criterion, generic, matches, result)
313
314 #else
315
316 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
317   (result)
318
319 #endif
320
321 static bool
322 should_emit_struct_debug (tree type, enum debug_info_usage usage)
323 {
324   enum debug_struct_file criterion;
325   tree type_decl;
326   bool generic = lang_hooks.types.generic_p (type);
327
328   if (generic)
329     criterion = debug_struct_generic[usage];
330   else
331     criterion = debug_struct_ordinary[usage];
332
333   if (criterion == DINFO_STRUCT_FILE_NONE)
334     return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
335   if (criterion == DINFO_STRUCT_FILE_ANY)
336     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
337
338   type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
339
340   if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
341     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
342
343   if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
344     return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
345   return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
346 }
347 \f
348 /* Return a pointer to a copy of the section string name S with all
349    attributes stripped off, and an asterisk prepended (for assemble_name).  */
350
351 static inline char *
352 stripattributes (const char *s)
353 {
354   char *stripped = XNEWVEC (char, strlen (s) + 2);
355   char *p = stripped;
356
357   *p++ = '*';
358
359   while (*s && *s != ',')
360     *p++ = *s++;
361
362   *p = '\0';
363   return stripped;
364 }
365
366 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
367    switch to the data section instead, and write out a synthetic start label
368    for collect2 the first time around.  */
369
370 static void
371 switch_to_eh_frame_section (bool back)
372 {
373   tree label;
374
375 #ifdef EH_FRAME_SECTION_NAME
376   if (eh_frame_section == 0)
377     {
378       int flags;
379
380       if (EH_TABLES_CAN_BE_READ_ONLY)
381         {
382           int fde_encoding;
383           int per_encoding;
384           int lsda_encoding;
385
386           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
387                                                        /*global=*/0);
388           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
389                                                        /*global=*/1);
390           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
391                                                         /*global=*/0);
392           flags = ((! flag_pic
393                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
394                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
395                         && (per_encoding & 0x70) != DW_EH_PE_absptr
396                         && (per_encoding & 0x70) != DW_EH_PE_aligned
397                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
398                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
399                    ? 0 : SECTION_WRITE);
400         }
401       else
402         flags = SECTION_WRITE;
403       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
404     }
405 #endif /* EH_FRAME_SECTION_NAME */
406
407   if (eh_frame_section)
408     switch_to_section (eh_frame_section);
409   else
410     {
411       /* We have no special eh_frame section.  Put the information in
412          the data section and emit special labels to guide collect2.  */
413       switch_to_section (data_section);
414
415       if (!back)
416         {
417           label = get_file_function_name ("F");
418           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
419           targetm.asm_out.globalize_label (asm_out_file,
420                                            IDENTIFIER_POINTER (label));
421           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
422         }
423     }
424 }
425
426 /* Switch [BACK] to the eh or debug frame table section, depending on
427    FOR_EH.  */
428
429 static void
430 switch_to_frame_table_section (int for_eh, bool back)
431 {
432   if (for_eh)
433     switch_to_eh_frame_section (back);
434   else
435     {
436       if (!debug_frame_section)
437         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
438                                            SECTION_DEBUG, NULL);
439       switch_to_section (debug_frame_section);
440     }
441 }
442
443 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
444
445 enum dw_cfi_oprnd_type
446 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
447 {
448   switch (cfi)
449     {
450     case DW_CFA_nop:
451     case DW_CFA_GNU_window_save:
452     case DW_CFA_remember_state:
453     case DW_CFA_restore_state:
454       return dw_cfi_oprnd_unused;
455
456     case DW_CFA_set_loc:
457     case DW_CFA_advance_loc1:
458     case DW_CFA_advance_loc2:
459     case DW_CFA_advance_loc4:
460     case DW_CFA_MIPS_advance_loc8:
461       return dw_cfi_oprnd_addr;
462
463     case DW_CFA_offset:
464     case DW_CFA_offset_extended:
465     case DW_CFA_def_cfa:
466     case DW_CFA_offset_extended_sf:
467     case DW_CFA_def_cfa_sf:
468     case DW_CFA_restore:
469     case DW_CFA_restore_extended:
470     case DW_CFA_undefined:
471     case DW_CFA_same_value:
472     case DW_CFA_def_cfa_register:
473     case DW_CFA_register:
474     case DW_CFA_expression:
475       return dw_cfi_oprnd_reg_num;
476
477     case DW_CFA_def_cfa_offset:
478     case DW_CFA_GNU_args_size:
479     case DW_CFA_def_cfa_offset_sf:
480       return dw_cfi_oprnd_offset;
481
482     case DW_CFA_def_cfa_expression:
483       return dw_cfi_oprnd_loc;
484
485     default:
486       gcc_unreachable ();
487     }
488 }
489
490 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
491
492 enum dw_cfi_oprnd_type
493 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
494 {
495   switch (cfi)
496     {
497     case DW_CFA_def_cfa:
498     case DW_CFA_def_cfa_sf:
499     case DW_CFA_offset:
500     case DW_CFA_offset_extended_sf:
501     case DW_CFA_offset_extended:
502       return dw_cfi_oprnd_offset;
503
504     case DW_CFA_register:
505       return dw_cfi_oprnd_reg_num;
506
507     case DW_CFA_expression:
508       return dw_cfi_oprnd_loc;
509
510     default:
511       return dw_cfi_oprnd_unused;
512     }
513 }
514
515 /* Output one FDE.  */
516
517 static void
518 output_fde (dw_fde_ref fde, bool for_eh, bool second,
519             char *section_start_label, int fde_encoding, char *augmentation,
520             bool any_lsda_needed, int lsda_encoding)
521 {
522   const char *begin, *end;
523   static unsigned int j;
524   char l1[20], l2[20];
525
526   targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
527                                      /* empty */ 0);
528   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
529                                   for_eh + j);
530   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
531   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
532   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
533     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
534                          " indicating 64-bit DWARF extension");
535   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
536                         "FDE Length");
537   ASM_OUTPUT_LABEL (asm_out_file, l1);
538
539   if (for_eh)
540     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
541   else
542     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
543                            debug_frame_section, "FDE CIE offset");
544
545   begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
546   end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
547
548   if (for_eh)
549     {
550       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
551       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
552       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
553                                        "FDE initial location");
554       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
555                             end, begin, "FDE address range");
556     }
557   else
558     {
559       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
560       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
561     }
562
563   if (augmentation[0])
564     {
565       if (any_lsda_needed)
566         {
567           int size = size_of_encoded_value (lsda_encoding);
568
569           if (lsda_encoding == DW_EH_PE_aligned)
570             {
571               int offset = (  4         /* Length */
572                             + 4         /* CIE offset */
573                             + 2 * size_of_encoded_value (fde_encoding)
574                             + 1         /* Augmentation size */ );
575               int pad = -offset & (PTR_SIZE - 1);
576
577               size += pad;
578               gcc_assert (size_of_uleb128 (size) == 1);
579             }
580
581           dw2_asm_output_data_uleb128 (size, "Augmentation size");
582
583           if (fde->uses_eh_lsda)
584             {
585               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
586                                            fde->funcdef_number);
587               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
588                                                gen_rtx_SYMBOL_REF (Pmode, l1),
589                                                false,
590                                                "Language Specific Data Area");
591             }
592           else
593             {
594               if (lsda_encoding == DW_EH_PE_aligned)
595                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
596               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
597                                    "Language Specific Data Area (none)");
598             }
599         }
600       else
601         dw2_asm_output_data_uleb128 (0, "Augmentation size");
602     }
603
604   /* Loop through the Call Frame Instructions associated with this FDE.  */
605   fde->dw_fde_current_label = begin;
606   {
607     size_t from, until, i;
608
609     from = 0;
610     until = VEC_length (dw_cfi_ref, fde->dw_fde_cfi);
611
612     if (fde->dw_fde_second_begin == NULL)
613       ;
614     else if (!second)
615       until = fde->dw_fde_switch_cfi_index;
616     else
617       from = fde->dw_fde_switch_cfi_index;
618
619     for (i = from; i < until; i++)
620       output_cfi (VEC_index (dw_cfi_ref, fde->dw_fde_cfi, i), fde, for_eh);
621   }
622
623   /* If we are to emit a ref/link from function bodies to their frame tables,
624      do it now.  This is typically performed to make sure that tables
625      associated with functions are dragged with them and not discarded in
626      garbage collecting links. We need to do this on a per function basis to
627      cope with -ffunction-sections.  */
628
629 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
630   /* Switch to the function section, emit the ref to the tables, and
631      switch *back* into the table section.  */
632   switch_to_section (function_section (fde->decl));
633   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
634   switch_to_frame_table_section (for_eh, true);
635 #endif
636
637   /* Pad the FDE out to an address sized boundary.  */
638   ASM_OUTPUT_ALIGN (asm_out_file,
639                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
640   ASM_OUTPUT_LABEL (asm_out_file, l2);
641
642   j += 2;
643 }
644
645 /* Return true if frame description entry FDE is needed for EH.  */
646
647 static bool
648 fde_needed_for_eh_p (dw_fde_ref fde)
649 {
650   if (flag_asynchronous_unwind_tables)
651     return true;
652
653   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
654     return true;
655
656   if (fde->uses_eh_lsda)
657     return true;
658
659   /* If exceptions are enabled, we have collected nothrow info.  */
660   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
661     return false;
662
663   return true;
664 }
665
666 /* Output the call frame information used to record information
667    that relates to calculating the frame pointer, and records the
668    location of saved registers.  */
669
670 static void
671 output_call_frame_info (int for_eh)
672 {
673   unsigned int i;
674   dw_fde_ref fde;
675   dw_cfi_ref cfi;
676   char l1[20], l2[20], section_start_label[20];
677   bool any_lsda_needed = false;
678   char augmentation[6];
679   int augmentation_size;
680   int fde_encoding = DW_EH_PE_absptr;
681   int per_encoding = DW_EH_PE_absptr;
682   int lsda_encoding = DW_EH_PE_absptr;
683   int return_reg;
684   rtx personality = NULL;
685   int dw_cie_version;
686
687   /* Don't emit a CIE if there won't be any FDEs.  */
688   if (fde_vec == NULL)
689     return;
690
691   /* Nothing to do if the assembler's doing it all.  */
692   if (dwarf2out_do_cfi_asm ())
693     return;
694
695   /* If we don't have any functions we'll want to unwind out of, don't emit
696      any EH unwind information.  If we make FDEs linkonce, we may have to
697      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
698      want to avoid having an FDE kept around when the function it refers to
699      is discarded.  Example where this matters: a primary function template
700      in C++ requires EH information, an explicit specialization doesn't.  */
701   if (for_eh)
702     {
703       bool any_eh_needed = false;
704
705       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde)
706         {
707           if (fde->uses_eh_lsda)
708             any_eh_needed = any_lsda_needed = true;
709           else if (fde_needed_for_eh_p (fde))
710             any_eh_needed = true;
711           else if (TARGET_USES_WEAK_UNWIND_INFO)
712             targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
713         }
714
715       if (!any_eh_needed)
716         return;
717     }
718
719   /* We're going to be generating comments, so turn on app.  */
720   if (flag_debug_asm)
721     app_enable ();
722
723   /* Switch to the proper frame section, first time.  */
724   switch_to_frame_table_section (for_eh, false);
725
726   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
727   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
728
729   /* Output the CIE.  */
730   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
731   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
732   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
733     dw2_asm_output_data (4, 0xffffffff,
734       "Initial length escape value indicating 64-bit DWARF extension");
735   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
736                         "Length of Common Information Entry");
737   ASM_OUTPUT_LABEL (asm_out_file, l1);
738
739   /* Now that the CIE pointer is PC-relative for EH,
740      use 0 to identify the CIE.  */
741   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
742                        (for_eh ? 0 : DWARF_CIE_ID),
743                        "CIE Identifier Tag");
744
745   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
746      use CIE version 1, unless that would produce incorrect results
747      due to overflowing the return register column.  */
748   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
749   dw_cie_version = 1;
750   if (return_reg >= 256 || dwarf_version > 2)
751     dw_cie_version = 3;
752   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
753
754   augmentation[0] = 0;
755   augmentation_size = 0;
756
757   personality = current_unit_personality;
758   if (for_eh)
759     {
760       char *p;
761
762       /* Augmentation:
763          z      Indicates that a uleb128 is present to size the
764                 augmentation section.
765          L      Indicates the encoding (and thus presence) of
766                 an LSDA pointer in the FDE augmentation.
767          R      Indicates a non-default pointer encoding for
768                 FDE code pointers.
769          P      Indicates the presence of an encoding + language
770                 personality routine in the CIE augmentation.  */
771
772       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
773       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
774       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
775
776       p = augmentation + 1;
777       if (personality)
778         {
779           *p++ = 'P';
780           augmentation_size += 1 + size_of_encoded_value (per_encoding);
781           assemble_external_libcall (personality);
782         }
783       if (any_lsda_needed)
784         {
785           *p++ = 'L';
786           augmentation_size += 1;
787         }
788       if (fde_encoding != DW_EH_PE_absptr)
789         {
790           *p++ = 'R';
791           augmentation_size += 1;
792         }
793       if (p > augmentation + 1)
794         {
795           augmentation[0] = 'z';
796           *p = '\0';
797         }
798
799       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
800       if (personality && per_encoding == DW_EH_PE_aligned)
801         {
802           int offset = (  4             /* Length */
803                         + 4             /* CIE Id */
804                         + 1             /* CIE version */
805                         + strlen (augmentation) + 1     /* Augmentation */
806                         + size_of_uleb128 (1)           /* Code alignment */
807                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
808                         + 1             /* RA column */
809                         + 1             /* Augmentation size */
810                         + 1             /* Personality encoding */ );
811           int pad = -offset & (PTR_SIZE - 1);
812
813           augmentation_size += pad;
814
815           /* Augmentations should be small, so there's scarce need to
816              iterate for a solution.  Die if we exceed one uleb128 byte.  */
817           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
818         }
819     }
820
821   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
822   if (dw_cie_version >= 4)
823     {
824       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
825       dw2_asm_output_data (1, 0, "CIE Segment Size");
826     }
827   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
828   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
829                                "CIE Data Alignment Factor");
830
831   if (dw_cie_version == 1)
832     dw2_asm_output_data (1, return_reg, "CIE RA Column");
833   else
834     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
835
836   if (augmentation[0])
837     {
838       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
839       if (personality)
840         {
841           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
842                                eh_data_format_name (per_encoding));
843           dw2_asm_output_encoded_addr_rtx (per_encoding,
844                                            personality,
845                                            true, NULL);
846         }
847
848       if (any_lsda_needed)
849         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
850                              eh_data_format_name (lsda_encoding));
851
852       if (fde_encoding != DW_EH_PE_absptr)
853         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
854                              eh_data_format_name (fde_encoding));
855     }
856
857   FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, i, cfi)
858     output_cfi (cfi, NULL, for_eh);
859
860   /* Pad the CIE out to an address sized boundary.  */
861   ASM_OUTPUT_ALIGN (asm_out_file,
862                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
863   ASM_OUTPUT_LABEL (asm_out_file, l2);
864
865   /* Loop through all of the FDE's.  */
866   FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde)
867     {
868       unsigned int k;
869
870       /* Don't emit EH unwind info for leaf functions that don't need it.  */
871       if (for_eh && !fde_needed_for_eh_p (fde))
872         continue;
873
874       for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
875         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
876                     augmentation, any_lsda_needed, lsda_encoding);
877     }
878
879   if (for_eh && targetm.terminate_dw2_eh_frame_info)
880     dw2_asm_output_data (4, 0, "End of Table");
881 #ifdef MIPS_DEBUGGING_INFO
882   /* Work around Irix 6 assembler bug whereby labels at the end of a section
883      get a value of 0.  Putting .align 0 after the label fixes it.  */
884   ASM_OUTPUT_ALIGN (asm_out_file, 0);
885 #endif
886
887   /* Turn off app to make assembly quicker.  */
888   if (flag_debug_asm)
889     app_disable ();
890 }
891
892 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
893
894 static void
895 dwarf2out_do_cfi_startproc (bool second)
896 {
897   int enc;
898   rtx ref;
899   rtx personality = get_personality_function (current_function_decl);
900
901   fprintf (asm_out_file, "\t.cfi_startproc\n");
902
903   if (personality)
904     {
905       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
906       ref = personality;
907
908       /* ??? The GAS support isn't entirely consistent.  We have to
909          handle indirect support ourselves, but PC-relative is done
910          in the assembler.  Further, the assembler can't handle any
911          of the weirder relocation types.  */
912       if (enc & DW_EH_PE_indirect)
913         ref = dw2_force_const_mem (ref, true);
914
915       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
916       output_addr_const (asm_out_file, ref);
917       fputc ('\n', asm_out_file);
918     }
919
920   if (crtl->uses_eh_lsda)
921     {
922       char lab[20];
923
924       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
925       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
926                                    current_function_funcdef_no);
927       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
928       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
929
930       if (enc & DW_EH_PE_indirect)
931         ref = dw2_force_const_mem (ref, true);
932
933       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
934       output_addr_const (asm_out_file, ref);
935       fputc ('\n', asm_out_file);
936     }
937 }
938
939 /* Allocate CURRENT_FDE.  Immediately initialize all we can, noting that
940    this allocation may be done before pass_final.  */
941
942 dw_fde_ref
943 dwarf2out_alloc_current_fde (void)
944 {
945   dw_fde_ref fde;
946
947   fde = ggc_alloc_cleared_dw_fde_node ();
948   fde->decl = current_function_decl;
949   fde->funcdef_number = current_function_funcdef_no;
950   fde->fde_index = VEC_length (dw_fde_ref, fde_vec);
951   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
952   fde->uses_eh_lsda = crtl->uses_eh_lsda;
953   fde->nothrow = crtl->nothrow;
954   fde->drap_reg = INVALID_REGNUM;
955   fde->vdrap_reg = INVALID_REGNUM;
956
957   /* Record the FDE associated with this function.  */
958   cfun->fde = fde;
959   VEC_safe_push (dw_fde_ref, gc, fde_vec, fde);
960
961   return fde;
962 }
963
964 /* Output a marker (i.e. a label) for the beginning of a function, before
965    the prologue.  */
966
967 void
968 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
969                           const char *file ATTRIBUTE_UNUSED)
970 {
971   char label[MAX_ARTIFICIAL_LABEL_BYTES];
972   char * dup_label;
973   dw_fde_ref fde;
974   section *fnsec;
975   bool do_frame;
976
977   current_function_func_begin_label = NULL;
978
979   do_frame = dwarf2out_do_frame ();
980
981   /* ??? current_function_func_begin_label is also used by except.c for
982      call-site information.  We must emit this label if it might be used.  */
983   if (!do_frame
984       && (!flag_exceptions
985           || targetm_common.except_unwind_info (&global_options) != UI_TARGET))
986     return;
987
988   fnsec = function_section (current_function_decl);
989   switch_to_section (fnsec);
990   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
991                                current_function_funcdef_no);
992   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
993                           current_function_funcdef_no);
994   dup_label = xstrdup (label);
995   current_function_func_begin_label = dup_label;
996
997   /* We can elide the fde allocation if we're not emitting debug info.  */
998   if (!do_frame)
999     return;
1000
1001   /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1002      emit insns as rtx but bypass the bulk of rest_of_compilation, which
1003      would include pass_dwarf2_frame.  If we've not created the FDE yet,
1004      do so now.  */
1005   fde = cfun->fde;
1006   if (fde == NULL)
1007     fde = dwarf2out_alloc_current_fde ();
1008
1009   /* Initialize the bits of CURRENT_FDE that were not available earlier.  */
1010   fde->dw_fde_begin = dup_label;
1011   fde->dw_fde_current_label = dup_label;
1012   fde->in_std_section = (fnsec == text_section
1013                          || (cold_text_section && fnsec == cold_text_section));
1014
1015   /* We only want to output line number information for the genuine dwarf2
1016      prologue case, not the eh frame case.  */
1017 #ifdef DWARF2_DEBUGGING_INFO
1018   if (file)
1019     dwarf2out_source_line (line, file, 0, true);
1020 #endif
1021
1022   if (dwarf2out_do_cfi_asm ())
1023     dwarf2out_do_cfi_startproc (false);
1024   else
1025     {
1026       rtx personality = get_personality_function (current_function_decl);
1027       if (!current_unit_personality)
1028         current_unit_personality = personality;
1029
1030       /* We cannot keep a current personality per function as without CFI
1031          asm, at the point where we emit the CFI data, there is no current
1032          function anymore.  */
1033       if (personality && current_unit_personality != personality)
1034         sorry ("multiple EH personalities are supported only with assemblers "
1035                "supporting .cfi_personality directive");
1036     }
1037 }
1038
1039 /* Output a marker (i.e. a label) for the end of the generated code
1040    for a function prologue.  This gets called *after* the prologue code has
1041    been generated.  */
1042
1043 void
1044 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1045                         const char *file ATTRIBUTE_UNUSED)
1046 {
1047   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1048
1049   /* Output a label to mark the endpoint of the code generated for this
1050      function.  */
1051   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1052                                current_function_funcdef_no);
1053   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1054                           current_function_funcdef_no);
1055   cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1056 }
1057
1058 /* Output a marker (i.e. a label) for the beginning of the generated code
1059    for a function epilogue.  This gets called *before* the prologue code has
1060    been generated.  */
1061
1062 void
1063 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1064                           const char *file ATTRIBUTE_UNUSED)
1065 {
1066   dw_fde_ref fde = cfun->fde;
1067   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1068
1069   if (fde->dw_fde_vms_begin_epilogue)
1070     return;
1071
1072   /* Output a label to mark the endpoint of the code generated for this
1073      function.  */
1074   ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1075                                current_function_funcdef_no);
1076   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1077                           current_function_funcdef_no);
1078   fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1079 }
1080
1081 /* Output a marker (i.e. a label) for the absolute end of the generated code
1082    for a function definition.  This gets called *after* the epilogue code has
1083    been generated.  */
1084
1085 void
1086 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1087                         const char *file ATTRIBUTE_UNUSED)
1088 {
1089   dw_fde_ref fde;
1090   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1091
1092   last_var_location_insn = NULL_RTX;
1093
1094   if (dwarf2out_do_cfi_asm ())
1095     fprintf (asm_out_file, "\t.cfi_endproc\n");
1096
1097   /* Output a label to mark the endpoint of the code generated for this
1098      function.  */
1099   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1100                                current_function_funcdef_no);
1101   ASM_OUTPUT_LABEL (asm_out_file, label);
1102   fde = cfun->fde;
1103   gcc_assert (fde != NULL);
1104   if (fde->dw_fde_second_begin == NULL)
1105     fde->dw_fde_end = xstrdup (label);
1106 }
1107
1108 void
1109 dwarf2out_frame_finish (void)
1110 {
1111   /* Output call frame information.  */
1112   if (targetm.debug_unwind_info () == UI_DWARF2)
1113     output_call_frame_info (0);
1114
1115   /* Output another copy for the unwinder.  */
1116   if ((flag_unwind_tables || flag_exceptions)
1117       && targetm_common.except_unwind_info (&global_options) == UI_DWARF2)
1118     output_call_frame_info (1);
1119 }
1120
1121 /* Note that the current function section is being used for code.  */
1122
1123 static void
1124 dwarf2out_note_section_used (void)
1125 {
1126   section *sec = current_function_section ();
1127   if (sec == text_section)
1128     text_section_used = true;
1129   else if (sec == cold_text_section)
1130     cold_text_section_used = true;
1131 }
1132
1133 static void var_location_switch_text_section (void);
1134 static void set_cur_line_info_table (section *);
1135
1136 void
1137 dwarf2out_switch_text_section (void)
1138 {
1139   section *sect;
1140   dw_fde_ref fde = cfun->fde;
1141
1142   gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
1143
1144   if (!in_cold_section_p)
1145     {
1146       fde->dw_fde_end = crtl->subsections.cold_section_end_label;
1147       fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
1148       fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
1149     }
1150   else
1151     {
1152       fde->dw_fde_end = crtl->subsections.hot_section_end_label;
1153       fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
1154       fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
1155     }
1156   have_multiple_function_sections = true;
1157
1158   /* There is no need to mark used sections when not debugging.  */
1159   if (cold_text_section != NULL)
1160     dwarf2out_note_section_used ();
1161
1162   if (dwarf2out_do_cfi_asm ())
1163     fprintf (asm_out_file, "\t.cfi_endproc\n");
1164
1165   /* Now do the real section switch.  */
1166   sect = current_function_section ();
1167   switch_to_section (sect);
1168
1169   fde->second_in_std_section
1170     = (sect == text_section
1171        || (cold_text_section && sect == cold_text_section));
1172
1173   if (dwarf2out_do_cfi_asm ())
1174     dwarf2out_do_cfi_startproc (true);
1175
1176   var_location_switch_text_section ();
1177
1178   set_cur_line_info_table (sect);
1179 }
1180 \f
1181 /* And now, the subset of the debugging information support code necessary
1182    for emitting location expressions.  */
1183
1184 /* Data about a single source file.  */
1185 struct GTY(()) dwarf_file_data {
1186   const char * filename;
1187   int emitted_number;
1188 };
1189
1190 typedef struct GTY(()) deferred_locations_struct
1191 {
1192   tree variable;
1193   dw_die_ref die;
1194 } deferred_locations;
1195
1196 DEF_VEC_O(deferred_locations);
1197 DEF_VEC_ALLOC_O(deferred_locations,gc);
1198
1199 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
1200
1201 DEF_VEC_P(dw_die_ref);
1202 DEF_VEC_ALLOC_P(dw_die_ref,heap);
1203
1204 /* Location lists are ranges + location descriptions for that range,
1205    so you can track variables that are in different places over
1206    their entire life.  */
1207 typedef struct GTY(()) dw_loc_list_struct {
1208   dw_loc_list_ref dw_loc_next;
1209   const char *begin; /* Label for begin address of range */
1210   const char *end;  /* Label for end address of range */
1211   char *ll_symbol; /* Label for beginning of location list.
1212                       Only on head of list */
1213   const char *section; /* Section this loclist is relative to */
1214   dw_loc_descr_ref expr;
1215   hashval_t hash;
1216   /* True if all addresses in this and subsequent lists are known to be
1217      resolved.  */
1218   bool resolved_addr;
1219   /* True if this list has been replaced by dw_loc_next.  */
1220   bool replaced;
1221   bool emitted;
1222   /* True if the range should be emitted even if begin and end
1223      are the same.  */
1224   bool force;
1225 } dw_loc_list_node;
1226
1227 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
1228
1229 /* Convert a DWARF stack opcode into its string name.  */
1230
1231 static const char *
1232 dwarf_stack_op_name (unsigned int op)
1233 {
1234   switch (op)
1235     {
1236     case DW_OP_addr:
1237       return "DW_OP_addr";
1238     case DW_OP_deref:
1239       return "DW_OP_deref";
1240     case DW_OP_const1u:
1241       return "DW_OP_const1u";
1242     case DW_OP_const1s:
1243       return "DW_OP_const1s";
1244     case DW_OP_const2u:
1245       return "DW_OP_const2u";
1246     case DW_OP_const2s:
1247       return "DW_OP_const2s";
1248     case DW_OP_const4u:
1249       return "DW_OP_const4u";
1250     case DW_OP_const4s:
1251       return "DW_OP_const4s";
1252     case DW_OP_const8u:
1253       return "DW_OP_const8u";
1254     case DW_OP_const8s:
1255       return "DW_OP_const8s";
1256     case DW_OP_constu:
1257       return "DW_OP_constu";
1258     case DW_OP_consts:
1259       return "DW_OP_consts";
1260     case DW_OP_dup:
1261       return "DW_OP_dup";
1262     case DW_OP_drop:
1263       return "DW_OP_drop";
1264     case DW_OP_over:
1265       return "DW_OP_over";
1266     case DW_OP_pick:
1267       return "DW_OP_pick";
1268     case DW_OP_swap:
1269       return "DW_OP_swap";
1270     case DW_OP_rot:
1271       return "DW_OP_rot";
1272     case DW_OP_xderef:
1273       return "DW_OP_xderef";
1274     case DW_OP_abs:
1275       return "DW_OP_abs";
1276     case DW_OP_and:
1277       return "DW_OP_and";
1278     case DW_OP_div:
1279       return "DW_OP_div";
1280     case DW_OP_minus:
1281       return "DW_OP_minus";
1282     case DW_OP_mod:
1283       return "DW_OP_mod";
1284     case DW_OP_mul:
1285       return "DW_OP_mul";
1286     case DW_OP_neg:
1287       return "DW_OP_neg";
1288     case DW_OP_not:
1289       return "DW_OP_not";
1290     case DW_OP_or:
1291       return "DW_OP_or";
1292     case DW_OP_plus:
1293       return "DW_OP_plus";
1294     case DW_OP_plus_uconst:
1295       return "DW_OP_plus_uconst";
1296     case DW_OP_shl:
1297       return "DW_OP_shl";
1298     case DW_OP_shr:
1299       return "DW_OP_shr";
1300     case DW_OP_shra:
1301       return "DW_OP_shra";
1302     case DW_OP_xor:
1303       return "DW_OP_xor";
1304     case DW_OP_bra:
1305       return "DW_OP_bra";
1306     case DW_OP_eq:
1307       return "DW_OP_eq";
1308     case DW_OP_ge:
1309       return "DW_OP_ge";
1310     case DW_OP_gt:
1311       return "DW_OP_gt";
1312     case DW_OP_le:
1313       return "DW_OP_le";
1314     case DW_OP_lt:
1315       return "DW_OP_lt";
1316     case DW_OP_ne:
1317       return "DW_OP_ne";
1318     case DW_OP_skip:
1319       return "DW_OP_skip";
1320     case DW_OP_lit0:
1321       return "DW_OP_lit0";
1322     case DW_OP_lit1:
1323       return "DW_OP_lit1";
1324     case DW_OP_lit2:
1325       return "DW_OP_lit2";
1326     case DW_OP_lit3:
1327       return "DW_OP_lit3";
1328     case DW_OP_lit4:
1329       return "DW_OP_lit4";
1330     case DW_OP_lit5:
1331       return "DW_OP_lit5";
1332     case DW_OP_lit6:
1333       return "DW_OP_lit6";
1334     case DW_OP_lit7:
1335       return "DW_OP_lit7";
1336     case DW_OP_lit8:
1337       return "DW_OP_lit8";
1338     case DW_OP_lit9:
1339       return "DW_OP_lit9";
1340     case DW_OP_lit10:
1341       return "DW_OP_lit10";
1342     case DW_OP_lit11:
1343       return "DW_OP_lit11";
1344     case DW_OP_lit12:
1345       return "DW_OP_lit12";
1346     case DW_OP_lit13:
1347       return "DW_OP_lit13";
1348     case DW_OP_lit14:
1349       return "DW_OP_lit14";
1350     case DW_OP_lit15:
1351       return "DW_OP_lit15";
1352     case DW_OP_lit16:
1353       return "DW_OP_lit16";
1354     case DW_OP_lit17:
1355       return "DW_OP_lit17";
1356     case DW_OP_lit18:
1357       return "DW_OP_lit18";
1358     case DW_OP_lit19:
1359       return "DW_OP_lit19";
1360     case DW_OP_lit20:
1361       return "DW_OP_lit20";
1362     case DW_OP_lit21:
1363       return "DW_OP_lit21";
1364     case DW_OP_lit22:
1365       return "DW_OP_lit22";
1366     case DW_OP_lit23:
1367       return "DW_OP_lit23";
1368     case DW_OP_lit24:
1369       return "DW_OP_lit24";
1370     case DW_OP_lit25:
1371       return "DW_OP_lit25";
1372     case DW_OP_lit26:
1373       return "DW_OP_lit26";
1374     case DW_OP_lit27:
1375       return "DW_OP_lit27";
1376     case DW_OP_lit28:
1377       return "DW_OP_lit28";
1378     case DW_OP_lit29:
1379       return "DW_OP_lit29";
1380     case DW_OP_lit30:
1381       return "DW_OP_lit30";
1382     case DW_OP_lit31:
1383       return "DW_OP_lit31";
1384     case DW_OP_reg0:
1385       return "DW_OP_reg0";
1386     case DW_OP_reg1:
1387       return "DW_OP_reg1";
1388     case DW_OP_reg2:
1389       return "DW_OP_reg2";
1390     case DW_OP_reg3:
1391       return "DW_OP_reg3";
1392     case DW_OP_reg4:
1393       return "DW_OP_reg4";
1394     case DW_OP_reg5:
1395       return "DW_OP_reg5";
1396     case DW_OP_reg6:
1397       return "DW_OP_reg6";
1398     case DW_OP_reg7:
1399       return "DW_OP_reg7";
1400     case DW_OP_reg8:
1401       return "DW_OP_reg8";
1402     case DW_OP_reg9:
1403       return "DW_OP_reg9";
1404     case DW_OP_reg10:
1405       return "DW_OP_reg10";
1406     case DW_OP_reg11:
1407       return "DW_OP_reg11";
1408     case DW_OP_reg12:
1409       return "DW_OP_reg12";
1410     case DW_OP_reg13:
1411       return "DW_OP_reg13";
1412     case DW_OP_reg14:
1413       return "DW_OP_reg14";
1414     case DW_OP_reg15:
1415       return "DW_OP_reg15";
1416     case DW_OP_reg16:
1417       return "DW_OP_reg16";
1418     case DW_OP_reg17:
1419       return "DW_OP_reg17";
1420     case DW_OP_reg18:
1421       return "DW_OP_reg18";
1422     case DW_OP_reg19:
1423       return "DW_OP_reg19";
1424     case DW_OP_reg20:
1425       return "DW_OP_reg20";
1426     case DW_OP_reg21:
1427       return "DW_OP_reg21";
1428     case DW_OP_reg22:
1429       return "DW_OP_reg22";
1430     case DW_OP_reg23:
1431       return "DW_OP_reg23";
1432     case DW_OP_reg24:
1433       return "DW_OP_reg24";
1434     case DW_OP_reg25:
1435       return "DW_OP_reg25";
1436     case DW_OP_reg26:
1437       return "DW_OP_reg26";
1438     case DW_OP_reg27:
1439       return "DW_OP_reg27";
1440     case DW_OP_reg28:
1441       return "DW_OP_reg28";
1442     case DW_OP_reg29:
1443       return "DW_OP_reg29";
1444     case DW_OP_reg30:
1445       return "DW_OP_reg30";
1446     case DW_OP_reg31:
1447       return "DW_OP_reg31";
1448     case DW_OP_breg0:
1449       return "DW_OP_breg0";
1450     case DW_OP_breg1:
1451       return "DW_OP_breg1";
1452     case DW_OP_breg2:
1453       return "DW_OP_breg2";
1454     case DW_OP_breg3:
1455       return "DW_OP_breg3";
1456     case DW_OP_breg4:
1457       return "DW_OP_breg4";
1458     case DW_OP_breg5:
1459       return "DW_OP_breg5";
1460     case DW_OP_breg6:
1461       return "DW_OP_breg6";
1462     case DW_OP_breg7:
1463       return "DW_OP_breg7";
1464     case DW_OP_breg8:
1465       return "DW_OP_breg8";
1466     case DW_OP_breg9:
1467       return "DW_OP_breg9";
1468     case DW_OP_breg10:
1469       return "DW_OP_breg10";
1470     case DW_OP_breg11:
1471       return "DW_OP_breg11";
1472     case DW_OP_breg12:
1473       return "DW_OP_breg12";
1474     case DW_OP_breg13:
1475       return "DW_OP_breg13";
1476     case DW_OP_breg14:
1477       return "DW_OP_breg14";
1478     case DW_OP_breg15:
1479       return "DW_OP_breg15";
1480     case DW_OP_breg16:
1481       return "DW_OP_breg16";
1482     case DW_OP_breg17:
1483       return "DW_OP_breg17";
1484     case DW_OP_breg18:
1485       return "DW_OP_breg18";
1486     case DW_OP_breg19:
1487       return "DW_OP_breg19";
1488     case DW_OP_breg20:
1489       return "DW_OP_breg20";
1490     case DW_OP_breg21:
1491       return "DW_OP_breg21";
1492     case DW_OP_breg22:
1493       return "DW_OP_breg22";
1494     case DW_OP_breg23:
1495       return "DW_OP_breg23";
1496     case DW_OP_breg24:
1497       return "DW_OP_breg24";
1498     case DW_OP_breg25:
1499       return "DW_OP_breg25";
1500     case DW_OP_breg26:
1501       return "DW_OP_breg26";
1502     case DW_OP_breg27:
1503       return "DW_OP_breg27";
1504     case DW_OP_breg28:
1505       return "DW_OP_breg28";
1506     case DW_OP_breg29:
1507       return "DW_OP_breg29";
1508     case DW_OP_breg30:
1509       return "DW_OP_breg30";
1510     case DW_OP_breg31:
1511       return "DW_OP_breg31";
1512     case DW_OP_regx:
1513       return "DW_OP_regx";
1514     case DW_OP_fbreg:
1515       return "DW_OP_fbreg";
1516     case DW_OP_bregx:
1517       return "DW_OP_bregx";
1518     case DW_OP_piece:
1519       return "DW_OP_piece";
1520     case DW_OP_deref_size:
1521       return "DW_OP_deref_size";
1522     case DW_OP_xderef_size:
1523       return "DW_OP_xderef_size";
1524     case DW_OP_nop:
1525       return "DW_OP_nop";
1526
1527     case DW_OP_push_object_address:
1528       return "DW_OP_push_object_address";
1529     case DW_OP_call2:
1530       return "DW_OP_call2";
1531     case DW_OP_call4:
1532       return "DW_OP_call4";
1533     case DW_OP_call_ref:
1534       return "DW_OP_call_ref";
1535     case DW_OP_implicit_value:
1536       return "DW_OP_implicit_value";
1537     case DW_OP_stack_value:
1538       return "DW_OP_stack_value";
1539     case DW_OP_form_tls_address:
1540       return "DW_OP_form_tls_address";
1541     case DW_OP_call_frame_cfa:
1542       return "DW_OP_call_frame_cfa";
1543     case DW_OP_bit_piece:
1544       return "DW_OP_bit_piece";
1545
1546     case DW_OP_GNU_push_tls_address:
1547       return "DW_OP_GNU_push_tls_address";
1548     case DW_OP_GNU_uninit:
1549       return "DW_OP_GNU_uninit";
1550     case DW_OP_GNU_encoded_addr:
1551       return "DW_OP_GNU_encoded_addr";
1552     case DW_OP_GNU_implicit_pointer:
1553       return "DW_OP_GNU_implicit_pointer";
1554     case DW_OP_GNU_entry_value:
1555       return "DW_OP_GNU_entry_value";
1556     case DW_OP_GNU_const_type:
1557       return "DW_OP_GNU_const_type";
1558     case DW_OP_GNU_regval_type:
1559       return "DW_OP_GNU_regval_type";
1560     case DW_OP_GNU_deref_type:
1561       return "DW_OP_GNU_deref_type";
1562     case DW_OP_GNU_convert:
1563       return "DW_OP_GNU_convert";
1564     case DW_OP_GNU_reinterpret:
1565       return "DW_OP_GNU_reinterpret";
1566     case DW_OP_GNU_parameter_ref:
1567       return "DW_OP_GNU_parameter_ref";
1568
1569     default:
1570       return "OP_<unknown>";
1571     }
1572 }
1573
1574 /* Return a pointer to a newly allocated location description.  Location
1575    descriptions are simple expression terms that can be strung
1576    together to form more complicated location (address) descriptions.  */
1577
1578 static inline dw_loc_descr_ref
1579 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1580                unsigned HOST_WIDE_INT oprnd2)
1581 {
1582   dw_loc_descr_ref descr = ggc_alloc_cleared_dw_loc_descr_node ();
1583
1584   descr->dw_loc_opc = op;
1585   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1586   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1587   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1588   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1589
1590   return descr;
1591 }
1592
1593 /* Return a pointer to a newly allocated location description for
1594    REG and OFFSET.  */
1595
1596 static inline dw_loc_descr_ref
1597 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
1598 {
1599   if (reg <= 31)
1600     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1601                           offset, 0);
1602   else
1603     return new_loc_descr (DW_OP_bregx, reg, offset);
1604 }
1605
1606 /* Add a location description term to a location description expression.  */
1607
1608 static inline void
1609 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1610 {
1611   dw_loc_descr_ref *d;
1612
1613   /* Find the end of the chain.  */
1614   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1615     ;
1616
1617   *d = descr;
1618 }
1619
1620 /* Compare two location operands for exact equality.  */
1621
1622 static bool
1623 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1624 {
1625   if (a->val_class != b->val_class)
1626     return false;
1627   switch (a->val_class)
1628     {
1629     case dw_val_class_none:
1630       return true;
1631     case dw_val_class_addr:
1632       return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1633
1634     case dw_val_class_offset:
1635     case dw_val_class_unsigned_const:
1636     case dw_val_class_const:
1637     case dw_val_class_range_list:
1638     case dw_val_class_lineptr:
1639     case dw_val_class_macptr:
1640       /* These are all HOST_WIDE_INT, signed or unsigned.  */
1641       return a->v.val_unsigned == b->v.val_unsigned;
1642
1643     case dw_val_class_loc:
1644       return a->v.val_loc == b->v.val_loc;
1645     case dw_val_class_loc_list:
1646       return a->v.val_loc_list == b->v.val_loc_list;
1647     case dw_val_class_die_ref:
1648       return a->v.val_die_ref.die == b->v.val_die_ref.die;
1649     case dw_val_class_fde_ref:
1650       return a->v.val_fde_index == b->v.val_fde_index;
1651     case dw_val_class_lbl_id:
1652       return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1653     case dw_val_class_str:
1654       return a->v.val_str == b->v.val_str;
1655     case dw_val_class_flag:
1656       return a->v.val_flag == b->v.val_flag;
1657     case dw_val_class_file:
1658       return a->v.val_file == b->v.val_file;
1659     case dw_val_class_decl_ref:
1660       return a->v.val_decl_ref == b->v.val_decl_ref;
1661     
1662     case dw_val_class_const_double:
1663       return (a->v.val_double.high == b->v.val_double.high
1664               && a->v.val_double.low == b->v.val_double.low);
1665
1666     case dw_val_class_vec:
1667       {
1668         size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1669         size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1670
1671         return (a_len == b_len
1672                 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1673       }
1674
1675     case dw_val_class_data8:
1676       return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1677
1678     case dw_val_class_vms_delta:
1679       return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1680               && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1681     }
1682   gcc_unreachable ();
1683 }
1684
1685 /* Compare two location atoms for exact equality.  */
1686
1687 static bool
1688 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1689 {
1690   if (a->dw_loc_opc != b->dw_loc_opc)
1691     return false;
1692
1693   /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1694      address size, but since we always allocate cleared storage it
1695      should be zero for other types of locations.  */
1696   if (a->dtprel != b->dtprel)
1697     return false;
1698
1699   return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1700           && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1701 }
1702
1703 /* Compare two complete location expressions for exact equality.  */
1704
1705 bool
1706 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1707 {
1708   while (1)
1709     {
1710       if (a == b)
1711         return true;
1712       if (a == NULL || b == NULL)
1713         return false;
1714       if (!loc_descr_equal_p_1 (a, b))
1715         return false;
1716
1717       a = a->dw_loc_next;
1718       b = b->dw_loc_next;
1719     }
1720 }
1721
1722
1723 /* Add a constant OFFSET to a location expression.  */
1724
1725 static void
1726 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
1727 {
1728   dw_loc_descr_ref loc;
1729   HOST_WIDE_INT *p;
1730
1731   gcc_assert (*list_head != NULL);
1732
1733   if (!offset)
1734     return;
1735
1736   /* Find the end of the chain.  */
1737   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1738     ;
1739
1740   p = NULL;
1741   if (loc->dw_loc_opc == DW_OP_fbreg
1742       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1743     p = &loc->dw_loc_oprnd1.v.val_int;
1744   else if (loc->dw_loc_opc == DW_OP_bregx)
1745     p = &loc->dw_loc_oprnd2.v.val_int;
1746
1747   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1748      offset.  Don't optimize if an signed integer overflow would happen.  */
1749   if (p != NULL
1750       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1751           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1752     *p += offset;
1753
1754   else if (offset > 0)
1755     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1756
1757   else
1758     {
1759       loc->dw_loc_next = int_loc_descriptor (-offset);
1760       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1761     }
1762 }
1763
1764 /* Add a constant OFFSET to a location list.  */
1765
1766 static void
1767 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
1768 {
1769   dw_loc_list_ref d;
1770   for (d = list_head; d != NULL; d = d->dw_loc_next)
1771     loc_descr_plus_const (&d->expr, offset);
1772 }
1773
1774 #define DWARF_REF_SIZE  \
1775   (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1776
1777 static unsigned long int get_base_type_offset (dw_die_ref);
1778
1779 /* Return the size of a location descriptor.  */
1780
1781 static unsigned long
1782 size_of_loc_descr (dw_loc_descr_ref loc)
1783 {
1784   unsigned long size = 1;
1785
1786   switch (loc->dw_loc_opc)
1787     {
1788     case DW_OP_addr:
1789       size += DWARF2_ADDR_SIZE;
1790       break;
1791     case DW_OP_const1u:
1792     case DW_OP_const1s:
1793       size += 1;
1794       break;
1795     case DW_OP_const2u:
1796     case DW_OP_const2s:
1797       size += 2;
1798       break;
1799     case DW_OP_const4u:
1800     case DW_OP_const4s:
1801       size += 4;
1802       break;
1803     case DW_OP_const8u:
1804     case DW_OP_const8s:
1805       size += 8;
1806       break;
1807     case DW_OP_constu:
1808       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1809       break;
1810     case DW_OP_consts:
1811       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1812       break;
1813     case DW_OP_pick:
1814       size += 1;
1815       break;
1816     case DW_OP_plus_uconst:
1817       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1818       break;
1819     case DW_OP_skip:
1820     case DW_OP_bra:
1821       size += 2;
1822       break;
1823     case DW_OP_breg0:
1824     case DW_OP_breg1:
1825     case DW_OP_breg2:
1826     case DW_OP_breg3:
1827     case DW_OP_breg4:
1828     case DW_OP_breg5:
1829     case DW_OP_breg6:
1830     case DW_OP_breg7:
1831     case DW_OP_breg8:
1832     case DW_OP_breg9:
1833     case DW_OP_breg10:
1834     case DW_OP_breg11:
1835     case DW_OP_breg12:
1836     case DW_OP_breg13:
1837     case DW_OP_breg14:
1838     case DW_OP_breg15:
1839     case DW_OP_breg16:
1840     case DW_OP_breg17:
1841     case DW_OP_breg18:
1842     case DW_OP_breg19:
1843     case DW_OP_breg20:
1844     case DW_OP_breg21:
1845     case DW_OP_breg22:
1846     case DW_OP_breg23:
1847     case DW_OP_breg24:
1848     case DW_OP_breg25:
1849     case DW_OP_breg26:
1850     case DW_OP_breg27:
1851     case DW_OP_breg28:
1852     case DW_OP_breg29:
1853     case DW_OP_breg30:
1854     case DW_OP_breg31:
1855       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1856       break;
1857     case DW_OP_regx:
1858       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1859       break;
1860     case DW_OP_fbreg:
1861       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1862       break;
1863     case DW_OP_bregx:
1864       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1865       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1866       break;
1867     case DW_OP_piece:
1868       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1869       break;
1870     case DW_OP_bit_piece:
1871       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1872       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1873       break;
1874     case DW_OP_deref_size:
1875     case DW_OP_xderef_size:
1876       size += 1;
1877       break;
1878     case DW_OP_call2:
1879       size += 2;
1880       break;
1881     case DW_OP_call4:
1882       size += 4;
1883       break;
1884     case DW_OP_call_ref:
1885       size += DWARF_REF_SIZE;
1886       break;
1887     case DW_OP_implicit_value:
1888       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1889               + loc->dw_loc_oprnd1.v.val_unsigned;
1890       break;
1891     case DW_OP_GNU_implicit_pointer:
1892       size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1893       break;
1894     case DW_OP_GNU_entry_value:
1895       {
1896         unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1897         size += size_of_uleb128 (op_size) + op_size;
1898         break;
1899       }
1900     case DW_OP_GNU_const_type:
1901       {
1902         unsigned long o
1903           = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1904         size += size_of_uleb128 (o) + 1;
1905         switch (loc->dw_loc_oprnd2.val_class)
1906           {
1907           case dw_val_class_vec:
1908             size += loc->dw_loc_oprnd2.v.val_vec.length
1909                     * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1910             break;
1911           case dw_val_class_const:
1912             size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1913             break;
1914           case dw_val_class_const_double:
1915             size += 2 * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1916             break;
1917           default:
1918             gcc_unreachable ();
1919           }
1920         break;
1921       }
1922     case DW_OP_GNU_regval_type:
1923       {
1924         unsigned long o
1925           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1926         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1927                 + size_of_uleb128 (o);
1928       }
1929       break;
1930     case DW_OP_GNU_deref_type:
1931       {
1932         unsigned long o
1933           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1934         size += 1 + size_of_uleb128 (o);
1935       }
1936       break;
1937     case DW_OP_GNU_convert:
1938     case DW_OP_GNU_reinterpret:
1939       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1940         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1941       else
1942         {
1943           unsigned long o
1944             = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1945           size += size_of_uleb128 (o);
1946         }
1947       break;
1948     case DW_OP_GNU_parameter_ref:
1949       size += 4;
1950       break;
1951     default:
1952       break;
1953     }
1954
1955   return size;
1956 }
1957
1958 /* Return the size of a series of location descriptors.  */
1959
1960 unsigned long
1961 size_of_locs (dw_loc_descr_ref loc)
1962 {
1963   dw_loc_descr_ref l;
1964   unsigned long size;
1965
1966   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1967      field, to avoid writing to a PCH file.  */
1968   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1969     {
1970       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1971         break;
1972       size += size_of_loc_descr (l);
1973     }
1974   if (! l)
1975     return size;
1976
1977   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1978     {
1979       l->dw_loc_addr = size;
1980       size += size_of_loc_descr (l);
1981     }
1982
1983   return size;
1984 }
1985
1986 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1987 static void get_ref_die_offset_label (char *, dw_die_ref);
1988 static unsigned long int get_ref_die_offset (dw_die_ref);
1989
1990 /* Output location description stack opcode's operands (if any).
1991    The for_eh_or_skip parameter controls whether register numbers are
1992    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1993    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1994    info).  This should be suppressed for the cases that have not been converted
1995    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
1996
1997 static void
1998 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
1999 {
2000   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2001   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2002
2003   switch (loc->dw_loc_opc)
2004     {
2005 #ifdef DWARF2_DEBUGGING_INFO
2006     case DW_OP_const2u:
2007     case DW_OP_const2s:
2008       dw2_asm_output_data (2, val1->v.val_int, NULL);
2009       break;
2010     case DW_OP_const4u:
2011       if (loc->dtprel)
2012         {
2013           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2014           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
2015                                                val1->v.val_addr);
2016           fputc ('\n', asm_out_file);
2017           break;
2018         }
2019       /* FALLTHRU */
2020     case DW_OP_const4s:
2021       dw2_asm_output_data (4, val1->v.val_int, NULL);
2022       break;
2023     case DW_OP_const8u:
2024       if (loc->dtprel)
2025         {
2026           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2027           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
2028                                                val1->v.val_addr);
2029           fputc ('\n', asm_out_file);
2030           break;
2031         }
2032       /* FALLTHRU */
2033     case DW_OP_const8s:
2034       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2035       dw2_asm_output_data (8, val1->v.val_int, NULL);
2036       break;
2037     case DW_OP_skip:
2038     case DW_OP_bra:
2039       {
2040         int offset;
2041
2042         gcc_assert (val1->val_class == dw_val_class_loc);
2043         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2044
2045         dw2_asm_output_data (2, offset, NULL);
2046       }
2047       break;
2048     case DW_OP_implicit_value:
2049       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2050       switch (val2->val_class)
2051         {
2052         case dw_val_class_const:
2053           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
2054           break;
2055         case dw_val_class_vec:
2056           {
2057             unsigned int elt_size = val2->v.val_vec.elt_size;
2058             unsigned int len = val2->v.val_vec.length;
2059             unsigned int i;
2060             unsigned char *p;
2061
2062             if (elt_size > sizeof (HOST_WIDE_INT))
2063               {
2064                 elt_size /= 2;
2065                 len *= 2;
2066               }
2067             for (i = 0, p = val2->v.val_vec.array;
2068                  i < len;
2069                  i++, p += elt_size)
2070               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2071                                    "fp or vector constant word %u", i);
2072           }
2073           break;
2074         case dw_val_class_const_double:
2075           {
2076             unsigned HOST_WIDE_INT first, second;
2077
2078             if (WORDS_BIG_ENDIAN)
2079               {
2080                 first = val2->v.val_double.high;
2081                 second = val2->v.val_double.low;
2082               }
2083             else
2084               {
2085                 first = val2->v.val_double.low;
2086                 second = val2->v.val_double.high;
2087               }
2088             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2089                                  first, NULL);
2090             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2091                                  second, NULL);
2092           }
2093           break;
2094         case dw_val_class_addr:
2095           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
2096           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
2097           break;
2098         default:
2099           gcc_unreachable ();
2100         }
2101       break;
2102 #else
2103     case DW_OP_const2u:
2104     case DW_OP_const2s:
2105     case DW_OP_const4u:
2106     case DW_OP_const4s:
2107     case DW_OP_const8u:
2108     case DW_OP_const8s:
2109     case DW_OP_skip:
2110     case DW_OP_bra:
2111     case DW_OP_implicit_value:
2112       /* We currently don't make any attempt to make sure these are
2113          aligned properly like we do for the main unwind info, so
2114          don't support emitting things larger than a byte if we're
2115          only doing unwinding.  */
2116       gcc_unreachable ();
2117 #endif
2118     case DW_OP_const1u:
2119     case DW_OP_const1s:
2120       dw2_asm_output_data (1, val1->v.val_int, NULL);
2121       break;
2122     case DW_OP_constu:
2123       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2124       break;
2125     case DW_OP_consts:
2126       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2127       break;
2128     case DW_OP_pick:
2129       dw2_asm_output_data (1, val1->v.val_int, NULL);
2130       break;
2131     case DW_OP_plus_uconst:
2132       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2133       break;
2134     case DW_OP_breg0:
2135     case DW_OP_breg1:
2136     case DW_OP_breg2:
2137     case DW_OP_breg3:
2138     case DW_OP_breg4:
2139     case DW_OP_breg5:
2140     case DW_OP_breg6:
2141     case DW_OP_breg7:
2142     case DW_OP_breg8:
2143     case DW_OP_breg9:
2144     case DW_OP_breg10:
2145     case DW_OP_breg11:
2146     case DW_OP_breg12:
2147     case DW_OP_breg13:
2148     case DW_OP_breg14:
2149     case DW_OP_breg15:
2150     case DW_OP_breg16:
2151     case DW_OP_breg17:
2152     case DW_OP_breg18:
2153     case DW_OP_breg19:
2154     case DW_OP_breg20:
2155     case DW_OP_breg21:
2156     case DW_OP_breg22:
2157     case DW_OP_breg23:
2158     case DW_OP_breg24:
2159     case DW_OP_breg25:
2160     case DW_OP_breg26:
2161     case DW_OP_breg27:
2162     case DW_OP_breg28:
2163     case DW_OP_breg29:
2164     case DW_OP_breg30:
2165     case DW_OP_breg31:
2166       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2167       break;
2168     case DW_OP_regx:
2169       {
2170         unsigned r = val1->v.val_unsigned;
2171         if (for_eh_or_skip >= 0)
2172           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2173         gcc_assert (size_of_uleb128 (r) 
2174                     == size_of_uleb128 (val1->v.val_unsigned));
2175         dw2_asm_output_data_uleb128 (r, NULL);  
2176       }
2177       break;
2178     case DW_OP_fbreg:
2179       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2180       break;
2181     case DW_OP_bregx:
2182       {
2183         unsigned r = val1->v.val_unsigned;
2184         if (for_eh_or_skip >= 0)
2185           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2186         gcc_assert (size_of_uleb128 (r) 
2187                     == size_of_uleb128 (val1->v.val_unsigned));
2188         dw2_asm_output_data_uleb128 (r, NULL);  
2189         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2190       }
2191       break;
2192     case DW_OP_piece:
2193       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2194       break;
2195     case DW_OP_bit_piece:
2196       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2197       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
2198       break;
2199     case DW_OP_deref_size:
2200     case DW_OP_xderef_size:
2201       dw2_asm_output_data (1, val1->v.val_int, NULL);
2202       break;
2203
2204     case DW_OP_addr:
2205       if (loc->dtprel)
2206         {
2207           if (targetm.asm_out.output_dwarf_dtprel)
2208             {
2209               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
2210                                                    DWARF2_ADDR_SIZE,
2211                                                    val1->v.val_addr);
2212               fputc ('\n', asm_out_file);
2213             }
2214           else
2215             gcc_unreachable ();
2216         }
2217       else
2218         {
2219 #ifdef DWARF2_DEBUGGING_INFO
2220           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2221 #else
2222           gcc_unreachable ();
2223 #endif
2224         }
2225       break;
2226
2227     case DW_OP_GNU_implicit_pointer:
2228       {
2229         char label[MAX_ARTIFICIAL_LABEL_BYTES
2230                    + HOST_BITS_PER_WIDE_INT / 2 + 2];
2231         gcc_assert (val1->val_class == dw_val_class_die_ref);
2232         get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2233         dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2234         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2235       }
2236       break;
2237
2238     case DW_OP_GNU_entry_value:
2239       dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2240       output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2241       break;
2242
2243     case DW_OP_GNU_const_type:
2244       {
2245         unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2246         gcc_assert (o);
2247         dw2_asm_output_data_uleb128 (o, NULL);
2248         switch (val2->val_class)
2249           {
2250           case dw_val_class_const:
2251             l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2252             dw2_asm_output_data (1, l, NULL);
2253             dw2_asm_output_data (l, val2->v.val_int, NULL);
2254             break;
2255           case dw_val_class_vec:
2256             {
2257               unsigned int elt_size = val2->v.val_vec.elt_size;
2258               unsigned int len = val2->v.val_vec.length;
2259               unsigned int i;
2260               unsigned char *p;
2261
2262               l = len * elt_size;
2263               dw2_asm_output_data (1, l, NULL);
2264               if (elt_size > sizeof (HOST_WIDE_INT))
2265                 {
2266                   elt_size /= 2;
2267                   len *= 2;
2268                 }
2269               for (i = 0, p = val2->v.val_vec.array;
2270                    i < len;
2271                    i++, p += elt_size)
2272                 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2273                                      "fp or vector constant word %u", i);
2274             }
2275             break;
2276           case dw_val_class_const_double:
2277             {
2278               unsigned HOST_WIDE_INT first, second;
2279               l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2280
2281               dw2_asm_output_data (1, 2 * l, NULL);
2282               if (WORDS_BIG_ENDIAN)
2283                 {
2284                   first = val2->v.val_double.high;
2285                   second = val2->v.val_double.low;
2286                 }
2287               else
2288                 {
2289                   first = val2->v.val_double.low;
2290                   second = val2->v.val_double.high;
2291                 }
2292               dw2_asm_output_data (l, first, NULL);
2293               dw2_asm_output_data (l, second, NULL);
2294             }
2295             break;
2296           default:
2297             gcc_unreachable ();
2298           }
2299       }
2300       break;
2301     case DW_OP_GNU_regval_type:
2302       {
2303         unsigned r = val1->v.val_unsigned;
2304         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2305         gcc_assert (o);
2306         if (for_eh_or_skip >= 0)
2307           {
2308             r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2309             gcc_assert (size_of_uleb128 (r)
2310                         == size_of_uleb128 (val1->v.val_unsigned));
2311           }
2312         dw2_asm_output_data_uleb128 (r, NULL);
2313         dw2_asm_output_data_uleb128 (o, NULL);
2314       }
2315       break;
2316     case DW_OP_GNU_deref_type:
2317       {
2318         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2319         gcc_assert (o);
2320         dw2_asm_output_data (1, val1->v.val_int, NULL);
2321         dw2_asm_output_data_uleb128 (o, NULL);
2322       }
2323       break;
2324     case DW_OP_GNU_convert:
2325     case DW_OP_GNU_reinterpret:
2326       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2327         dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2328       else
2329         {
2330           unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2331           gcc_assert (o);
2332           dw2_asm_output_data_uleb128 (o, NULL);
2333         }
2334       break;
2335
2336     case DW_OP_GNU_parameter_ref:
2337       {
2338         unsigned long o;
2339         gcc_assert (val1->val_class == dw_val_class_die_ref);
2340         o = get_ref_die_offset (val1->v.val_die_ref.die);
2341         dw2_asm_output_data (4, o, NULL);
2342       }
2343       break;
2344
2345     default:
2346       /* Other codes have no operands.  */
2347       break;
2348     }
2349 }
2350
2351 /* Output a sequence of location operations.  
2352    The for_eh_or_skip parameter controls whether register numbers are
2353    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2354    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2355    info).  This should be suppressed for the cases that have not been converted
2356    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
2357
2358 void
2359 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2360 {
2361   for (; loc != NULL; loc = loc->dw_loc_next)
2362     {
2363       enum dwarf_location_atom opc = loc->dw_loc_opc;
2364       /* Output the opcode.  */
2365       if (for_eh_or_skip >= 0 
2366           && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2367         {
2368           unsigned r = (opc - DW_OP_breg0);
2369           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2370           gcc_assert (r <= 31);
2371           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2372         }
2373       else if (for_eh_or_skip >= 0 
2374                && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2375         {
2376           unsigned r = (opc - DW_OP_reg0);
2377           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2378           gcc_assert (r <= 31);
2379           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2380         }
2381
2382       dw2_asm_output_data (1, opc,
2383                              "%s", dwarf_stack_op_name (opc));
2384
2385       /* Output the operand(s) (if any).  */
2386       output_loc_operands (loc, for_eh_or_skip);
2387     }
2388 }
2389
2390 /* Output location description stack opcode's operands (if any).
2391    The output is single bytes on a line, suitable for .cfi_escape.  */
2392
2393 static void
2394 output_loc_operands_raw (dw_loc_descr_ref loc)
2395 {
2396   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2397   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2398
2399   switch (loc->dw_loc_opc)
2400     {
2401     case DW_OP_addr:
2402     case DW_OP_implicit_value:
2403       /* We cannot output addresses in .cfi_escape, only bytes.  */
2404       gcc_unreachable ();
2405
2406     case DW_OP_const1u:
2407     case DW_OP_const1s:
2408     case DW_OP_pick:
2409     case DW_OP_deref_size:
2410     case DW_OP_xderef_size:
2411       fputc (',', asm_out_file);
2412       dw2_asm_output_data_raw (1, val1->v.val_int);
2413       break;
2414
2415     case DW_OP_const2u:
2416     case DW_OP_const2s:
2417       fputc (',', asm_out_file);
2418       dw2_asm_output_data_raw (2, val1->v.val_int);
2419       break;
2420
2421     case DW_OP_const4u:
2422     case DW_OP_const4s:
2423       fputc (',', asm_out_file);
2424       dw2_asm_output_data_raw (4, val1->v.val_int);
2425       break;
2426
2427     case DW_OP_const8u:
2428     case DW_OP_const8s:
2429       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2430       fputc (',', asm_out_file);
2431       dw2_asm_output_data_raw (8, val1->v.val_int);
2432       break;
2433
2434     case DW_OP_skip:
2435     case DW_OP_bra:
2436       {
2437         int offset;
2438
2439         gcc_assert (val1->val_class == dw_val_class_loc);
2440         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2441
2442         fputc (',', asm_out_file);
2443         dw2_asm_output_data_raw (2, offset);
2444       }
2445       break;
2446
2447     case DW_OP_regx:
2448       {
2449         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2450         gcc_assert (size_of_uleb128 (r) 
2451                     == size_of_uleb128 (val1->v.val_unsigned));
2452         fputc (',', asm_out_file);
2453         dw2_asm_output_data_uleb128_raw (r);
2454       }
2455       break;
2456       
2457     case DW_OP_constu:
2458     case DW_OP_plus_uconst:
2459     case DW_OP_piece:
2460       fputc (',', asm_out_file);
2461       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2462       break;
2463
2464     case DW_OP_bit_piece:
2465       fputc (',', asm_out_file);
2466       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2467       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2468       break;
2469
2470     case DW_OP_consts:
2471     case DW_OP_breg0:
2472     case DW_OP_breg1:
2473     case DW_OP_breg2:
2474     case DW_OP_breg3:
2475     case DW_OP_breg4:
2476     case DW_OP_breg5:
2477     case DW_OP_breg6:
2478     case DW_OP_breg7:
2479     case DW_OP_breg8:
2480     case DW_OP_breg9:
2481     case DW_OP_breg10:
2482     case DW_OP_breg11:
2483     case DW_OP_breg12:
2484     case DW_OP_breg13:
2485     case DW_OP_breg14:
2486     case DW_OP_breg15:
2487     case DW_OP_breg16:
2488     case DW_OP_breg17:
2489     case DW_OP_breg18:
2490     case DW_OP_breg19:
2491     case DW_OP_breg20:
2492     case DW_OP_breg21:
2493     case DW_OP_breg22:
2494     case DW_OP_breg23:
2495     case DW_OP_breg24:
2496     case DW_OP_breg25:
2497     case DW_OP_breg26:
2498     case DW_OP_breg27:
2499     case DW_OP_breg28:
2500     case DW_OP_breg29:
2501     case DW_OP_breg30:
2502     case DW_OP_breg31:
2503     case DW_OP_fbreg:
2504       fputc (',', asm_out_file);
2505       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2506       break;
2507
2508     case DW_OP_bregx:
2509       {
2510         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2511         gcc_assert (size_of_uleb128 (r) 
2512                     == size_of_uleb128 (val1->v.val_unsigned));
2513         fputc (',', asm_out_file);
2514         dw2_asm_output_data_uleb128_raw (r);
2515         fputc (',', asm_out_file);
2516         dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2517       }
2518       break;
2519
2520     case DW_OP_GNU_implicit_pointer:
2521     case DW_OP_GNU_entry_value:
2522     case DW_OP_GNU_const_type:
2523     case DW_OP_GNU_regval_type:
2524     case DW_OP_GNU_deref_type:
2525     case DW_OP_GNU_convert:
2526     case DW_OP_GNU_reinterpret:
2527     case DW_OP_GNU_parameter_ref:
2528       gcc_unreachable ();
2529       break;
2530
2531     default:
2532       /* Other codes have no operands.  */
2533       break;
2534     }
2535 }
2536
2537 void
2538 output_loc_sequence_raw (dw_loc_descr_ref loc)
2539 {
2540   while (1)
2541     {
2542       enum dwarf_location_atom opc = loc->dw_loc_opc;
2543       /* Output the opcode.  */
2544       if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2545         {
2546           unsigned r = (opc - DW_OP_breg0);
2547           r = DWARF2_FRAME_REG_OUT (r, 1);
2548           gcc_assert (r <= 31);
2549           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2550         }
2551       else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2552         {
2553           unsigned r = (opc - DW_OP_reg0);
2554           r = DWARF2_FRAME_REG_OUT (r, 1);
2555           gcc_assert (r <= 31);
2556           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2557         }
2558       /* Output the opcode.  */
2559       fprintf (asm_out_file, "%#x", opc);
2560       output_loc_operands_raw (loc);
2561
2562       if (!loc->dw_loc_next)
2563         break;
2564       loc = loc->dw_loc_next;
2565
2566       fputc (',', asm_out_file);
2567     }
2568 }
2569
2570 /* This function builds a dwarf location descriptor sequence from a
2571    dw_cfa_location, adding the given OFFSET to the result of the
2572    expression.  */
2573
2574 struct dw_loc_descr_struct *
2575 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
2576 {
2577   struct dw_loc_descr_struct *head, *tmp;
2578
2579   offset += cfa->offset;
2580
2581   if (cfa->indirect)
2582     {
2583       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2584       head->dw_loc_oprnd1.val_class = dw_val_class_const;
2585       tmp = new_loc_descr (DW_OP_deref, 0, 0);
2586       add_loc_descr (&head, tmp);
2587       if (offset != 0)
2588         {
2589           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
2590           add_loc_descr (&head, tmp);
2591         }
2592     }
2593   else
2594     head = new_reg_loc_descr (cfa->reg, offset);
2595
2596   return head;
2597 }
2598
2599 /* This function builds a dwarf location descriptor sequence for
2600    the address at OFFSET from the CFA when stack is aligned to
2601    ALIGNMENT byte.  */
2602
2603 struct dw_loc_descr_struct *
2604 build_cfa_aligned_loc (dw_cfa_location *cfa,
2605                        HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
2606 {
2607   struct dw_loc_descr_struct *head;
2608   unsigned int dwarf_fp
2609     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2610
2611   /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
2612   if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2613     {
2614       head = new_reg_loc_descr (dwarf_fp, 0);
2615       add_loc_descr (&head, int_loc_descriptor (alignment));
2616       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2617       loc_descr_plus_const (&head, offset);
2618     }
2619   else
2620     head = new_reg_loc_descr (dwarf_fp, offset);
2621   return head;
2622 }
2623 \f
2624 /* And now, the support for symbolic debugging information.  */
2625
2626 /* .debug_str support.  */
2627 static int output_indirect_string (void **, void *);
2628
2629 static void dwarf2out_init (const char *);
2630 static void dwarf2out_finish (const char *);
2631 static void dwarf2out_assembly_start (void);
2632 static void dwarf2out_define (unsigned int, const char *);
2633 static void dwarf2out_undef (unsigned int, const char *);
2634 static void dwarf2out_start_source_file (unsigned, const char *);
2635 static void dwarf2out_end_source_file (unsigned);
2636 static void dwarf2out_function_decl (tree);
2637 static void dwarf2out_begin_block (unsigned, unsigned);
2638 static void dwarf2out_end_block (unsigned, unsigned);
2639 static bool dwarf2out_ignore_block (const_tree);
2640 static void dwarf2out_global_decl (tree);
2641 static void dwarf2out_type_decl (tree, int);
2642 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
2643 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2644                                                  dw_die_ref);
2645 static void dwarf2out_abstract_function (tree);
2646 static void dwarf2out_var_location (rtx);
2647 static void dwarf2out_begin_function (tree);
2648 static void dwarf2out_set_name (tree, tree);
2649
2650 /* The debug hooks structure.  */
2651
2652 const struct gcc_debug_hooks dwarf2_debug_hooks =
2653 {
2654   dwarf2out_init,
2655   dwarf2out_finish,
2656   dwarf2out_assembly_start,
2657   dwarf2out_define,
2658   dwarf2out_undef,
2659   dwarf2out_start_source_file,
2660   dwarf2out_end_source_file,
2661   dwarf2out_begin_block,
2662   dwarf2out_end_block,
2663   dwarf2out_ignore_block,
2664   dwarf2out_source_line,
2665   dwarf2out_begin_prologue,
2666 #if VMS_DEBUGGING_INFO
2667   dwarf2out_vms_end_prologue,
2668   dwarf2out_vms_begin_epilogue,
2669 #else
2670   debug_nothing_int_charstar,
2671   debug_nothing_int_charstar,
2672 #endif
2673   dwarf2out_end_epilogue,
2674   dwarf2out_begin_function,
2675   debug_nothing_int,            /* end_function */
2676   dwarf2out_function_decl,      /* function_decl */
2677   dwarf2out_global_decl,
2678   dwarf2out_type_decl,          /* type_decl */
2679   dwarf2out_imported_module_or_decl,
2680   debug_nothing_tree,           /* deferred_inline_function */
2681   /* The DWARF 2 backend tries to reduce debugging bloat by not
2682      emitting the abstract description of inline functions until
2683      something tries to reference them.  */
2684   dwarf2out_abstract_function,  /* outlining_inline_function */
2685   debug_nothing_rtx,            /* label */
2686   debug_nothing_int,            /* handle_pch */
2687   dwarf2out_var_location,
2688   dwarf2out_switch_text_section,
2689   dwarf2out_set_name,
2690   1,                            /* start_end_main_source_file */
2691   TYPE_SYMTAB_IS_DIE            /* tree_type_symtab_field */
2692 };
2693 \f
2694 /* NOTE: In the comments in this file, many references are made to
2695    "Debugging Information Entries".  This term is abbreviated as `DIE'
2696    throughout the remainder of this file.  */
2697
2698 /* An internal representation of the DWARF output is built, and then
2699    walked to generate the DWARF debugging info.  The walk of the internal
2700    representation is done after the entire program has been compiled.
2701    The types below are used to describe the internal representation.  */
2702
2703 /* Whether to put type DIEs into their own section .debug_types instead
2704    of making them part of the .debug_info section.  Only supported for
2705    Dwarf V4 or higher and the user didn't disable them through
2706    -fno-debug-types-section.  It is more efficient to put them in a
2707    separate comdat sections since the linker will then be able to
2708    remove duplicates.  But not all tools support .debug_types sections
2709    yet.  */
2710
2711 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2712
2713 /* Various DIE's use offsets relative to the beginning of the
2714    .debug_info section to refer to each other.  */
2715
2716 typedef long int dw_offset;
2717
2718 /* Define typedefs here to avoid circular dependencies.  */
2719
2720 typedef struct dw_attr_struct *dw_attr_ref;
2721 typedef struct dw_line_info_struct *dw_line_info_ref;
2722 typedef struct pubname_struct *pubname_ref;
2723 typedef struct dw_ranges_struct *dw_ranges_ref;
2724 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
2725 typedef struct comdat_type_struct *comdat_type_node_ref;
2726
2727 /* The entries in the line_info table more-or-less mirror the opcodes
2728    that are used in the real dwarf line table.  Arrays of these entries
2729    are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2730    supported.  */
2731
2732 enum dw_line_info_opcode {
2733   /* Emit DW_LNE_set_address; the operand is the label index.  */
2734   LI_set_address,
2735
2736   /* Emit a row to the matrix with the given line.  This may be done
2737      via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2738      special opcodes.  */
2739   LI_set_line,
2740
2741   /* Emit a DW_LNS_set_file.  */
2742   LI_set_file,
2743
2744   /* Emit a DW_LNS_set_column.  */
2745   LI_set_column,
2746
2747   /* Emit a DW_LNS_negate_stmt; the operand is ignored.  */
2748   LI_negate_stmt,
2749
2750   /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored.  */
2751   LI_set_prologue_end,
2752   LI_set_epilogue_begin,
2753
2754   /* Emit a DW_LNE_set_discriminator.  */
2755   LI_set_discriminator
2756 };
2757
2758 typedef struct GTY(()) dw_line_info_struct {
2759   enum dw_line_info_opcode opcode;
2760   unsigned int val;
2761 } dw_line_info_entry;
2762
2763 DEF_VEC_O(dw_line_info_entry);
2764 DEF_VEC_ALLOC_O(dw_line_info_entry, gc);
2765
2766 typedef struct GTY(()) dw_line_info_table_struct {
2767   /* The label that marks the end of this section.  */
2768   const char *end_label;
2769
2770   /* The values for the last row of the matrix, as collected in the table.
2771      These are used to minimize the changes to the next row.  */
2772   unsigned int file_num;
2773   unsigned int line_num;
2774   unsigned int column_num;
2775   int discrim_num;
2776   bool is_stmt;
2777   bool in_use;
2778
2779   VEC(dw_line_info_entry, gc) *entries;
2780 } dw_line_info_table;
2781
2782 typedef dw_line_info_table *dw_line_info_table_p;
2783
2784 DEF_VEC_P(dw_line_info_table_p);
2785 DEF_VEC_ALLOC_P(dw_line_info_table_p, gc);
2786
2787 /* Each DIE attribute has a field specifying the attribute kind,
2788    a link to the next attribute in the chain, and an attribute value.
2789    Attributes are typically linked below the DIE they modify.  */
2790
2791 typedef struct GTY(()) dw_attr_struct {
2792   enum dwarf_attribute dw_attr;
2793   dw_val_node dw_attr_val;
2794 }
2795 dw_attr_node;
2796
2797 DEF_VEC_O(dw_attr_node);
2798 DEF_VEC_ALLOC_O(dw_attr_node,gc);
2799
2800 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
2801    The children of each node form a circular list linked by
2802    die_sib.  die_child points to the node *before* the "first" child node.  */
2803
2804 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
2805   union die_symbol_or_type_node
2806     {
2807       char * GTY ((tag ("0"))) die_symbol;
2808       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
2809     }
2810   GTY ((desc ("use_debug_types"))) die_id;
2811   VEC(dw_attr_node,gc) * die_attr;
2812   dw_die_ref die_parent;
2813   dw_die_ref die_child;
2814   dw_die_ref die_sib;
2815   dw_die_ref die_definition; /* ref from a specification to its definition */
2816   dw_offset die_offset;
2817   unsigned long die_abbrev;
2818   int die_mark;
2819   /* Die is used and must not be pruned as unused.  */
2820   int die_perennial_p;
2821   unsigned int decl_id;
2822   enum dwarf_tag die_tag;
2823 }
2824 die_node;
2825
2826 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
2827 #define FOR_EACH_CHILD(die, c, expr) do {       \
2828   c = die->die_child;                           \
2829   if (c) do {                                   \
2830     c = c->die_sib;                             \
2831     expr;                                       \
2832   } while (c != die->die_child);                \
2833 } while (0)
2834
2835 /* The pubname structure */
2836
2837 typedef struct GTY(()) pubname_struct {
2838   dw_die_ref die;
2839   const char *name;
2840 }
2841 pubname_entry;
2842
2843 DEF_VEC_O(pubname_entry);
2844 DEF_VEC_ALLOC_O(pubname_entry, gc);
2845
2846 struct GTY(()) dw_ranges_struct {
2847   /* If this is positive, it's a block number, otherwise it's a
2848      bitwise-negated index into dw_ranges_by_label.  */
2849   int num;
2850 };
2851
2852 /* A structure to hold a macinfo entry.  */
2853
2854 typedef struct GTY(()) macinfo_struct {
2855   unsigned char code;
2856   unsigned HOST_WIDE_INT lineno;
2857   const char *info;
2858 }
2859 macinfo_entry;
2860
2861 DEF_VEC_O(macinfo_entry);
2862 DEF_VEC_ALLOC_O(macinfo_entry, gc);
2863
2864 struct GTY(()) dw_ranges_by_label_struct {
2865   const char *begin;
2866   const char *end;
2867 };
2868
2869 /* The comdat type node structure.  */
2870 typedef struct GTY(()) comdat_type_struct
2871 {
2872   dw_die_ref root_die;
2873   dw_die_ref type_die;
2874   char signature[DWARF_TYPE_SIGNATURE_SIZE];
2875   struct comdat_type_struct *next;
2876 }
2877 comdat_type_node;
2878
2879 /* The limbo die list structure.  */
2880 typedef struct GTY(()) limbo_die_struct {
2881   dw_die_ref die;
2882   tree created_for;
2883   struct limbo_die_struct *next;
2884 }
2885 limbo_die_node;
2886
2887 typedef struct skeleton_chain_struct
2888 {
2889   dw_die_ref old_die;
2890   dw_die_ref new_die;
2891   struct skeleton_chain_struct *parent;
2892 }
2893 skeleton_chain_node;
2894
2895 /* Define a macro which returns nonzero for a TYPE_DECL which was
2896    implicitly generated for a type.
2897
2898    Note that, unlike the C front-end (which generates a NULL named
2899    TYPE_DECL node for each complete tagged type, each array type,
2900    and each function type node created) the C++ front-end generates
2901    a _named_ TYPE_DECL node for each tagged type node created.
2902    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
2903    generate a DW_TAG_typedef DIE for them.  Likewise with the Ada
2904    front-end, but for each type, tagged or not.  */
2905
2906 #define TYPE_DECL_IS_STUB(decl)                         \
2907   (DECL_NAME (decl) == NULL_TREE                        \
2908    || (DECL_ARTIFICIAL (decl)                           \
2909        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
2910            /* This is necessary for stub decls that     \
2911               appear in nested inline functions.  */    \
2912            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
2913                && (decl_ultimate_origin (decl)          \
2914                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
2915
2916 /* Information concerning the compilation unit's programming
2917    language, and compiler version.  */
2918
2919 /* Fixed size portion of the DWARF compilation unit header.  */
2920 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
2921   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
2922
2923 /* Fixed size portion of the DWARF comdat type unit header.  */
2924 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
2925   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
2926    + DWARF_OFFSET_SIZE)
2927
2928 /* Fixed size portion of public names info.  */
2929 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
2930
2931 /* Fixed size portion of the address range info.  */
2932 #define DWARF_ARANGES_HEADER_SIZE                                       \
2933   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
2934                 DWARF2_ADDR_SIZE * 2)                                   \
2935    - DWARF_INITIAL_LENGTH_SIZE)
2936
2937 /* Size of padding portion in the address range info.  It must be
2938    aligned to twice the pointer size.  */
2939 #define DWARF_ARANGES_PAD_SIZE \
2940   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2941                 DWARF2_ADDR_SIZE * 2)                              \
2942    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
2943
2944 /* Use assembler line directives if available.  */
2945 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
2946 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
2947 #define DWARF2_ASM_LINE_DEBUG_INFO 1
2948 #else
2949 #define DWARF2_ASM_LINE_DEBUG_INFO 0
2950 #endif
2951 #endif
2952
2953 /* Minimum line offset in a special line info. opcode.
2954    This value was chosen to give a reasonable range of values.  */
2955 #define DWARF_LINE_BASE  -10
2956
2957 /* First special line opcode - leave room for the standard opcodes.  */
2958 #define DWARF_LINE_OPCODE_BASE  ((int)DW_LNS_set_isa + 1)
2959
2960 /* Range of line offsets in a special line info. opcode.  */
2961 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
2962
2963 /* Flag that indicates the initial value of the is_stmt_start flag.
2964    In the present implementation, we do not mark any lines as
2965    the beginning of a source statement, because that information
2966    is not made available by the GCC front-end.  */
2967 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
2968
2969 /* Maximum number of operations per instruction bundle.  */
2970 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
2971 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
2972 #endif
2973
2974 /* This location is used by calc_die_sizes() to keep track
2975    the offset of each DIE within the .debug_info section.  */
2976 static unsigned long next_die_offset;
2977
2978 /* Record the root of the DIE's built for the current compilation unit.  */
2979 static GTY(()) dw_die_ref single_comp_unit_die;
2980
2981 /* A list of type DIEs that have been separated into comdat sections.  */
2982 static GTY(()) comdat_type_node *comdat_type_list;
2983
2984 /* A list of DIEs with a NULL parent waiting to be relocated.  */
2985 static GTY(()) limbo_die_node *limbo_die_list;
2986
2987 /* A list of DIEs for which we may have to generate
2988    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
2989 static GTY(()) limbo_die_node *deferred_asm_name;
2990
2991 /* Filenames referenced by this compilation unit.  */
2992 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
2993
2994 /* A hash table of references to DIE's that describe declarations.
2995    The key is a DECL_UID() which is a unique number identifying each decl.  */
2996 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
2997
2998 /* A hash table of references to DIE's that describe COMMON blocks.
2999    The key is DECL_UID() ^ die_parent.  */
3000 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
3001
3002 typedef struct GTY(()) die_arg_entry_struct {
3003     dw_die_ref die;
3004     tree arg;
3005 } die_arg_entry;
3006
3007 DEF_VEC_O(die_arg_entry);
3008 DEF_VEC_ALLOC_O(die_arg_entry,gc);
3009
3010 /* Node of the variable location list.  */
3011 struct GTY ((chain_next ("%h.next"))) var_loc_node {
3012   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
3013      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
3014      in mode of the EXPR_LIST node and first EXPR_LIST operand
3015      is either NOTE_INSN_VAR_LOCATION for a piece with a known
3016      location or NULL for padding.  For larger bitsizes,
3017      mode is 0 and first operand is a CONCAT with bitsize
3018      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
3019      NULL as second operand.  */
3020   rtx GTY (()) loc;
3021   const char * GTY (()) label;
3022   struct var_loc_node * GTY (()) next;
3023 };
3024
3025 /* Variable location list.  */
3026 struct GTY (()) var_loc_list_def {
3027   struct var_loc_node * GTY (()) first;
3028
3029   /* Pointer to the last but one or last element of the
3030      chained list.  If the list is empty, both first and
3031      last are NULL, if the list contains just one node
3032      or the last node certainly is not redundant, it points
3033      to the last node, otherwise points to the last but one.
3034      Do not mark it for GC because it is marked through the chain.  */
3035   struct var_loc_node * GTY ((skip ("%h"))) last;
3036
3037   /* Pointer to the last element before section switch,
3038      if NULL, either sections weren't switched or first
3039      is after section switch.  */
3040   struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
3041
3042   /* DECL_UID of the variable decl.  */
3043   unsigned int decl_id;
3044 };
3045 typedef struct var_loc_list_def var_loc_list;
3046
3047 /* Call argument location list.  */
3048 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
3049   rtx GTY (()) call_arg_loc_note;
3050   const char * GTY (()) label;
3051   tree GTY (()) block;
3052   bool tail_call_p;
3053   rtx GTY (()) symbol_ref;
3054   struct call_arg_loc_node * GTY (()) next;
3055 };
3056
3057
3058 /* Table of decl location linked lists.  */
3059 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3060
3061 /* Head and tail of call_arg_loc chain.  */
3062 static GTY (()) struct call_arg_loc_node *call_arg_locations;
3063 static struct call_arg_loc_node *call_arg_loc_last;
3064
3065 /* Number of call sites in the current function.  */
3066 static int call_site_count = -1;
3067 /* Number of tail call sites in the current function.  */
3068 static int tail_call_site_count = -1;
3069
3070 /* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine}
3071    DIEs.  */
3072 static VEC (dw_die_ref, heap) *block_map;
3073
3074 /* A cached location list.  */
3075 struct GTY (()) cached_dw_loc_list_def {
3076   /* The DECL_UID of the decl that this entry describes.  */
3077   unsigned int decl_id;
3078
3079   /* The cached location list.  */
3080   dw_loc_list_ref loc_list;
3081 };
3082 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
3083
3084 /* Table of cached location lists.  */
3085 static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
3086
3087 /* A pointer to the base of a list of references to DIE's that
3088    are uniquely identified by their tag, presence/absence of
3089    children DIE's, and list of attribute/value pairs.  */
3090 static GTY((length ("abbrev_die_table_allocated")))
3091   dw_die_ref *abbrev_die_table;
3092
3093 /* Number of elements currently allocated for abbrev_die_table.  */
3094 static GTY(()) unsigned abbrev_die_table_allocated;
3095
3096 /* Number of elements in type_die_table currently in use.  */
3097 static GTY(()) unsigned abbrev_die_table_in_use;
3098
3099 /* Size (in elements) of increments by which we may expand the
3100    abbrev_die_table.  */
3101 #define ABBREV_DIE_TABLE_INCREMENT 256
3102
3103 /* A global counter for generating labels for line number data.  */
3104 static unsigned int line_info_label_num;
3105
3106 /* The current table to which we should emit line number information
3107    for the current function.  This will be set up at the beginning of
3108    assembly for the function.  */
3109 static dw_line_info_table *cur_line_info_table;
3110
3111 /* The two default tables of line number info.  */
3112 static GTY(()) dw_line_info_table *text_section_line_info;
3113 static GTY(()) dw_line_info_table *cold_text_section_line_info;
3114
3115 /* The set of all non-default tables of line number info.  */
3116 static GTY(()) VEC (dw_line_info_table_p, gc) *separate_line_info;
3117
3118 /* A flag to tell pubnames/types export if there is an info section to
3119    refer to.  */
3120 static bool info_section_emitted;
3121
3122 /* A pointer to the base of a table that contains a list of publicly
3123    accessible names.  */
3124 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
3125
3126 /* A pointer to the base of a table that contains a list of publicly
3127    accessible types.  */
3128 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
3129
3130 /* A pointer to the base of a table that contains a list of macro
3131    defines/undefines (and file start/end markers).  */
3132 static GTY (()) VEC (macinfo_entry, gc) * macinfo_table;
3133
3134 /* Array of dies for which we should generate .debug_ranges info.  */
3135 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3136
3137 /* Number of elements currently allocated for ranges_table.  */
3138 static GTY(()) unsigned ranges_table_allocated;
3139
3140 /* Number of elements in ranges_table currently in use.  */
3141 static GTY(()) unsigned ranges_table_in_use;
3142
3143 /* Array of pairs of labels referenced in ranges_table.  */
3144 static GTY ((length ("ranges_by_label_allocated")))
3145      dw_ranges_by_label_ref ranges_by_label;
3146
3147 /* Number of elements currently allocated for ranges_by_label.  */
3148 static GTY(()) unsigned ranges_by_label_allocated;
3149
3150 /* Number of elements in ranges_by_label currently in use.  */
3151 static GTY(()) unsigned ranges_by_label_in_use;
3152
3153 /* Size (in elements) of increments by which we may expand the
3154    ranges_table.  */
3155 #define RANGES_TABLE_INCREMENT 64
3156
3157 /* Whether we have location lists that need outputting */
3158 static GTY(()) bool have_location_lists;
3159
3160 /* Unique label counter.  */
3161 static GTY(()) unsigned int loclabel_num;
3162
3163 /* Unique label counter for point-of-call tables.  */
3164 static GTY(()) unsigned int poc_label_num;
3165
3166 /* Record whether the function being analyzed contains inlined functions.  */
3167 static int current_function_has_inlines;
3168
3169 /* The last file entry emitted by maybe_emit_file().  */
3170 static GTY(()) struct dwarf_file_data * last_emitted_file;
3171
3172 /* Number of internal labels generated by gen_internal_sym().  */
3173 static GTY(()) int label_num;
3174
3175 /* Cached result of previous call to lookup_filename.  */
3176 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
3177
3178 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
3179
3180 /* Instances of generic types for which we need to generate debug
3181    info that describe their generic parameters and arguments. That
3182    generation needs to happen once all types are properly laid out so
3183    we do it at the end of compilation.  */
3184 static GTY(()) VEC(tree,gc) *generic_type_instances;
3185
3186 /* Offset from the "steady-state frame pointer" to the frame base,
3187    within the current function.  */
3188 static HOST_WIDE_INT frame_pointer_fb_offset;
3189 static bool frame_pointer_fb_offset_valid;
3190
3191 static VEC (dw_die_ref, heap) *base_types;
3192
3193 /* Forward declarations for functions defined in this file.  */
3194
3195 static int is_pseudo_reg (const_rtx);
3196 static tree type_main_variant (tree);
3197 static int is_tagged_type (const_tree);
3198 static const char *dwarf_tag_name (unsigned);
3199 static const char *dwarf_attr_name (unsigned);
3200 static const char *dwarf_form_name (unsigned);
3201 static tree decl_ultimate_origin (const_tree);
3202 static tree decl_class_context (tree);
3203 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3204 static inline enum dw_val_class AT_class (dw_attr_ref);
3205 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3206 static inline unsigned AT_flag (dw_attr_ref);
3207 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3208 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3209 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3210 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3211 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3212                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3213 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3214                                unsigned int, unsigned char *);
3215 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3216 static hashval_t debug_str_do_hash (const void *);
3217 static int debug_str_eq (const void *, const void *);
3218 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3219 static inline const char *AT_string (dw_attr_ref);
3220 static enum dwarf_form AT_string_form (dw_attr_ref);
3221 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3222 static void add_AT_specification (dw_die_ref, dw_die_ref);
3223 static inline dw_die_ref AT_ref (dw_attr_ref);
3224 static inline int AT_ref_external (dw_attr_ref);
3225 static inline void set_AT_ref_external (dw_attr_ref, int);
3226 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3227 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3228 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3229 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3230                              dw_loc_list_ref);
3231 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3232 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3233 static inline rtx AT_addr (dw_attr_ref);
3234 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3235 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3236 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3237 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3238                            unsigned HOST_WIDE_INT);
3239 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3240                                unsigned long);
3241 static inline const char *AT_lbl (dw_attr_ref);
3242 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3243 static const char *get_AT_low_pc (dw_die_ref);
3244 static const char *get_AT_hi_pc (dw_die_ref);
3245 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3246 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3247 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3248 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3249 static bool is_cxx (void);
3250 static bool is_fortran (void);
3251 static bool is_ada (void);
3252 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3253 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3254 static void add_child_die (dw_die_ref, dw_die_ref);
3255 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3256 static dw_die_ref lookup_type_die (tree);
3257 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3258 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3259 static void equate_type_number_to_die (tree, dw_die_ref);
3260 static hashval_t decl_die_table_hash (const void *);
3261 static int decl_die_table_eq (const void *, const void *);
3262 static dw_die_ref lookup_decl_die (tree);
3263 static hashval_t common_block_die_table_hash (const void *);
3264 static int common_block_die_table_eq (const void *, const void *);
3265 static hashval_t decl_loc_table_hash (const void *);
3266 static int decl_loc_table_eq (const void *, const void *);
3267 static var_loc_list *lookup_decl_loc (const_tree);
3268 static void equate_decl_number_to_die (tree, dw_die_ref);
3269 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3270 static void print_spaces (FILE *);
3271 static void print_die (dw_die_ref, FILE *);
3272 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3273 static dw_die_ref pop_compile_unit (dw_die_ref);
3274 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3275 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3276 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3277 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3278 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3279 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3280 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
3281                                    struct md5_ctx *, int *);
3282 struct checksum_attributes;
3283 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3284 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3285 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3286 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3287 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3288 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3289 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3290 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3291 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3292 static void compute_section_prefix (dw_die_ref);
3293 static int is_type_die (dw_die_ref);
3294 static int is_comdat_die (dw_die_ref);
3295 static int is_symbol_die (dw_die_ref);
3296 static void assign_symbol_names (dw_die_ref);
3297 static void break_out_includes (dw_die_ref);
3298 static int is_declaration_die (dw_die_ref);
3299 static int should_move_die_to_comdat (dw_die_ref);
3300 static dw_die_ref clone_as_declaration (dw_die_ref);
3301 static dw_die_ref clone_die (dw_die_ref);
3302 static dw_die_ref clone_tree (dw_die_ref);
3303 static void copy_declaration_context (dw_die_ref, dw_die_ref);
3304 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3305 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3306 static dw_die_ref generate_skeleton (dw_die_ref);
3307 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3308                                                          dw_die_ref);
3309 static void break_out_comdat_types (dw_die_ref);
3310 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
3311 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
3312 static void copy_decls_for_unworthy_types (dw_die_ref);
3313
3314 static hashval_t htab_cu_hash (const void *);
3315 static int htab_cu_eq (const void *, const void *);
3316 static void htab_cu_del (void *);
3317 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
3318 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
3319 static void add_sibling_attributes (dw_die_ref);
3320 static void build_abbrev_table (dw_die_ref);
3321 static void output_location_lists (dw_die_ref);
3322 static int constant_size (unsigned HOST_WIDE_INT);
3323 static unsigned long size_of_die (dw_die_ref);
3324 static void calc_die_sizes (dw_die_ref);
3325 static void calc_base_type_die_sizes (void);
3326 static void mark_dies (dw_die_ref);
3327 static void unmark_dies (dw_die_ref);
3328 static void unmark_all_dies (dw_die_ref);
3329 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
3330 static unsigned long size_of_aranges (void);
3331 static enum dwarf_form value_format (dw_attr_ref);
3332 static void output_value_format (dw_attr_ref);
3333 static void output_abbrev_section (void);
3334 static void output_die_symbol (dw_die_ref);
3335 static void output_die (dw_die_ref);
3336 static void output_compilation_unit_header (void);
3337 static void output_comp_unit (dw_die_ref, int);
3338 static void output_comdat_type_unit (comdat_type_node *);
3339 static const char *dwarf2_name (tree, int);
3340 static void add_pubname (tree, dw_die_ref);
3341 static void add_pubname_string (const char *, dw_die_ref);
3342 static void add_pubtype (tree, dw_die_ref);
3343 static void output_pubnames (VEC (pubname_entry,gc) *);
3344 static void output_aranges (unsigned long);
3345 static unsigned int add_ranges_num (int);
3346 static unsigned int add_ranges (const_tree);
3347 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3348                                   bool *);
3349 static void output_ranges (void);
3350 static dw_line_info_table *new_line_info_table (void);
3351 static void output_line_info (void);
3352 static void output_file_names (void);
3353 static dw_die_ref base_type_die (tree);
3354 static int is_base_type (tree);
3355 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
3356 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
3357 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3358 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3359 static int type_is_enum (const_tree);
3360 static unsigned int dbx_reg_number (const_rtx);
3361 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3362 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3363 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3364                                                 enum var_init_status);
3365 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3366                                                      enum var_init_status);
3367 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3368                                          enum var_init_status);
3369 static int is_based_loc (const_rtx);
3370 static int resolve_one_addr (rtx *, void *);
3371 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3372                                                enum var_init_status);
3373 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
3374                                         enum var_init_status);
3375 static dw_loc_list_ref loc_list_from_tree (tree, int);
3376 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
3377 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3378 static tree field_type (const_tree);
3379 static unsigned int simple_type_align_in_bits (const_tree);
3380 static unsigned int simple_decl_align_in_bits (const_tree);
3381 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3382 static HOST_WIDE_INT field_byte_offset (const_tree);
3383 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3384                                          dw_loc_list_ref);
3385 static void add_data_member_location_attribute (dw_die_ref, tree);
3386 static bool add_const_value_attribute (dw_die_ref, rtx);
3387 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3388 static void insert_double (double_int, unsigned char *);
3389 static void insert_float (const_rtx, unsigned char *);
3390 static rtx rtl_for_decl_location (tree);
3391 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
3392                                                    enum dwarf_attribute);
3393 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3394 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3395 static void add_name_attribute (dw_die_ref, const char *);
3396 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3397 static void add_comp_dir_attribute (dw_die_ref);
3398 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
3399 static void add_subscript_info (dw_die_ref, tree, bool);
3400 static void add_byte_size_attribute (dw_die_ref, tree);
3401 static void add_bit_offset_attribute (dw_die_ref, tree);
3402 static void add_bit_size_attribute (dw_die_ref, tree);
3403 static void add_prototyped_attribute (dw_die_ref, tree);
3404 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3405 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3406 static void add_src_coords_attributes (dw_die_ref, tree);
3407 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3408 static void push_decl_scope (tree);
3409 static void pop_decl_scope (void);
3410 static dw_die_ref scope_die_for (tree, dw_die_ref);
3411 static inline int local_scope_p (dw_die_ref);
3412 static inline int class_scope_p (dw_die_ref);
3413 static inline int class_or_namespace_scope_p (dw_die_ref);
3414 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
3415 static void add_calling_convention_attribute (dw_die_ref, tree);
3416 static const char *type_tag (const_tree);
3417 static tree member_declared_type (const_tree);
3418 #if 0
3419 static const char *decl_start_label (tree);
3420 #endif
3421 static void gen_array_type_die (tree, dw_die_ref);
3422 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3423 #if 0
3424 static void gen_entry_point_die (tree, dw_die_ref);
3425 #endif
3426 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3427 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3428 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
3429 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3430 static void gen_formal_types_die (tree, dw_die_ref);
3431 static void gen_subprogram_die (tree, dw_die_ref);
3432 static void gen_variable_die (tree, tree, dw_die_ref);
3433 static void gen_const_die (tree, dw_die_ref);
3434 static void gen_label_die (tree, dw_die_ref);
3435 static void gen_lexical_block_die (tree, dw_die_ref, int);
3436 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
3437 static void gen_field_die (tree, dw_die_ref);
3438 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3439 static dw_die_ref gen_compile_unit_die (const char *);
3440 static void gen_inheritance_die (tree, tree, dw_die_ref);
3441 static void gen_member_die (tree, dw_die_ref);
3442 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3443                                                 enum debug_info_usage);
3444 static void gen_subroutine_type_die (tree, dw_die_ref);
3445 static void gen_typedef_die (tree, dw_die_ref);
3446 static void gen_type_die (tree, dw_die_ref);
3447 static void gen_block_die (tree, dw_die_ref, int);
3448 static void decls_for_scope (tree, dw_die_ref, int);
3449 static inline int is_redundant_typedef (const_tree);
3450 static bool is_naming_typedef_decl (const_tree);
3451 static inline dw_die_ref get_context_die (tree);
3452 static void gen_namespace_die (tree, dw_die_ref);
3453 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref);
3454 static dw_die_ref force_decl_die (tree);
3455 static dw_die_ref force_type_die (tree);
3456 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3457 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3458 static struct dwarf_file_data * lookup_filename (const char *);
3459 static void retry_incomplete_types (void);
3460 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3461 static void gen_generic_params_dies (tree);
3462 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3463 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3464 static void splice_child_die (dw_die_ref, dw_die_ref);
3465 static int file_info_cmp (const void *, const void *);
3466 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3467                                      const char *, const char *);
3468 static void output_loc_list (dw_loc_list_ref);
3469 static char *gen_internal_sym (const char *);
3470
3471 static void prune_unmark_dies (dw_die_ref);
3472 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3473 static void prune_unused_types_mark (dw_die_ref, int);
3474 static void prune_unused_types_walk (dw_die_ref);
3475 static void prune_unused_types_walk_attribs (dw_die_ref);
3476 static void prune_unused_types_prune (dw_die_ref);
3477 static void prune_unused_types (void);
3478 static int maybe_emit_file (struct dwarf_file_data *fd);
3479 static inline const char *AT_vms_delta1 (dw_attr_ref);
3480 static inline const char *AT_vms_delta2 (dw_attr_ref);
3481 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3482                                      const char *, const char *);
3483 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3484 static void gen_remaining_tmpl_value_param_die_attribute (void);
3485 static bool generic_type_p (tree);
3486 static void schedule_generic_params_dies_gen (tree t);
3487 static void gen_scheduled_generic_parms_dies (void);
3488
3489 /* Section names used to hold DWARF debugging information.  */
3490 #ifndef DEBUG_INFO_SECTION
3491 #define DEBUG_INFO_SECTION      ".debug_info"
3492 #endif
3493 #ifndef DEBUG_ABBREV_SECTION
3494 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
3495 #endif
3496 #ifndef DEBUG_ARANGES_SECTION
3497 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
3498 #endif
3499 #ifndef DEBUG_MACINFO_SECTION
3500 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
3501 #endif
3502 #ifndef DEBUG_MACRO_SECTION
3503 #define DEBUG_MACRO_SECTION     ".debug_macro"
3504 #endif
3505 #ifndef DEBUG_LINE_SECTION
3506 #define DEBUG_LINE_SECTION      ".debug_line"
3507 #endif
3508 #ifndef DEBUG_LOC_SECTION
3509 #define DEBUG_LOC_SECTION       ".debug_loc"
3510 #endif
3511 #ifndef DEBUG_PUBNAMES_SECTION
3512 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
3513 #endif
3514 #ifndef DEBUG_PUBTYPES_SECTION
3515 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
3516 #endif
3517 #ifndef DEBUG_STR_SECTION
3518 #define DEBUG_STR_SECTION       ".debug_str"
3519 #endif
3520 #ifndef DEBUG_RANGES_SECTION
3521 #define DEBUG_RANGES_SECTION    ".debug_ranges"
3522 #endif
3523
3524 /* Standard ELF section names for compiled code and data.  */
3525 #ifndef TEXT_SECTION_NAME
3526 #define TEXT_SECTION_NAME       ".text"
3527 #endif
3528
3529 /* Section flags for .debug_str section.  */
3530 #define DEBUG_STR_SECTION_FLAGS \
3531   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
3532    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
3533    : SECTION_DEBUG)
3534
3535 /* Labels we insert at beginning sections we can reference instead of
3536    the section names themselves.  */
3537
3538 #ifndef TEXT_SECTION_LABEL
3539 #define TEXT_SECTION_LABEL              "Ltext"
3540 #endif
3541 #ifndef COLD_TEXT_SECTION_LABEL
3542 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
3543 #endif
3544 #ifndef DEBUG_LINE_SECTION_LABEL
3545 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
3546 #endif
3547 #ifndef DEBUG_INFO_SECTION_LABEL
3548 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
3549 #endif
3550 #ifndef DEBUG_ABBREV_SECTION_LABEL
3551 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
3552 #endif
3553 #ifndef DEBUG_LOC_SECTION_LABEL
3554 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
3555 #endif
3556 #ifndef DEBUG_RANGES_SECTION_LABEL
3557 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
3558 #endif
3559 #ifndef DEBUG_MACINFO_SECTION_LABEL
3560 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
3561 #endif
3562 #ifndef DEBUG_MACRO_SECTION_LABEL
3563 #define DEBUG_MACRO_SECTION_LABEL       "Ldebug_macro"
3564 #endif
3565
3566
3567 /* Definitions of defaults for formats and names of various special
3568    (artificial) labels which may be generated within this file (when the -g
3569    options is used and DWARF2_DEBUGGING_INFO is in effect.
3570    If necessary, these may be overridden from within the tm.h file, but
3571    typically, overriding these defaults is unnecessary.  */
3572
3573 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3574 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3575 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3576 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3577 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3578 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3579 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3580 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3581 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3582 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3583
3584 #ifndef TEXT_END_LABEL
3585 #define TEXT_END_LABEL          "Letext"
3586 #endif
3587 #ifndef COLD_END_LABEL
3588 #define COLD_END_LABEL          "Letext_cold"
3589 #endif
3590 #ifndef BLOCK_BEGIN_LABEL
3591 #define BLOCK_BEGIN_LABEL       "LBB"
3592 #endif
3593 #ifndef BLOCK_END_LABEL
3594 #define BLOCK_END_LABEL         "LBE"
3595 #endif
3596 #ifndef LINE_CODE_LABEL
3597 #define LINE_CODE_LABEL         "LM"
3598 #endif
3599
3600 \f
3601 /* Return the root of the DIE's built for the current compilation unit.  */
3602 static dw_die_ref
3603 comp_unit_die (void)
3604 {
3605   if (!single_comp_unit_die)
3606     single_comp_unit_die = gen_compile_unit_die (NULL);
3607   return single_comp_unit_die;
3608 }
3609
3610 /* We allow a language front-end to designate a function that is to be
3611    called to "demangle" any name before it is put into a DIE.  */
3612
3613 static const char *(*demangle_name_func) (const char *);
3614
3615 void
3616 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3617 {
3618   demangle_name_func = func;
3619 }
3620
3621 /* Test if rtl node points to a pseudo register.  */
3622
3623 static inline int
3624 is_pseudo_reg (const_rtx rtl)
3625 {
3626   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3627           || (GET_CODE (rtl) == SUBREG
3628               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3629 }
3630
3631 /* Return a reference to a type, with its const and volatile qualifiers
3632    removed.  */
3633
3634 static inline tree
3635 type_main_variant (tree type)
3636 {
3637   type = TYPE_MAIN_VARIANT (type);
3638
3639   /* ??? There really should be only one main variant among any group of
3640      variants of a given type (and all of the MAIN_VARIANT values for all
3641      members of the group should point to that one type) but sometimes the C
3642      front-end messes this up for array types, so we work around that bug
3643      here.  */
3644   if (TREE_CODE (type) == ARRAY_TYPE)
3645     while (type != TYPE_MAIN_VARIANT (type))
3646       type = TYPE_MAIN_VARIANT (type);
3647
3648   return type;
3649 }
3650
3651 /* Return nonzero if the given type node represents a tagged type.  */
3652
3653 static inline int
3654 is_tagged_type (const_tree type)
3655 {
3656   enum tree_code code = TREE_CODE (type);
3657
3658   return (code == RECORD_TYPE || code == UNION_TYPE
3659           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3660 }
3661
3662 /* Set label to debug_info_section_label + die_offset of a DIE reference.  */
3663
3664 static void
3665 get_ref_die_offset_label (char *label, dw_die_ref ref)
3666 {
3667   sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3668 }
3669
3670 /* Return die_offset of a DIE reference to a base type.  */
3671
3672 static unsigned long int
3673 get_base_type_offset (dw_die_ref ref)
3674 {
3675   if (ref->die_offset)
3676     return ref->die_offset;
3677   if (comp_unit_die ()->die_abbrev)
3678     {
3679       calc_base_type_die_sizes ();
3680       gcc_assert (ref->die_offset);
3681     }
3682   return ref->die_offset;
3683 }
3684
3685 /* Return die_offset of a DIE reference other than base type.  */
3686
3687 static unsigned long int
3688 get_ref_die_offset (dw_die_ref ref)
3689 {
3690   gcc_assert (ref->die_offset);
3691   return ref->die_offset;
3692 }
3693
3694 /* Convert a DIE tag into its string name.  */
3695
3696 static const char *
3697 dwarf_tag_name (unsigned int tag)
3698 {
3699   switch (tag)
3700     {
3701     case DW_TAG_padding:
3702       return "DW_TAG_padding";
3703     case DW_TAG_array_type:
3704       return "DW_TAG_array_type";
3705     case DW_TAG_class_type:
3706       return "DW_TAG_class_type";
3707     case DW_TAG_entry_point:
3708       return "DW_TAG_entry_point";
3709     case DW_TAG_enumeration_type:
3710       return "DW_TAG_enumeration_type";
3711     case DW_TAG_formal_parameter:
3712       return "DW_TAG_formal_parameter";
3713     case DW_TAG_imported_declaration:
3714       return "DW_TAG_imported_declaration";
3715     case DW_TAG_label:
3716       return "DW_TAG_label";
3717     case DW_TAG_lexical_block:
3718       return "DW_TAG_lexical_block";
3719     case DW_TAG_member:
3720       return "DW_TAG_member";
3721     case DW_TAG_pointer_type:
3722       return "DW_TAG_pointer_type";
3723     case DW_TAG_reference_type:
3724       return "DW_TAG_reference_type";
3725     case DW_TAG_compile_unit:
3726       return "DW_TAG_compile_unit";
3727     case DW_TAG_string_type:
3728       return "DW_TAG_string_type";
3729     case DW_TAG_structure_type:
3730       return "DW_TAG_structure_type";
3731     case DW_TAG_subroutine_type:
3732       return "DW_TAG_subroutine_type";
3733     case DW_TAG_typedef:
3734       return "DW_TAG_typedef";
3735     case DW_TAG_union_type:
3736       return "DW_TAG_union_type";
3737     case DW_TAG_unspecified_parameters:
3738       return "DW_TAG_unspecified_parameters";
3739     case DW_TAG_variant:
3740       return "DW_TAG_variant";
3741     case DW_TAG_common_block:
3742       return "DW_TAG_common_block";
3743     case DW_TAG_common_inclusion:
3744       return "DW_TAG_common_inclusion";
3745     case DW_TAG_inheritance:
3746       return "DW_TAG_inheritance";
3747     case DW_TAG_inlined_subroutine:
3748       return "DW_TAG_inlined_subroutine";
3749     case DW_TAG_module:
3750       return "DW_TAG_module";
3751     case DW_TAG_ptr_to_member_type:
3752       return "DW_TAG_ptr_to_member_type";
3753     case DW_TAG_set_type:
3754       return "DW_TAG_set_type";
3755     case DW_TAG_subrange_type:
3756       return "DW_TAG_subrange_type";
3757     case DW_TAG_with_stmt:
3758       return "DW_TAG_with_stmt";
3759     case DW_TAG_access_declaration:
3760       return "DW_TAG_access_declaration";
3761     case DW_TAG_base_type:
3762       return "DW_TAG_base_type";
3763     case DW_TAG_catch_block:
3764       return "DW_TAG_catch_block";
3765     case DW_TAG_const_type:
3766       return "DW_TAG_const_type";
3767     case DW_TAG_constant:
3768       return "DW_TAG_constant";
3769     case DW_TAG_enumerator:
3770       return "DW_TAG_enumerator";
3771     case DW_TAG_file_type:
3772       return "DW_TAG_file_type";
3773     case DW_TAG_friend:
3774       return "DW_TAG_friend";
3775     case DW_TAG_namelist:
3776       return "DW_TAG_namelist";
3777     case DW_TAG_namelist_item:
3778       return "DW_TAG_namelist_item";
3779     case DW_TAG_packed_type:
3780       return "DW_TAG_packed_type";
3781     case DW_TAG_subprogram:
3782       return "DW_TAG_subprogram";
3783     case DW_TAG_template_type_param:
3784       return "DW_TAG_template_type_param";
3785     case DW_TAG_template_value_param:
3786       return "DW_TAG_template_value_param";
3787     case DW_TAG_thrown_type:
3788       return "DW_TAG_thrown_type";
3789     case DW_TAG_try_block:
3790       return "DW_TAG_try_block";
3791     case DW_TAG_variant_part:
3792       return "DW_TAG_variant_part";
3793     case DW_TAG_variable:
3794       return "DW_TAG_variable";
3795     case DW_TAG_volatile_type:
3796       return "DW_TAG_volatile_type";
3797     case DW_TAG_dwarf_procedure:
3798       return "DW_TAG_dwarf_procedure";
3799     case DW_TAG_restrict_type:
3800       return "DW_TAG_restrict_type";
3801     case DW_TAG_interface_type:
3802       return "DW_TAG_interface_type";
3803     case DW_TAG_namespace:
3804       return "DW_TAG_namespace";
3805     case DW_TAG_imported_module:
3806       return "DW_TAG_imported_module";
3807     case DW_TAG_unspecified_type:
3808       return "DW_TAG_unspecified_type";
3809     case DW_TAG_partial_unit:
3810       return "DW_TAG_partial_unit";
3811     case DW_TAG_imported_unit:
3812       return "DW_TAG_imported_unit";
3813     case DW_TAG_condition:
3814       return "DW_TAG_condition";
3815     case DW_TAG_shared_type:
3816       return "DW_TAG_shared_type";
3817     case DW_TAG_type_unit:
3818       return "DW_TAG_type_unit";
3819     case DW_TAG_rvalue_reference_type:
3820       return "DW_TAG_rvalue_reference_type";
3821     case DW_TAG_template_alias:
3822       return "DW_TAG_template_alias";
3823     case DW_TAG_GNU_template_parameter_pack:
3824       return "DW_TAG_GNU_template_parameter_pack";
3825     case DW_TAG_GNU_formal_parameter_pack:
3826       return "DW_TAG_GNU_formal_parameter_pack";
3827     case DW_TAG_MIPS_loop:
3828       return "DW_TAG_MIPS_loop";
3829     case DW_TAG_format_label:
3830       return "DW_TAG_format_label";
3831     case DW_TAG_function_template:
3832       return "DW_TAG_function_template";
3833     case DW_TAG_class_template:
3834       return "DW_TAG_class_template";
3835     case DW_TAG_GNU_BINCL:
3836       return "DW_TAG_GNU_BINCL";
3837     case DW_TAG_GNU_EINCL:
3838       return "DW_TAG_GNU_EINCL";
3839     case DW_TAG_GNU_template_template_param:
3840       return "DW_TAG_GNU_template_template_param";
3841     case DW_TAG_GNU_call_site:
3842       return "DW_TAG_GNU_call_site";
3843     case DW_TAG_GNU_call_site_parameter:
3844       return "DW_TAG_GNU_call_site_parameter";
3845     default:
3846       return "DW_TAG_<unknown>";
3847     }
3848 }
3849
3850 /* Convert a DWARF attribute code into its string name.  */
3851
3852 static const char *
3853 dwarf_attr_name (unsigned int attr)
3854 {
3855   switch (attr)
3856     {
3857     case DW_AT_sibling:
3858       return "DW_AT_sibling";
3859     case DW_AT_location:
3860       return "DW_AT_location";
3861     case DW_AT_name:
3862       return "DW_AT_name";
3863     case DW_AT_ordering:
3864       return "DW_AT_ordering";
3865     case DW_AT_subscr_data:
3866       return "DW_AT_subscr_data";
3867     case DW_AT_byte_size:
3868       return "DW_AT_byte_size";
3869     case DW_AT_bit_offset:
3870       return "DW_AT_bit_offset";
3871     case DW_AT_bit_size:
3872       return "DW_AT_bit_size";
3873     case DW_AT_element_list:
3874       return "DW_AT_element_list";
3875     case DW_AT_stmt_list:
3876       return "DW_AT_stmt_list";
3877     case DW_AT_low_pc:
3878       return "DW_AT_low_pc";
3879     case DW_AT_high_pc:
3880       return "DW_AT_high_pc";
3881     case DW_AT_language:
3882       return "DW_AT_language";
3883     case DW_AT_member:
3884       return "DW_AT_member";
3885     case DW_AT_discr:
3886       return "DW_AT_discr";
3887     case DW_AT_discr_value:
3888       return "DW_AT_discr_value";
3889     case DW_AT_visibility:
3890       return "DW_AT_visibility";
3891     case DW_AT_import:
3892       return "DW_AT_import";
3893     case DW_AT_string_length:
3894       return "DW_AT_string_length";
3895     case DW_AT_common_reference:
3896       return "DW_AT_common_reference";
3897     case DW_AT_comp_dir:
3898       return "DW_AT_comp_dir";
3899     case DW_AT_const_value:
3900       return "DW_AT_const_value";
3901     case DW_AT_containing_type:
3902       return "DW_AT_containing_type";
3903     case DW_AT_default_value:
3904       return "DW_AT_default_value";
3905     case DW_AT_inline:
3906       return "DW_AT_inline";
3907     case DW_AT_is_optional:
3908       return "DW_AT_is_optional";
3909     case DW_AT_lower_bound:
3910       return "DW_AT_lower_bound";
3911     case DW_AT_producer:
3912       return "DW_AT_producer";
3913     case DW_AT_prototyped:
3914       return "DW_AT_prototyped";
3915     case DW_AT_return_addr:
3916       return "DW_AT_return_addr";
3917     case DW_AT_start_scope:
3918       return "DW_AT_start_scope";
3919     case DW_AT_bit_stride:
3920       return "DW_AT_bit_stride";
3921     case DW_AT_upper_bound:
3922       return "DW_AT_upper_bound";
3923     case DW_AT_abstract_origin:
3924       return "DW_AT_abstract_origin";
3925     case DW_AT_accessibility:
3926       return "DW_AT_accessibility";
3927     case DW_AT_address_class:
3928       return "DW_AT_address_class";
3929     case DW_AT_artificial:
3930       return "DW_AT_artificial";
3931     case DW_AT_base_types:
3932       return "DW_AT_base_types";
3933     case DW_AT_calling_convention:
3934       return "DW_AT_calling_convention";
3935     case DW_AT_count:
3936       return "DW_AT_count";
3937     case DW_AT_data_member_location:
3938       return "DW_AT_data_member_location";
3939     case DW_AT_decl_column:
3940       return "DW_AT_decl_column";
3941     case DW_AT_decl_file:
3942       return "DW_AT_decl_file";
3943     case DW_AT_decl_line:
3944       return "DW_AT_decl_line";
3945     case DW_AT_declaration:
3946       return "DW_AT_declaration";
3947     case DW_AT_discr_list:
3948       return "DW_AT_discr_list";
3949     case DW_AT_encoding:
3950       return "DW_AT_encoding";
3951     case DW_AT_external:
3952       return "DW_AT_external";
3953     case DW_AT_explicit:
3954       return "DW_AT_explicit";
3955     case DW_AT_frame_base:
3956       return "DW_AT_frame_base";
3957     case DW_AT_friend:
3958       return "DW_AT_friend";
3959     case DW_AT_identifier_case:
3960       return "DW_AT_identifier_case";
3961     case DW_AT_macro_info:
3962       return "DW_AT_macro_info";
3963     case DW_AT_namelist_items:
3964       return "DW_AT_namelist_items";
3965     case DW_AT_priority:
3966       return "DW_AT_priority";
3967     case DW_AT_segment:
3968       return "DW_AT_segment";
3969     case DW_AT_specification:
3970       return "DW_AT_specification";
3971     case DW_AT_static_link:
3972       return "DW_AT_static_link";
3973     case DW_AT_type:
3974       return "DW_AT_type";
3975     case DW_AT_use_location:
3976       return "DW_AT_use_location";
3977     case DW_AT_variable_parameter:
3978       return "DW_AT_variable_parameter";
3979     case DW_AT_virtuality:
3980       return "DW_AT_virtuality";
3981     case DW_AT_vtable_elem_location:
3982       return "DW_AT_vtable_elem_location";
3983
3984     case DW_AT_allocated:
3985       return "DW_AT_allocated";
3986     case DW_AT_associated:
3987       return "DW_AT_associated";
3988     case DW_AT_data_location:
3989       return "DW_AT_data_location";
3990     case DW_AT_byte_stride:
3991       return "DW_AT_byte_stride";
3992     case DW_AT_entry_pc:
3993       return "DW_AT_entry_pc";
3994     case DW_AT_use_UTF8:
3995       return "DW_AT_use_UTF8";
3996     case DW_AT_extension:
3997       return "DW_AT_extension";
3998     case DW_AT_ranges:
3999       return "DW_AT_ranges";
4000     case DW_AT_trampoline:
4001       return "DW_AT_trampoline";
4002     case DW_AT_call_column:
4003       return "DW_AT_call_column";
4004     case DW_AT_call_file:
4005       return "DW_AT_call_file";
4006     case DW_AT_call_line:
4007       return "DW_AT_call_line";
4008     case DW_AT_object_pointer:
4009       return "DW_AT_object_pointer";
4010
4011     case DW_AT_signature:
4012       return "DW_AT_signature";
4013     case DW_AT_main_subprogram:
4014       return "DW_AT_main_subprogram";
4015     case DW_AT_data_bit_offset:
4016       return "DW_AT_data_bit_offset";
4017     case DW_AT_const_expr:
4018       return "DW_AT_const_expr";
4019     case DW_AT_enum_class:
4020       return "DW_AT_enum_class";
4021     case DW_AT_linkage_name:
4022       return "DW_AT_linkage_name";
4023
4024     case DW_AT_MIPS_fde:
4025       return "DW_AT_MIPS_fde";
4026     case DW_AT_MIPS_loop_begin:
4027       return "DW_AT_MIPS_loop_begin";
4028     case DW_AT_MIPS_tail_loop_begin:
4029       return "DW_AT_MIPS_tail_loop_begin";
4030     case DW_AT_MIPS_epilog_begin:
4031       return "DW_AT_MIPS_epilog_begin";
4032 #if VMS_DEBUGGING_INFO
4033     case DW_AT_HP_prologue:
4034       return "DW_AT_HP_prologue";
4035 #else
4036     case DW_AT_MIPS_loop_unroll_factor:
4037       return "DW_AT_MIPS_loop_unroll_factor";
4038 #endif
4039     case DW_AT_MIPS_software_pipeline_depth:
4040       return "DW_AT_MIPS_software_pipeline_depth";
4041     case DW_AT_MIPS_linkage_name:
4042       return "DW_AT_MIPS_linkage_name";
4043 #if VMS_DEBUGGING_INFO
4044     case DW_AT_HP_epilogue:
4045       return "DW_AT_HP_epilogue";
4046 #else
4047     case DW_AT_MIPS_stride:
4048       return "DW_AT_MIPS_stride";
4049 #endif
4050     case DW_AT_MIPS_abstract_name:
4051       return "DW_AT_MIPS_abstract_name";
4052     case DW_AT_MIPS_clone_origin:
4053       return "DW_AT_MIPS_clone_origin";
4054     case DW_AT_MIPS_has_inlines:
4055       return "DW_AT_MIPS_has_inlines";
4056
4057     case DW_AT_sf_names:
4058       return "DW_AT_sf_names";
4059     case DW_AT_src_info:
4060       return "DW_AT_src_info";
4061     case DW_AT_mac_info:
4062       return "DW_AT_mac_info";
4063     case DW_AT_src_coords:
4064       return "DW_AT_src_coords";
4065     case DW_AT_body_begin:
4066       return "DW_AT_body_begin";
4067     case DW_AT_body_end:
4068       return "DW_AT_body_end";
4069
4070     case DW_AT_GNU_vector:
4071       return "DW_AT_GNU_vector";
4072     case DW_AT_GNU_guarded_by:
4073       return "DW_AT_GNU_guarded_by";
4074     case DW_AT_GNU_pt_guarded_by:
4075       return "DW_AT_GNU_pt_guarded_by";
4076     case DW_AT_GNU_guarded:
4077       return "DW_AT_GNU_guarded";
4078     case DW_AT_GNU_pt_guarded:
4079       return "DW_AT_GNU_pt_guarded";
4080     case DW_AT_GNU_locks_excluded:
4081       return "DW_AT_GNU_locks_excluded";
4082     case DW_AT_GNU_exclusive_locks_required:
4083       return "DW_AT_GNU_exclusive_locks_required";
4084     case DW_AT_GNU_shared_locks_required:
4085       return "DW_AT_GNU_shared_locks_required";
4086     case DW_AT_GNU_odr_signature:
4087       return "DW_AT_GNU_odr_signature";
4088     case DW_AT_GNU_template_name:
4089       return "DW_AT_GNU_template_name";
4090     case DW_AT_GNU_call_site_value:
4091       return "DW_AT_GNU_call_site_value";
4092     case DW_AT_GNU_call_site_data_value:
4093       return "DW_AT_GNU_call_site_data_value";
4094     case DW_AT_GNU_call_site_target:
4095       return "DW_AT_GNU_call_site_target";
4096     case DW_AT_GNU_call_site_target_clobbered:
4097       return "DW_AT_GNU_call_site_target_clobbered";
4098     case DW_AT_GNU_tail_call:
4099       return "DW_AT_GNU_tail_call";
4100     case DW_AT_GNU_all_tail_call_sites:
4101       return "DW_AT_GNU_all_tail_call_sites";
4102     case DW_AT_GNU_all_call_sites:
4103       return "DW_AT_GNU_all_call_sites";
4104     case DW_AT_GNU_all_source_call_sites:
4105       return "DW_AT_GNU_all_source_call_sites";
4106     case DW_AT_GNU_macros:
4107       return "DW_AT_GNU_macros";
4108
4109     case DW_AT_GNAT_descriptive_type:
4110       return "DW_AT_GNAT_descriptive_type";
4111
4112     case DW_AT_VMS_rtnbeg_pd_address:
4113       return "DW_AT_VMS_rtnbeg_pd_address";
4114
4115     default:
4116       return "DW_AT_<unknown>";
4117     }
4118 }
4119
4120 /* Convert a DWARF value form code into its string name.  */
4121
4122 static const char *
4123 dwarf_form_name (unsigned int form)
4124 {
4125   switch (form)
4126     {
4127     case DW_FORM_addr:
4128       return "DW_FORM_addr";
4129     case DW_FORM_block2:
4130       return "DW_FORM_block2";
4131     case DW_FORM_block4:
4132       return "DW_FORM_block4";
4133     case DW_FORM_data2:
4134       return "DW_FORM_data2";
4135     case DW_FORM_data4:
4136       return "DW_FORM_data4";
4137     case DW_FORM_data8:
4138       return "DW_FORM_data8";
4139     case DW_FORM_string:
4140       return "DW_FORM_string";
4141     case DW_FORM_block:
4142       return "DW_FORM_block";
4143     case DW_FORM_block1:
4144       return "DW_FORM_block1";
4145     case DW_FORM_data1:
4146       return "DW_FORM_data1";
4147     case DW_FORM_flag:
4148       return "DW_FORM_flag";
4149     case DW_FORM_sdata:
4150       return "DW_FORM_sdata";
4151     case DW_FORM_strp:
4152       return "DW_FORM_strp";
4153     case DW_FORM_udata:
4154       return "DW_FORM_udata";
4155     case DW_FORM_ref_addr:
4156       return "DW_FORM_ref_addr";
4157     case DW_FORM_ref1:
4158       return "DW_FORM_ref1";
4159     case DW_FORM_ref2:
4160       return "DW_FORM_ref2";
4161     case DW_FORM_ref4:
4162       return "DW_FORM_ref4";
4163     case DW_FORM_ref8:
4164       return "DW_FORM_ref8";
4165     case DW_FORM_ref_udata:
4166       return "DW_FORM_ref_udata";
4167     case DW_FORM_indirect:
4168       return "DW_FORM_indirect";
4169     case DW_FORM_sec_offset:
4170       return "DW_FORM_sec_offset";
4171     case DW_FORM_exprloc:
4172       return "DW_FORM_exprloc";
4173     case DW_FORM_flag_present:
4174       return "DW_FORM_flag_present";
4175     case DW_FORM_ref_sig8:
4176       return "DW_FORM_ref_sig8";
4177     default:
4178       return "DW_FORM_<unknown>";
4179     }
4180 }
4181 \f
4182 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
4183    instance of an inlined instance of a decl which is local to an inline
4184    function, so we have to trace all of the way back through the origin chain
4185    to find out what sort of node actually served as the original seed for the
4186    given block.  */
4187
4188 static tree
4189 decl_ultimate_origin (const_tree decl)
4190 {
4191   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4192     return NULL_TREE;
4193
4194   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4195      nodes in the function to point to themselves; ignore that if
4196      we're trying to output the abstract instance of this function.  */
4197   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4198     return NULL_TREE;
4199
4200   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4201      most distant ancestor, this should never happen.  */
4202   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4203
4204   return DECL_ABSTRACT_ORIGIN (decl);
4205 }
4206
4207 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
4208    of a virtual function may refer to a base class, so we check the 'this'
4209    parameter.  */
4210
4211 static tree
4212 decl_class_context (tree decl)
4213 {
4214   tree context = NULL_TREE;
4215
4216   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4217     context = DECL_CONTEXT (decl);
4218   else
4219     context = TYPE_MAIN_VARIANT
4220       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4221
4222   if (context && !TYPE_P (context))
4223     context = NULL_TREE;
4224
4225   return context;
4226 }
4227 \f
4228 /* Add an attribute/value pair to a DIE.  */
4229
4230 static inline void
4231 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4232 {
4233   /* Maybe this should be an assert?  */
4234   if (die == NULL)
4235     return;
4236
4237   if (die->die_attr == NULL)
4238     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
4239   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
4240 }
4241
4242 static inline enum dw_val_class
4243 AT_class (dw_attr_ref a)
4244 {
4245   return a->dw_attr_val.val_class;
4246 }
4247
4248 /* Add a flag value attribute to a DIE.  */
4249
4250 static inline void
4251 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4252 {
4253   dw_attr_node attr;
4254
4255   attr.dw_attr = attr_kind;
4256   attr.dw_attr_val.val_class = dw_val_class_flag;
4257   attr.dw_attr_val.v.val_flag = flag;
4258   add_dwarf_attr (die, &attr);
4259 }
4260
4261 static inline unsigned
4262 AT_flag (dw_attr_ref a)
4263 {
4264   gcc_assert (a && AT_class (a) == dw_val_class_flag);
4265   return a->dw_attr_val.v.val_flag;
4266 }
4267
4268 /* Add a signed integer attribute value to a DIE.  */
4269
4270 static inline void
4271 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4272 {
4273   dw_attr_node attr;
4274
4275   attr.dw_attr = attr_kind;
4276   attr.dw_attr_val.val_class = dw_val_class_const;
4277   attr.dw_attr_val.v.val_int = int_val;
4278   add_dwarf_attr (die, &attr);
4279 }
4280
4281 static inline HOST_WIDE_INT
4282 AT_int (dw_attr_ref a)
4283 {
4284   gcc_assert (a && AT_class (a) == dw_val_class_const);
4285   return a->dw_attr_val.v.val_int;
4286 }
4287
4288 /* Add an unsigned integer attribute value to a DIE.  */
4289
4290 static inline void
4291 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4292                  unsigned HOST_WIDE_INT unsigned_val)
4293 {
4294   dw_attr_node attr;
4295
4296   attr.dw_attr = attr_kind;
4297   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
4298   attr.dw_attr_val.v.val_unsigned = unsigned_val;
4299   add_dwarf_attr (die, &attr);
4300 }
4301
4302 static inline unsigned HOST_WIDE_INT
4303 AT_unsigned (dw_attr_ref a)
4304 {
4305   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4306   return a->dw_attr_val.v.val_unsigned;
4307 }
4308
4309 /* Add an unsigned double integer attribute value to a DIE.  */
4310
4311 static inline void
4312 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
4313                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
4314 {
4315   dw_attr_node attr;
4316
4317   attr.dw_attr = attr_kind;
4318   attr.dw_attr_val.val_class = dw_val_class_const_double;
4319   attr.dw_attr_val.v.val_double.high = high;
4320   attr.dw_attr_val.v.val_double.low = low;
4321   add_dwarf_attr (die, &attr);
4322 }
4323
4324 /* Add a floating point attribute value to a DIE and return it.  */
4325
4326 static inline void
4327 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4328             unsigned int length, unsigned int elt_size, unsigned char *array)
4329 {
4330   dw_attr_node attr;
4331
4332   attr.dw_attr = attr_kind;
4333   attr.dw_attr_val.val_class = dw_val_class_vec;
4334   attr.dw_attr_val.v.val_vec.length = length;
4335   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
4336   attr.dw_attr_val.v.val_vec.array = array;
4337   add_dwarf_attr (die, &attr);
4338 }
4339
4340 /* Add an 8-byte data attribute value to a DIE.  */
4341
4342 static inline void
4343 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
4344               unsigned char data8[8])
4345 {
4346   dw_attr_node attr;
4347
4348   attr.dw_attr = attr_kind;
4349   attr.dw_attr_val.val_class = dw_val_class_data8;
4350   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
4351   add_dwarf_attr (die, &attr);
4352 }
4353
4354 /* Hash and equality functions for debug_str_hash.  */
4355
4356 static hashval_t
4357 debug_str_do_hash (const void *x)
4358 {
4359   return htab_hash_string (((const struct indirect_string_node *)x)->str);
4360 }
4361
4362 static int
4363 debug_str_eq (const void *x1, const void *x2)
4364 {
4365   return strcmp ((((const struct indirect_string_node *)x1)->str),
4366                  (const char *)x2) == 0;
4367 }
4368
4369 /* Add STR to the indirect string hash table.  */
4370
4371 static struct indirect_string_node *
4372 find_AT_string (const char *str)
4373 {
4374   struct indirect_string_node *node;
4375   void **slot;
4376
4377   if (! debug_str_hash)
4378     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4379                                       debug_str_eq, NULL);
4380
4381   slot = htab_find_slot_with_hash (debug_str_hash, str,
4382                                    htab_hash_string (str), INSERT);
4383   if (*slot == NULL)
4384     {
4385       node = ggc_alloc_cleared_indirect_string_node ();
4386       node->str = ggc_strdup (str);
4387       *slot = node;
4388     }
4389   else
4390     node = (struct indirect_string_node *) *slot;
4391
4392   node->refcount++;
4393   return node;
4394 }
4395
4396 /* Add a string attribute value to a DIE.  */
4397
4398 static inline void
4399 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4400 {
4401   dw_attr_node attr;
4402   struct indirect_string_node *node;
4403
4404   node = find_AT_string (str);
4405
4406   attr.dw_attr = attr_kind;
4407   attr.dw_attr_val.val_class = dw_val_class_str;
4408   attr.dw_attr_val.v.val_str = node;
4409   add_dwarf_attr (die, &attr);
4410 }
4411
4412 static inline const char *
4413 AT_string (dw_attr_ref a)
4414 {
4415   gcc_assert (a && AT_class (a) == dw_val_class_str);
4416   return a->dw_attr_val.v.val_str->str;
4417 }
4418
4419 /* Find out whether a string should be output inline in DIE
4420    or out-of-line in .debug_str section.  */
4421
4422 static enum dwarf_form
4423 AT_string_form (dw_attr_ref a)
4424 {
4425   struct indirect_string_node *node;
4426   unsigned int len;
4427   char label[32];
4428
4429   gcc_assert (a && AT_class (a) == dw_val_class_str);
4430
4431   node = a->dw_attr_val.v.val_str;
4432   if (node->form)
4433     return node->form;
4434
4435   len = strlen (node->str) + 1;
4436
4437   /* If the string is shorter or equal to the size of the reference, it is
4438      always better to put it inline.  */
4439   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4440     return node->form = DW_FORM_string;
4441
4442   /* If we cannot expect the linker to merge strings in .debug_str
4443      section, only put it into .debug_str if it is worth even in this
4444      single module.  */
4445   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4446       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4447       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4448     return node->form = DW_FORM_string;
4449
4450   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4451   ++dw2_string_counter;
4452   node->label = xstrdup (label);
4453
4454   return node->form = DW_FORM_strp;
4455 }
4456
4457 /* Add a DIE reference attribute value to a DIE.  */
4458
4459 static inline void
4460 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4461 {
4462   dw_attr_node attr;
4463
4464 #ifdef ENABLE_CHECKING
4465   gcc_assert (targ_die != NULL);
4466 #else
4467   /* With LTO we can end up trying to reference something we didn't create
4468      a DIE for.  Avoid crashing later on a NULL referenced DIE.  */
4469   if (targ_die == NULL)
4470     return;
4471 #endif
4472
4473   attr.dw_attr = attr_kind;
4474   attr.dw_attr_val.val_class = dw_val_class_die_ref;
4475   attr.dw_attr_val.v.val_die_ref.die = targ_die;
4476   attr.dw_attr_val.v.val_die_ref.external = 0;
4477   add_dwarf_attr (die, &attr);
4478 }
4479
4480 /* Add an AT_specification attribute to a DIE, and also make the back
4481    pointer from the specification to the definition.  */
4482
4483 static inline void
4484 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4485 {
4486   add_AT_die_ref (die, DW_AT_specification, targ_die);
4487   gcc_assert (!targ_die->die_definition);
4488   targ_die->die_definition = die;
4489 }
4490
4491 static inline dw_die_ref
4492 AT_ref (dw_attr_ref a)
4493 {
4494   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4495   return a->dw_attr_val.v.val_die_ref.die;
4496 }
4497
4498 static inline int
4499 AT_ref_external (dw_attr_ref a)
4500 {
4501   if (a && AT_class (a) == dw_val_class_die_ref)
4502     return a->dw_attr_val.v.val_die_ref.external;
4503
4504   return 0;
4505 }
4506
4507 static inline void
4508 set_AT_ref_external (dw_attr_ref a, int i)
4509 {
4510   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4511   a->dw_attr_val.v.val_die_ref.external = i;
4512 }
4513
4514 /* Add an FDE reference attribute value to a DIE.  */
4515
4516 static inline void
4517 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4518 {
4519   dw_attr_node attr;
4520
4521   attr.dw_attr = attr_kind;
4522   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4523   attr.dw_attr_val.v.val_fde_index = targ_fde;
4524   add_dwarf_attr (die, &attr);
4525 }
4526
4527 /* Add a location description attribute value to a DIE.  */
4528
4529 static inline void
4530 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4531 {
4532   dw_attr_node attr;
4533
4534   attr.dw_attr = attr_kind;
4535   attr.dw_attr_val.val_class = dw_val_class_loc;
4536   attr.dw_attr_val.v.val_loc = loc;
4537   add_dwarf_attr (die, &attr);
4538 }
4539
4540 static inline dw_loc_descr_ref
4541 AT_loc (dw_attr_ref a)
4542 {
4543   gcc_assert (a && AT_class (a) == dw_val_class_loc);
4544   return a->dw_attr_val.v.val_loc;
4545 }
4546
4547 static inline void
4548 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4549 {
4550   dw_attr_node attr;
4551
4552   attr.dw_attr = attr_kind;
4553   attr.dw_attr_val.val_class = dw_val_class_loc_list;
4554   attr.dw_attr_val.v.val_loc_list = loc_list;
4555   add_dwarf_attr (die, &attr);
4556   have_location_lists = true;
4557 }
4558
4559 static inline dw_loc_list_ref
4560 AT_loc_list (dw_attr_ref a)
4561 {
4562   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4563   return a->dw_attr_val.v.val_loc_list;
4564 }
4565
4566 static inline dw_loc_list_ref *
4567 AT_loc_list_ptr (dw_attr_ref a)
4568 {
4569   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4570   return &a->dw_attr_val.v.val_loc_list;
4571 }
4572
4573 /* Add an address constant attribute value to a DIE.  */
4574
4575 static inline void
4576 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
4577 {
4578   dw_attr_node attr;
4579
4580   attr.dw_attr = attr_kind;
4581   attr.dw_attr_val.val_class = dw_val_class_addr;
4582   attr.dw_attr_val.v.val_addr = addr;
4583   add_dwarf_attr (die, &attr);
4584 }
4585
4586 /* Get the RTX from to an address DIE attribute.  */
4587
4588 static inline rtx
4589 AT_addr (dw_attr_ref a)
4590 {
4591   gcc_assert (a && AT_class (a) == dw_val_class_addr);
4592   return a->dw_attr_val.v.val_addr;
4593 }
4594
4595 /* Add a file attribute value to a DIE.  */
4596
4597 static inline void
4598 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4599              struct dwarf_file_data *fd)
4600 {
4601   dw_attr_node attr;
4602
4603   attr.dw_attr = attr_kind;
4604   attr.dw_attr_val.val_class = dw_val_class_file;
4605   attr.dw_attr_val.v.val_file = fd;
4606   add_dwarf_attr (die, &attr);
4607 }
4608
4609 /* Get the dwarf_file_data from a file DIE attribute.  */
4610
4611 static inline struct dwarf_file_data *
4612 AT_file (dw_attr_ref a)
4613 {
4614   gcc_assert (a && AT_class (a) == dw_val_class_file);
4615   return a->dw_attr_val.v.val_file;
4616 }
4617
4618 /* Add a vms delta attribute value to a DIE.  */
4619
4620 static inline void
4621 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4622                   const char *lbl1, const char *lbl2)
4623 {
4624   dw_attr_node attr;
4625
4626   attr.dw_attr = attr_kind;
4627   attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4628   attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4629   attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4630   add_dwarf_attr (die, &attr);
4631 }
4632
4633 /* Add a label identifier attribute value to a DIE.  */
4634
4635 static inline void
4636 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
4637 {
4638   dw_attr_node attr;
4639
4640   attr.dw_attr = attr_kind;
4641   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4642   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4643   add_dwarf_attr (die, &attr);
4644 }
4645
4646 /* Add a section offset attribute value to a DIE, an offset into the
4647    debug_line section.  */
4648
4649 static inline void
4650 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4651                 const char *label)
4652 {
4653   dw_attr_node attr;
4654
4655   attr.dw_attr = attr_kind;
4656   attr.dw_attr_val.val_class = dw_val_class_lineptr;
4657   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4658   add_dwarf_attr (die, &attr);
4659 }
4660
4661 /* Add a section offset attribute value to a DIE, an offset into the
4662    debug_macinfo section.  */
4663
4664 static inline void
4665 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4666                const char *label)
4667 {
4668   dw_attr_node attr;
4669
4670   attr.dw_attr = attr_kind;
4671   attr.dw_attr_val.val_class = dw_val_class_macptr;
4672   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4673   add_dwarf_attr (die, &attr);
4674 }
4675
4676 /* Add an offset attribute value to a DIE.  */
4677
4678 static inline void
4679 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4680                unsigned HOST_WIDE_INT offset)
4681 {
4682   dw_attr_node attr;
4683
4684   attr.dw_attr = attr_kind;
4685   attr.dw_attr_val.val_class = dw_val_class_offset;
4686   attr.dw_attr_val.v.val_offset = offset;
4687   add_dwarf_attr (die, &attr);
4688 }
4689
4690 /* Add an range_list attribute value to a DIE.  */
4691
4692 static void
4693 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4694                    long unsigned int offset)
4695 {
4696   dw_attr_node attr;
4697
4698   attr.dw_attr = attr_kind;
4699   attr.dw_attr_val.val_class = dw_val_class_range_list;
4700   attr.dw_attr_val.v.val_offset = offset;
4701   add_dwarf_attr (die, &attr);
4702 }
4703
4704 /* Return the start label of a delta attribute.  */
4705
4706 static inline const char *
4707 AT_vms_delta1 (dw_attr_ref a)
4708 {
4709   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4710   return a->dw_attr_val.v.val_vms_delta.lbl1;
4711 }
4712
4713 /* Return the end label of a delta attribute.  */
4714
4715 static inline const char *
4716 AT_vms_delta2 (dw_attr_ref a)
4717 {
4718   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4719   return a->dw_attr_val.v.val_vms_delta.lbl2;
4720 }
4721
4722 static inline const char *
4723 AT_lbl (dw_attr_ref a)
4724 {
4725   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4726                     || AT_class (a) == dw_val_class_lineptr
4727                     || AT_class (a) == dw_val_class_macptr));
4728   return a->dw_attr_val.v.val_lbl_id;
4729 }
4730
4731 /* Get the attribute of type attr_kind.  */
4732
4733 static dw_attr_ref
4734 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4735 {
4736   dw_attr_ref a;
4737   unsigned ix;
4738   dw_die_ref spec = NULL;
4739
4740   if (! die)
4741     return NULL;
4742
4743   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4744     if (a->dw_attr == attr_kind)
4745       return a;
4746     else if (a->dw_attr == DW_AT_specification
4747              || a->dw_attr == DW_AT_abstract_origin)
4748       spec = AT_ref (a);
4749
4750   if (spec)
4751     return get_AT (spec, attr_kind);
4752
4753   return NULL;
4754 }
4755
4756 /* Return the "low pc" attribute value, typically associated with a subprogram
4757    DIE.  Return null if the "low pc" attribute is either not present, or if it
4758    cannot be represented as an assembler label identifier.  */
4759
4760 static inline const char *
4761 get_AT_low_pc (dw_die_ref die)
4762 {
4763   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4764
4765   return a ? AT_lbl (a) : NULL;
4766 }
4767
4768 /* Return the "high pc" attribute value, typically associated with a subprogram
4769    DIE.  Return null if the "high pc" attribute is either not present, or if it
4770    cannot be represented as an assembler label identifier.  */
4771
4772 static inline const char *
4773 get_AT_hi_pc (dw_die_ref die)
4774 {
4775   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4776
4777   return a ? AT_lbl (a) : NULL;
4778 }
4779
4780 /* Return the value of the string attribute designated by ATTR_KIND, or
4781    NULL if it is not present.  */
4782
4783 static inline const char *
4784 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4785 {
4786   dw_attr_ref a = get_AT (die, attr_kind);
4787
4788   return a ? AT_string (a) : NULL;
4789 }
4790
4791 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4792    if it is not present.  */
4793
4794 static inline int
4795 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4796 {
4797   dw_attr_ref a = get_AT (die, attr_kind);
4798
4799   return a ? AT_flag (a) : 0;
4800 }
4801
4802 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4803    if it is not present.  */
4804
4805 static inline unsigned
4806 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4807 {
4808   dw_attr_ref a = get_AT (die, attr_kind);
4809
4810   return a ? AT_unsigned (a) : 0;
4811 }
4812
4813 static inline dw_die_ref
4814 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4815 {
4816   dw_attr_ref a = get_AT (die, attr_kind);
4817
4818   return a ? AT_ref (a) : NULL;
4819 }
4820
4821 static inline struct dwarf_file_data *
4822 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4823 {
4824   dw_attr_ref a = get_AT (die, attr_kind);
4825
4826   return a ? AT_file (a) : NULL;
4827 }
4828
4829 /* Return TRUE if the language is C++.  */
4830
4831 static inline bool
4832 is_cxx (void)
4833 {
4834   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4835
4836   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
4837 }
4838
4839 /* Return TRUE if the language is Fortran.  */
4840
4841 static inline bool
4842 is_fortran (void)
4843 {
4844   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4845
4846   return (lang == DW_LANG_Fortran77
4847           || lang == DW_LANG_Fortran90
4848           || lang == DW_LANG_Fortran95);
4849 }
4850
4851 /* Return TRUE if the language is Ada.  */
4852
4853 static inline bool
4854 is_ada (void)
4855 {
4856   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4857
4858   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4859 }
4860
4861 /* Remove the specified attribute if present.  */
4862
4863 static void
4864 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4865 {
4866   dw_attr_ref a;
4867   unsigned ix;
4868
4869   if (! die)
4870     return;
4871
4872   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4873     if (a->dw_attr == attr_kind)
4874       {
4875         if (AT_class (a) == dw_val_class_str)
4876           if (a->dw_attr_val.v.val_str->refcount)
4877             a->dw_attr_val.v.val_str->refcount--;
4878
4879         /* VEC_ordered_remove should help reduce the number of abbrevs
4880            that are needed.  */
4881         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
4882         return;
4883       }
4884 }
4885
4886 /* Remove CHILD from its parent.  PREV must have the property that
4887    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
4888
4889 static void
4890 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4891 {
4892   gcc_assert (child->die_parent == prev->die_parent);
4893   gcc_assert (prev->die_sib == child);
4894   if (prev == child)
4895     {
4896       gcc_assert (child->die_parent->die_child == child);
4897       prev = NULL;
4898     }
4899   else
4900     prev->die_sib = child->die_sib;
4901   if (child->die_parent->die_child == child)
4902     child->die_parent->die_child = prev;
4903 }
4904
4905 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
4906    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
4907
4908 static void
4909 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4910 {
4911   dw_die_ref parent = old_child->die_parent;
4912
4913   gcc_assert (parent == prev->die_parent);
4914   gcc_assert (prev->die_sib == old_child);
4915
4916   new_child->die_parent = parent;
4917   if (prev == old_child)
4918     {
4919       gcc_assert (parent->die_child == old_child);
4920       new_child->die_sib = new_child;
4921     }
4922   else
4923     {
4924       prev->die_sib = new_child;
4925       new_child->die_sib = old_child->die_sib;
4926     }
4927   if (old_child->die_parent->die_child == old_child)
4928     old_child->die_parent->die_child = new_child;
4929 }
4930
4931 /* Move all children from OLD_PARENT to NEW_PARENT.  */
4932
4933 static void
4934 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4935 {
4936   dw_die_ref c;
4937   new_parent->die_child = old_parent->die_child;
4938   old_parent->die_child = NULL;
4939   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4940 }
4941
4942 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
4943    matches TAG.  */
4944
4945 static void
4946 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4947 {
4948   dw_die_ref c;
4949
4950   c = die->die_child;
4951   if (c) do {
4952     dw_die_ref prev = c;
4953     c = c->die_sib;
4954     while (c->die_tag == tag)
4955       {
4956         remove_child_with_prev (c, prev);
4957         /* Might have removed every child.  */
4958         if (c == c->die_sib)
4959           return;
4960         c = c->die_sib;
4961       }
4962   } while (c != die->die_child);
4963 }
4964
4965 /* Add a CHILD_DIE as the last child of DIE.  */
4966
4967 static void
4968 add_child_die (dw_die_ref die, dw_die_ref child_die)
4969 {
4970   /* FIXME this should probably be an assert.  */
4971   if (! die || ! child_die)
4972     return;
4973   gcc_assert (die != child_die);
4974
4975   child_die->die_parent = die;
4976   if (die->die_child)
4977     {
4978       child_die->die_sib = die->die_child->die_sib;
4979       die->die_child->die_sib = child_die;
4980     }
4981   else
4982     child_die->die_sib = child_die;
4983   die->die_child = child_die;
4984 }
4985
4986 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4987    is the specification, to the end of PARENT's list of children.
4988    This is done by removing and re-adding it.  */
4989
4990 static void
4991 splice_child_die (dw_die_ref parent, dw_die_ref child)
4992 {
4993   dw_die_ref p;
4994
4995   /* We want the declaration DIE from inside the class, not the
4996      specification DIE at toplevel.  */
4997   if (child->die_parent != parent)
4998     {
4999       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5000
5001       if (tmp)
5002         child = tmp;
5003     }
5004
5005   gcc_assert (child->die_parent == parent
5006               || (child->die_parent
5007                   == get_AT_ref (parent, DW_AT_specification)));
5008
5009   for (p = child->die_parent->die_child; ; p = p->die_sib)
5010     if (p->die_sib == child)
5011       {
5012         remove_child_with_prev (child, p);
5013         break;
5014       }
5015
5016   add_child_die (parent, child);
5017 }
5018
5019 /* Return a pointer to a newly created DIE node.  */
5020
5021 static inline dw_die_ref
5022 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5023 {
5024   dw_die_ref die = ggc_alloc_cleared_die_node ();
5025
5026   die->die_tag = tag_value;
5027
5028   if (parent_die != NULL)
5029     add_child_die (parent_die, die);
5030   else
5031     {
5032       limbo_die_node *limbo_node;
5033
5034       limbo_node = ggc_alloc_cleared_limbo_die_node ();
5035       limbo_node->die = die;
5036       limbo_node->created_for = t;
5037       limbo_node->next = limbo_die_list;
5038       limbo_die_list = limbo_node;
5039     }
5040
5041   return die;
5042 }
5043
5044 /* Return the DIE associated with the given type specifier.  */
5045
5046 static inline dw_die_ref
5047 lookup_type_die (tree type)
5048 {
5049   return TYPE_SYMTAB_DIE (type);
5050 }
5051
5052 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
5053    anonymous type named by the typedef TYPE_DIE, return the DIE of the
5054    anonymous type instead the one of the naming typedef.  */
5055
5056 static inline dw_die_ref
5057 strip_naming_typedef (tree type, dw_die_ref type_die)
5058 {
5059   if (type
5060       && TREE_CODE (type) == RECORD_TYPE
5061       && type_die
5062       && type_die->die_tag == DW_TAG_typedef
5063       && is_naming_typedef_decl (TYPE_NAME (type)))
5064     type_die = get_AT_ref (type_die, DW_AT_type);
5065   return type_die;
5066 }
5067
5068 /* Like lookup_type_die, but if type is an anonymous type named by a
5069    typedef[1], return the DIE of the anonymous type instead the one of
5070    the naming typedef.  This is because in gen_typedef_die, we did
5071    equate the anonymous struct named by the typedef with the DIE of
5072    the naming typedef. So by default, lookup_type_die on an anonymous
5073    struct yields the DIE of the naming typedef.
5074
5075    [1]: Read the comment of is_naming_typedef_decl to learn about what
5076    a naming typedef is.  */
5077
5078 static inline dw_die_ref
5079 lookup_type_die_strip_naming_typedef (tree type)
5080 {
5081   dw_die_ref die = lookup_type_die (type);
5082   return strip_naming_typedef (type, die);
5083 }
5084
5085 /* Equate a DIE to a given type specifier.  */
5086
5087 static inline void
5088 equate_type_number_to_die (tree type, dw_die_ref type_die)
5089 {
5090   TYPE_SYMTAB_DIE (type) = type_die;
5091 }
5092
5093 /* Returns a hash value for X (which really is a die_struct).  */
5094
5095 static hashval_t
5096 decl_die_table_hash (const void *x)
5097 {
5098   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
5099 }
5100
5101 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5102
5103 static int
5104 decl_die_table_eq (const void *x, const void *y)
5105 {
5106   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
5107 }
5108
5109 /* Return the DIE associated with a given declaration.  */
5110
5111 static inline dw_die_ref
5112 lookup_decl_die (tree decl)
5113 {
5114   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5115 }
5116
5117 /* Returns a hash value for X (which really is a var_loc_list).  */
5118
5119 static hashval_t
5120 decl_loc_table_hash (const void *x)
5121 {
5122   return (hashval_t) ((const var_loc_list *) x)->decl_id;
5123 }
5124
5125 /* Return nonzero if decl_id of var_loc_list X is the same as
5126    UID of decl *Y.  */
5127
5128 static int
5129 decl_loc_table_eq (const void *x, const void *y)
5130 {
5131   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
5132 }
5133
5134 /* Return the var_loc list associated with a given declaration.  */
5135
5136 static inline var_loc_list *
5137 lookup_decl_loc (const_tree decl)
5138 {
5139   if (!decl_loc_table)
5140     return NULL;
5141   return (var_loc_list *)
5142     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5143 }
5144
5145 /* Returns a hash value for X (which really is a cached_dw_loc_list_list).  */
5146
5147 static hashval_t
5148 cached_dw_loc_list_table_hash (const void *x)
5149 {
5150   return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
5151 }
5152
5153 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5154    UID of decl *Y.  */
5155
5156 static int
5157 cached_dw_loc_list_table_eq (const void *x, const void *y)
5158 {
5159   return (((const cached_dw_loc_list *) x)->decl_id
5160           == DECL_UID ((const_tree) y));
5161 }
5162
5163 /* Equate a DIE to a particular declaration.  */
5164
5165 static void
5166 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5167 {
5168   unsigned int decl_id = DECL_UID (decl);
5169   void **slot;
5170
5171   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5172   *slot = decl_die;
5173   decl_die->decl_id = decl_id;
5174 }
5175
5176 /* Return how many bits covers PIECE EXPR_LIST.  */
5177
5178 static int
5179 decl_piece_bitsize (rtx piece)
5180 {
5181   int ret = (int) GET_MODE (piece);
5182   if (ret)
5183     return ret;
5184   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5185               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5186   return INTVAL (XEXP (XEXP (piece, 0), 0));
5187 }
5188
5189 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
5190
5191 static rtx *
5192 decl_piece_varloc_ptr (rtx piece)
5193 {
5194   if ((int) GET_MODE (piece))
5195     return &XEXP (piece, 0);
5196   else
5197     return &XEXP (XEXP (piece, 0), 1);
5198 }
5199
5200 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5201    Next is the chain of following piece nodes.  */
5202
5203 static rtx
5204 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5205 {
5206   if (bitsize <= (int) MAX_MACHINE_MODE)
5207     return alloc_EXPR_LIST (bitsize, loc_note, next);
5208   else
5209     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5210                                                GEN_INT (bitsize),
5211                                                loc_note), next);
5212 }
5213
5214 /* Return rtx that should be stored into loc field for
5215    LOC_NOTE and BITPOS/BITSIZE.  */
5216
5217 static rtx
5218 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5219                       HOST_WIDE_INT bitsize)
5220 {
5221   if (bitsize != -1)
5222     {
5223       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5224       if (bitpos != 0)
5225         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5226     }
5227   return loc_note;
5228 }
5229
5230 /* This function either modifies location piece list *DEST in
5231    place (if SRC and INNER is NULL), or copies location piece list
5232    *SRC to *DEST while modifying it.  Location BITPOS is modified
5233    to contain LOC_NOTE, any pieces overlapping it are removed resp.
5234    not copied and if needed some padding around it is added.
5235    When modifying in place, DEST should point to EXPR_LIST where
5236    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5237    to the start of the whole list and INNER points to the EXPR_LIST
5238    where earlier pieces cover PIECE_BITPOS bits.  */
5239
5240 static void
5241 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5242                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5243                    HOST_WIDE_INT bitsize, rtx loc_note)
5244 {
5245   int diff;
5246   bool copy = inner != NULL;
5247
5248   if (copy)
5249     {
5250       /* First copy all nodes preceeding the current bitpos.  */
5251       while (src != inner)
5252         {
5253           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5254                                    decl_piece_bitsize (*src), NULL_RTX);
5255           dest = &XEXP (*dest, 1);
5256           src = &XEXP (*src, 1);
5257         }
5258     }
5259   /* Add padding if needed.  */
5260   if (bitpos != piece_bitpos)
5261     {
5262       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5263                                copy ? NULL_RTX : *dest);
5264       dest = &XEXP (*dest, 1);
5265     }
5266   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5267     {
5268       gcc_assert (!copy);
5269       /* A piece with correct bitpos and bitsize already exist,
5270          just update the location for it and return.  */
5271       *decl_piece_varloc_ptr (*dest) = loc_note;
5272       return;
5273     }
5274   /* Add the piece that changed.  */
5275   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5276   dest = &XEXP (*dest, 1);
5277   /* Skip over pieces that overlap it.  */
5278   diff = bitpos - piece_bitpos + bitsize;
5279   if (!copy)
5280     src = dest;
5281   while (diff > 0 && *src)
5282     {
5283       rtx piece = *src;
5284       diff -= decl_piece_bitsize (piece);
5285       if (copy)
5286         src = &XEXP (piece, 1);
5287       else
5288         {
5289           *src = XEXP (piece, 1);
5290           free_EXPR_LIST_node (piece);
5291         }
5292     }
5293   /* Add padding if needed.  */
5294   if (diff < 0 && *src)
5295     {
5296       if (!copy)
5297         dest = src;
5298       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5299       dest = &XEXP (*dest, 1);
5300     }
5301   if (!copy)
5302     return;
5303   /* Finally copy all nodes following it.  */
5304   while (*src)
5305     {
5306       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5307                                decl_piece_bitsize (*src), NULL_RTX);
5308       dest = &XEXP (*dest, 1);
5309       src = &XEXP (*src, 1);
5310     }
5311 }
5312
5313 /* Add a variable location node to the linked list for DECL.  */
5314
5315 static struct var_loc_node *
5316 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5317 {
5318   unsigned int decl_id;
5319   var_loc_list *temp;
5320   void **slot;
5321   struct var_loc_node *loc = NULL;
5322   HOST_WIDE_INT bitsize = -1, bitpos = -1;
5323
5324   if (DECL_DEBUG_EXPR_IS_FROM (decl))
5325     {
5326       tree realdecl = DECL_DEBUG_EXPR (decl);
5327       if (realdecl && handled_component_p (realdecl))
5328         {
5329           HOST_WIDE_INT maxsize;
5330           tree innerdecl;
5331           innerdecl
5332             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
5333           if (!DECL_P (innerdecl)
5334               || DECL_IGNORED_P (innerdecl)
5335               || TREE_STATIC (innerdecl)
5336               || bitsize <= 0
5337               || bitpos + bitsize > 256
5338               || bitsize != maxsize)
5339             return NULL;
5340           decl = innerdecl;
5341         }
5342     }
5343
5344   decl_id = DECL_UID (decl);
5345   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5346   if (*slot == NULL)
5347     {
5348       temp = ggc_alloc_cleared_var_loc_list ();
5349       temp->decl_id = decl_id;
5350       *slot = temp;
5351     }
5352   else
5353     temp = (var_loc_list *) *slot;
5354
5355   /* For PARM_DECLs try to keep around the original incoming value,
5356      even if that means we'll emit a zero-range .debug_loc entry.  */
5357   if (temp->last
5358       && temp->first == temp->last
5359       && TREE_CODE (decl) == PARM_DECL
5360       && GET_CODE (temp->first->loc) == NOTE
5361       && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5362       && DECL_INCOMING_RTL (decl)
5363       && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5364       && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5365          == GET_CODE (DECL_INCOMING_RTL (decl))
5366       && prev_real_insn (temp->first->loc) == NULL_RTX
5367       && (bitsize != -1
5368           || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5369                            NOTE_VAR_LOCATION_LOC (loc_note))
5370           || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5371               != NOTE_VAR_LOCATION_STATUS (loc_note))))
5372     {
5373       loc = ggc_alloc_cleared_var_loc_node ();
5374       temp->first->next = loc;
5375       temp->last = loc;
5376       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5377     }
5378   else if (temp->last)
5379     {
5380       struct var_loc_node *last = temp->last, *unused = NULL;
5381       rtx *piece_loc = NULL, last_loc_note;
5382       int piece_bitpos = 0;
5383       if (last->next)
5384         {
5385           last = last->next;
5386           gcc_assert (last->next == NULL);
5387         }
5388       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5389         {
5390           piece_loc = &last->loc;
5391           do
5392             {
5393               int cur_bitsize = decl_piece_bitsize (*piece_loc);
5394               if (piece_bitpos + cur_bitsize > bitpos)
5395                 break;
5396               piece_bitpos += cur_bitsize;
5397               piece_loc = &XEXP (*piece_loc, 1);
5398             }
5399           while (*piece_loc);
5400         }
5401       /* TEMP->LAST here is either pointer to the last but one or
5402          last element in the chained list, LAST is pointer to the
5403          last element.  */
5404       if (label && strcmp (last->label, label) == 0)
5405         {
5406           /* For SRA optimized variables if there weren't any real
5407              insns since last note, just modify the last node.  */
5408           if (piece_loc != NULL)
5409             {
5410               adjust_piece_list (piece_loc, NULL, NULL,
5411                                  bitpos, piece_bitpos, bitsize, loc_note);
5412               return NULL;
5413             }
5414           /* If the last note doesn't cover any instructions, remove it.  */
5415           if (temp->last != last)
5416             {
5417               temp->last->next = NULL;
5418               unused = last;
5419               last = temp->last;
5420               gcc_assert (strcmp (last->label, label) != 0);
5421             }
5422           else
5423             {
5424               gcc_assert (temp->first == temp->last
5425                           || (temp->first->next == temp->last
5426                               && TREE_CODE (decl) == PARM_DECL));
5427               memset (temp->last, '\0', sizeof (*temp->last));
5428               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5429               return temp->last;
5430             }
5431         }
5432       if (bitsize == -1 && NOTE_P (last->loc))
5433         last_loc_note = last->loc;
5434       else if (piece_loc != NULL
5435                && *piece_loc != NULL_RTX
5436                && piece_bitpos == bitpos
5437                && decl_piece_bitsize (*piece_loc) == bitsize)
5438         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5439       else
5440         last_loc_note = NULL_RTX;
5441       /* If the current location is the same as the end of the list,
5442          and either both or neither of the locations is uninitialized,
5443          we have nothing to do.  */
5444       if (last_loc_note == NULL_RTX
5445           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5446                             NOTE_VAR_LOCATION_LOC (loc_note)))
5447           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5448                != NOTE_VAR_LOCATION_STATUS (loc_note))
5449               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5450                    == VAR_INIT_STATUS_UNINITIALIZED)
5451                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
5452                       == VAR_INIT_STATUS_UNINITIALIZED))))
5453         {
5454           /* Add LOC to the end of list and update LAST.  If the last
5455              element of the list has been removed above, reuse its
5456              memory for the new node, otherwise allocate a new one.  */
5457           if (unused)
5458             {
5459               loc = unused;
5460               memset (loc, '\0', sizeof (*loc));
5461             }
5462           else
5463             loc = ggc_alloc_cleared_var_loc_node ();
5464           if (bitsize == -1 || piece_loc == NULL)
5465             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5466           else
5467             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5468                                bitpos, piece_bitpos, bitsize, loc_note);
5469           last->next = loc;
5470           /* Ensure TEMP->LAST will point either to the new last but one
5471              element of the chain, or to the last element in it.  */
5472           if (last != temp->last)
5473             temp->last = last;
5474         }
5475       else if (unused)
5476         ggc_free (unused);
5477     }
5478   else
5479     {
5480       loc = ggc_alloc_cleared_var_loc_node ();
5481       temp->first = loc;
5482       temp->last = loc;
5483       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5484     }
5485   return loc;
5486 }
5487 \f
5488 /* Keep track of the number of spaces used to indent the
5489    output of the debugging routines that print the structure of
5490    the DIE internal representation.  */
5491 static int print_indent;
5492
5493 /* Indent the line the number of spaces given by print_indent.  */
5494
5495 static inline void
5496 print_spaces (FILE *outfile)
5497 {
5498   fprintf (outfile, "%*s", print_indent, "");
5499 }
5500
5501 /* Print a type signature in hex.  */
5502
5503 static inline void
5504 print_signature (FILE *outfile, char *sig)
5505 {
5506   int i;
5507
5508   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5509     fprintf (outfile, "%02x", sig[i] & 0xff);
5510 }
5511
5512 /* Print the information associated with a given DIE, and its children.
5513    This routine is a debugging aid only.  */
5514
5515 static void
5516 print_die (dw_die_ref die, FILE *outfile)
5517 {
5518   dw_attr_ref a;
5519   dw_die_ref c;
5520   unsigned ix;
5521
5522   print_spaces (outfile);
5523   fprintf (outfile, "DIE %4ld: %s (%p)\n",
5524            die->die_offset, dwarf_tag_name (die->die_tag),
5525            (void*) die);
5526   print_spaces (outfile);
5527   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5528   fprintf (outfile, " offset: %ld", die->die_offset);
5529   fprintf (outfile, " mark: %d\n", die->die_mark);
5530
5531   if (use_debug_types && die->die_id.die_type_node)
5532     {
5533       print_spaces (outfile);
5534       fprintf (outfile, "  signature: ");
5535       print_signature (outfile, die->die_id.die_type_node->signature);
5536       fprintf (outfile, "\n");
5537     }
5538
5539   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5540     {
5541       print_spaces (outfile);
5542       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5543
5544       switch (AT_class (a))
5545         {
5546         case dw_val_class_addr:
5547           fprintf (outfile, "address");
5548           break;
5549         case dw_val_class_offset:
5550           fprintf (outfile, "offset");
5551           break;
5552         case dw_val_class_loc:
5553           fprintf (outfile, "location descriptor");
5554           break;
5555         case dw_val_class_loc_list:
5556           fprintf (outfile, "location list -> label:%s",
5557                    AT_loc_list (a)->ll_symbol);
5558           break;
5559         case dw_val_class_range_list:
5560           fprintf (outfile, "range list");
5561           break;
5562         case dw_val_class_const:
5563           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5564           break;
5565         case dw_val_class_unsigned_const:
5566           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5567           break;
5568         case dw_val_class_const_double:
5569           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
5570                             HOST_WIDE_INT_PRINT_UNSIGNED")",
5571                    a->dw_attr_val.v.val_double.high,
5572                    a->dw_attr_val.v.val_double.low);
5573           break;
5574         case dw_val_class_vec:
5575           fprintf (outfile, "floating-point or vector constant");
5576           break;
5577         case dw_val_class_flag:
5578           fprintf (outfile, "%u", AT_flag (a));
5579           break;
5580         case dw_val_class_die_ref:
5581           if (AT_ref (a) != NULL)
5582             {
5583               if (use_debug_types && AT_ref (a)->die_id.die_type_node)
5584                 {
5585                   fprintf (outfile, "die -> signature: ");
5586                   print_signature (outfile,
5587                                    AT_ref (a)->die_id.die_type_node->signature);
5588                 }
5589               else if (! use_debug_types && AT_ref (a)->die_id.die_symbol)
5590                 fprintf (outfile, "die -> label: %s",
5591                          AT_ref (a)->die_id.die_symbol);
5592               else
5593                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
5594               fprintf (outfile, " (%p)", (void *) AT_ref (a));
5595             }
5596           else
5597             fprintf (outfile, "die -> <null>");
5598           break;
5599         case dw_val_class_vms_delta:
5600           fprintf (outfile, "delta: @slotcount(%s-%s)",
5601                    AT_vms_delta2 (a), AT_vms_delta1 (a));
5602           break;
5603         case dw_val_class_lbl_id:
5604         case dw_val_class_lineptr:
5605         case dw_val_class_macptr:
5606           fprintf (outfile, "label: %s", AT_lbl (a));
5607           break;
5608         case dw_val_class_str:
5609           if (AT_string (a) != NULL)
5610             fprintf (outfile, "\"%s\"", AT_string (a));
5611           else
5612             fprintf (outfile, "<null>");
5613           break;
5614         case dw_val_class_file:
5615           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
5616                    AT_file (a)->emitted_number);
5617           break;
5618         case dw_val_class_data8:
5619           {
5620             int i;
5621
5622             for (i = 0; i < 8; i++)
5623               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
5624             break;
5625           }
5626         default:
5627           break;
5628         }
5629
5630       fprintf (outfile, "\n");
5631     }
5632
5633   if (die->die_child != NULL)
5634     {
5635       print_indent += 4;
5636       FOR_EACH_CHILD (die, c, print_die (c, outfile));
5637       print_indent -= 4;
5638     }
5639   if (print_indent == 0)
5640     fprintf (outfile, "\n");
5641 }
5642
5643 /* Print the information collected for a given DIE.  */
5644
5645 DEBUG_FUNCTION void
5646 debug_dwarf_die (dw_die_ref die)
5647 {
5648   print_die (die, stderr);
5649 }
5650
5651 /* Print all DWARF information collected for the compilation unit.
5652    This routine is a debugging aid only.  */
5653
5654 DEBUG_FUNCTION void
5655 debug_dwarf (void)
5656 {
5657   print_indent = 0;
5658   print_die (comp_unit_die (), stderr);
5659 }
5660 \f
5661 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5662    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5663    DIE that marks the start of the DIEs for this include file.  */
5664
5665 static dw_die_ref
5666 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5667 {
5668   const char *filename = get_AT_string (bincl_die, DW_AT_name);
5669   dw_die_ref new_unit = gen_compile_unit_die (filename);
5670
5671   new_unit->die_sib = old_unit;
5672   return new_unit;
5673 }
5674
5675 /* Close an include-file CU and reopen the enclosing one.  */
5676
5677 static dw_die_ref
5678 pop_compile_unit (dw_die_ref old_unit)
5679 {
5680   dw_die_ref new_unit = old_unit->die_sib;
5681
5682   old_unit->die_sib = NULL;
5683   return new_unit;
5684 }
5685
5686 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5687 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5688
5689 /* Calculate the checksum of a location expression.  */
5690
5691 static inline void
5692 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5693 {
5694   int tem;
5695
5696   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5697   CHECKSUM (tem);
5698   CHECKSUM (loc->dw_loc_oprnd1);
5699   CHECKSUM (loc->dw_loc_oprnd2);
5700 }
5701
5702 /* Calculate the checksum of an attribute.  */
5703
5704 static void
5705 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5706 {
5707   dw_loc_descr_ref loc;
5708   rtx r;
5709
5710   CHECKSUM (at->dw_attr);
5711
5712   /* We don't care that this was compiled with a different compiler
5713      snapshot; if the output is the same, that's what matters.  */
5714   if (at->dw_attr == DW_AT_producer)
5715     return;
5716
5717   switch (AT_class (at))
5718     {
5719     case dw_val_class_const:
5720       CHECKSUM (at->dw_attr_val.v.val_int);
5721       break;
5722     case dw_val_class_unsigned_const:
5723       CHECKSUM (at->dw_attr_val.v.val_unsigned);
5724       break;
5725     case dw_val_class_const_double:
5726       CHECKSUM (at->dw_attr_val.v.val_double);
5727       break;
5728     case dw_val_class_vec:
5729       CHECKSUM (at->dw_attr_val.v.val_vec);
5730       break;
5731     case dw_val_class_flag:
5732       CHECKSUM (at->dw_attr_val.v.val_flag);
5733       break;
5734     case dw_val_class_str:
5735       CHECKSUM_STRING (AT_string (at));
5736       break;
5737
5738     case dw_val_class_addr:
5739       r = AT_addr (at);
5740       gcc_assert (GET_CODE (r) == SYMBOL_REF);
5741       CHECKSUM_STRING (XSTR (r, 0));
5742       break;
5743
5744     case dw_val_class_offset:
5745       CHECKSUM (at->dw_attr_val.v.val_offset);
5746       break;
5747
5748     case dw_val_class_loc:
5749       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5750         loc_checksum (loc, ctx);
5751       break;
5752
5753     case dw_val_class_die_ref:
5754       die_checksum (AT_ref (at), ctx, mark);
5755       break;
5756
5757     case dw_val_class_fde_ref:
5758     case dw_val_class_vms_delta:
5759     case dw_val_class_lbl_id:
5760     case dw_val_class_lineptr:
5761     case dw_val_class_macptr:
5762       break;
5763
5764     case dw_val_class_file:
5765       CHECKSUM_STRING (AT_file (at)->filename);
5766       break;
5767
5768     case dw_val_class_data8:
5769       CHECKSUM (at->dw_attr_val.v.val_data8);
5770       break;
5771
5772     default:
5773       break;
5774     }
5775 }
5776
5777 /* Calculate the checksum of a DIE.  */
5778
5779 static void
5780 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5781 {
5782   dw_die_ref c;
5783   dw_attr_ref a;
5784   unsigned ix;
5785
5786   /* To avoid infinite recursion.  */
5787   if (die->die_mark)
5788     {
5789       CHECKSUM (die->die_mark);
5790       return;
5791     }
5792   die->die_mark = ++(*mark);
5793
5794   CHECKSUM (die->die_tag);
5795
5796   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5797     attr_checksum (a, ctx, mark);
5798
5799   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
5800 }
5801
5802 #undef CHECKSUM
5803 #undef CHECKSUM_STRING
5804
5805 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
5806 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5807 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
5808 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
5809 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
5810 #define CHECKSUM_ATTR(FOO) \
5811   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
5812
5813 /* Calculate the checksum of a number in signed LEB128 format.  */
5814
5815 static void
5816 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
5817 {
5818   unsigned char byte;
5819   bool more;
5820
5821   while (1)
5822     {
5823       byte = (value & 0x7f);
5824       value >>= 7;
5825       more = !((value == 0 && (byte & 0x40) == 0)
5826                 || (value == -1 && (byte & 0x40) != 0));
5827       if (more)
5828         byte |= 0x80;
5829       CHECKSUM (byte);
5830       if (!more)
5831         break;
5832     }
5833 }
5834
5835 /* Calculate the checksum of a number in unsigned LEB128 format.  */
5836
5837 static void
5838 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
5839 {
5840   while (1)
5841     {
5842       unsigned char byte = (value & 0x7f);
5843       value >>= 7;
5844       if (value != 0)
5845         /* More bytes to follow.  */
5846         byte |= 0x80;
5847       CHECKSUM (byte);
5848       if (value == 0)
5849         break;
5850     }
5851 }
5852
5853 /* Checksum the context of the DIE.  This adds the names of any
5854    surrounding namespaces or structures to the checksum.  */
5855
5856 static void
5857 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
5858 {
5859   const char *name;
5860   dw_die_ref spec;
5861   int tag = die->die_tag;
5862
5863   if (tag != DW_TAG_namespace
5864       && tag != DW_TAG_structure_type
5865       && tag != DW_TAG_class_type)
5866     return;
5867
5868   name = get_AT_string (die, DW_AT_name);
5869
5870   spec = get_AT_ref (die, DW_AT_specification);
5871   if (spec != NULL)
5872     die = spec;
5873
5874   if (die->die_parent != NULL)
5875     checksum_die_context (die->die_parent, ctx);
5876
5877   CHECKSUM_ULEB128 ('C');
5878   CHECKSUM_ULEB128 (tag);
5879   if (name != NULL)
5880     CHECKSUM_STRING (name);
5881 }
5882
5883 /* Calculate the checksum of a location expression.  */
5884
5885 static inline void
5886 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5887 {
5888   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
5889      were emitted as a DW_FORM_sdata instead of a location expression.  */
5890   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
5891     {
5892       CHECKSUM_ULEB128 (DW_FORM_sdata);
5893       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
5894       return;
5895     }
5896
5897   /* Otherwise, just checksum the raw location expression.  */
5898   while (loc != NULL)
5899     {
5900       CHECKSUM_ULEB128 (loc->dw_loc_opc);
5901       CHECKSUM (loc->dw_loc_oprnd1);
5902       CHECKSUM (loc->dw_loc_oprnd2);
5903       loc = loc->dw_loc_next;
5904     }
5905 }
5906
5907 /* Calculate the checksum of an attribute.  */
5908
5909 static void
5910 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
5911                        struct md5_ctx *ctx, int *mark)
5912 {
5913   dw_loc_descr_ref loc;
5914   rtx r;
5915
5916   if (AT_class (at) == dw_val_class_die_ref)
5917     {
5918       dw_die_ref target_die = AT_ref (at);
5919
5920       /* For pointer and reference types, we checksum only the (qualified)
5921          name of the target type (if there is a name).  For friend entries,
5922          we checksum only the (qualified) name of the target type or function.
5923          This allows the checksum to remain the same whether the target type
5924          is complete or not.  */
5925       if ((at->dw_attr == DW_AT_type
5926            && (tag == DW_TAG_pointer_type
5927                || tag == DW_TAG_reference_type
5928                || tag == DW_TAG_rvalue_reference_type
5929                || tag == DW_TAG_ptr_to_member_type))
5930           || (at->dw_attr == DW_AT_friend
5931               && tag == DW_TAG_friend))
5932         {
5933           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
5934
5935           if (name_attr != NULL)
5936             {
5937               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5938
5939               if (decl == NULL)
5940                 decl = target_die;
5941               CHECKSUM_ULEB128 ('N');
5942               CHECKSUM_ULEB128 (at->dw_attr);
5943               if (decl->die_parent != NULL)
5944                 checksum_die_context (decl->die_parent, ctx);
5945               CHECKSUM_ULEB128 ('E');
5946               CHECKSUM_STRING (AT_string (name_attr));
5947               return;
5948             }
5949         }
5950
5951       /* For all other references to another DIE, we check to see if the
5952          target DIE has already been visited.  If it has, we emit a
5953          backward reference; if not, we descend recursively.  */
5954       if (target_die->die_mark > 0)
5955         {
5956           CHECKSUM_ULEB128 ('R');
5957           CHECKSUM_ULEB128 (at->dw_attr);
5958           CHECKSUM_ULEB128 (target_die->die_mark);
5959         }
5960       else
5961         {
5962           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5963
5964           if (decl == NULL)
5965             decl = target_die;
5966           target_die->die_mark = ++(*mark);
5967           CHECKSUM_ULEB128 ('T');
5968           CHECKSUM_ULEB128 (at->dw_attr);
5969           if (decl->die_parent != NULL)
5970             checksum_die_context (decl->die_parent, ctx);
5971           die_checksum_ordered (target_die, ctx, mark);
5972         }
5973       return;
5974     }
5975
5976   CHECKSUM_ULEB128 ('A');
5977   CHECKSUM_ULEB128 (at->dw_attr);
5978
5979   switch (AT_class (at))
5980     {
5981     case dw_val_class_const:
5982       CHECKSUM_ULEB128 (DW_FORM_sdata);
5983       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
5984       break;
5985
5986     case dw_val_class_unsigned_const:
5987       CHECKSUM_ULEB128 (DW_FORM_sdata);
5988       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
5989       break;
5990
5991     case dw_val_class_const_double:
5992       CHECKSUM_ULEB128 (DW_FORM_block);
5993       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
5994       CHECKSUM (at->dw_attr_val.v.val_double);
5995       break;
5996
5997     case dw_val_class_vec:
5998       CHECKSUM_ULEB128 (DW_FORM_block);
5999       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
6000       CHECKSUM (at->dw_attr_val.v.val_vec);
6001       break;
6002
6003     case dw_val_class_flag:
6004       CHECKSUM_ULEB128 (DW_FORM_flag);
6005       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6006       break;
6007
6008     case dw_val_class_str:
6009       CHECKSUM_ULEB128 (DW_FORM_string);
6010       CHECKSUM_STRING (AT_string (at));
6011       break;
6012
6013     case dw_val_class_addr:
6014       r = AT_addr (at);
6015       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6016       CHECKSUM_ULEB128 (DW_FORM_string);
6017       CHECKSUM_STRING (XSTR (r, 0));
6018       break;
6019
6020     case dw_val_class_offset:
6021       CHECKSUM_ULEB128 (DW_FORM_sdata);
6022       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6023       break;
6024
6025     case dw_val_class_loc:
6026       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6027         loc_checksum_ordered (loc, ctx);
6028       break;
6029
6030     case dw_val_class_fde_ref:
6031     case dw_val_class_lbl_id:
6032     case dw_val_class_lineptr:
6033     case dw_val_class_macptr:
6034       break;
6035
6036     case dw_val_class_file:
6037       CHECKSUM_ULEB128 (DW_FORM_string);
6038       CHECKSUM_STRING (AT_file (at)->filename);
6039       break;
6040
6041     case dw_val_class_data8:
6042       CHECKSUM (at->dw_attr_val.v.val_data8);
6043       break;
6044
6045     default:
6046       break;
6047     }
6048 }
6049
6050 struct checksum_attributes
6051 {
6052   dw_attr_ref at_name;
6053   dw_attr_ref at_type;
6054   dw_attr_ref at_friend;
6055   dw_attr_ref at_accessibility;
6056   dw_attr_ref at_address_class;
6057   dw_attr_ref at_allocated;
6058   dw_attr_ref at_artificial;
6059   dw_attr_ref at_associated;
6060   dw_attr_ref at_binary_scale;
6061   dw_attr_ref at_bit_offset;
6062   dw_attr_ref at_bit_size;
6063   dw_attr_ref at_bit_stride;
6064   dw_attr_ref at_byte_size;
6065   dw_attr_ref at_byte_stride;
6066   dw_attr_ref at_const_value;
6067   dw_attr_ref at_containing_type;
6068   dw_attr_ref at_count;
6069   dw_attr_ref at_data_location;
6070   dw_attr_ref at_data_member_location;
6071   dw_attr_ref at_decimal_scale;
6072   dw_attr_ref at_decimal_sign;
6073   dw_attr_ref at_default_value;
6074   dw_attr_ref at_digit_count;
6075   dw_attr_ref at_discr;
6076   dw_attr_ref at_discr_list;
6077   dw_attr_ref at_discr_value;
6078   dw_attr_ref at_encoding;
6079   dw_attr_ref at_endianity;
6080   dw_attr_ref at_explicit;
6081   dw_attr_ref at_is_optional;
6082   dw_attr_ref at_location;
6083   dw_attr_ref at_lower_bound;
6084   dw_attr_ref at_mutable;
6085   dw_attr_ref at_ordering;
6086   dw_attr_ref at_picture_string;
6087   dw_attr_ref at_prototyped;
6088   dw_attr_ref at_small;
6089   dw_attr_ref at_segment;
6090   dw_attr_ref at_string_length;
6091   dw_attr_ref at_threads_scaled;
6092   dw_attr_ref at_upper_bound;
6093   dw_attr_ref at_use_location;
6094   dw_attr_ref at_use_UTF8;
6095   dw_attr_ref at_variable_parameter;
6096   dw_attr_ref at_virtuality;
6097   dw_attr_ref at_visibility;
6098   dw_attr_ref at_vtable_elem_location;
6099 };
6100
6101 /* Collect the attributes that we will want to use for the checksum.  */
6102
6103 static void
6104 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6105 {
6106   dw_attr_ref a;
6107   unsigned ix;
6108
6109   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6110     {
6111       switch (a->dw_attr)
6112         {
6113         case DW_AT_name:
6114           attrs->at_name = a;
6115           break;
6116         case DW_AT_type:
6117           attrs->at_type = a;
6118           break;
6119         case DW_AT_friend:
6120           attrs->at_friend = a;
6121           break;
6122         case DW_AT_accessibility:
6123           attrs->at_accessibility = a;
6124           break;
6125         case DW_AT_address_class:
6126           attrs->at_address_class = a;
6127           break;
6128         case DW_AT_allocated:
6129           attrs->at_allocated = a;
6130           break;
6131         case DW_AT_artificial:
6132           attrs->at_artificial = a;
6133           break;
6134         case DW_AT_associated:
6135           attrs->at_associated = a;
6136           break;
6137         case DW_AT_binary_scale:
6138           attrs->at_binary_scale = a;
6139           break;
6140         case DW_AT_bit_offset:
6141           attrs->at_bit_offset = a;
6142           break;
6143         case DW_AT_bit_size:
6144           attrs->at_bit_size = a;
6145           break;
6146         case DW_AT_bit_stride:
6147           attrs->at_bit_stride = a;
6148           break;
6149         case DW_AT_byte_size:
6150           attrs->at_byte_size = a;
6151           break;
6152         case DW_AT_byte_stride:
6153           attrs->at_byte_stride = a;
6154           break;
6155         case DW_AT_const_value:
6156           attrs->at_const_value = a;
6157           break;
6158         case DW_AT_containing_type:
6159           attrs->at_containing_type = a;
6160           break;
6161         case DW_AT_count:
6162           attrs->at_count = a;
6163           break;
6164         case DW_AT_data_location:
6165           attrs->at_data_location = a;
6166           break;
6167         case DW_AT_data_member_location:
6168           attrs->at_data_member_location = a;
6169           break;
6170         case DW_AT_decimal_scale:
6171           attrs->at_decimal_scale = a;
6172           break;
6173         case DW_AT_decimal_sign:
6174           attrs->at_decimal_sign = a;
6175           break;
6176         case DW_AT_default_value:
6177           attrs->at_default_value = a;
6178           break;
6179         case DW_AT_digit_count:
6180           attrs->at_digit_count = a;
6181           break;
6182         case DW_AT_discr:
6183           attrs->at_discr = a;
6184           break;
6185         case DW_AT_discr_list:
6186           attrs->at_discr_list = a;
6187           break;
6188         case DW_AT_discr_value:
6189           attrs->at_discr_value = a;
6190           break;
6191         case DW_AT_encoding:
6192           attrs->at_encoding = a;
6193           break;
6194         case DW_AT_endianity:
6195           attrs->at_endianity = a;
6196           break;
6197         case DW_AT_explicit:
6198           attrs->at_explicit = a;
6199           break;
6200         case DW_AT_is_optional:
6201           attrs->at_is_optional = a;
6202           break;
6203         case DW_AT_location:
6204           attrs->at_location = a;
6205           break;
6206         case DW_AT_lower_bound:
6207           attrs->at_lower_bound = a;
6208           break;
6209         case DW_AT_mutable:
6210           attrs->at_mutable = a;
6211           break;
6212         case DW_AT_ordering:
6213           attrs->at_ordering = a;
6214           break;
6215         case DW_AT_picture_string:
6216           attrs->at_picture_string = a;
6217           break;
6218         case DW_AT_prototyped:
6219           attrs->at_prototyped = a;
6220           break;
6221         case DW_AT_small:
6222           attrs->at_small = a;
6223           break;
6224         case DW_AT_segment:
6225           attrs->at_segment = a;
6226           break;
6227         case DW_AT_string_length:
6228           attrs->at_string_length = a;
6229           break;
6230         case DW_AT_threads_scaled:
6231           attrs->at_threads_scaled = a;
6232           break;
6233         case DW_AT_upper_bound:
6234           attrs->at_upper_bound = a;
6235           break;
6236         case DW_AT_use_location:
6237           attrs->at_use_location = a;
6238           break;
6239         case DW_AT_use_UTF8:
6240           attrs->at_use_UTF8 = a;
6241           break;
6242         case DW_AT_variable_parameter:
6243           attrs->at_variable_parameter = a;
6244           break;
6245         case DW_AT_virtuality:
6246           attrs->at_virtuality = a;
6247           break;
6248         case DW_AT_visibility:
6249           attrs->at_visibility = a;
6250           break;
6251         case DW_AT_vtable_elem_location:
6252           attrs->at_vtable_elem_location = a;
6253           break;
6254         default:
6255           break;
6256         }
6257     }
6258 }
6259
6260 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
6261
6262 static void
6263 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6264 {
6265   dw_die_ref c;
6266   dw_die_ref decl;
6267   struct checksum_attributes attrs;
6268
6269   CHECKSUM_ULEB128 ('D');
6270   CHECKSUM_ULEB128 (die->die_tag);
6271
6272   memset (&attrs, 0, sizeof (attrs));
6273
6274   decl = get_AT_ref (die, DW_AT_specification);
6275   if (decl != NULL)
6276     collect_checksum_attributes (&attrs, decl);
6277   collect_checksum_attributes (&attrs, die);
6278
6279   CHECKSUM_ATTR (attrs.at_name);
6280   CHECKSUM_ATTR (attrs.at_accessibility);
6281   CHECKSUM_ATTR (attrs.at_address_class);
6282   CHECKSUM_ATTR (attrs.at_allocated);
6283   CHECKSUM_ATTR (attrs.at_artificial);
6284   CHECKSUM_ATTR (attrs.at_associated);
6285   CHECKSUM_ATTR (attrs.at_binary_scale);
6286   CHECKSUM_ATTR (attrs.at_bit_offset);
6287   CHECKSUM_ATTR (attrs.at_bit_size);
6288   CHECKSUM_ATTR (attrs.at_bit_stride);
6289   CHECKSUM_ATTR (attrs.at_byte_size);
6290   CHECKSUM_ATTR (attrs.at_byte_stride);
6291   CHECKSUM_ATTR (attrs.at_const_value);
6292   CHECKSUM_ATTR (attrs.at_containing_type);
6293   CHECKSUM_ATTR (attrs.at_count);
6294   CHECKSUM_ATTR (attrs.at_data_location);
6295   CHECKSUM_ATTR (attrs.at_data_member_location);
6296   CHECKSUM_ATTR (attrs.at_decimal_scale);
6297   CHECKSUM_ATTR (attrs.at_decimal_sign);
6298   CHECKSUM_ATTR (attrs.at_default_value);
6299   CHECKSUM_ATTR (attrs.at_digit_count);
6300   CHECKSUM_ATTR (attrs.at_discr);
6301   CHECKSUM_ATTR (attrs.at_discr_list);
6302   CHECKSUM_ATTR (attrs.at_discr_value);
6303   CHECKSUM_ATTR (attrs.at_encoding);
6304   CHECKSUM_ATTR (attrs.at_endianity);
6305   CHECKSUM_ATTR (attrs.at_explicit);
6306   CHECKSUM_ATTR (attrs.at_is_optional);
6307   CHECKSUM_ATTR (attrs.at_location);
6308   CHECKSUM_ATTR (attrs.at_lower_bound);
6309   CHECKSUM_ATTR (attrs.at_mutable);
6310   CHECKSUM_ATTR (attrs.at_ordering);
6311   CHECKSUM_ATTR (attrs.at_picture_string);
6312   CHECKSUM_ATTR (attrs.at_prototyped);
6313   CHECKSUM_ATTR (attrs.at_small);
6314   CHECKSUM_ATTR (attrs.at_segment);
6315   CHECKSUM_ATTR (attrs.at_string_length);
6316   CHECKSUM_ATTR (attrs.at_threads_scaled);
6317   CHECKSUM_ATTR (attrs.at_upper_bound);
6318   CHECKSUM_ATTR (attrs.at_use_location);
6319   CHECKSUM_ATTR (attrs.at_use_UTF8);
6320   CHECKSUM_ATTR (attrs.at_variable_parameter);
6321   CHECKSUM_ATTR (attrs.at_virtuality);
6322   CHECKSUM_ATTR (attrs.at_visibility);
6323   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6324   CHECKSUM_ATTR (attrs.at_type);
6325   CHECKSUM_ATTR (attrs.at_friend);
6326
6327   /* Checksum the child DIEs, except for nested types and member functions.  */
6328   c = die->die_child;
6329   if (c) do {
6330     dw_attr_ref name_attr;
6331
6332     c = c->die_sib;
6333     name_attr = get_AT (c, DW_AT_name);
6334     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
6335         && name_attr != NULL)
6336       {
6337         CHECKSUM_ULEB128 ('S');
6338         CHECKSUM_ULEB128 (c->die_tag);
6339         CHECKSUM_STRING (AT_string (name_attr));
6340       }
6341     else
6342       {
6343         /* Mark this DIE so it gets processed when unmarking.  */
6344         if (c->die_mark == 0)
6345           c->die_mark = -1;
6346         die_checksum_ordered (c, ctx, mark);
6347       }
6348   } while (c != die->die_child);
6349
6350   CHECKSUM_ULEB128 (0);
6351 }
6352
6353 #undef CHECKSUM
6354 #undef CHECKSUM_STRING
6355 #undef CHECKSUM_ATTR
6356 #undef CHECKSUM_LEB128
6357 #undef CHECKSUM_ULEB128
6358
6359 /* Generate the type signature for DIE.  This is computed by generating an
6360    MD5 checksum over the DIE's tag, its relevant attributes, and its
6361    children.  Attributes that are references to other DIEs are processed
6362    by recursion, using the MARK field to prevent infinite recursion.
6363    If the DIE is nested inside a namespace or another type, we also
6364    need to include that context in the signature.  The lower 64 bits
6365    of the resulting MD5 checksum comprise the signature.  */
6366
6367 static void
6368 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6369 {
6370   int mark;
6371   const char *name;
6372   unsigned char checksum[16];
6373   struct md5_ctx ctx;
6374   dw_die_ref decl;
6375
6376   name = get_AT_string (die, DW_AT_name);
6377   decl = get_AT_ref (die, DW_AT_specification);
6378
6379   /* First, compute a signature for just the type name (and its surrounding
6380      context, if any.  This is stored in the type unit DIE for link-time
6381      ODR (one-definition rule) checking.  */
6382
6383   if (is_cxx() && name != NULL)
6384     {
6385       md5_init_ctx (&ctx);
6386
6387       /* Checksum the names of surrounding namespaces and structures.  */
6388       if (decl != NULL && decl->die_parent != NULL)
6389         checksum_die_context (decl->die_parent, &ctx);
6390
6391       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
6392       md5_process_bytes (name, strlen (name) + 1, &ctx);
6393       md5_finish_ctx (&ctx, checksum);
6394
6395       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6396     }
6397
6398   /* Next, compute the complete type signature.  */
6399
6400   md5_init_ctx (&ctx);
6401   mark = 1;
6402   die->die_mark = mark;
6403
6404   /* Checksum the names of surrounding namespaces and structures.  */
6405   if (decl != NULL && decl->die_parent != NULL)
6406     checksum_die_context (decl->die_parent, &ctx);
6407
6408   /* Checksum the DIE and its children.  */
6409   die_checksum_ordered (die, &ctx, &mark);
6410   unmark_all_dies (die);
6411   md5_finish_ctx (&ctx, checksum);
6412
6413   /* Store the signature in the type node and link the type DIE and the
6414      type node together.  */
6415   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6416           DWARF_TYPE_SIGNATURE_SIZE);
6417   die->die_id.die_type_node = type_node;
6418   type_node->type_die = die;
6419
6420   /* If the DIE is a specification, link its declaration to the type node
6421      as well.  */
6422   if (decl != NULL)
6423     decl->die_id.die_type_node = type_node;
6424 }
6425
6426 /* Do the location expressions look same?  */
6427 static inline int
6428 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6429 {
6430   return loc1->dw_loc_opc == loc2->dw_loc_opc
6431          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6432          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6433 }
6434
6435 /* Do the values look the same?  */
6436 static int
6437 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6438 {
6439   dw_loc_descr_ref loc1, loc2;
6440   rtx r1, r2;
6441
6442   if (v1->val_class != v2->val_class)
6443     return 0;
6444
6445   switch (v1->val_class)
6446     {
6447     case dw_val_class_const:
6448       return v1->v.val_int == v2->v.val_int;
6449     case dw_val_class_unsigned_const:
6450       return v1->v.val_unsigned == v2->v.val_unsigned;
6451     case dw_val_class_const_double:
6452       return v1->v.val_double.high == v2->v.val_double.high
6453              && v1->v.val_double.low == v2->v.val_double.low;
6454     case dw_val_class_vec:
6455       if (v1->v.val_vec.length != v2->v.val_vec.length
6456           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6457         return 0;
6458       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6459                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
6460         return 0;
6461       return 1;
6462     case dw_val_class_flag:
6463       return v1->v.val_flag == v2->v.val_flag;
6464     case dw_val_class_str:
6465       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6466
6467     case dw_val_class_addr:
6468       r1 = v1->v.val_addr;
6469       r2 = v2->v.val_addr;
6470       if (GET_CODE (r1) != GET_CODE (r2))
6471         return 0;
6472       return !rtx_equal_p (r1, r2);
6473
6474     case dw_val_class_offset:
6475       return v1->v.val_offset == v2->v.val_offset;
6476
6477     case dw_val_class_loc:
6478       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6479            loc1 && loc2;
6480            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6481         if (!same_loc_p (loc1, loc2, mark))
6482           return 0;
6483       return !loc1 && !loc2;
6484
6485     case dw_val_class_die_ref:
6486       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6487
6488     case dw_val_class_fde_ref:
6489     case dw_val_class_vms_delta:
6490     case dw_val_class_lbl_id:
6491     case dw_val_class_lineptr:
6492     case dw_val_class_macptr:
6493       return 1;
6494
6495     case dw_val_class_file:
6496       return v1->v.val_file == v2->v.val_file;
6497
6498     case dw_val_class_data8:
6499       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6500
6501     default:
6502       return 1;
6503     }
6504 }
6505
6506 /* Do the attributes look the same?  */
6507
6508 static int
6509 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6510 {
6511   if (at1->dw_attr != at2->dw_attr)
6512     return 0;
6513
6514   /* We don't care that this was compiled with a different compiler
6515      snapshot; if the output is the same, that's what matters. */
6516   if (at1->dw_attr == DW_AT_producer)
6517     return 1;
6518
6519   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6520 }
6521
6522 /* Do the dies look the same?  */
6523
6524 static int
6525 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6526 {
6527   dw_die_ref c1, c2;
6528   dw_attr_ref a1;
6529   unsigned ix;
6530
6531   /* To avoid infinite recursion.  */
6532   if (die1->die_mark)
6533     return die1->die_mark == die2->die_mark;
6534   die1->die_mark = die2->die_mark = ++(*mark);
6535
6536   if (die1->die_tag != die2->die_tag)
6537     return 0;
6538
6539   if (VEC_length (dw_attr_node, die1->die_attr)
6540       != VEC_length (dw_attr_node, die2->die_attr))
6541     return 0;
6542
6543   FOR_EACH_VEC_ELT (dw_attr_node, die1->die_attr, ix, a1)
6544     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
6545       return 0;
6546
6547   c1 = die1->die_child;
6548   c2 = die2->die_child;
6549   if (! c1)
6550     {
6551       if (c2)
6552         return 0;
6553     }
6554   else
6555     for (;;)
6556       {
6557         if (!same_die_p (c1, c2, mark))
6558           return 0;
6559         c1 = c1->die_sib;
6560         c2 = c2->die_sib;
6561         if (c1 == die1->die_child)
6562           {
6563             if (c2 == die2->die_child)
6564               break;
6565             else
6566               return 0;
6567           }
6568     }
6569
6570   return 1;
6571 }
6572
6573 /* Do the dies look the same?  Wrapper around same_die_p.  */
6574
6575 static int
6576 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6577 {
6578   int mark = 0;
6579   int ret = same_die_p (die1, die2, &mark);
6580
6581   unmark_all_dies (die1);
6582   unmark_all_dies (die2);
6583
6584   return ret;
6585 }
6586
6587 /* The prefix to attach to symbols on DIEs in the current comdat debug
6588    info section.  */
6589 static char *comdat_symbol_id;
6590
6591 /* The index of the current symbol within the current comdat CU.  */
6592 static unsigned int comdat_symbol_number;
6593
6594 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6595    children, and set comdat_symbol_id accordingly.  */
6596
6597 static void
6598 compute_section_prefix (dw_die_ref unit_die)
6599 {
6600   const char *die_name = get_AT_string (unit_die, DW_AT_name);
6601   const char *base = die_name ? lbasename (die_name) : "anonymous";
6602   char *name = XALLOCAVEC (char, strlen (base) + 64);
6603   char *p;
6604   int i, mark;
6605   unsigned char checksum[16];
6606   struct md5_ctx ctx;
6607
6608   /* Compute the checksum of the DIE, then append part of it as hex digits to
6609      the name filename of the unit.  */
6610
6611   md5_init_ctx (&ctx);
6612   mark = 0;
6613   die_checksum (unit_die, &ctx, &mark);
6614   unmark_all_dies (unit_die);
6615   md5_finish_ctx (&ctx, checksum);
6616
6617   sprintf (name, "%s.", base);
6618   clean_symbol_name (name);
6619
6620   p = name + strlen (name);
6621   for (i = 0; i < 4; i++)
6622     {
6623       sprintf (p, "%.2x", checksum[i]);
6624       p += 2;
6625     }
6626
6627   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6628   comdat_symbol_number = 0;
6629 }
6630
6631 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6632
6633 static int
6634 is_type_die (dw_die_ref die)
6635 {
6636   switch (die->die_tag)
6637     {
6638     case DW_TAG_array_type:
6639     case DW_TAG_class_type:
6640     case DW_TAG_interface_type:
6641     case DW_TAG_enumeration_type:
6642     case DW_TAG_pointer_type:
6643     case DW_TAG_reference_type:
6644     case DW_TAG_rvalue_reference_type:
6645     case DW_TAG_string_type:
6646     case DW_TAG_structure_type:
6647     case DW_TAG_subroutine_type:
6648     case DW_TAG_union_type:
6649     case DW_TAG_ptr_to_member_type:
6650     case DW_TAG_set_type:
6651     case DW_TAG_subrange_type:
6652     case DW_TAG_base_type:
6653     case DW_TAG_const_type:
6654     case DW_TAG_file_type:
6655     case DW_TAG_packed_type:
6656     case DW_TAG_volatile_type:
6657     case DW_TAG_typedef:
6658       return 1;
6659     default:
6660       return 0;
6661     }
6662 }
6663
6664 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6665    Basically, we want to choose the bits that are likely to be shared between
6666    compilations (types) and leave out the bits that are specific to individual
6667    compilations (functions).  */
6668
6669 static int
6670 is_comdat_die (dw_die_ref c)
6671 {
6672   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6673      we do for stabs.  The advantage is a greater likelihood of sharing between
6674      objects that don't include headers in the same order (and therefore would
6675      put the base types in a different comdat).  jason 8/28/00 */
6676
6677   if (c->die_tag == DW_TAG_base_type)
6678     return 0;
6679
6680   if (c->die_tag == DW_TAG_pointer_type
6681       || c->die_tag == DW_TAG_reference_type
6682       || c->die_tag == DW_TAG_rvalue_reference_type
6683       || c->die_tag == DW_TAG_const_type
6684       || c->die_tag == DW_TAG_volatile_type)
6685     {
6686       dw_die_ref t = get_AT_ref (c, DW_AT_type);
6687
6688       return t ? is_comdat_die (t) : 0;
6689     }
6690
6691   return is_type_die (c);
6692 }
6693
6694 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6695    compilation unit.  */
6696
6697 static int
6698 is_symbol_die (dw_die_ref c)
6699 {
6700   return (is_type_die (c)
6701           || is_declaration_die (c)
6702           || c->die_tag == DW_TAG_namespace
6703           || c->die_tag == DW_TAG_module);
6704 }
6705
6706 /* Returns true iff C is a compile-unit DIE.  */
6707
6708 static inline bool
6709 is_cu_die (dw_die_ref c)
6710 {
6711   return c && c->die_tag == DW_TAG_compile_unit;
6712 }
6713
6714 static char *
6715 gen_internal_sym (const char *prefix)
6716 {
6717   char buf[256];
6718
6719   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6720   return xstrdup (buf);
6721 }
6722
6723 /* Assign symbols to all worthy DIEs under DIE.  */
6724
6725 static void
6726 assign_symbol_names (dw_die_ref die)
6727 {
6728   dw_die_ref c;
6729
6730   if (is_symbol_die (die))
6731     {
6732       if (comdat_symbol_id)
6733         {
6734           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
6735
6736           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6737                    comdat_symbol_id, comdat_symbol_number++);
6738           die->die_id.die_symbol = xstrdup (p);
6739         }
6740       else
6741         die->die_id.die_symbol = gen_internal_sym ("LDIE");
6742     }
6743
6744   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6745 }
6746
6747 struct cu_hash_table_entry
6748 {
6749   dw_die_ref cu;
6750   unsigned min_comdat_num, max_comdat_num;
6751   struct cu_hash_table_entry *next;
6752 };
6753
6754 /* Routines to manipulate hash table of CUs.  */
6755 static hashval_t
6756 htab_cu_hash (const void *of)
6757 {
6758   const struct cu_hash_table_entry *const entry =
6759     (const struct cu_hash_table_entry *) of;
6760
6761   return htab_hash_string (entry->cu->die_id.die_symbol);
6762 }
6763
6764 static int
6765 htab_cu_eq (const void *of1, const void *of2)
6766 {
6767   const struct cu_hash_table_entry *const entry1 =
6768     (const struct cu_hash_table_entry *) of1;
6769   const struct die_struct *const entry2 = (const struct die_struct *) of2;
6770
6771   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
6772 }
6773
6774 static void
6775 htab_cu_del (void *what)
6776 {
6777   struct cu_hash_table_entry *next,
6778     *entry = (struct cu_hash_table_entry *) what;
6779
6780   while (entry)
6781     {
6782       next = entry->next;
6783       free (entry);
6784       entry = next;
6785     }
6786 }
6787
6788 /* Check whether we have already seen this CU and set up SYM_NUM
6789    accordingly.  */
6790 static int
6791 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6792 {
6793   struct cu_hash_table_entry dummy;
6794   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6795
6796   dummy.max_comdat_num = 0;
6797
6798   slot = (struct cu_hash_table_entry **)
6799     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6800         INSERT);
6801   entry = *slot;
6802
6803   for (; entry; last = entry, entry = entry->next)
6804     {
6805       if (same_die_p_wrap (cu, entry->cu))
6806         break;
6807     }
6808
6809   if (entry)
6810     {
6811       *sym_num = entry->min_comdat_num;
6812       return 1;
6813     }
6814
6815   entry = XCNEW (struct cu_hash_table_entry);
6816   entry->cu = cu;
6817   entry->min_comdat_num = *sym_num = last->max_comdat_num;
6818   entry->next = *slot;
6819   *slot = entry;
6820
6821   return 0;
6822 }
6823
6824 /* Record SYM_NUM to record of CU in HTABLE.  */
6825 static void
6826 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6827 {
6828   struct cu_hash_table_entry **slot, *entry;
6829
6830   slot = (struct cu_hash_table_entry **)
6831     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6832         NO_INSERT);
6833   entry = *slot;
6834
6835   entry->max_comdat_num = sym_num;
6836 }
6837
6838 /* Traverse the DIE (which is always comp_unit_die), and set up
6839    additional compilation units for each of the include files we see
6840    bracketed by BINCL/EINCL.  */
6841
6842 static void
6843 break_out_includes (dw_die_ref die)
6844 {
6845   dw_die_ref c;
6846   dw_die_ref unit = NULL;
6847   limbo_die_node *node, **pnode;
6848   htab_t cu_hash_table;
6849
6850   c = die->die_child;
6851   if (c) do {
6852     dw_die_ref prev = c;
6853     c = c->die_sib;
6854     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6855            || (unit && is_comdat_die (c)))
6856       {
6857         dw_die_ref next = c->die_sib;
6858
6859         /* This DIE is for a secondary CU; remove it from the main one.  */
6860         remove_child_with_prev (c, prev);
6861
6862         if (c->die_tag == DW_TAG_GNU_BINCL)
6863           unit = push_new_compile_unit (unit, c);
6864         else if (c->die_tag == DW_TAG_GNU_EINCL)
6865           unit = pop_compile_unit (unit);
6866         else
6867           add_child_die (unit, c);
6868         c = next;
6869         if (c == die->die_child)
6870           break;
6871       }
6872   } while (c != die->die_child);
6873
6874 #if 0
6875   /* We can only use this in debugging, since the frontend doesn't check
6876      to make sure that we leave every include file we enter.  */
6877   gcc_assert (!unit);
6878 #endif
6879
6880   assign_symbol_names (die);
6881   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6882   for (node = limbo_die_list, pnode = &limbo_die_list;
6883        node;
6884        node = node->next)
6885     {
6886       int is_dupl;
6887
6888       compute_section_prefix (node->die);
6889       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6890                         &comdat_symbol_number);
6891       assign_symbol_names (node->die);
6892       if (is_dupl)
6893         *pnode = node->next;
6894       else
6895         {
6896           pnode = &node->next;
6897           record_comdat_symbol_number (node->die, cu_hash_table,
6898                 comdat_symbol_number);
6899         }
6900     }
6901   htab_delete (cu_hash_table);
6902 }
6903
6904 /* Return non-zero if this DIE is a declaration.  */
6905
6906 static int
6907 is_declaration_die (dw_die_ref die)
6908 {
6909   dw_attr_ref a;
6910   unsigned ix;
6911
6912   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6913     if (a->dw_attr == DW_AT_declaration)
6914       return 1;
6915
6916   return 0;
6917 }
6918
6919 /* Return non-zero if this DIE is nested inside a subprogram.  */
6920
6921 static int
6922 is_nested_in_subprogram (dw_die_ref die)
6923 {
6924   dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
6925
6926   if (decl == NULL)
6927     decl = die;
6928   return local_scope_p (decl);
6929 }
6930
6931 /* Return non-zero if this DIE contains a defining declaration of a
6932    subprogram.  */
6933
6934 static int
6935 contains_subprogram_definition (dw_die_ref die)
6936 {
6937   dw_die_ref c;
6938
6939   if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
6940     return 1;
6941   FOR_EACH_CHILD (die, c, if (contains_subprogram_definition(c)) return 1);
6942   return 0;
6943 }
6944
6945 /* Return non-zero if this is a type DIE that should be moved to a
6946    COMDAT .debug_types section.  */
6947
6948 static int
6949 should_move_die_to_comdat (dw_die_ref die)
6950 {
6951   switch (die->die_tag)
6952     {
6953     case DW_TAG_class_type:
6954     case DW_TAG_structure_type:
6955     case DW_TAG_enumeration_type:
6956     case DW_TAG_union_type:
6957       /* Don't move declarations, inlined instances, or types nested in a
6958          subprogram.  */
6959       if (is_declaration_die (die)
6960           || get_AT (die, DW_AT_abstract_origin)
6961           || is_nested_in_subprogram (die))
6962         return 0;
6963       /* A type definition should never contain a subprogram definition.  */
6964       gcc_assert (!contains_subprogram_definition (die));
6965       return 1;
6966     case DW_TAG_array_type:
6967     case DW_TAG_interface_type:
6968     case DW_TAG_pointer_type:
6969     case DW_TAG_reference_type:
6970     case DW_TAG_rvalue_reference_type:
6971     case DW_TAG_string_type:
6972     case DW_TAG_subroutine_type:
6973     case DW_TAG_ptr_to_member_type:
6974     case DW_TAG_set_type:
6975     case DW_TAG_subrange_type:
6976     case DW_TAG_base_type:
6977     case DW_TAG_const_type:
6978     case DW_TAG_file_type:
6979     case DW_TAG_packed_type:
6980     case DW_TAG_volatile_type:
6981     case DW_TAG_typedef:
6982     default:
6983       return 0;
6984     }
6985 }
6986
6987 /* Make a clone of DIE.  */
6988
6989 static dw_die_ref
6990 clone_die (dw_die_ref die)
6991 {
6992   dw_die_ref clone;
6993   dw_attr_ref a;
6994   unsigned ix;
6995
6996   clone = ggc_alloc_cleared_die_node ();
6997   clone->die_tag = die->die_tag;
6998
6999   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7000     add_dwarf_attr (clone, a);
7001
7002   return clone;
7003 }
7004
7005 /* Make a clone of the tree rooted at DIE.  */
7006
7007 static dw_die_ref
7008 clone_tree (dw_die_ref die)
7009 {
7010   dw_die_ref c;
7011   dw_die_ref clone = clone_die (die);
7012
7013   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
7014
7015   return clone;
7016 }
7017
7018 /* Make a clone of DIE as a declaration.  */
7019
7020 static dw_die_ref
7021 clone_as_declaration (dw_die_ref die)
7022 {
7023   dw_die_ref clone;
7024   dw_die_ref decl;
7025   dw_attr_ref a;
7026   unsigned ix;
7027
7028   /* If the DIE is already a declaration, just clone it.  */
7029   if (is_declaration_die (die))
7030     return clone_die (die);
7031
7032   /* If the DIE is a specification, just clone its declaration DIE.  */
7033   decl = get_AT_ref (die, DW_AT_specification);
7034   if (decl != NULL)
7035     return clone_die (decl);
7036
7037   clone = ggc_alloc_cleared_die_node ();
7038   clone->die_tag = die->die_tag;
7039
7040   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7041     {
7042       /* We don't want to copy over all attributes.
7043          For example we don't want DW_AT_byte_size because otherwise we will no
7044          longer have a declaration and GDB will treat it as a definition.  */
7045
7046       switch (a->dw_attr)
7047         {
7048         case DW_AT_artificial:
7049         case DW_AT_containing_type:
7050         case DW_AT_external:
7051         case DW_AT_name:
7052         case DW_AT_type:
7053         case DW_AT_virtuality:
7054         case DW_AT_linkage_name:
7055         case DW_AT_MIPS_linkage_name:
7056           add_dwarf_attr (clone, a);
7057           break;
7058         case DW_AT_byte_size:
7059         default:
7060           break;
7061         }
7062     }
7063
7064   if (die->die_id.die_type_node)
7065     add_AT_die_ref (clone, DW_AT_signature, die);
7066
7067   add_AT_flag (clone, DW_AT_declaration, 1);
7068   return clone;
7069 }
7070
7071 /* Copy the declaration context to the new compile unit DIE.  This includes
7072    any surrounding namespace or type declarations.  If the DIE has an
7073    AT_specification attribute, it also includes attributes and children
7074    attached to the specification.  */
7075
7076 static void
7077 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7078 {
7079   dw_die_ref decl;
7080   dw_die_ref new_decl;
7081
7082   decl = get_AT_ref (die, DW_AT_specification);
7083   if (decl == NULL)
7084     decl = die;
7085   else
7086     {
7087       unsigned ix;
7088       dw_die_ref c;
7089       dw_attr_ref a;
7090
7091       /* Copy the type node pointer from the new DIE to the original
7092          declaration DIE so we can forward references later.  */
7093       decl->die_id.die_type_node = die->die_id.die_type_node;
7094
7095       remove_AT (die, DW_AT_specification);
7096
7097       FOR_EACH_VEC_ELT (dw_attr_node, decl->die_attr, ix, a)
7098         {
7099           if (a->dw_attr != DW_AT_name
7100               && a->dw_attr != DW_AT_declaration
7101               && a->dw_attr != DW_AT_external)
7102             add_dwarf_attr (die, a);
7103         }
7104
7105       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
7106     }
7107
7108   if (decl->die_parent != NULL
7109       && decl->die_parent->die_tag != DW_TAG_compile_unit
7110       && decl->die_parent->die_tag != DW_TAG_type_unit)
7111     {
7112       new_decl = copy_ancestor_tree (unit, decl, NULL);
7113       if (new_decl != NULL)
7114         {
7115           remove_AT (new_decl, DW_AT_signature);
7116           add_AT_specification (die, new_decl);
7117         }
7118     }
7119 }
7120
7121 /* Generate the skeleton ancestor tree for the given NODE, then clone
7122    the DIE and add the clone into the tree.  */
7123
7124 static void
7125 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7126 {
7127   if (node->new_die != NULL)
7128     return;
7129
7130   node->new_die = clone_as_declaration (node->old_die);
7131
7132   if (node->parent != NULL)
7133     {
7134       generate_skeleton_ancestor_tree (node->parent);
7135       add_child_die (node->parent->new_die, node->new_die);
7136     }
7137 }
7138
7139 /* Generate a skeleton tree of DIEs containing any declarations that are
7140    found in the original tree.  We traverse the tree looking for declaration
7141    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
7142
7143 static void
7144 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7145 {
7146   skeleton_chain_node node;
7147   dw_die_ref c;
7148   dw_die_ref first;
7149   dw_die_ref prev = NULL;
7150   dw_die_ref next = NULL;
7151
7152   node.parent = parent;
7153
7154   first = c = parent->old_die->die_child;
7155   if (c)
7156     next = c->die_sib;
7157   if (c) do {
7158     if (prev == NULL || prev->die_sib == c)
7159       prev = c;
7160     c = next;
7161     next = (c == first ? NULL : c->die_sib);
7162     node.old_die = c;
7163     node.new_die = NULL;
7164     if (is_declaration_die (c))
7165       {
7166         /* Clone the existing DIE, move the original to the skeleton
7167            tree (which is in the main CU), and put the clone, with
7168            all the original's children, where the original came from.  */
7169         dw_die_ref clone = clone_die (c);
7170         move_all_children (c, clone);
7171
7172         replace_child (c, clone, prev);
7173         generate_skeleton_ancestor_tree (parent);
7174         add_child_die (parent->new_die, c);
7175         node.new_die = c;
7176         c = clone;
7177       }
7178     generate_skeleton_bottom_up (&node);
7179   } while (next != NULL);
7180 }
7181
7182 /* Wrapper function for generate_skeleton_bottom_up.  */
7183
7184 static dw_die_ref
7185 generate_skeleton (dw_die_ref die)
7186 {
7187   skeleton_chain_node node;
7188
7189   node.old_die = die;
7190   node.new_die = NULL;
7191   node.parent = NULL;
7192
7193   /* If this type definition is nested inside another type,
7194      always leave at least a declaration in its place.  */
7195   if (die->die_parent != NULL && is_type_die (die->die_parent))
7196     node.new_die = clone_as_declaration (die);
7197
7198   generate_skeleton_bottom_up (&node);
7199   return node.new_die;
7200 }
7201
7202 /* Remove the DIE from its parent, possibly replacing it with a cloned
7203    declaration.  The original DIE will be moved to a new compile unit
7204    so that existing references to it follow it to the new location.  If
7205    any of the original DIE's descendants is a declaration, we need to
7206    replace the original DIE with a skeleton tree and move the
7207    declarations back into the skeleton tree.  */
7208
7209 static dw_die_ref
7210 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
7211 {
7212   dw_die_ref skeleton;
7213
7214   skeleton = generate_skeleton (child);
7215   if (skeleton == NULL)
7216     remove_child_with_prev (child, prev);
7217   else
7218     {
7219       skeleton->die_id.die_type_node = child->die_id.die_type_node;
7220       replace_child (child, skeleton, prev);
7221     }
7222
7223   return skeleton;
7224 }
7225
7226 /* Traverse the DIE and set up additional .debug_types sections for each
7227    type worthy of being placed in a COMDAT section.  */
7228
7229 static void
7230 break_out_comdat_types (dw_die_ref die)
7231 {
7232   dw_die_ref c;
7233   dw_die_ref first;
7234   dw_die_ref prev = NULL;
7235   dw_die_ref next = NULL;
7236   dw_die_ref unit = NULL;
7237
7238   first = c = die->die_child;
7239   if (c)
7240     next = c->die_sib;
7241   if (c) do {
7242     if (prev == NULL || prev->die_sib == c)
7243       prev = c;
7244     c = next;
7245     next = (c == first ? NULL : c->die_sib);
7246     if (should_move_die_to_comdat (c))
7247       {
7248         dw_die_ref replacement;
7249         comdat_type_node_ref type_node;
7250
7251         /* Create a new type unit DIE as the root for the new tree, and
7252            add it to the list of comdat types.  */
7253         unit = new_die (DW_TAG_type_unit, NULL, NULL);
7254         add_AT_unsigned (unit, DW_AT_language,
7255                          get_AT_unsigned (comp_unit_die (), DW_AT_language));
7256         type_node = ggc_alloc_cleared_comdat_type_node ();
7257         type_node->root_die = unit;
7258         type_node->next = comdat_type_list;
7259         comdat_type_list = type_node;
7260
7261         /* Generate the type signature.  */
7262         generate_type_signature (c, type_node);
7263
7264         /* Copy the declaration context, attributes, and children of the
7265            declaration into the new compile unit DIE.  */
7266         copy_declaration_context (unit, c);
7267
7268         /* Remove this DIE from the main CU.  */
7269         replacement = remove_child_or_replace_with_skeleton (c, prev);
7270
7271         /* Break out nested types into their own type units.  */
7272         break_out_comdat_types (c);
7273
7274         /* Add the DIE to the new compunit.  */
7275         add_child_die (unit, c);
7276
7277         if (replacement != NULL)
7278           c = replacement;
7279       }
7280     else if (c->die_tag == DW_TAG_namespace
7281              || c->die_tag == DW_TAG_class_type
7282              || c->die_tag == DW_TAG_structure_type
7283              || c->die_tag == DW_TAG_union_type)
7284       {
7285         /* Look for nested types that can be broken out.  */
7286         break_out_comdat_types (c);
7287       }
7288   } while (next != NULL);
7289 }
7290
7291 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
7292
7293 struct decl_table_entry
7294 {
7295   dw_die_ref orig;
7296   dw_die_ref copy;
7297 };
7298
7299 /* Routines to manipulate hash table of copied declarations.  */
7300
7301 static hashval_t
7302 htab_decl_hash (const void *of)
7303 {
7304   const struct decl_table_entry *const entry =
7305     (const struct decl_table_entry *) of;
7306
7307   return htab_hash_pointer (entry->orig);
7308 }
7309
7310 static int
7311 htab_decl_eq (const void *of1, const void *of2)
7312 {
7313   const struct decl_table_entry *const entry1 =
7314     (const struct decl_table_entry *) of1;
7315   const struct die_struct *const entry2 = (const struct die_struct *) of2;
7316
7317   return entry1->orig == entry2;
7318 }
7319
7320 static void
7321 htab_decl_del (void *what)
7322 {
7323   struct decl_table_entry *entry = (struct decl_table_entry *) what;
7324
7325   free (entry);
7326 }
7327
7328 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7329    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
7330    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
7331    to check if the ancestor has already been copied into UNIT.  */
7332
7333 static dw_die_ref
7334 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7335 {
7336   dw_die_ref parent = die->die_parent;
7337   dw_die_ref new_parent = unit;
7338   dw_die_ref copy;
7339   void **slot = NULL;
7340   struct decl_table_entry *entry = NULL;
7341
7342   if (decl_table)
7343     {
7344       /* Check if the entry has already been copied to UNIT.  */
7345       slot = htab_find_slot_with_hash (decl_table, die,
7346                                        htab_hash_pointer (die), INSERT);
7347       if (*slot != HTAB_EMPTY_ENTRY)
7348         {
7349           entry = (struct decl_table_entry *) *slot;
7350           return entry->copy;
7351         }
7352
7353       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
7354       entry = XCNEW (struct decl_table_entry);
7355       entry->orig = die;
7356       entry->copy = NULL;
7357       *slot = entry;
7358     }
7359
7360   if (parent != NULL)
7361     {
7362       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7363       if (spec != NULL)
7364         parent = spec;
7365       if (parent->die_tag != DW_TAG_compile_unit
7366           && parent->die_tag != DW_TAG_type_unit)
7367         new_parent = copy_ancestor_tree (unit, parent, decl_table);
7368     }
7369
7370   copy = clone_as_declaration (die);
7371   add_child_die (new_parent, copy);
7372
7373   if (decl_table != NULL)
7374     {
7375       /* Record the pointer to the copy.  */
7376       entry->copy = copy;
7377     }
7378
7379   return copy;
7380 }
7381
7382 /* Walk the DIE and its children, looking for references to incomplete
7383    or trivial types that are unmarked (i.e., that are not in the current
7384    type_unit).  */
7385
7386 static void
7387 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7388 {
7389   dw_die_ref c;
7390   dw_attr_ref a;
7391   unsigned ix;
7392
7393   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7394     {
7395       if (AT_class (a) == dw_val_class_die_ref)
7396         {
7397           dw_die_ref targ = AT_ref (a);
7398           comdat_type_node_ref type_node = targ->die_id.die_type_node;
7399           void **slot;
7400           struct decl_table_entry *entry;
7401
7402           if (targ->die_mark != 0 || type_node != NULL)
7403             continue;
7404
7405           slot = htab_find_slot_with_hash (decl_table, targ,
7406                                            htab_hash_pointer (targ), INSERT);
7407
7408           if (*slot != HTAB_EMPTY_ENTRY)
7409             {
7410               /* TARG has already been copied, so we just need to
7411                  modify the reference to point to the copy.  */
7412               entry = (struct decl_table_entry *) *slot;
7413               a->dw_attr_val.v.val_die_ref.die = entry->copy;
7414             }
7415           else
7416             {
7417               dw_die_ref parent = unit;
7418               dw_die_ref copy = clone_tree (targ);
7419
7420               /* Make sure the cloned tree is marked as part of the
7421                  type unit.  */
7422               mark_dies (copy);
7423
7424               /* Record in DECL_TABLE that TARG has been copied.
7425                  Need to do this now, before the recursive call,
7426                  because DECL_TABLE may be expanded and SLOT
7427                  would no longer be a valid pointer.  */
7428               entry = XCNEW (struct decl_table_entry);
7429               entry->orig = targ;
7430               entry->copy = copy;
7431               *slot = entry;
7432
7433               /* If TARG has surrounding context, copy its ancestor tree
7434                  into the new type unit.  */
7435               if (targ->die_parent != NULL
7436                   && targ->die_parent->die_tag != DW_TAG_compile_unit
7437                   && targ->die_parent->die_tag != DW_TAG_type_unit)
7438                 parent = copy_ancestor_tree (unit, targ->die_parent,
7439                                              decl_table);
7440
7441               add_child_die (parent, copy);
7442               a->dw_attr_val.v.val_die_ref.die = copy;
7443
7444               /* Make sure the newly-copied DIE is walked.  If it was
7445                  installed in a previously-added context, it won't
7446                  get visited otherwise.  */
7447               if (parent != unit)
7448                 {
7449                   /* Find the highest point of the newly-added tree,
7450                      mark each node along the way, and walk from there.  */
7451                   parent->die_mark = 1;
7452                   while (parent->die_parent
7453                          && parent->die_parent->die_mark == 0)
7454                     {
7455                       parent = parent->die_parent;
7456                       parent->die_mark = 1;
7457                     }
7458                   copy_decls_walk (unit, parent, decl_table);
7459                 }
7460             }
7461         }
7462     }
7463
7464   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
7465 }
7466
7467 /* Copy declarations for "unworthy" types into the new comdat section.
7468    Incomplete types, modified types, and certain other types aren't broken
7469    out into comdat sections of their own, so they don't have a signature,
7470    and we need to copy the declaration into the same section so that we
7471    don't have an external reference.  */
7472
7473 static void
7474 copy_decls_for_unworthy_types (dw_die_ref unit)
7475 {
7476   htab_t decl_table;
7477
7478   mark_dies (unit);
7479   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
7480   copy_decls_walk (unit, unit, decl_table);
7481   htab_delete (decl_table);
7482   unmark_dies (unit);
7483 }
7484
7485 /* Traverse the DIE and add a sibling attribute if it may have the
7486    effect of speeding up access to siblings.  To save some space,
7487    avoid generating sibling attributes for DIE's without children.  */
7488
7489 static void
7490 add_sibling_attributes (dw_die_ref die)
7491 {
7492   dw_die_ref c;
7493
7494   if (! die->die_child)
7495     return;
7496
7497   if (die->die_parent && die != die->die_parent->die_child)
7498     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7499
7500   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7501 }
7502
7503 /* Output all location lists for the DIE and its children.  */
7504
7505 static void
7506 output_location_lists (dw_die_ref die)
7507 {
7508   dw_die_ref c;
7509   dw_attr_ref a;
7510   unsigned ix;
7511
7512   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7513     if (AT_class (a) == dw_val_class_loc_list)
7514       output_loc_list (AT_loc_list (a));
7515
7516   FOR_EACH_CHILD (die, c, output_location_lists (c));
7517 }
7518
7519 /* The format of each DIE (and its attribute value pairs) is encoded in an
7520    abbreviation table.  This routine builds the abbreviation table and assigns
7521    a unique abbreviation id for each abbreviation entry.  The children of each
7522    die are visited recursively.  */
7523
7524 static void
7525 build_abbrev_table (dw_die_ref die)
7526 {
7527   unsigned long abbrev_id;
7528   unsigned int n_alloc;
7529   dw_die_ref c;
7530   dw_attr_ref a;
7531   unsigned ix;
7532
7533   /* Scan the DIE references, and mark as external any that refer to
7534      DIEs from other CUs (i.e. those which are not marked).  */
7535   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7536     if (AT_class (a) == dw_val_class_die_ref
7537         && AT_ref (a)->die_mark == 0)
7538       {
7539         gcc_assert (use_debug_types || AT_ref (a)->die_id.die_symbol);
7540         set_AT_ref_external (a, 1);
7541       }
7542
7543   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7544     {
7545       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7546       dw_attr_ref die_a, abbrev_a;
7547       unsigned ix;
7548       bool ok = true;
7549
7550       if (abbrev->die_tag != die->die_tag)
7551         continue;
7552       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7553         continue;
7554
7555       if (VEC_length (dw_attr_node, abbrev->die_attr)
7556           != VEC_length (dw_attr_node, die->die_attr))
7557         continue;
7558
7559       FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, die_a)
7560         {
7561           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
7562           if ((abbrev_a->dw_attr != die_a->dw_attr)
7563               || (value_format (abbrev_a) != value_format (die_a)))
7564             {
7565               ok = false;
7566               break;
7567             }
7568         }
7569       if (ok)
7570         break;
7571     }
7572
7573   if (abbrev_id >= abbrev_die_table_in_use)
7574     {
7575       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7576         {
7577           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7578           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7579                                             n_alloc);
7580
7581           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7582                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7583           abbrev_die_table_allocated = n_alloc;
7584         }
7585
7586       ++abbrev_die_table_in_use;
7587       abbrev_die_table[abbrev_id] = die;
7588     }
7589
7590   die->die_abbrev = abbrev_id;
7591   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
7592 }
7593 \f
7594 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
7595
7596 static int
7597 constant_size (unsigned HOST_WIDE_INT value)
7598 {
7599   int log;
7600
7601   if (value == 0)
7602     log = 0;
7603   else
7604     log = floor_log2 (value);
7605
7606   log = log / 8;
7607   log = 1 << (floor_log2 (log) + 1);
7608
7609   return log;
7610 }
7611
7612 /* Return the size of a DIE as it is represented in the
7613    .debug_info section.  */
7614
7615 static unsigned long
7616 size_of_die (dw_die_ref die)
7617 {
7618   unsigned long size = 0;
7619   dw_attr_ref a;
7620   unsigned ix;
7621
7622   size += size_of_uleb128 (die->die_abbrev);
7623   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7624     {
7625       switch (AT_class (a))
7626         {
7627         case dw_val_class_addr:
7628           size += DWARF2_ADDR_SIZE;
7629           break;
7630         case dw_val_class_offset:
7631           size += DWARF_OFFSET_SIZE;
7632           break;
7633         case dw_val_class_loc:
7634           {
7635             unsigned long lsize = size_of_locs (AT_loc (a));
7636
7637             /* Block length.  */
7638             if (dwarf_version >= 4)
7639               size += size_of_uleb128 (lsize);
7640             else
7641               size += constant_size (lsize);
7642             size += lsize;
7643           }
7644           break;
7645         case dw_val_class_loc_list:
7646           size += DWARF_OFFSET_SIZE;
7647           break;
7648         case dw_val_class_range_list:
7649           size += DWARF_OFFSET_SIZE;
7650           break;
7651         case dw_val_class_const:
7652           size += size_of_sleb128 (AT_int (a));
7653           break;
7654         case dw_val_class_unsigned_const:
7655           {
7656             int csize = constant_size (AT_unsigned (a));
7657             if (dwarf_version == 3
7658                 && a->dw_attr == DW_AT_data_member_location
7659                 && csize >= 4)
7660               size += size_of_uleb128 (AT_unsigned (a));
7661             else
7662               size += csize;
7663           }
7664           break;
7665         case dw_val_class_const_double:
7666           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
7667           if (HOST_BITS_PER_WIDE_INT >= 64)
7668             size++; /* block */
7669           break;
7670         case dw_val_class_vec:
7671           size += constant_size (a->dw_attr_val.v.val_vec.length
7672                                  * a->dw_attr_val.v.val_vec.elt_size)
7673                   + a->dw_attr_val.v.val_vec.length
7674                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
7675           break;
7676         case dw_val_class_flag:
7677           if (dwarf_version >= 4)
7678             /* Currently all add_AT_flag calls pass in 1 as last argument,
7679                so DW_FORM_flag_present can be used.  If that ever changes,
7680                we'll need to use DW_FORM_flag and have some optimization
7681                in build_abbrev_table that will change those to
7682                DW_FORM_flag_present if it is set to 1 in all DIEs using
7683                the same abbrev entry.  */
7684             gcc_assert (a->dw_attr_val.v.val_flag == 1);
7685           else
7686             size += 1;
7687           break;
7688         case dw_val_class_die_ref:
7689           if (AT_ref_external (a))
7690             {
7691               /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
7692                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
7693                  is sized by target address length, whereas in DWARF3
7694                  it's always sized as an offset.  */
7695               if (use_debug_types)
7696                 size += DWARF_TYPE_SIGNATURE_SIZE;
7697               else if (dwarf_version == 2)
7698                 size += DWARF2_ADDR_SIZE;
7699               else
7700                 size += DWARF_OFFSET_SIZE;
7701             }
7702           else
7703             size += DWARF_OFFSET_SIZE;
7704           break;
7705         case dw_val_class_fde_ref:
7706           size += DWARF_OFFSET_SIZE;
7707           break;
7708         case dw_val_class_lbl_id:
7709           size += DWARF2_ADDR_SIZE;
7710           break;
7711         case dw_val_class_lineptr:
7712         case dw_val_class_macptr:
7713           size += DWARF_OFFSET_SIZE;
7714           break;
7715         case dw_val_class_str:
7716           if (AT_string_form (a) == DW_FORM_strp)
7717             size += DWARF_OFFSET_SIZE;
7718           else
7719             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
7720           break;
7721         case dw_val_class_file:
7722           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
7723           break;
7724         case dw_val_class_data8:
7725           size += 8;
7726           break;
7727         case dw_val_class_vms_delta:
7728           size += DWARF_OFFSET_SIZE;
7729           break;
7730         default:
7731           gcc_unreachable ();
7732         }
7733     }
7734
7735   return size;
7736 }
7737
7738 /* Size the debugging information associated with a given DIE.  Visits the
7739    DIE's children recursively.  Updates the global variable next_die_offset, on
7740    each time through.  Uses the current value of next_die_offset to update the
7741    die_offset field in each DIE.  */
7742
7743 static void
7744 calc_die_sizes (dw_die_ref die)
7745 {
7746   dw_die_ref c;
7747
7748   gcc_assert (die->die_offset == 0
7749               || (unsigned long int) die->die_offset == next_die_offset);
7750   die->die_offset = next_die_offset;
7751   next_die_offset += size_of_die (die);
7752
7753   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
7754
7755   if (die->die_child != NULL)
7756     /* Count the null byte used to terminate sibling lists.  */
7757     next_die_offset += 1;
7758 }
7759
7760 /* Size just the base type children at the start of the CU.
7761    This is needed because build_abbrev needs to size locs
7762    and sizing of type based stack ops needs to know die_offset
7763    values for the base types.  */
7764
7765 static void
7766 calc_base_type_die_sizes (void)
7767 {
7768   unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7769   unsigned int i;
7770   dw_die_ref base_type;
7771 #if ENABLE_ASSERT_CHECKING
7772   dw_die_ref prev = comp_unit_die ()->die_child;
7773 #endif
7774
7775   die_offset += size_of_die (comp_unit_die ());
7776   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
7777     {
7778 #if ENABLE_ASSERT_CHECKING
7779       gcc_assert (base_type->die_offset == 0
7780                   && prev->die_sib == base_type
7781                   && base_type->die_child == NULL
7782                   && base_type->die_abbrev);
7783       prev = base_type;
7784 #endif
7785       base_type->die_offset = die_offset;
7786       die_offset += size_of_die (base_type);
7787     }
7788 }
7789
7790 /* Set the marks for a die and its children.  We do this so
7791    that we know whether or not a reference needs to use FORM_ref_addr; only
7792    DIEs in the same CU will be marked.  We used to clear out the offset
7793    and use that as the flag, but ran into ordering problems.  */
7794
7795 static void
7796 mark_dies (dw_die_ref die)
7797 {
7798   dw_die_ref c;
7799
7800   gcc_assert (!die->die_mark);
7801
7802   die->die_mark = 1;
7803   FOR_EACH_CHILD (die, c, mark_dies (c));
7804 }
7805
7806 /* Clear the marks for a die and its children.  */
7807
7808 static void
7809 unmark_dies (dw_die_ref die)
7810 {
7811   dw_die_ref c;
7812
7813   if (! use_debug_types)
7814     gcc_assert (die->die_mark);
7815
7816   die->die_mark = 0;
7817   FOR_EACH_CHILD (die, c, unmark_dies (c));
7818 }
7819
7820 /* Clear the marks for a die, its children and referred dies.  */
7821
7822 static void
7823 unmark_all_dies (dw_die_ref die)
7824 {
7825   dw_die_ref c;
7826   dw_attr_ref a;
7827   unsigned ix;
7828
7829   if (!die->die_mark)
7830     return;
7831   die->die_mark = 0;
7832
7833   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
7834
7835   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7836     if (AT_class (a) == dw_val_class_die_ref)
7837       unmark_all_dies (AT_ref (a));
7838 }
7839
7840 /* Return the size of the .debug_pubnames or .debug_pubtypes table
7841    generated for the compilation unit.  */
7842
7843 static unsigned long
7844 size_of_pubnames (VEC (pubname_entry, gc) * names)
7845 {
7846   unsigned long size;
7847   unsigned i;
7848   pubname_ref p;
7849
7850   size = DWARF_PUBNAMES_HEADER_SIZE;
7851   FOR_EACH_VEC_ELT (pubname_entry, names, i, p)
7852     if (names != pubtype_table
7853         || p->die->die_offset != 0
7854         || !flag_eliminate_unused_debug_types)
7855       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
7856
7857   size += DWARF_OFFSET_SIZE;
7858   return size;
7859 }
7860
7861 /* Return the size of the information in the .debug_aranges section.  */
7862
7863 static unsigned long
7864 size_of_aranges (void)
7865 {
7866   unsigned long size;
7867
7868   size = DWARF_ARANGES_HEADER_SIZE;
7869
7870   /* Count the address/length pair for this compilation unit.  */
7871   if (text_section_used)
7872     size += 2 * DWARF2_ADDR_SIZE;
7873   if (cold_text_section_used)
7874     size += 2 * DWARF2_ADDR_SIZE;
7875   if (have_multiple_function_sections)
7876     {
7877       unsigned fde_idx;
7878       dw_fde_ref fde;
7879
7880       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
7881         {
7882           if (!fde->in_std_section)
7883             size += 2 * DWARF2_ADDR_SIZE;
7884           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
7885             size += 2 * DWARF2_ADDR_SIZE;
7886         }
7887     }
7888
7889   /* Count the two zero words used to terminated the address range table.  */
7890   size += 2 * DWARF2_ADDR_SIZE;
7891   return size;
7892 }
7893 \f
7894 /* Select the encoding of an attribute value.  */
7895
7896 static enum dwarf_form
7897 value_format (dw_attr_ref a)
7898 {
7899   switch (a->dw_attr_val.val_class)
7900     {
7901     case dw_val_class_addr:
7902       /* Only very few attributes allow DW_FORM_addr.  */
7903       switch (a->dw_attr)
7904         {
7905         case DW_AT_low_pc:
7906         case DW_AT_high_pc:
7907         case DW_AT_entry_pc:
7908         case DW_AT_trampoline:
7909           return DW_FORM_addr;
7910         default:
7911           break;
7912         }
7913       switch (DWARF2_ADDR_SIZE)
7914         {
7915         case 1:
7916           return DW_FORM_data1;
7917         case 2:
7918           return DW_FORM_data2;
7919         case 4:
7920           return DW_FORM_data4;
7921         case 8:
7922           return DW_FORM_data8;
7923         default:
7924           gcc_unreachable ();
7925         }
7926     case dw_val_class_range_list:
7927     case dw_val_class_loc_list:
7928       if (dwarf_version >= 4)
7929         return DW_FORM_sec_offset;
7930       /* FALLTHRU */
7931     case dw_val_class_vms_delta:
7932     case dw_val_class_offset:
7933       switch (DWARF_OFFSET_SIZE)
7934         {
7935         case 4:
7936           return DW_FORM_data4;
7937         case 8:
7938           return DW_FORM_data8;
7939         default:
7940           gcc_unreachable ();
7941         }
7942     case dw_val_class_loc:
7943       if (dwarf_version >= 4)
7944         return DW_FORM_exprloc;
7945       switch (constant_size (size_of_locs (AT_loc (a))))
7946         {
7947         case 1:
7948           return DW_FORM_block1;
7949         case 2:
7950           return DW_FORM_block2;
7951         default:
7952           gcc_unreachable ();
7953         }
7954     case dw_val_class_const:
7955       return DW_FORM_sdata;
7956     case dw_val_class_unsigned_const:
7957       switch (constant_size (AT_unsigned (a)))
7958         {
7959         case 1:
7960           return DW_FORM_data1;
7961         case 2:
7962           return DW_FORM_data2;
7963         case 4:
7964           /* In DWARF3 DW_AT_data_member_location with
7965              DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
7966              constant, so we need to use DW_FORM_udata if we need
7967              a large constant.  */
7968           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
7969             return DW_FORM_udata;
7970           return DW_FORM_data4;
7971         case 8:
7972           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
7973             return DW_FORM_udata;
7974           return DW_FORM_data8;
7975         default:
7976           gcc_unreachable ();
7977         }
7978     case dw_val_class_const_double:
7979       switch (HOST_BITS_PER_WIDE_INT)
7980         {
7981         case 8:
7982           return DW_FORM_data2;
7983         case 16:
7984           return DW_FORM_data4;
7985         case 32:
7986           return DW_FORM_data8;
7987         case 64:
7988         default:
7989           return DW_FORM_block1;
7990         }
7991     case dw_val_class_vec:
7992       switch (constant_size (a->dw_attr_val.v.val_vec.length
7993                              * a->dw_attr_val.v.val_vec.elt_size))
7994         {
7995         case 1:
7996           return DW_FORM_block1;
7997         case 2:
7998           return DW_FORM_block2;
7999         case 4:
8000           return DW_FORM_block4;
8001         default:
8002           gcc_unreachable ();
8003         }
8004     case dw_val_class_flag:
8005       if (dwarf_version >= 4)
8006         {
8007           /* Currently all add_AT_flag calls pass in 1 as last argument,
8008              so DW_FORM_flag_present can be used.  If that ever changes,
8009              we'll need to use DW_FORM_flag and have some optimization
8010              in build_abbrev_table that will change those to
8011              DW_FORM_flag_present if it is set to 1 in all DIEs using
8012              the same abbrev entry.  */
8013           gcc_assert (a->dw_attr_val.v.val_flag == 1);
8014           return DW_FORM_flag_present;
8015         }
8016       return DW_FORM_flag;
8017     case dw_val_class_die_ref:
8018       if (AT_ref_external (a))
8019         return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8020       else
8021         return DW_FORM_ref;
8022     case dw_val_class_fde_ref:
8023       return DW_FORM_data;
8024     case dw_val_class_lbl_id:
8025       return DW_FORM_addr;
8026     case dw_val_class_lineptr:
8027     case dw_val_class_macptr:
8028       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8029     case dw_val_class_str:
8030       return AT_string_form (a);
8031     case dw_val_class_file:
8032       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8033         {
8034         case 1:
8035           return DW_FORM_data1;
8036         case 2:
8037           return DW_FORM_data2;
8038         case 4:
8039           return DW_FORM_data4;
8040         default:
8041           gcc_unreachable ();
8042         }
8043
8044     case dw_val_class_data8:
8045       return DW_FORM_data8;
8046
8047     default:
8048       gcc_unreachable ();
8049     }
8050 }
8051
8052 /* Output the encoding of an attribute value.  */
8053
8054 static void
8055 output_value_format (dw_attr_ref a)
8056 {
8057   enum dwarf_form form = value_format (a);
8058
8059   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8060 }
8061
8062 /* Output the .debug_abbrev section which defines the DIE abbreviation
8063    table.  */
8064
8065 static void
8066 output_abbrev_section (void)
8067 {
8068   unsigned long abbrev_id;
8069
8070   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8071     {
8072       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
8073       unsigned ix;
8074       dw_attr_ref a_attr;
8075
8076       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8077       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8078                                    dwarf_tag_name (abbrev->die_tag));
8079
8080       if (abbrev->die_child != NULL)
8081         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8082       else
8083         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8084
8085       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
8086            ix++)
8087         {
8088           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8089                                        dwarf_attr_name (a_attr->dw_attr));
8090           output_value_format (a_attr);
8091         }
8092
8093       dw2_asm_output_data (1, 0, NULL);
8094       dw2_asm_output_data (1, 0, NULL);
8095     }
8096
8097   /* Terminate the table.  */
8098   dw2_asm_output_data (1, 0, NULL);
8099 }
8100
8101 /* Output a symbol we can use to refer to this DIE from another CU.  */
8102
8103 static inline void
8104 output_die_symbol (dw_die_ref die)
8105 {
8106   char *sym = die->die_id.die_symbol;
8107
8108   if (sym == 0)
8109     return;
8110
8111   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8112     /* We make these global, not weak; if the target doesn't support
8113        .linkonce, it doesn't support combining the sections, so debugging
8114        will break.  */
8115     targetm.asm_out.globalize_label (asm_out_file, sym);
8116
8117   ASM_OUTPUT_LABEL (asm_out_file, sym);
8118 }
8119
8120 /* Return a new location list, given the begin and end range, and the
8121    expression.  */
8122
8123 static inline dw_loc_list_ref
8124 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8125               const char *section)
8126 {
8127   dw_loc_list_ref retlist = ggc_alloc_cleared_dw_loc_list_node ();
8128
8129   retlist->begin = begin;
8130   retlist->end = end;
8131   retlist->expr = expr;
8132   retlist->section = section;
8133
8134   return retlist;
8135 }
8136
8137 /* Generate a new internal symbol for this location list node, if it
8138    hasn't got one yet.  */
8139
8140 static inline void
8141 gen_llsym (dw_loc_list_ref list)
8142 {
8143   gcc_assert (!list->ll_symbol);
8144   list->ll_symbol = gen_internal_sym ("LLST");
8145 }
8146
8147 /* Output the location list given to us.  */
8148
8149 static void
8150 output_loc_list (dw_loc_list_ref list_head)
8151 {
8152   dw_loc_list_ref curr = list_head;
8153
8154   if (list_head->emitted)
8155     return;
8156   list_head->emitted = true;
8157
8158   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8159
8160   /* Walk the location list, and output each range + expression.  */
8161   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8162     {
8163       unsigned long size;
8164       /* Don't output an entry that starts and ends at the same address.  */
8165       if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
8166         continue;
8167       if (!have_multiple_function_sections)
8168         {
8169           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8170                                 "Location list begin address (%s)",
8171                                 list_head->ll_symbol);
8172           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8173                                 "Location list end address (%s)",
8174                                 list_head->ll_symbol);
8175         }
8176       else
8177         {
8178           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8179                                "Location list begin address (%s)",
8180                                list_head->ll_symbol);
8181           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8182                                "Location list end address (%s)",
8183                                list_head->ll_symbol);
8184         }
8185       size = size_of_locs (curr->expr);
8186
8187       /* Output the block length for this list of location operations.  */
8188       gcc_assert (size <= 0xffff);
8189       dw2_asm_output_data (2, size, "%s", "Location expression size");
8190
8191       output_loc_sequence (curr->expr, -1);
8192     }
8193
8194   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8195                        "Location list terminator begin (%s)",
8196                        list_head->ll_symbol);
8197   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8198                        "Location list terminator end (%s)",
8199                        list_head->ll_symbol);
8200 }
8201
8202 /* Output a type signature.  */
8203
8204 static inline void
8205 output_signature (const char *sig, const char *name)
8206 {
8207   int i;
8208
8209   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8210     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
8211 }
8212
8213 /* Output the DIE and its attributes.  Called recursively to generate
8214    the definitions of each child DIE.  */
8215
8216 static void
8217 output_die (dw_die_ref die)
8218 {
8219   dw_attr_ref a;
8220   dw_die_ref c;
8221   unsigned long size;
8222   unsigned ix;
8223
8224   /* If someone in another CU might refer to us, set up a symbol for
8225      them to point to.  */
8226   if (! use_debug_types && die->die_id.die_symbol)
8227     output_die_symbol (die);
8228
8229   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
8230                                (unsigned long)die->die_offset,
8231                                dwarf_tag_name (die->die_tag));
8232
8233   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
8234     {
8235       const char *name = dwarf_attr_name (a->dw_attr);
8236
8237       switch (AT_class (a))
8238         {
8239         case dw_val_class_addr:
8240           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8241           break;
8242
8243         case dw_val_class_offset:
8244           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8245                                "%s", name);
8246           break;
8247
8248         case dw_val_class_range_list:
8249           {
8250             char *p = strchr (ranges_section_label, '\0');
8251
8252             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
8253                      a->dw_attr_val.v.val_offset);
8254             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8255                                    debug_ranges_section, "%s", name);
8256             *p = '\0';
8257           }
8258           break;
8259
8260         case dw_val_class_loc:
8261           size = size_of_locs (AT_loc (a));
8262
8263           /* Output the block length for this list of location operations.  */
8264           if (dwarf_version >= 4)
8265             dw2_asm_output_data_uleb128 (size, "%s", name);
8266           else
8267             dw2_asm_output_data (constant_size (size), size, "%s", name);
8268
8269           output_loc_sequence (AT_loc (a), -1);
8270           break;
8271
8272         case dw_val_class_const:
8273           /* ??? It would be slightly more efficient to use a scheme like is
8274              used for unsigned constants below, but gdb 4.x does not sign
8275              extend.  Gdb 5.x does sign extend.  */
8276           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8277           break;
8278
8279         case dw_val_class_unsigned_const:
8280           {
8281             int csize = constant_size (AT_unsigned (a));
8282             if (dwarf_version == 3
8283                 && a->dw_attr == DW_AT_data_member_location
8284                 && csize >= 4)
8285               dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
8286             else
8287               dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
8288           }
8289           break;
8290
8291         case dw_val_class_const_double:
8292           {
8293             unsigned HOST_WIDE_INT first, second;
8294
8295             if (HOST_BITS_PER_WIDE_INT >= 64)
8296               dw2_asm_output_data (1,
8297                                    2 * HOST_BITS_PER_WIDE_INT
8298                                    / HOST_BITS_PER_CHAR,
8299                                    NULL);
8300
8301             if (WORDS_BIG_ENDIAN)
8302               {
8303                 first = a->dw_attr_val.v.val_double.high;
8304                 second = a->dw_attr_val.v.val_double.low;
8305               }
8306             else
8307               {
8308                 first = a->dw_attr_val.v.val_double.low;
8309                 second = a->dw_attr_val.v.val_double.high;
8310               }
8311
8312             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8313                                  first, name);
8314             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8315                                  second, NULL);
8316           }
8317           break;
8318
8319         case dw_val_class_vec:
8320           {
8321             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8322             unsigned int len = a->dw_attr_val.v.val_vec.length;
8323             unsigned int i;
8324             unsigned char *p;
8325
8326             dw2_asm_output_data (constant_size (len * elt_size),
8327                                  len * elt_size, "%s", name);
8328             if (elt_size > sizeof (HOST_WIDE_INT))
8329               {
8330                 elt_size /= 2;
8331                 len *= 2;
8332               }
8333             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8334                  i < len;
8335                  i++, p += elt_size)
8336               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8337                                    "fp or vector constant word %u", i);
8338             break;
8339           }
8340
8341         case dw_val_class_flag:
8342           if (dwarf_version >= 4)
8343             {
8344               /* Currently all add_AT_flag calls pass in 1 as last argument,
8345                  so DW_FORM_flag_present can be used.  If that ever changes,
8346                  we'll need to use DW_FORM_flag and have some optimization
8347                  in build_abbrev_table that will change those to
8348                  DW_FORM_flag_present if it is set to 1 in all DIEs using
8349                  the same abbrev entry.  */
8350               gcc_assert (AT_flag (a) == 1);
8351               if (flag_debug_asm)
8352                 fprintf (asm_out_file, "\t\t\t%s %s\n",
8353                          ASM_COMMENT_START, name);
8354               break;
8355             }
8356           dw2_asm_output_data (1, AT_flag (a), "%s", name);
8357           break;
8358
8359         case dw_val_class_loc_list:
8360           {
8361             char *sym = AT_loc_list (a)->ll_symbol;
8362
8363             gcc_assert (sym);
8364             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8365                                    "%s", name);
8366           }
8367           break;
8368
8369         case dw_val_class_die_ref:
8370           if (AT_ref_external (a))
8371             {
8372               if (use_debug_types)
8373                 {
8374                   comdat_type_node_ref type_node =
8375                     AT_ref (a)->die_id.die_type_node;
8376
8377                   gcc_assert (type_node);
8378                   output_signature (type_node->signature, name);
8379                 }
8380               else
8381                 {
8382                   char *sym = AT_ref (a)->die_id.die_symbol;
8383                   int size;
8384
8385                   gcc_assert (sym);
8386                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
8387                      length, whereas in DWARF3 it's always sized as an
8388                      offset.  */
8389                   if (dwarf_version == 2)
8390                     size = DWARF2_ADDR_SIZE;
8391                   else
8392                     size = DWARF_OFFSET_SIZE;
8393                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
8394                                          name);
8395                 }
8396             }
8397           else
8398             {
8399               gcc_assert (AT_ref (a)->die_offset);
8400               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8401                                    "%s", name);
8402             }
8403           break;
8404
8405         case dw_val_class_fde_ref:
8406           {
8407             char l1[20];
8408
8409             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8410                                          a->dw_attr_val.v.val_fde_index * 2);
8411             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
8412                                    "%s", name);
8413           }
8414           break;
8415
8416         case dw_val_class_vms_delta:
8417           dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
8418                                     AT_vms_delta2 (a), AT_vms_delta1 (a),
8419                                     "%s", name);
8420           break;
8421
8422         case dw_val_class_lbl_id:
8423           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8424           break;
8425
8426         case dw_val_class_lineptr:
8427           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8428                                  debug_line_section, "%s", name);
8429           break;
8430
8431         case dw_val_class_macptr:
8432           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8433                                  debug_macinfo_section, "%s", name);
8434           break;
8435
8436         case dw_val_class_str:
8437           if (AT_string_form (a) == DW_FORM_strp)
8438             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
8439                                    a->dw_attr_val.v.val_str->label,
8440                                    debug_str_section,
8441                                    "%s: \"%s\"", name, AT_string (a));
8442           else
8443             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
8444           break;
8445
8446         case dw_val_class_file:
8447           {
8448             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
8449
8450             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
8451                                  a->dw_attr_val.v.val_file->filename);
8452             break;
8453           }
8454
8455         case dw_val_class_data8:
8456           {
8457             int i;
8458
8459             for (i = 0; i < 8; i++)
8460               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
8461                                    i == 0 ? "%s" : NULL, name);
8462             break;
8463           }
8464
8465         default:
8466           gcc_unreachable ();
8467         }
8468     }
8469
8470   FOR_EACH_CHILD (die, c, output_die (c));
8471
8472   /* Add null byte to terminate sibling list.  */
8473   if (die->die_child != NULL)
8474     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
8475                          (unsigned long) die->die_offset);
8476 }
8477
8478 /* Output the compilation unit that appears at the beginning of the
8479    .debug_info section, and precedes the DIE descriptions.  */
8480
8481 static void
8482 output_compilation_unit_header (void)
8483 {
8484   int ver = dwarf_version;
8485
8486   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8487     dw2_asm_output_data (4, 0xffffffff,
8488       "Initial length escape value indicating 64-bit DWARF extension");
8489   dw2_asm_output_data (DWARF_OFFSET_SIZE,
8490                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
8491                        "Length of Compilation Unit Info");
8492   dw2_asm_output_data (2, ver, "DWARF version number");
8493   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
8494                          debug_abbrev_section,
8495                          "Offset Into Abbrev. Section");
8496   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
8497 }
8498
8499 /* Output the compilation unit DIE and its children.  */
8500
8501 static void
8502 output_comp_unit (dw_die_ref die, int output_if_empty)
8503 {
8504   const char *secname;
8505   char *oldsym, *tmp;
8506
8507   /* Unless we are outputting main CU, we may throw away empty ones.  */
8508   if (!output_if_empty && die->die_child == NULL)
8509     return;
8510
8511   /* Even if there are no children of this DIE, we must output the information
8512      about the compilation unit.  Otherwise, on an empty translation unit, we
8513      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
8514      will then complain when examining the file.  First mark all the DIEs in
8515      this CU so we know which get local refs.  */
8516   mark_dies (die);
8517
8518   build_abbrev_table (die);
8519
8520   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8521   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8522   calc_die_sizes (die);
8523
8524   oldsym = die->die_id.die_symbol;
8525   if (oldsym)
8526     {
8527       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
8528
8529       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
8530       secname = tmp;
8531       die->die_id.die_symbol = NULL;
8532       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8533     }
8534   else
8535     {
8536       switch_to_section (debug_info_section);
8537       ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
8538       info_section_emitted = true;
8539     }
8540
8541   /* Output debugging information.  */
8542   output_compilation_unit_header ();
8543   output_die (die);
8544
8545   /* Leave the marks on the main CU, so we can check them in
8546      output_pubnames.  */
8547   if (oldsym)
8548     {
8549       unmark_dies (die);
8550       die->die_id.die_symbol = oldsym;
8551     }
8552 }
8553
8554 /* Output a comdat type unit DIE and its children.  */
8555
8556 static void
8557 output_comdat_type_unit (comdat_type_node *node)
8558 {
8559   const char *secname;
8560   char *tmp;
8561   int i;
8562 #if defined (OBJECT_FORMAT_ELF)
8563   tree comdat_key;
8564 #endif
8565
8566   /* First mark all the DIEs in this CU so we know which get local refs.  */
8567   mark_dies (node->root_die);
8568
8569   build_abbrev_table (node->root_die);
8570
8571   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8572   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
8573   calc_die_sizes (node->root_die);
8574
8575 #if defined (OBJECT_FORMAT_ELF)
8576   secname = ".debug_types";
8577   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8578   sprintf (tmp, "wt.");
8579   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8580     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
8581   comdat_key = get_identifier (tmp);
8582   targetm.asm_out.named_section (secname,
8583                                  SECTION_DEBUG | SECTION_LINKONCE,
8584                                  comdat_key);
8585 #else
8586   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8587   sprintf (tmp, ".gnu.linkonce.wt.");
8588   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8589     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
8590   secname = tmp;
8591   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8592 #endif
8593
8594   /* Output debugging information.  */
8595   output_compilation_unit_header ();
8596   output_signature (node->signature, "Type Signature");
8597   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
8598                        "Offset to Type DIE");
8599   output_die (node->root_die);
8600
8601   unmark_dies (node->root_die);
8602 }
8603
8604 /* Return the DWARF2/3 pubname associated with a decl.  */
8605
8606 static const char *
8607 dwarf2_name (tree decl, int scope)
8608 {
8609   if (DECL_NAMELESS (decl))
8610     return NULL;
8611   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
8612 }
8613
8614 /* Add a new entry to .debug_pubnames if appropriate.  */
8615
8616 static void
8617 add_pubname_string (const char *str, dw_die_ref die)
8618 {
8619   if (targetm.want_debug_pub_sections)
8620     {
8621       pubname_entry e;
8622
8623       e.die = die;
8624       e.name = xstrdup (str);
8625       VEC_safe_push (pubname_entry, gc, pubname_table, &e);
8626     }
8627 }
8628
8629 static void
8630 add_pubname (tree decl, dw_die_ref die)
8631 {
8632   if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl))
8633     {
8634       const char *name = dwarf2_name (decl, 1);
8635       if (name)
8636         add_pubname_string (name, die);
8637     }
8638 }
8639
8640 /* Add a new entry to .debug_pubtypes if appropriate.  */
8641
8642 static void
8643 add_pubtype (tree decl, dw_die_ref die)
8644 {
8645   pubname_entry e;
8646
8647   if (!targetm.want_debug_pub_sections)
8648     return;
8649
8650   e.name = NULL;
8651   if ((TREE_PUBLIC (decl)
8652        || is_cu_die (die->die_parent))
8653       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
8654     {
8655       e.die = die;
8656       if (TYPE_P (decl))
8657         {
8658           if (TYPE_NAME (decl))
8659             {
8660               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
8661                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
8662               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
8663                        && DECL_NAME (TYPE_NAME (decl)))
8664                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
8665               else
8666                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
8667             }
8668         }
8669       else
8670         {
8671           e.name = dwarf2_name (decl, 1);
8672           if (e.name)
8673             e.name = xstrdup (e.name);
8674         }
8675
8676       /* If we don't have a name for the type, there's no point in adding
8677          it to the table.  */
8678       if (e.name && e.name[0] != '\0')
8679         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
8680     }
8681 }
8682
8683 /* Output the public names table used to speed up access to externally
8684    visible names; or the public types table used to find type definitions.  */
8685
8686 static void
8687 output_pubnames (VEC (pubname_entry, gc) * names)
8688 {
8689   unsigned i;
8690   unsigned long pubnames_length = size_of_pubnames (names);
8691   pubname_ref pub;
8692
8693   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8694     dw2_asm_output_data (4, 0xffffffff,
8695       "Initial length escape value indicating 64-bit DWARF extension");
8696   if (names == pubname_table)
8697     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8698                          "Length of Public Names Info");
8699   else
8700     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8701                          "Length of Public Type Names Info");
8702   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
8703   dw2_asm_output_data (2, 2, "DWARF Version");
8704   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8705                          debug_info_section,
8706                          "Offset of Compilation Unit Info");
8707   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
8708                        "Compilation Unit Length");
8709
8710   FOR_EACH_VEC_ELT (pubname_entry, names, i, pub)
8711     {
8712       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
8713       if (names == pubname_table)
8714         gcc_assert (pub->die->die_mark);
8715
8716       if (names != pubtype_table
8717           || pub->die->die_offset != 0
8718           || !flag_eliminate_unused_debug_types)
8719         {
8720           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
8721                                "DIE offset");
8722
8723           dw2_asm_output_nstring (pub->name, -1, "external name");
8724         }
8725     }
8726
8727   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
8728 }
8729
8730 /* Output the information that goes into the .debug_aranges table.
8731    Namely, define the beginning and ending address range of the
8732    text section generated for this compilation unit.  */
8733
8734 static void
8735 output_aranges (unsigned long aranges_length)
8736 {
8737   unsigned i;
8738
8739   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8740     dw2_asm_output_data (4, 0xffffffff,
8741       "Initial length escape value indicating 64-bit DWARF extension");
8742   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
8743                        "Length of Address Ranges Info");
8744   /* Version number for aranges is still 2, even in DWARF3.  */
8745   dw2_asm_output_data (2, 2, "DWARF Version");
8746   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8747                          debug_info_section,
8748                          "Offset of Compilation Unit Info");
8749   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
8750   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
8751
8752   /* We need to align to twice the pointer size here.  */
8753   if (DWARF_ARANGES_PAD_SIZE)
8754     {
8755       /* Pad using a 2 byte words so that padding is correct for any
8756          pointer size.  */
8757       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
8758                            2 * DWARF2_ADDR_SIZE);
8759       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
8760         dw2_asm_output_data (2, 0, NULL);
8761     }
8762
8763   /* It is necessary not to output these entries if the sections were
8764      not used; if the sections were not used, the length will be 0 and
8765      the address may end up as 0 if the section is discarded by ld
8766      --gc-sections, leaving an invalid (0, 0) entry that can be
8767      confused with the terminator.  */
8768   if (text_section_used)
8769     {
8770       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
8771       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
8772                             text_section_label, "Length");
8773     }
8774   if (cold_text_section_used)
8775     {
8776       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
8777                            "Address");
8778       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
8779                             cold_text_section_label, "Length");
8780     }
8781
8782   if (have_multiple_function_sections)
8783     {
8784       unsigned fde_idx;
8785       dw_fde_ref fde;
8786
8787       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
8788         {
8789           if (!fde->in_std_section)
8790             {
8791               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
8792                                    "Address");
8793               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
8794                                     fde->dw_fde_begin, "Length");
8795             }
8796           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8797             {
8798               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
8799                                    "Address");
8800               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
8801                                     fde->dw_fde_second_begin, "Length");
8802             }
8803         }
8804     }
8805
8806   /* Output the terminator words.  */
8807   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8808   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8809 }
8810
8811 /* Add a new entry to .debug_ranges.  Return the offset at which it
8812    was placed.  */
8813
8814 static unsigned int
8815 add_ranges_num (int num)
8816 {
8817   unsigned int in_use = ranges_table_in_use;
8818
8819   if (in_use == ranges_table_allocated)
8820     {
8821       ranges_table_allocated += RANGES_TABLE_INCREMENT;
8822       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
8823                                     ranges_table_allocated);
8824       memset (ranges_table + ranges_table_in_use, 0,
8825               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
8826     }
8827
8828   ranges_table[in_use].num = num;
8829   ranges_table_in_use = in_use + 1;
8830
8831   return in_use * 2 * DWARF2_ADDR_SIZE;
8832 }
8833
8834 /* Add a new entry to .debug_ranges corresponding to a block, or a
8835    range terminator if BLOCK is NULL.  */
8836
8837 static unsigned int
8838 add_ranges (const_tree block)
8839 {
8840   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
8841 }
8842
8843 /* Add a new entry to .debug_ranges corresponding to a pair of
8844    labels.  */
8845
8846 static void
8847 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
8848                       bool *added)
8849 {
8850   unsigned int in_use = ranges_by_label_in_use;
8851   unsigned int offset;
8852
8853   if (in_use == ranges_by_label_allocated)
8854     {
8855       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
8856       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
8857                                        ranges_by_label,
8858                                        ranges_by_label_allocated);
8859       memset (ranges_by_label + ranges_by_label_in_use, 0,
8860               RANGES_TABLE_INCREMENT
8861               * sizeof (struct dw_ranges_by_label_struct));
8862     }
8863
8864   ranges_by_label[in_use].begin = begin;
8865   ranges_by_label[in_use].end = end;
8866   ranges_by_label_in_use = in_use + 1;
8867
8868   offset = add_ranges_num (-(int)in_use - 1);
8869   if (!*added)
8870     {
8871       add_AT_range_list (die, DW_AT_ranges, offset);
8872       *added = true;
8873     }
8874 }
8875
8876 static void
8877 output_ranges (void)
8878 {
8879   unsigned i;
8880   static const char *const start_fmt = "Offset %#x";
8881   const char *fmt = start_fmt;
8882
8883   for (i = 0; i < ranges_table_in_use; i++)
8884     {
8885       int block_num = ranges_table[i].num;
8886
8887       if (block_num > 0)
8888         {
8889           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
8890           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
8891
8892           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
8893           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
8894
8895           /* If all code is in the text section, then the compilation
8896              unit base address defaults to DW_AT_low_pc, which is the
8897              base of the text section.  */
8898           if (!have_multiple_function_sections)
8899             {
8900               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
8901                                     text_section_label,
8902                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
8903               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
8904                                     text_section_label, NULL);
8905             }
8906
8907           /* Otherwise, the compilation unit base address is zero,
8908              which allows us to use absolute addresses, and not worry
8909              about whether the target supports cross-section
8910              arithmetic.  */
8911           else
8912             {
8913               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
8914                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
8915               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
8916             }
8917
8918           fmt = NULL;
8919         }
8920
8921       /* Negative block_num stands for an index into ranges_by_label.  */
8922       else if (block_num < 0)
8923         {
8924           int lab_idx = - block_num - 1;
8925
8926           if (!have_multiple_function_sections)
8927             {
8928               gcc_unreachable ();
8929 #if 0
8930               /* If we ever use add_ranges_by_labels () for a single
8931                  function section, all we have to do is to take out
8932                  the #if 0 above.  */
8933               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8934                                     ranges_by_label[lab_idx].begin,
8935                                     text_section_label,
8936                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
8937               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8938                                     ranges_by_label[lab_idx].end,
8939                                     text_section_label, NULL);
8940 #endif
8941             }
8942           else
8943             {
8944               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8945                                    ranges_by_label[lab_idx].begin,
8946                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
8947               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8948                                    ranges_by_label[lab_idx].end,
8949                                    NULL);
8950             }
8951         }
8952       else
8953         {
8954           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8955           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8956           fmt = start_fmt;
8957         }
8958     }
8959 }
8960
8961 /* Data structure containing information about input files.  */
8962 struct file_info
8963 {
8964   const char *path;     /* Complete file name.  */
8965   const char *fname;    /* File name part.  */
8966   int length;           /* Length of entire string.  */
8967   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
8968   int dir_idx;          /* Index in directory table.  */
8969 };
8970
8971 /* Data structure containing information about directories with source
8972    files.  */
8973 struct dir_info
8974 {
8975   const char *path;     /* Path including directory name.  */
8976   int length;           /* Path length.  */
8977   int prefix;           /* Index of directory entry which is a prefix.  */
8978   int count;            /* Number of files in this directory.  */
8979   int dir_idx;          /* Index of directory used as base.  */
8980 };
8981
8982 /* Callback function for file_info comparison.  We sort by looking at
8983    the directories in the path.  */
8984
8985 static int
8986 file_info_cmp (const void *p1, const void *p2)
8987 {
8988   const struct file_info *const s1 = (const struct file_info *) p1;
8989   const struct file_info *const s2 = (const struct file_info *) p2;
8990   const unsigned char *cp1;
8991   const unsigned char *cp2;
8992
8993   /* Take care of file names without directories.  We need to make sure that
8994      we return consistent values to qsort since some will get confused if
8995      we return the same value when identical operands are passed in opposite
8996      orders.  So if neither has a directory, return 0 and otherwise return
8997      1 or -1 depending on which one has the directory.  */
8998   if ((s1->path == s1->fname || s2->path == s2->fname))
8999     return (s2->path == s2->fname) - (s1->path == s1->fname);
9000
9001   cp1 = (const unsigned char *) s1->path;
9002   cp2 = (const unsigned char *) s2->path;
9003
9004   while (1)
9005     {
9006       ++cp1;
9007       ++cp2;
9008       /* Reached the end of the first path?  If so, handle like above.  */
9009       if ((cp1 == (const unsigned char *) s1->fname)
9010           || (cp2 == (const unsigned char *) s2->fname))
9011         return ((cp2 == (const unsigned char *) s2->fname)
9012                 - (cp1 == (const unsigned char *) s1->fname));
9013
9014       /* Character of current path component the same?  */
9015       else if (*cp1 != *cp2)
9016         return *cp1 - *cp2;
9017     }
9018 }
9019
9020 struct file_name_acquire_data
9021 {
9022   struct file_info *files;
9023   int used_files;
9024   int max_files;
9025 };
9026
9027 /* Traversal function for the hash table.  */
9028
9029 static int
9030 file_name_acquire (void ** slot, void *data)
9031 {
9032   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
9033   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
9034   struct file_info *fi;
9035   const char *f;
9036
9037   gcc_assert (fnad->max_files >= d->emitted_number);
9038
9039   if (! d->emitted_number)
9040     return 1;
9041
9042   gcc_assert (fnad->max_files != fnad->used_files);
9043
9044   fi = fnad->files + fnad->used_files++;
9045
9046   /* Skip all leading "./".  */
9047   f = d->filename;
9048   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9049     f += 2;
9050
9051   /* Create a new array entry.  */
9052   fi->path = f;
9053   fi->length = strlen (f);
9054   fi->file_idx = d;
9055
9056   /* Search for the file name part.  */
9057   f = strrchr (f, DIR_SEPARATOR);
9058 #if defined (DIR_SEPARATOR_2)
9059   {
9060     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9061
9062     if (g != NULL)
9063       {
9064         if (f == NULL || f < g)
9065           f = g;
9066       }
9067   }
9068 #endif
9069
9070   fi->fname = f == NULL ? fi->path : f + 1;
9071   return 1;
9072 }
9073
9074 /* Output the directory table and the file name table.  We try to minimize
9075    the total amount of memory needed.  A heuristic is used to avoid large
9076    slowdowns with many input files.  */
9077
9078 static void
9079 output_file_names (void)
9080 {
9081   struct file_name_acquire_data fnad;
9082   int numfiles;
9083   struct file_info *files;
9084   struct dir_info *dirs;
9085   int *saved;
9086   int *savehere;
9087   int *backmap;
9088   int ndirs;
9089   int idx_offset;
9090   int i;
9091
9092   if (!last_emitted_file)
9093     {
9094       dw2_asm_output_data (1, 0, "End directory table");
9095       dw2_asm_output_data (1, 0, "End file name table");
9096       return;
9097     }
9098
9099   numfiles = last_emitted_file->emitted_number;
9100
9101   /* Allocate the various arrays we need.  */
9102   files = XALLOCAVEC (struct file_info, numfiles);
9103   dirs = XALLOCAVEC (struct dir_info, numfiles);
9104
9105   fnad.files = files;
9106   fnad.used_files = 0;
9107   fnad.max_files = numfiles;
9108   htab_traverse (file_table, file_name_acquire, &fnad);
9109   gcc_assert (fnad.used_files == fnad.max_files);
9110
9111   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9112
9113   /* Find all the different directories used.  */
9114   dirs[0].path = files[0].path;
9115   dirs[0].length = files[0].fname - files[0].path;
9116   dirs[0].prefix = -1;
9117   dirs[0].count = 1;
9118   dirs[0].dir_idx = 0;
9119   files[0].dir_idx = 0;
9120   ndirs = 1;
9121
9122   for (i = 1; i < numfiles; i++)
9123     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
9124         && memcmp (dirs[ndirs - 1].path, files[i].path,
9125                    dirs[ndirs - 1].length) == 0)
9126       {
9127         /* Same directory as last entry.  */
9128         files[i].dir_idx = ndirs - 1;
9129         ++dirs[ndirs - 1].count;
9130       }
9131     else
9132       {
9133         int j;
9134
9135         /* This is a new directory.  */
9136         dirs[ndirs].path = files[i].path;
9137         dirs[ndirs].length = files[i].fname - files[i].path;
9138         dirs[ndirs].count = 1;
9139         dirs[ndirs].dir_idx = ndirs;
9140         files[i].dir_idx = ndirs;
9141
9142         /* Search for a prefix.  */
9143         dirs[ndirs].prefix = -1;
9144         for (j = 0; j < ndirs; j++)
9145           if (dirs[j].length < dirs[ndirs].length
9146               && dirs[j].length > 1
9147               && (dirs[ndirs].prefix == -1
9148                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
9149               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
9150             dirs[ndirs].prefix = j;
9151
9152         ++ndirs;
9153       }
9154
9155   /* Now to the actual work.  We have to find a subset of the directories which
9156      allow expressing the file name using references to the directory table
9157      with the least amount of characters.  We do not do an exhaustive search
9158      where we would have to check out every combination of every single
9159      possible prefix.  Instead we use a heuristic which provides nearly optimal
9160      results in most cases and never is much off.  */
9161   saved = XALLOCAVEC (int, ndirs);
9162   savehere = XALLOCAVEC (int, ndirs);
9163
9164   memset (saved, '\0', ndirs * sizeof (saved[0]));
9165   for (i = 0; i < ndirs; i++)
9166     {
9167       int j;
9168       int total;
9169
9170       /* We can always save some space for the current directory.  But this
9171          does not mean it will be enough to justify adding the directory.  */
9172       savehere[i] = dirs[i].length;
9173       total = (savehere[i] - saved[i]) * dirs[i].count;
9174
9175       for (j = i + 1; j < ndirs; j++)
9176         {
9177           savehere[j] = 0;
9178           if (saved[j] < dirs[i].length)
9179             {
9180               /* Determine whether the dirs[i] path is a prefix of the
9181                  dirs[j] path.  */
9182               int k;
9183
9184               k = dirs[j].prefix;
9185               while (k != -1 && k != (int) i)
9186                 k = dirs[k].prefix;
9187
9188               if (k == (int) i)
9189                 {
9190                   /* Yes it is.  We can possibly save some memory by
9191                      writing the filenames in dirs[j] relative to
9192                      dirs[i].  */
9193                   savehere[j] = dirs[i].length;
9194                   total += (savehere[j] - saved[j]) * dirs[j].count;
9195                 }
9196             }
9197         }
9198
9199       /* Check whether we can save enough to justify adding the dirs[i]
9200          directory.  */
9201       if (total > dirs[i].length + 1)
9202         {
9203           /* It's worthwhile adding.  */
9204           for (j = i; j < ndirs; j++)
9205             if (savehere[j] > 0)
9206               {
9207                 /* Remember how much we saved for this directory so far.  */
9208                 saved[j] = savehere[j];
9209
9210                 /* Remember the prefix directory.  */
9211                 dirs[j].dir_idx = i;
9212               }
9213         }
9214     }
9215
9216   /* Emit the directory name table.  */
9217   idx_offset = dirs[0].length > 0 ? 1 : 0;
9218   for (i = 1 - idx_offset; i < ndirs; i++)
9219     dw2_asm_output_nstring (dirs[i].path,
9220                             dirs[i].length
9221                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
9222                             "Directory Entry: %#x", i + idx_offset);
9223
9224   dw2_asm_output_data (1, 0, "End directory table");
9225
9226   /* We have to emit them in the order of emitted_number since that's
9227      used in the debug info generation.  To do this efficiently we
9228      generate a back-mapping of the indices first.  */
9229   backmap = XALLOCAVEC (int, numfiles);
9230   for (i = 0; i < numfiles; i++)
9231     backmap[files[i].file_idx->emitted_number - 1] = i;
9232
9233   /* Now write all the file names.  */
9234   for (i = 0; i < numfiles; i++)
9235     {
9236       int file_idx = backmap[i];
9237       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
9238
9239 #ifdef VMS_DEBUGGING_INFO
9240 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
9241
9242       /* Setting these fields can lead to debugger miscomparisons,
9243          but VMS Debug requires them to be set correctly.  */
9244
9245       int ver;
9246       long long cdt;
9247       long siz;
9248       int maxfilelen = strlen (files[file_idx].path)
9249                                + dirs[dir_idx].length
9250                                + MAX_VMS_VERSION_LEN + 1;
9251       char *filebuf = XALLOCAVEC (char, maxfilelen);
9252
9253       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
9254       snprintf (filebuf, maxfilelen, "%s;%d",
9255                 files[file_idx].path + dirs[dir_idx].length, ver);
9256
9257       dw2_asm_output_nstring
9258         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
9259
9260       /* Include directory index.  */
9261       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9262
9263       /* Modification time.  */
9264       dw2_asm_output_data_uleb128
9265         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
9266           ? cdt : 0,
9267          NULL);
9268
9269       /* File length in bytes.  */
9270       dw2_asm_output_data_uleb128
9271         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
9272           ? siz : 0,
9273          NULL);
9274 #else
9275       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
9276                               "File Entry: %#x", (unsigned) i + 1);
9277
9278       /* Include directory index.  */
9279       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9280
9281       /* Modification time.  */
9282       dw2_asm_output_data_uleb128 (0, NULL);
9283
9284       /* File length in bytes.  */
9285       dw2_asm_output_data_uleb128 (0, NULL);
9286 #endif /* VMS_DEBUGGING_INFO */
9287     }
9288
9289   dw2_asm_output_data (1, 0, "End file name table");
9290 }
9291
9292
9293 /* Output one line number table into the .debug_line section.  */
9294
9295 static void
9296 output_one_line_info_table (dw_line_info_table *table)
9297 {
9298   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
9299   unsigned int current_line = 1;
9300   bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
9301   dw_line_info_entry *ent;
9302   size_t i;
9303
9304   FOR_EACH_VEC_ELT (dw_line_info_entry, table->entries, i, ent)
9305     {
9306       switch (ent->opcode)
9307         {
9308         case LI_set_address:
9309           /* ??? Unfortunately, we have little choice here currently, and
9310              must always use the most general form.  GCC does not know the
9311              address delta itself, so we can't use DW_LNS_advance_pc.  Many
9312              ports do have length attributes which will give an upper bound
9313              on the address range.  We could perhaps use length attributes
9314              to determine when it is safe to use DW_LNS_fixed_advance_pc.  */
9315           ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
9316
9317           /* This can handle any delta.  This takes
9318              4+DWARF2_ADDR_SIZE bytes.  */
9319           dw2_asm_output_data (1, 0, "set address %s", line_label);
9320           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9321           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9322           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9323           break;
9324
9325         case LI_set_line:
9326           if (ent->val == current_line)
9327             {
9328               /* We still need to start a new row, so output a copy insn.  */
9329               dw2_asm_output_data (1, DW_LNS_copy,
9330                                    "copy line %u", current_line);
9331             }
9332           else
9333             {
9334               int line_offset = ent->val - current_line;
9335               int line_delta = line_offset - DWARF_LINE_BASE;
9336
9337               current_line = ent->val;
9338               if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9339                 {
9340                   /* This can handle deltas from -10 to 234, using the current
9341                      definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
9342                      This takes 1 byte.  */
9343                   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9344                                        "line %u", current_line);
9345                 }
9346               else
9347                 {
9348                   /* This can handle any delta.  This takes at least 4 bytes,
9349                      depending on the value being encoded.  */
9350                   dw2_asm_output_data (1, DW_LNS_advance_line,
9351                                        "advance to line %u", current_line);
9352                   dw2_asm_output_data_sleb128 (line_offset, NULL);
9353                   dw2_asm_output_data (1, DW_LNS_copy, NULL);
9354                 }
9355             }
9356           break;
9357
9358         case LI_set_file:
9359           dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
9360           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9361           break;
9362
9363         case LI_set_column:
9364           dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
9365           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9366           break;
9367
9368         case LI_negate_stmt:
9369           current_is_stmt = !current_is_stmt;
9370           dw2_asm_output_data (1, DW_LNS_negate_stmt,
9371                                "is_stmt %d", current_is_stmt);
9372           break;
9373
9374         case LI_set_prologue_end:
9375           dw2_asm_output_data (1, DW_LNS_set_prologue_end,
9376                                "set prologue end");
9377           break;
9378           
9379         case LI_set_epilogue_begin:
9380           dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
9381                                "set epilogue begin");
9382           break;
9383
9384         case LI_set_discriminator:
9385           dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
9386           dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
9387           dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
9388           dw2_asm_output_data_uleb128 (ent->val, NULL);
9389           break;
9390         }
9391     }
9392
9393   /* Emit debug info for the address of the end of the table.  */
9394   dw2_asm_output_data (1, 0, "set address %s", table->end_label);
9395   dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9396   dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9397   dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
9398
9399   dw2_asm_output_data (1, 0, "end sequence");
9400   dw2_asm_output_data_uleb128 (1, NULL);
9401   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
9402 }
9403
9404 /* Output the source line number correspondence information.  This
9405    information goes into the .debug_line section.  */
9406
9407 static void
9408 output_line_info (void)
9409 {
9410   char l1[20], l2[20], p1[20], p2[20];
9411   int ver = dwarf_version;
9412   bool saw_one = false;
9413   int opc;
9414
9415   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
9416   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
9417   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
9418   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
9419
9420   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9421     dw2_asm_output_data (4, 0xffffffff,
9422       "Initial length escape value indicating 64-bit DWARF extension");
9423   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
9424                         "Length of Source Line Info");
9425   ASM_OUTPUT_LABEL (asm_out_file, l1);
9426
9427   dw2_asm_output_data (2, ver, "DWARF Version");
9428   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
9429   ASM_OUTPUT_LABEL (asm_out_file, p1);
9430
9431   /* Define the architecture-dependent minimum instruction length (in bytes).
9432      In this implementation of DWARF, this field is used for information
9433      purposes only.  Since GCC generates assembly language, we have no
9434      a priori knowledge of how many instruction bytes are generated for each
9435      source line, and therefore can use only the DW_LNE_set_address and
9436      DW_LNS_fixed_advance_pc line information commands.  Accordingly, we fix
9437      this as '1', which is "correct enough" for all architectures,
9438      and don't let the target override.  */
9439   dw2_asm_output_data (1, 1, "Minimum Instruction Length");
9440
9441   if (ver >= 4)
9442     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
9443                          "Maximum Operations Per Instruction");
9444   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
9445                        "Default is_stmt_start flag");
9446   dw2_asm_output_data (1, DWARF_LINE_BASE,
9447                        "Line Base Value (Special Opcodes)");
9448   dw2_asm_output_data (1, DWARF_LINE_RANGE,
9449                        "Line Range Value (Special Opcodes)");
9450   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
9451                        "Special Opcode Base");
9452
9453   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
9454     {
9455       int n_op_args;
9456       switch (opc)
9457         {
9458         case DW_LNS_advance_pc:
9459         case DW_LNS_advance_line:
9460         case DW_LNS_set_file:
9461         case DW_LNS_set_column:
9462         case DW_LNS_fixed_advance_pc:
9463         case DW_LNS_set_isa:
9464           n_op_args = 1;
9465           break;
9466         default:
9467           n_op_args = 0;
9468           break;
9469         }
9470
9471       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
9472                            opc, n_op_args);
9473     }
9474
9475   /* Write out the information about the files we use.  */
9476   output_file_names ();
9477   ASM_OUTPUT_LABEL (asm_out_file, p2);
9478
9479   if (separate_line_info)
9480     {
9481       dw_line_info_table *table;
9482       size_t i;
9483
9484       FOR_EACH_VEC_ELT (dw_line_info_table_p, separate_line_info, i, table)
9485         if (table->in_use)
9486           {
9487             output_one_line_info_table (table);
9488             saw_one = true;
9489           }
9490     }
9491   if (cold_text_section_line_info && cold_text_section_line_info->in_use)
9492     {
9493       output_one_line_info_table (cold_text_section_line_info);
9494       saw_one = true;
9495     }
9496
9497   /* ??? Some Darwin linkers crash on a .debug_line section with no
9498      sequences.  Further, merely a DW_LNE_end_sequence entry is not
9499      sufficient -- the address column must also be initialized.
9500      Make sure to output at least one set_address/end_sequence pair,
9501      choosing .text since that section is always present.  */
9502   if (text_section_line_info->in_use || !saw_one)
9503     output_one_line_info_table (text_section_line_info);
9504
9505   /* Output the marker for the end of the line number info.  */
9506   ASM_OUTPUT_LABEL (asm_out_file, l2);
9507 }
9508 \f
9509 /* Given a pointer to a tree node for some base type, return a pointer to
9510    a DIE that describes the given type.
9511
9512    This routine must only be called for GCC type nodes that correspond to
9513    Dwarf base (fundamental) types.  */
9514
9515 static dw_die_ref
9516 base_type_die (tree type)
9517 {
9518   dw_die_ref base_type_result;
9519   enum dwarf_type encoding;
9520
9521   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
9522     return 0;
9523
9524   /* If this is a subtype that should not be emitted as a subrange type,
9525      use the base type.  See subrange_type_for_debug_p.  */
9526   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
9527     type = TREE_TYPE (type);
9528
9529   switch (TREE_CODE (type))
9530     {
9531     case INTEGER_TYPE:
9532       if ((dwarf_version >= 4 || !dwarf_strict)
9533           && TYPE_NAME (type)
9534           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9535           && DECL_IS_BUILTIN (TYPE_NAME (type))
9536           && DECL_NAME (TYPE_NAME (type)))
9537         {
9538           const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
9539           if (strcmp (name, "char16_t") == 0
9540               || strcmp (name, "char32_t") == 0)
9541             {
9542               encoding = DW_ATE_UTF;
9543               break;
9544             }
9545         }
9546       if (TYPE_STRING_FLAG (type))
9547         {
9548           if (TYPE_UNSIGNED (type))
9549             encoding = DW_ATE_unsigned_char;
9550           else
9551             encoding = DW_ATE_signed_char;
9552         }
9553       else if (TYPE_UNSIGNED (type))
9554         encoding = DW_ATE_unsigned;
9555       else
9556         encoding = DW_ATE_signed;
9557       break;
9558
9559     case REAL_TYPE:
9560       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
9561         {
9562           if (dwarf_version >= 3 || !dwarf_strict)
9563             encoding = DW_ATE_decimal_float;
9564           else
9565             encoding = DW_ATE_lo_user;
9566         }
9567       else
9568         encoding = DW_ATE_float;
9569       break;
9570
9571     case FIXED_POINT_TYPE:
9572       if (!(dwarf_version >= 3 || !dwarf_strict))
9573         encoding = DW_ATE_lo_user;
9574       else if (TYPE_UNSIGNED (type))
9575         encoding = DW_ATE_unsigned_fixed;
9576       else
9577         encoding = DW_ATE_signed_fixed;
9578       break;
9579
9580       /* Dwarf2 doesn't know anything about complex ints, so use
9581          a user defined type for it.  */
9582     case COMPLEX_TYPE:
9583       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
9584         encoding = DW_ATE_complex_float;
9585       else
9586         encoding = DW_ATE_lo_user;
9587       break;
9588
9589     case BOOLEAN_TYPE:
9590       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
9591       encoding = DW_ATE_boolean;
9592       break;
9593
9594     default:
9595       /* No other TREE_CODEs are Dwarf fundamental types.  */
9596       gcc_unreachable ();
9597     }
9598
9599   base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
9600
9601   add_AT_unsigned (base_type_result, DW_AT_byte_size,
9602                    int_size_in_bytes (type));
9603   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
9604
9605   return base_type_result;
9606 }
9607
9608 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
9609    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
9610
9611 static inline int
9612 is_base_type (tree type)
9613 {
9614   switch (TREE_CODE (type))
9615     {
9616     case ERROR_MARK:
9617     case VOID_TYPE:
9618     case INTEGER_TYPE:
9619     case REAL_TYPE:
9620     case FIXED_POINT_TYPE:
9621     case COMPLEX_TYPE:
9622     case BOOLEAN_TYPE:
9623       return 1;
9624
9625     case ARRAY_TYPE:
9626     case RECORD_TYPE:
9627     case UNION_TYPE:
9628     case QUAL_UNION_TYPE:
9629     case ENUMERAL_TYPE:
9630     case FUNCTION_TYPE:
9631     case METHOD_TYPE:
9632     case POINTER_TYPE:
9633     case REFERENCE_TYPE:
9634     case NULLPTR_TYPE:
9635     case OFFSET_TYPE:
9636     case LANG_TYPE:
9637     case VECTOR_TYPE:
9638       return 0;
9639
9640     default:
9641       gcc_unreachable ();
9642     }
9643
9644   return 0;
9645 }
9646
9647 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
9648    node, return the size in bits for the type if it is a constant, or else
9649    return the alignment for the type if the type's size is not constant, or
9650    else return BITS_PER_WORD if the type actually turns out to be an
9651    ERROR_MARK node.  */
9652
9653 static inline unsigned HOST_WIDE_INT
9654 simple_type_size_in_bits (const_tree type)
9655 {
9656   if (TREE_CODE (type) == ERROR_MARK)
9657     return BITS_PER_WORD;
9658   else if (TYPE_SIZE (type) == NULL_TREE)
9659     return 0;
9660   else if (host_integerp (TYPE_SIZE (type), 1))
9661     return tree_low_cst (TYPE_SIZE (type), 1);
9662   else
9663     return TYPE_ALIGN (type);
9664 }
9665
9666 /* Similarly, but return a double_int instead of UHWI.  */
9667
9668 static inline double_int
9669 double_int_type_size_in_bits (const_tree type)
9670 {
9671   if (TREE_CODE (type) == ERROR_MARK)
9672     return uhwi_to_double_int (BITS_PER_WORD);
9673   else if (TYPE_SIZE (type) == NULL_TREE)
9674     return double_int_zero;
9675   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
9676     return tree_to_double_int (TYPE_SIZE (type));
9677   else
9678     return uhwi_to_double_int (TYPE_ALIGN (type));
9679 }
9680
9681 /*  Given a pointer to a tree node for a subrange type, return a pointer
9682     to a DIE that describes the given type.  */
9683
9684 static dw_die_ref
9685 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
9686 {
9687   dw_die_ref subrange_die;
9688   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
9689
9690   if (context_die == NULL)
9691     context_die = comp_unit_die ();
9692
9693   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
9694
9695   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
9696     {
9697       /* The size of the subrange type and its base type do not match,
9698          so we need to generate a size attribute for the subrange type.  */
9699       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
9700     }
9701
9702   if (low)
9703     add_bound_info (subrange_die, DW_AT_lower_bound, low);
9704   if (high)
9705     add_bound_info (subrange_die, DW_AT_upper_bound, high);
9706
9707   return subrange_die;
9708 }
9709
9710 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
9711    entry that chains various modifiers in front of the given type.  */
9712
9713 static dw_die_ref
9714 modified_type_die (tree type, int is_const_type, int is_volatile_type,
9715                    dw_die_ref context_die)
9716 {
9717   enum tree_code code = TREE_CODE (type);
9718   dw_die_ref mod_type_die;
9719   dw_die_ref sub_die = NULL;
9720   tree item_type = NULL;
9721   tree qualified_type;
9722   tree name, low, high;
9723
9724   if (code == ERROR_MARK)
9725     return NULL;
9726
9727   /* See if we already have the appropriately qualified variant of
9728      this type.  */
9729   qualified_type
9730     = get_qualified_type (type,
9731                           ((is_const_type ? TYPE_QUAL_CONST : 0)
9732                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
9733
9734   if (qualified_type == sizetype
9735       && TYPE_NAME (qualified_type)
9736       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
9737     {
9738       tree t = TREE_TYPE (TYPE_NAME (qualified_type));
9739
9740       gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
9741                            && TYPE_PRECISION (t)
9742                            == TYPE_PRECISION (qualified_type)
9743                            && TYPE_UNSIGNED (t)
9744                            == TYPE_UNSIGNED (qualified_type));
9745       qualified_type = t;
9746     }
9747
9748   /* If we do, then we can just use its DIE, if it exists.  */
9749   if (qualified_type)
9750     {
9751       mod_type_die = lookup_type_die (qualified_type);
9752       if (mod_type_die)
9753         return mod_type_die;
9754     }
9755
9756   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
9757
9758   /* Handle C typedef types.  */
9759   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
9760       && !DECL_ARTIFICIAL (name))
9761     {
9762       tree dtype = TREE_TYPE (name);
9763
9764       if (qualified_type == dtype)
9765         {
9766           /* For a named type, use the typedef.  */
9767           gen_type_die (qualified_type, context_die);
9768           return lookup_type_die (qualified_type);
9769         }
9770       else if (is_const_type < TYPE_READONLY (dtype)
9771                || is_volatile_type < TYPE_VOLATILE (dtype)
9772                || (is_const_type <= TYPE_READONLY (dtype)
9773                    && is_volatile_type <= TYPE_VOLATILE (dtype)
9774                    && DECL_ORIGINAL_TYPE (name) != type))
9775         /* cv-unqualified version of named type.  Just use the unnamed
9776            type to which it refers.  */
9777         return modified_type_die (DECL_ORIGINAL_TYPE (name),
9778                                   is_const_type, is_volatile_type,
9779                                   context_die);
9780       /* Else cv-qualified version of named type; fall through.  */
9781     }
9782
9783   if (is_const_type
9784       /* If both is_const_type and is_volatile_type, prefer the path
9785          which leads to a qualified type.  */
9786       && (!is_volatile_type
9787           || get_qualified_type (type, TYPE_QUAL_CONST) == NULL_TREE
9788           || get_qualified_type (type, TYPE_QUAL_VOLATILE) != NULL_TREE))
9789     {
9790       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die (), type);
9791       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
9792     }
9793   else if (is_volatile_type)
9794     {
9795       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die (), type);
9796       sub_die = modified_type_die (type, is_const_type, 0, context_die);
9797     }
9798   else if (code == POINTER_TYPE)
9799     {
9800       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die (), type);
9801       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9802                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
9803       item_type = TREE_TYPE (type);
9804       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9805         add_AT_unsigned (mod_type_die, DW_AT_address_class,
9806                          TYPE_ADDR_SPACE (item_type));
9807     }
9808   else if (code == REFERENCE_TYPE)
9809     {
9810       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
9811         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die (),
9812                                 type);
9813       else
9814         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die (), type);
9815       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9816                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
9817       item_type = TREE_TYPE (type);
9818       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9819         add_AT_unsigned (mod_type_die, DW_AT_address_class,
9820                          TYPE_ADDR_SPACE (item_type));
9821     }
9822   else if (code == INTEGER_TYPE
9823            && TREE_TYPE (type) != NULL_TREE
9824            && subrange_type_for_debug_p (type, &low, &high))
9825     {
9826       mod_type_die = subrange_type_die (type, low, high, context_die);
9827       item_type = TREE_TYPE (type);
9828     }
9829   else if (is_base_type (type))
9830     mod_type_die = base_type_die (type);
9831   else
9832     {
9833       gen_type_die (type, context_die);
9834
9835       /* We have to get the type_main_variant here (and pass that to the
9836          `lookup_type_die' routine) because the ..._TYPE node we have
9837          might simply be a *copy* of some original type node (where the
9838          copy was created to help us keep track of typedef names) and
9839          that copy might have a different TYPE_UID from the original
9840          ..._TYPE node.  */
9841       if (TREE_CODE (type) != VECTOR_TYPE)
9842         return lookup_type_die (type_main_variant (type));
9843       else
9844         /* Vectors have the debugging information in the type,
9845            not the main variant.  */
9846         return lookup_type_die (type);
9847     }
9848
9849   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
9850      don't output a DW_TAG_typedef, since there isn't one in the
9851      user's program; just attach a DW_AT_name to the type.
9852      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
9853      if the base type already has the same name.  */
9854   if (name
9855       && ((TREE_CODE (name) != TYPE_DECL
9856            && (qualified_type == TYPE_MAIN_VARIANT (type)
9857                || (!is_const_type && !is_volatile_type)))
9858           || (TREE_CODE (name) == TYPE_DECL
9859               && TREE_TYPE (name) == qualified_type
9860               && DECL_NAME (name))))
9861     {
9862       if (TREE_CODE (name) == TYPE_DECL)
9863         /* Could just call add_name_and_src_coords_attributes here,
9864            but since this is a builtin type it doesn't have any
9865            useful source coordinates anyway.  */
9866         name = DECL_NAME (name);
9867       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
9868       add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
9869       if (TYPE_ARTIFICIAL (type))
9870         add_AT_flag (mod_type_die, DW_AT_artificial, 1);
9871     }
9872   /* This probably indicates a bug.  */
9873   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
9874     add_name_attribute (mod_type_die, "__unknown__");
9875
9876   if (qualified_type)
9877     equate_type_number_to_die (qualified_type, mod_type_die);
9878
9879   if (item_type)
9880     /* We must do this after the equate_type_number_to_die call, in case
9881        this is a recursive type.  This ensures that the modified_type_die
9882        recursion will terminate even if the type is recursive.  Recursive
9883        types are possible in Ada.  */
9884     sub_die = modified_type_die (item_type,
9885                                  TYPE_READONLY (item_type),
9886                                  TYPE_VOLATILE (item_type),
9887                                  context_die);
9888
9889   if (sub_die != NULL)
9890     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
9891
9892   return mod_type_die;
9893 }
9894
9895 /* Generate DIEs for the generic parameters of T.
9896    T must be either a generic type or a generic function.
9897    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
9898
9899 static void
9900 gen_generic_params_dies (tree t)
9901 {
9902   tree parms, args;
9903   int parms_num, i;
9904   dw_die_ref die = NULL;
9905
9906   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
9907     return;
9908
9909   if (TYPE_P (t))
9910     die = lookup_type_die (t);
9911   else if (DECL_P (t))
9912     die = lookup_decl_die (t);
9913
9914   gcc_assert (die);
9915
9916   parms = lang_hooks.get_innermost_generic_parms (t);
9917   if (!parms)
9918     /* T has no generic parameter. It means T is neither a generic type
9919        or function. End of story.  */
9920     return;
9921
9922   parms_num = TREE_VEC_LENGTH (parms);
9923   args = lang_hooks.get_innermost_generic_args (t);
9924   for (i = 0; i < parms_num; i++)
9925     {
9926       tree parm, arg, arg_pack_elems;
9927
9928       parm = TREE_VEC_ELT (parms, i);
9929       arg = TREE_VEC_ELT (args, i);
9930       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
9931       gcc_assert (parm && TREE_VALUE (parm) && arg);
9932
9933       if (parm && TREE_VALUE (parm) && arg)
9934         {
9935           /* If PARM represents a template parameter pack,
9936              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
9937              by DW_TAG_template_*_parameter DIEs for the argument
9938              pack elements of ARG. Note that ARG would then be
9939              an argument pack.  */
9940           if (arg_pack_elems)
9941             template_parameter_pack_die (TREE_VALUE (parm),
9942                                          arg_pack_elems,
9943                                          die);
9944           else
9945             generic_parameter_die (TREE_VALUE (parm), arg,
9946                                    true /* Emit DW_AT_name */, die);
9947         }
9948     }
9949 }
9950
9951 /* Create and return a DIE for PARM which should be
9952    the representation of a generic type parameter.
9953    For instance, in the C++ front end, PARM would be a template parameter.
9954    ARG is the argument to PARM.
9955    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
9956    name of the PARM.
9957    PARENT_DIE is the parent DIE which the new created DIE should be added to,
9958    as a child node.  */
9959
9960 static dw_die_ref
9961 generic_parameter_die (tree parm, tree arg,
9962                        bool emit_name_p,
9963                        dw_die_ref parent_die)
9964 {
9965   dw_die_ref tmpl_die = NULL;
9966   const char *name = NULL;
9967
9968   if (!parm || !DECL_NAME (parm) || !arg)
9969     return NULL;
9970
9971   /* We support non-type generic parameters and arguments,
9972      type generic parameters and arguments, as well as
9973      generic generic parameters (a.k.a. template template parameters in C++)
9974      and arguments.  */
9975   if (TREE_CODE (parm) == PARM_DECL)
9976     /* PARM is a nontype generic parameter  */
9977     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
9978   else if (TREE_CODE (parm) == TYPE_DECL)
9979     /* PARM is a type generic parameter.  */
9980     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
9981   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
9982     /* PARM is a generic generic parameter.
9983        Its DIE is a GNU extension. It shall have a
9984        DW_AT_name attribute to represent the name of the template template
9985        parameter, and a DW_AT_GNU_template_name attribute to represent the
9986        name of the template template argument.  */
9987     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
9988                         parent_die, parm);
9989   else
9990     gcc_unreachable ();
9991
9992   if (tmpl_die)
9993     {
9994       tree tmpl_type;
9995
9996       /* If PARM is a generic parameter pack, it means we are
9997          emitting debug info for a template argument pack element.
9998          In other terms, ARG is a template argument pack element.
9999          In that case, we don't emit any DW_AT_name attribute for
10000          the die.  */
10001       if (emit_name_p)
10002         {
10003           name = IDENTIFIER_POINTER (DECL_NAME (parm));
10004           gcc_assert (name);
10005           add_AT_string (tmpl_die, DW_AT_name, name);
10006         }
10007
10008       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10009         {
10010           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
10011              TMPL_DIE should have a child DW_AT_type attribute that is set
10012              to the type of the argument to PARM, which is ARG.
10013              If PARM is a type generic parameter, TMPL_DIE should have a
10014              child DW_AT_type that is set to ARG.  */
10015           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
10016           add_type_attribute (tmpl_die, tmpl_type, 0,
10017                               TREE_THIS_VOLATILE (tmpl_type),
10018                               parent_die);
10019         }
10020       else
10021         {
10022           /* So TMPL_DIE is a DIE representing a
10023              a generic generic template parameter, a.k.a template template
10024              parameter in C++ and arg is a template.  */
10025
10026           /* The DW_AT_GNU_template_name attribute of the DIE must be set
10027              to the name of the argument.  */
10028           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
10029           if (name)
10030             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
10031         }
10032
10033       if (TREE_CODE (parm) == PARM_DECL)
10034         /* So PARM is a non-type generic parameter.
10035            DWARF3 5.6.8 says we must set a DW_AT_const_value child
10036            attribute of TMPL_DIE which value represents the value
10037            of ARG.
10038            We must be careful here:
10039            The value of ARG might reference some function decls.
10040            We might currently be emitting debug info for a generic
10041            type and types are emitted before function decls, we don't
10042            know if the function decls referenced by ARG will actually be
10043            emitted after cgraph computations.
10044            So must defer the generation of the DW_AT_const_value to
10045            after cgraph is ready.  */
10046         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
10047     }
10048
10049   return tmpl_die;
10050 }
10051
10052 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
10053    PARM_PACK must be a template parameter pack. The returned DIE
10054    will be child DIE of PARENT_DIE.  */
10055
10056 static dw_die_ref
10057 template_parameter_pack_die (tree parm_pack,
10058                              tree parm_pack_args,
10059                              dw_die_ref parent_die)
10060 {
10061   dw_die_ref die;
10062   int j;
10063
10064   gcc_assert (parent_die && parm_pack);
10065
10066   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
10067   add_name_and_src_coords_attributes (die, parm_pack);
10068   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
10069     generic_parameter_die (parm_pack,
10070                            TREE_VEC_ELT (parm_pack_args, j),
10071                            false /* Don't emit DW_AT_name */,
10072                            die);
10073   return die;
10074 }
10075
10076 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
10077    an enumerated type.  */
10078
10079 static inline int
10080 type_is_enum (const_tree type)
10081 {
10082   return TREE_CODE (type) == ENUMERAL_TYPE;
10083 }
10084
10085 /* Return the DBX register number described by a given RTL node.  */
10086
10087 static unsigned int
10088 dbx_reg_number (const_rtx rtl)
10089 {
10090   unsigned regno = REGNO (rtl);
10091
10092   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
10093
10094 #ifdef LEAF_REG_REMAP
10095   if (current_function_uses_only_leaf_regs)
10096     {
10097       int leaf_reg = LEAF_REG_REMAP (regno);
10098       if (leaf_reg != -1)
10099         regno = (unsigned) leaf_reg;
10100     }
10101 #endif
10102
10103   return DBX_REGISTER_NUMBER (regno);
10104 }
10105
10106 /* Optionally add a DW_OP_piece term to a location description expression.
10107    DW_OP_piece is only added if the location description expression already
10108    doesn't end with DW_OP_piece.  */
10109
10110 static void
10111 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
10112 {
10113   dw_loc_descr_ref loc;
10114
10115   if (*list_head != NULL)
10116     {
10117       /* Find the end of the chain.  */
10118       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
10119         ;
10120
10121       if (loc->dw_loc_opc != DW_OP_piece)
10122         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
10123     }
10124 }
10125
10126 /* Return a location descriptor that designates a machine register or
10127    zero if there is none.  */
10128
10129 static dw_loc_descr_ref
10130 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
10131 {
10132   rtx regs;
10133
10134   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
10135     return 0;
10136
10137   /* We only use "frame base" when we're sure we're talking about the
10138      post-prologue local stack frame.  We do this by *not* running
10139      register elimination until this point, and recognizing the special
10140      argument pointer and soft frame pointer rtx's.
10141      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
10142   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
10143       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
10144     {
10145       dw_loc_descr_ref result = NULL;
10146
10147       if (dwarf_version >= 4 || !dwarf_strict)
10148         {
10149           result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
10150                                        initialized);
10151           if (result)
10152             add_loc_descr (&result,
10153                            new_loc_descr (DW_OP_stack_value, 0, 0));
10154         }
10155       return result;
10156     }
10157
10158   regs = targetm.dwarf_register_span (rtl);
10159
10160   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
10161     return multiple_reg_loc_descriptor (rtl, regs, initialized);
10162   else
10163     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
10164 }
10165
10166 /* Return a location descriptor that designates a machine register for
10167    a given hard register number.  */
10168
10169 static dw_loc_descr_ref
10170 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
10171 {
10172   dw_loc_descr_ref reg_loc_descr;
10173
10174   if (regno <= 31)
10175     reg_loc_descr
10176       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
10177   else
10178     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
10179
10180   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10181     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10182
10183   return reg_loc_descr;
10184 }
10185
10186 /* Given an RTL of a register, return a location descriptor that
10187    designates a value that spans more than one register.  */
10188
10189 static dw_loc_descr_ref
10190 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
10191                              enum var_init_status initialized)
10192 {
10193   int nregs, size, i;
10194   unsigned reg;
10195   dw_loc_descr_ref loc_result = NULL;
10196
10197   reg = REGNO (rtl);
10198 #ifdef LEAF_REG_REMAP
10199   if (current_function_uses_only_leaf_regs)
10200     {
10201       int leaf_reg = LEAF_REG_REMAP (reg);
10202       if (leaf_reg != -1)
10203         reg = (unsigned) leaf_reg;
10204     }
10205 #endif
10206   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
10207   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
10208
10209   /* Simple, contiguous registers.  */
10210   if (regs == NULL_RTX)
10211     {
10212       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
10213
10214       loc_result = NULL;
10215       while (nregs--)
10216         {
10217           dw_loc_descr_ref t;
10218
10219           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
10220                                       VAR_INIT_STATUS_INITIALIZED);
10221           add_loc_descr (&loc_result, t);
10222           add_loc_descr_op_piece (&loc_result, size);
10223           ++reg;
10224         }
10225       return loc_result;
10226     }
10227
10228   /* Now onto stupid register sets in non contiguous locations.  */
10229
10230   gcc_assert (GET_CODE (regs) == PARALLEL);
10231
10232   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10233   loc_result = NULL;
10234
10235   for (i = 0; i < XVECLEN (regs, 0); ++i)
10236     {
10237       dw_loc_descr_ref t;
10238
10239       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
10240                                   VAR_INIT_STATUS_INITIALIZED);
10241       add_loc_descr (&loc_result, t);
10242       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10243       add_loc_descr_op_piece (&loc_result, size);
10244     }
10245
10246   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10247     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10248   return loc_result;
10249 }
10250
10251 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
10252
10253 /* Return a location descriptor that designates a constant i,
10254    as a compound operation from constant (i >> shift), constant shift
10255    and DW_OP_shl.  */
10256
10257 static dw_loc_descr_ref
10258 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10259 {
10260   dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
10261   add_loc_descr (&ret, int_loc_descriptor (shift));
10262   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
10263   return ret;
10264 }
10265
10266 /* Return a location descriptor that designates a constant.  */
10267
10268 static dw_loc_descr_ref
10269 int_loc_descriptor (HOST_WIDE_INT i)
10270 {
10271   enum dwarf_location_atom op;
10272
10273   /* Pick the smallest representation of a constant, rather than just
10274      defaulting to the LEB encoding.  */
10275   if (i >= 0)
10276     {
10277       int clz = clz_hwi (i);
10278       int ctz = ctz_hwi (i);
10279       if (i <= 31)
10280         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
10281       else if (i <= 0xff)
10282         op = DW_OP_const1u;
10283       else if (i <= 0xffff)
10284         op = DW_OP_const2u;
10285       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10286                && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10287         /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
10288            DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
10289            while DW_OP_const4u is 5 bytes.  */
10290         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
10291       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10292                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10293         /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
10294            while DW_OP_const4u is 5 bytes.  */
10295         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10296       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10297         op = DW_OP_const4u;
10298       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10299                && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10300         /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
10301            while DW_OP_constu of constant >= 0x100000000 takes at least
10302            6 bytes.  */
10303         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10304       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10305                && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
10306                   >= HOST_BITS_PER_WIDE_INT)
10307         /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
10308            DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
10309            while DW_OP_constu takes in this case at least 6 bytes.  */
10310         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
10311       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10312                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10313                && size_of_uleb128 (i) > 6)
10314         /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes.  */
10315         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
10316       else
10317         op = DW_OP_constu;
10318     }
10319   else
10320     {
10321       if (i >= -0x80)
10322         op = DW_OP_const1s;
10323       else if (i >= -0x8000)
10324         op = DW_OP_const2s;
10325       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10326         {
10327           if (size_of_int_loc_descriptor (i) < 5)
10328             {
10329               dw_loc_descr_ref ret = int_loc_descriptor (-i);
10330               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10331               return ret;
10332             }
10333           op = DW_OP_const4s;
10334         }
10335       else
10336         {
10337           if (size_of_int_loc_descriptor (i)
10338               < (unsigned long) 1 + size_of_sleb128 (i))
10339             {
10340               dw_loc_descr_ref ret = int_loc_descriptor (-i);
10341               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10342               return ret;
10343             }
10344           op = DW_OP_consts;
10345         }
10346     }
10347
10348   return new_loc_descr (op, i, 0);
10349 }
10350
10351 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
10352    without actually allocating it.  */
10353
10354 static unsigned long
10355 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10356 {
10357   return size_of_int_loc_descriptor (i >> shift)
10358          + size_of_int_loc_descriptor (shift)
10359          + 1;
10360 }
10361
10362 /* Return size_of_locs (int_loc_descriptor (i)) without
10363    actually allocating it.  */
10364
10365 static unsigned long
10366 size_of_int_loc_descriptor (HOST_WIDE_INT i)
10367 {
10368   unsigned long s;
10369
10370   if (i >= 0)
10371     {
10372       int clz, ctz;
10373       if (i <= 31)
10374         return 1;
10375       else if (i <= 0xff)
10376         return 2;
10377       else if (i <= 0xffff)
10378         return 3;
10379       clz = clz_hwi (i);
10380       ctz = ctz_hwi (i);
10381       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10382           && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10383         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10384                                                     - clz - 5);
10385       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10386                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10387         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10388                                                     - clz - 8);
10389       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10390         return 5;
10391       s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
10392       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10393           && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10394         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10395                                                     - clz - 8);
10396       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10397                && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
10398         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10399                                                     - clz - 16);
10400       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10401                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10402                && s > 6)
10403         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10404                                                     - clz - 32);
10405       else
10406         return 1 + s;
10407     }
10408   else
10409     {
10410       if (i >= -0x80)
10411         return 2;
10412       else if (i >= -0x8000)
10413         return 3;
10414       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10415         {
10416           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10417             {
10418               s = size_of_int_loc_descriptor (-i) + 1;
10419               if (s < 5)
10420                 return s;
10421             }
10422           return 5;
10423         }
10424       else
10425         {
10426           unsigned long r = 1 + size_of_sleb128 (i);
10427           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10428             {
10429               s = size_of_int_loc_descriptor (-i) + 1;
10430               if (s < r)
10431                 return s;
10432             }
10433           return r;
10434         }
10435     }
10436 }
10437
10438 /* Return loc description representing "address" of integer value.
10439    This can appear only as toplevel expression.  */
10440
10441 static dw_loc_descr_ref
10442 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
10443 {
10444   int litsize;
10445   dw_loc_descr_ref loc_result = NULL;
10446
10447   if (!(dwarf_version >= 4 || !dwarf_strict))
10448     return NULL;
10449
10450   litsize = size_of_int_loc_descriptor (i);
10451   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
10452      is more compact.  For DW_OP_stack_value we need:
10453      litsize + 1 (DW_OP_stack_value)
10454      and for DW_OP_implicit_value:
10455      1 (DW_OP_implicit_value) + 1 (length) + size.  */
10456   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
10457     {
10458       loc_result = int_loc_descriptor (i);
10459       add_loc_descr (&loc_result,
10460                      new_loc_descr (DW_OP_stack_value, 0, 0));
10461       return loc_result;
10462     }
10463
10464   loc_result = new_loc_descr (DW_OP_implicit_value,
10465                               size, 0);
10466   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
10467   loc_result->dw_loc_oprnd2.v.val_int = i;
10468   return loc_result;
10469 }
10470
10471 /* Return a location descriptor that designates a base+offset location.  */
10472
10473 static dw_loc_descr_ref
10474 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
10475                  enum var_init_status initialized)
10476 {
10477   unsigned int regno;
10478   dw_loc_descr_ref result;
10479   dw_fde_ref fde = cfun->fde;
10480
10481   /* We only use "frame base" when we're sure we're talking about the
10482      post-prologue local stack frame.  We do this by *not* running
10483      register elimination until this point, and recognizing the special
10484      argument pointer and soft frame pointer rtx's.  */
10485   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
10486     {
10487       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10488
10489       if (elim != reg)
10490         {
10491           if (GET_CODE (elim) == PLUS)
10492             {
10493               offset += INTVAL (XEXP (elim, 1));
10494               elim = XEXP (elim, 0);
10495             }
10496           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
10497                        && (elim == hard_frame_pointer_rtx
10498                            || elim == stack_pointer_rtx))
10499                       || elim == (frame_pointer_needed
10500                                   ? hard_frame_pointer_rtx
10501                                   : stack_pointer_rtx));
10502
10503           /* If drap register is used to align stack, use frame
10504              pointer + offset to access stack variables.  If stack
10505              is aligned without drap, use stack pointer + offset to
10506              access stack variables.  */
10507           if (crtl->stack_realign_tried
10508               && reg == frame_pointer_rtx)
10509             {
10510               int base_reg
10511                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
10512                                       ? HARD_FRAME_POINTER_REGNUM
10513                                       : REGNO (elim));
10514               return new_reg_loc_descr (base_reg, offset);
10515             }
10516
10517           gcc_assert (frame_pointer_fb_offset_valid);
10518           offset += frame_pointer_fb_offset;
10519           return new_loc_descr (DW_OP_fbreg, offset, 0);
10520         }
10521     }
10522
10523   regno = DWARF_FRAME_REGNUM (REGNO (reg));
10524
10525   if (!optimize && fde
10526       && (fde->drap_reg == regno || fde->vdrap_reg == regno))
10527     {
10528       /* Use cfa+offset to represent the location of arguments passed
10529          on the stack when drap is used to align stack.
10530          Only do this when not optimizing, for optimized code var-tracking
10531          is supposed to track where the arguments live and the register
10532          used as vdrap or drap in some spot might be used for something
10533          else in other part of the routine.  */
10534       return new_loc_descr (DW_OP_fbreg, offset, 0);
10535     }
10536
10537   if (regno <= 31)
10538     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
10539                             offset, 0);
10540   else
10541     result = new_loc_descr (DW_OP_bregx, regno, offset);
10542
10543   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10544     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10545
10546   return result;
10547 }
10548
10549 /* Return true if this RTL expression describes a base+offset calculation.  */
10550
10551 static inline int
10552 is_based_loc (const_rtx rtl)
10553 {
10554   return (GET_CODE (rtl) == PLUS
10555           && ((REG_P (XEXP (rtl, 0))
10556                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
10557                && CONST_INT_P (XEXP (rtl, 1)))));
10558 }
10559
10560 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
10561    failed.  */
10562
10563 static dw_loc_descr_ref
10564 tls_mem_loc_descriptor (rtx mem)
10565 {
10566   tree base;
10567   dw_loc_descr_ref loc_result;
10568
10569   if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
10570     return NULL;
10571
10572   base = get_base_address (MEM_EXPR (mem));
10573   if (base == NULL
10574       || TREE_CODE (base) != VAR_DECL
10575       || !DECL_THREAD_LOCAL_P (base))
10576     return NULL;
10577
10578   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
10579   if (loc_result == NULL)
10580     return NULL;
10581
10582   if (MEM_OFFSET (mem))
10583     loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
10584
10585   return loc_result;
10586 }
10587
10588 /* Output debug info about reason why we failed to expand expression as dwarf
10589    expression.  */
10590
10591 static void
10592 expansion_failed (tree expr, rtx rtl, char const *reason)
10593 {
10594   if (dump_file && (dump_flags & TDF_DETAILS))
10595     {
10596       fprintf (dump_file, "Failed to expand as dwarf: ");
10597       if (expr)
10598         print_generic_expr (dump_file, expr, dump_flags);
10599       if (rtl)
10600         {
10601           fprintf (dump_file, "\n");
10602           print_rtl (dump_file, rtl);
10603         }
10604       fprintf (dump_file, "\nReason: %s\n", reason);
10605     }
10606 }
10607
10608 /* Helper function for const_ok_for_output, called either directly
10609    or via for_each_rtx.  */
10610
10611 static int
10612 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
10613 {
10614   rtx rtl = *rtlp;
10615
10616   if (GET_CODE (rtl) == UNSPEC)
10617     {
10618       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
10619          we can't express it in the debug info.  */
10620 #ifdef ENABLE_CHECKING
10621       /* Don't complain about TLS UNSPECs, those are just too hard to
10622          delegitimize.  */
10623       if (XVECLEN (rtl, 0) != 1
10624           || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
10625           || SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0)) == NULL
10626           || TREE_CODE (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))) != VAR_DECL
10627           || !DECL_THREAD_LOCAL_P (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))))
10628         inform (current_function_decl
10629                 ? DECL_SOURCE_LOCATION (current_function_decl)
10630                 : UNKNOWN_LOCATION,
10631 #if NUM_UNSPEC_VALUES > 0
10632                 "non-delegitimized UNSPEC %s (%d) found in variable location",
10633                 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
10634                  ? unspec_strings[XINT (rtl, 1)] : "unknown"),
10635                 XINT (rtl, 1));
10636 #else
10637                 "non-delegitimized UNSPEC %d found in variable location",
10638                 XINT (rtl, 1));
10639 #endif
10640 #endif
10641       expansion_failed (NULL_TREE, rtl,
10642                         "UNSPEC hasn't been delegitimized.\n");
10643       return 1;
10644     }
10645
10646   if (GET_CODE (rtl) != SYMBOL_REF)
10647     return 0;
10648
10649   if (CONSTANT_POOL_ADDRESS_P (rtl))
10650     {
10651       bool marked;
10652       get_pool_constant_mark (rtl, &marked);
10653       /* If all references to this pool constant were optimized away,
10654          it was not output and thus we can't represent it.  */
10655       if (!marked)
10656         {
10657           expansion_failed (NULL_TREE, rtl,
10658                             "Constant was removed from constant pool.\n");
10659           return 1;
10660         }
10661     }
10662
10663   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
10664     return 1;
10665
10666   /* Avoid references to external symbols in debug info, on several targets
10667      the linker might even refuse to link when linking a shared library,
10668      and in many other cases the relocations for .debug_info/.debug_loc are
10669      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
10670      to be defined within the same shared library or executable are fine.  */
10671   if (SYMBOL_REF_EXTERNAL_P (rtl))
10672     {
10673       tree decl = SYMBOL_REF_DECL (rtl);
10674
10675       if (decl == NULL || !targetm.binds_local_p (decl))
10676         {
10677           expansion_failed (NULL_TREE, rtl,
10678                             "Symbol not defined in current TU.\n");
10679           return 1;
10680         }
10681     }
10682
10683   return 0;
10684 }
10685
10686 /* Return true if constant RTL can be emitted in DW_OP_addr or
10687    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
10688    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
10689
10690 static bool
10691 const_ok_for_output (rtx rtl)
10692 {
10693   if (GET_CODE (rtl) == SYMBOL_REF)
10694     return const_ok_for_output_1 (&rtl, NULL) == 0;
10695
10696   if (GET_CODE (rtl) == CONST)
10697     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
10698
10699   return true;
10700 }
10701
10702 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
10703    if possible, NULL otherwise.  */
10704
10705 static dw_die_ref
10706 base_type_for_mode (enum machine_mode mode, bool unsignedp)
10707 {
10708   dw_die_ref type_die;
10709   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
10710
10711   if (type == NULL)
10712     return NULL;
10713   switch (TREE_CODE (type))
10714     {
10715     case INTEGER_TYPE:
10716     case REAL_TYPE:
10717       break;
10718     default:
10719       return NULL;
10720     }
10721   type_die = lookup_type_die (type);
10722   if (!type_die)
10723     type_die = modified_type_die (type, false, false, comp_unit_die ());
10724   if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
10725     return NULL;
10726   return type_die;
10727 }
10728
10729 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
10730    type matching MODE, or, if MODE is narrower than or as wide as
10731    DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
10732    possible.  */
10733
10734 static dw_loc_descr_ref
10735 convert_descriptor_to_mode (enum machine_mode mode, dw_loc_descr_ref op)
10736 {
10737   enum machine_mode outer_mode = mode;
10738   dw_die_ref type_die;
10739   dw_loc_descr_ref cvt;
10740
10741   if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
10742     {
10743       add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
10744       return op;
10745     }
10746   type_die = base_type_for_mode (outer_mode, 1);
10747   if (type_die == NULL)
10748     return NULL;
10749   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10750   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10751   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10752   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10753   add_loc_descr (&op, cvt);
10754   return op;
10755 }
10756
10757 /* Return location descriptor for comparison OP with operands OP0 and OP1.  */
10758
10759 static dw_loc_descr_ref
10760 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
10761                         dw_loc_descr_ref op1)
10762 {
10763   dw_loc_descr_ref ret = op0;
10764   add_loc_descr (&ret, op1);
10765   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
10766   if (STORE_FLAG_VALUE != 1)
10767     {
10768       add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
10769       add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
10770     }
10771   return ret;
10772 }
10773
10774 /* Return location descriptor for signed comparison OP RTL.  */
10775
10776 static dw_loc_descr_ref
10777 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10778                          enum machine_mode mem_mode)
10779 {
10780   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10781   dw_loc_descr_ref op0, op1;
10782   int shift;
10783
10784   if (op_mode == VOIDmode)
10785     op_mode = GET_MODE (XEXP (rtl, 1));
10786   if (op_mode == VOIDmode)
10787     return NULL;
10788
10789   if (dwarf_strict
10790       && (GET_MODE_CLASS (op_mode) != MODE_INT
10791           || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
10792     return NULL;
10793
10794   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10795                             VAR_INIT_STATUS_INITIALIZED);
10796   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10797                             VAR_INIT_STATUS_INITIALIZED);
10798
10799   if (op0 == NULL || op1 == NULL)
10800     return NULL;
10801
10802   if (GET_MODE_CLASS (op_mode) != MODE_INT
10803       || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10804     return compare_loc_descriptor (op, op0, op1);
10805
10806   if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10807     {
10808       dw_die_ref type_die = base_type_for_mode (op_mode, 0);
10809       dw_loc_descr_ref cvt;
10810
10811       if (type_die == NULL)
10812         return NULL;
10813       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10814       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10815       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10816       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10817       add_loc_descr (&op0, cvt);
10818       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10819       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10820       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10821       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10822       add_loc_descr (&op1, cvt);
10823       return compare_loc_descriptor (op, op0, op1);
10824     }
10825
10826   shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
10827   /* For eq/ne, if the operands are known to be zero-extended,
10828      there is no need to do the fancy shifting up.  */
10829   if (op == DW_OP_eq || op == DW_OP_ne)
10830     {
10831       dw_loc_descr_ref last0, last1;
10832       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10833         ;
10834       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10835         ;
10836       /* deref_size zero extends, and for constants we can check
10837          whether they are zero extended or not.  */
10838       if (((last0->dw_loc_opc == DW_OP_deref_size
10839             && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10840            || (CONST_INT_P (XEXP (rtl, 0))
10841                && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
10842                   == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
10843           && ((last1->dw_loc_opc == DW_OP_deref_size
10844                && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10845               || (CONST_INT_P (XEXP (rtl, 1))
10846                   && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
10847                      == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
10848         return compare_loc_descriptor (op, op0, op1);
10849
10850       /* EQ/NE comparison against constant in narrower type than
10851          DWARF2_ADDR_SIZE can be performed either as
10852          DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
10853          DW_OP_{eq,ne}
10854          or
10855          DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
10856          DW_OP_{eq,ne}.  Pick whatever is shorter.  */
10857       if (CONST_INT_P (XEXP (rtl, 1))
10858           && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
10859           && (size_of_int_loc_descriptor (shift) + 1
10860               + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
10861               >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
10862                  + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10863                                                & GET_MODE_MASK (op_mode))))
10864         {
10865           add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
10866           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10867           op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10868                                     & GET_MODE_MASK (op_mode));
10869           return compare_loc_descriptor (op, op0, op1);
10870         }
10871     }
10872   add_loc_descr (&op0, int_loc_descriptor (shift));
10873   add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
10874   if (CONST_INT_P (XEXP (rtl, 1)))
10875     op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
10876   else
10877     {
10878       add_loc_descr (&op1, int_loc_descriptor (shift));
10879       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
10880     }
10881   return compare_loc_descriptor (op, op0, op1);
10882 }
10883
10884 /* Return location descriptor for unsigned comparison OP RTL.  */
10885
10886 static dw_loc_descr_ref
10887 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10888                          enum machine_mode mem_mode)
10889 {
10890   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10891   dw_loc_descr_ref op0, op1;
10892
10893   if (op_mode == VOIDmode)
10894     op_mode = GET_MODE (XEXP (rtl, 1));
10895   if (op_mode == VOIDmode)
10896     return NULL;
10897   if (GET_MODE_CLASS (op_mode) != MODE_INT)
10898     return NULL;
10899
10900   if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10901     return NULL;
10902
10903   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10904                             VAR_INIT_STATUS_INITIALIZED);
10905   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10906                             VAR_INIT_STATUS_INITIALIZED);
10907
10908   if (op0 == NULL || op1 == NULL)
10909     return NULL;
10910
10911   if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
10912     {
10913       HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
10914       dw_loc_descr_ref last0, last1;
10915       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10916         ;
10917       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10918         ;
10919       if (CONST_INT_P (XEXP (rtl, 0)))
10920         op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
10921       /* deref_size zero extends, so no need to mask it again.  */
10922       else if (last0->dw_loc_opc != DW_OP_deref_size
10923                || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10924         {
10925           add_loc_descr (&op0, int_loc_descriptor (mask));
10926           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10927         }
10928       if (CONST_INT_P (XEXP (rtl, 1)))
10929         op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
10930       /* deref_size zero extends, so no need to mask it again.  */
10931       else if (last1->dw_loc_opc != DW_OP_deref_size
10932                || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10933         {
10934           add_loc_descr (&op1, int_loc_descriptor (mask));
10935           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10936         }
10937     }
10938   else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10939     {
10940       HOST_WIDE_INT bias = 1;
10941       bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
10942       add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10943       if (CONST_INT_P (XEXP (rtl, 1)))
10944         op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
10945                                   + INTVAL (XEXP (rtl, 1)));
10946       else
10947         add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
10948                                             bias, 0));
10949     }
10950   return compare_loc_descriptor (op, op0, op1);
10951 }
10952
10953 /* Return location descriptor for {U,S}{MIN,MAX}.  */
10954
10955 static dw_loc_descr_ref
10956 minmax_loc_descriptor (rtx rtl, enum machine_mode mode,
10957                        enum machine_mode mem_mode)
10958 {
10959   enum dwarf_location_atom op;
10960   dw_loc_descr_ref op0, op1, ret;
10961   dw_loc_descr_ref bra_node, drop_node;
10962
10963   if (dwarf_strict
10964       && (GET_MODE_CLASS (mode) != MODE_INT
10965           || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
10966     return NULL;
10967
10968   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
10969                             VAR_INIT_STATUS_INITIALIZED);
10970   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
10971                             VAR_INIT_STATUS_INITIALIZED);
10972
10973   if (op0 == NULL || op1 == NULL)
10974     return NULL;
10975
10976   add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
10977   add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
10978   add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
10979   if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
10980     {
10981       if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
10982         {
10983           HOST_WIDE_INT mask = GET_MODE_MASK (mode);
10984           add_loc_descr (&op0, int_loc_descriptor (mask));
10985           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10986           add_loc_descr (&op1, int_loc_descriptor (mask));
10987           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10988         }
10989       else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
10990         {
10991           HOST_WIDE_INT bias = 1;
10992           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
10993           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10994           add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10995         }
10996     }
10997   else if (GET_MODE_CLASS (mode) == MODE_INT
10998            && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
10999     {
11000       int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
11001       add_loc_descr (&op0, int_loc_descriptor (shift));
11002       add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11003       add_loc_descr (&op1, int_loc_descriptor (shift));
11004       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11005     }
11006   else if (GET_MODE_CLASS (mode) == MODE_INT
11007            && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11008     {
11009       dw_die_ref type_die = base_type_for_mode (mode, 0);
11010       dw_loc_descr_ref cvt;
11011       if (type_die == NULL)
11012         return NULL;
11013       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11014       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11015       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11016       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11017       add_loc_descr (&op0, cvt);
11018       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11019       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11020       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11021       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11022       add_loc_descr (&op1, cvt);
11023     }
11024
11025   if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
11026     op = DW_OP_lt;
11027   else
11028     op = DW_OP_gt;
11029   ret = op0;
11030   add_loc_descr (&ret, op1);
11031   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11032   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11033   add_loc_descr (&ret, bra_node);
11034   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11035   drop_node = new_loc_descr (DW_OP_drop, 0, 0);
11036   add_loc_descr (&ret, drop_node);
11037   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11038   bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
11039   if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
11040       && GET_MODE_CLASS (mode) == MODE_INT
11041       && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11042     ret = convert_descriptor_to_mode (mode, ret);
11043   return ret;
11044 }
11045
11046 /* Helper function for mem_loc_descriptor.  Perform OP binary op,
11047    but after converting arguments to type_die, afterwards
11048    convert back to unsigned.  */
11049
11050 static dw_loc_descr_ref
11051 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
11052              enum machine_mode mode, enum machine_mode mem_mode)
11053 {
11054   dw_loc_descr_ref cvt, op0, op1;
11055
11056   if (type_die == NULL)
11057     return NULL;
11058   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11059                             VAR_INIT_STATUS_INITIALIZED);
11060   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11061                             VAR_INIT_STATUS_INITIALIZED);
11062   if (op0 == NULL || op1 == NULL)
11063     return NULL;
11064   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11065   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11066   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11067   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11068   add_loc_descr (&op0, cvt);
11069   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11070   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11071   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11072   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11073   add_loc_descr (&op1, cvt);
11074   add_loc_descr (&op0, op1);
11075   add_loc_descr (&op0, new_loc_descr (op, 0, 0));
11076   return convert_descriptor_to_mode (mode, op0);
11077 }
11078
11079 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
11080    const0 is DW_OP_lit0 or corresponding typed constant,
11081    const1 is DW_OP_lit1 or corresponding typed constant
11082    and constMSB is constant with just the MSB bit set
11083    for the mode):
11084        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11085    L1: const0 DW_OP_swap
11086    L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
11087        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11088    L3: DW_OP_drop
11089    L4: DW_OP_nop
11090
11091    CTZ is similar:
11092        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11093    L1: const0 DW_OP_swap
11094    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11095        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11096    L3: DW_OP_drop
11097    L4: DW_OP_nop
11098
11099    FFS is similar:
11100        DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
11101    L1: const1 DW_OP_swap
11102    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11103        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11104    L3: DW_OP_drop
11105    L4: DW_OP_nop  */
11106
11107 static dw_loc_descr_ref
11108 clz_loc_descriptor (rtx rtl, enum machine_mode mode,
11109                     enum machine_mode mem_mode)
11110 {
11111   dw_loc_descr_ref op0, ret, tmp;
11112   HOST_WIDE_INT valv;
11113   dw_loc_descr_ref l1jump, l1label;
11114   dw_loc_descr_ref l2jump, l2label;
11115   dw_loc_descr_ref l3jump, l3label;
11116   dw_loc_descr_ref l4jump, l4label;
11117   rtx msb;
11118
11119   if (GET_MODE_CLASS (mode) != MODE_INT
11120       || GET_MODE (XEXP (rtl, 0)) != mode
11121       || (GET_CODE (rtl) == CLZ
11122           && GET_MODE_BITSIZE (mode) > 2 * HOST_BITS_PER_WIDE_INT))
11123     return NULL;
11124
11125   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11126                             VAR_INIT_STATUS_INITIALIZED);
11127   if (op0 == NULL)
11128     return NULL;
11129   ret = op0;
11130   if (GET_CODE (rtl) == CLZ)
11131     {
11132       if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11133         valv = GET_MODE_BITSIZE (mode);
11134     }
11135   else if (GET_CODE (rtl) == FFS)
11136     valv = 0;
11137   else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11138     valv = GET_MODE_BITSIZE (mode);
11139   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11140   l1jump = new_loc_descr (DW_OP_bra, 0, 0);
11141   add_loc_descr (&ret, l1jump);
11142   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11143   tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
11144                             VAR_INIT_STATUS_INITIALIZED);
11145   if (tmp == NULL)
11146     return NULL;
11147   add_loc_descr (&ret, tmp);
11148   l4jump = new_loc_descr (DW_OP_skip, 0, 0);
11149   add_loc_descr (&ret, l4jump);
11150   l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
11151                                 ? const1_rtx : const0_rtx,
11152                                 mode, mem_mode,
11153                                 VAR_INIT_STATUS_INITIALIZED);
11154   if (l1label == NULL)
11155     return NULL;
11156   add_loc_descr (&ret, l1label);
11157   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11158   l2label = new_loc_descr (DW_OP_dup, 0, 0);
11159   add_loc_descr (&ret, l2label);
11160   if (GET_CODE (rtl) != CLZ)
11161     msb = const1_rtx;
11162   else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
11163     msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
11164                    << (GET_MODE_BITSIZE (mode) - 1));
11165   else
11166     msb = immed_double_const (0, (unsigned HOST_WIDE_INT) 1
11167                                   << (GET_MODE_BITSIZE (mode)
11168                                       - HOST_BITS_PER_WIDE_INT - 1), mode);
11169   if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
11170     tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11171                          ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
11172                          ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
11173   else
11174     tmp = mem_loc_descriptor (msb, mode, mem_mode,
11175                               VAR_INIT_STATUS_INITIALIZED);
11176   if (tmp == NULL)
11177     return NULL;
11178   add_loc_descr (&ret, tmp);
11179   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11180   l3jump = new_loc_descr (DW_OP_bra, 0, 0);
11181   add_loc_descr (&ret, l3jump);
11182   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11183                             VAR_INIT_STATUS_INITIALIZED);
11184   if (tmp == NULL)
11185     return NULL;
11186   add_loc_descr (&ret, tmp);
11187   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
11188                                       ? DW_OP_shl : DW_OP_shr, 0, 0));
11189   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11190   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
11191   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11192   l2jump = new_loc_descr (DW_OP_skip, 0, 0);
11193   add_loc_descr (&ret, l2jump);
11194   l3label = new_loc_descr (DW_OP_drop, 0, 0);
11195   add_loc_descr (&ret, l3label);
11196   l4label = new_loc_descr (DW_OP_nop, 0, 0);
11197   add_loc_descr (&ret, l4label);
11198   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11199   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11200   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11201   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11202   l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11203   l3jump->dw_loc_oprnd1.v.val_loc = l3label;
11204   l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11205   l4jump->dw_loc_oprnd1.v.val_loc = l4label;
11206   return ret;
11207 }
11208
11209 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
11210    const1 is DW_OP_lit1 or corresponding typed constant):
11211        const0 DW_OP_swap
11212    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11213        DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11214    L2: DW_OP_drop
11215
11216    PARITY is similar:
11217    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11218        DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11219    L2: DW_OP_drop  */
11220
11221 static dw_loc_descr_ref
11222 popcount_loc_descriptor (rtx rtl, enum machine_mode mode,
11223                          enum machine_mode mem_mode)
11224 {
11225   dw_loc_descr_ref op0, ret, tmp;
11226   dw_loc_descr_ref l1jump, l1label;
11227   dw_loc_descr_ref l2jump, l2label;
11228
11229   if (GET_MODE_CLASS (mode) != MODE_INT
11230       || GET_MODE (XEXP (rtl, 0)) != mode)
11231     return NULL;
11232
11233   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11234                             VAR_INIT_STATUS_INITIALIZED);
11235   if (op0 == NULL)
11236     return NULL;
11237   ret = op0;
11238   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11239                             VAR_INIT_STATUS_INITIALIZED);
11240   if (tmp == NULL)
11241     return NULL;
11242   add_loc_descr (&ret, tmp);
11243   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11244   l1label = new_loc_descr (DW_OP_dup, 0, 0);
11245   add_loc_descr (&ret, l1label);
11246   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11247   add_loc_descr (&ret, l2jump);
11248   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11249   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11250   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11251                             VAR_INIT_STATUS_INITIALIZED);
11252   if (tmp == NULL)
11253     return NULL;
11254   add_loc_descr (&ret, tmp);
11255   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11256   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
11257                                       ? DW_OP_plus : DW_OP_xor, 0, 0));
11258   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11259   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11260                             VAR_INIT_STATUS_INITIALIZED);
11261   add_loc_descr (&ret, tmp);
11262   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11263   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11264   add_loc_descr (&ret, l1jump);
11265   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11266   add_loc_descr (&ret, l2label);
11267   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11268   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11269   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11270   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11271   return ret;
11272 }
11273
11274 /* BSWAP (constS is initial shift count, either 56 or 24):
11275        constS const0
11276    L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
11277        const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
11278        DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
11279        DW_OP_minus DW_OP_swap DW_OP_skip <L1>
11280    L2: DW_OP_drop DW_OP_swap DW_OP_drop  */
11281
11282 static dw_loc_descr_ref
11283 bswap_loc_descriptor (rtx rtl, enum machine_mode mode,
11284                       enum machine_mode mem_mode)
11285 {
11286   dw_loc_descr_ref op0, ret, tmp;
11287   dw_loc_descr_ref l1jump, l1label;
11288   dw_loc_descr_ref l2jump, l2label;
11289
11290   if (GET_MODE_CLASS (mode) != MODE_INT
11291       || BITS_PER_UNIT != 8
11292       || (GET_MODE_BITSIZE (mode) != 32
11293           &&  GET_MODE_BITSIZE (mode) != 64))
11294     return NULL;
11295
11296   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11297                             VAR_INIT_STATUS_INITIALIZED);
11298   if (op0 == NULL)
11299     return NULL;
11300
11301   ret = op0;
11302   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11303                             mode, mem_mode,
11304                             VAR_INIT_STATUS_INITIALIZED);
11305   if (tmp == NULL)
11306     return NULL;
11307   add_loc_descr (&ret, tmp);
11308   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11309                             VAR_INIT_STATUS_INITIALIZED);
11310   if (tmp == NULL)
11311     return NULL;
11312   add_loc_descr (&ret, tmp);
11313   l1label = new_loc_descr (DW_OP_pick, 2, 0);
11314   add_loc_descr (&ret, l1label);
11315   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11316                             mode, mem_mode,
11317                             VAR_INIT_STATUS_INITIALIZED);
11318   add_loc_descr (&ret, tmp);
11319   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
11320   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11321   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11322   tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
11323                             VAR_INIT_STATUS_INITIALIZED);
11324   if (tmp == NULL)
11325     return NULL;
11326   add_loc_descr (&ret, tmp);
11327   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11328   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
11329   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11330   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11331   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11332   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11333   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11334                             VAR_INIT_STATUS_INITIALIZED);
11335   add_loc_descr (&ret, tmp);
11336   add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
11337   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11338   add_loc_descr (&ret, l2jump);
11339   tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
11340                             VAR_INIT_STATUS_INITIALIZED);
11341   add_loc_descr (&ret, tmp);
11342   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11343   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11344   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11345   add_loc_descr (&ret, l1jump);
11346   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11347   add_loc_descr (&ret, l2label);
11348   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11349   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11350   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11351   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11352   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11353   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11354   return ret;
11355 }
11356
11357 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
11358    DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11359    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
11360    DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
11361
11362    ROTATERT is similar:
11363    DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
11364    DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11365    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or  */
11366
11367 static dw_loc_descr_ref
11368 rotate_loc_descriptor (rtx rtl, enum machine_mode mode,
11369                        enum machine_mode mem_mode)
11370 {
11371   rtx rtlop1 = XEXP (rtl, 1);
11372   dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
11373   int i;
11374
11375   if (GET_MODE_CLASS (mode) != MODE_INT)
11376     return NULL;
11377
11378   if (GET_MODE (rtlop1) != VOIDmode
11379       && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
11380     rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11381   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11382                             VAR_INIT_STATUS_INITIALIZED);
11383   op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11384                             VAR_INIT_STATUS_INITIALIZED);
11385   if (op0 == NULL || op1 == NULL)
11386     return NULL;
11387   if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11388     for (i = 0; i < 2; i++)
11389       {
11390         if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
11391           mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
11392                                         mode, mem_mode,
11393                                         VAR_INIT_STATUS_INITIALIZED);
11394         else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
11395           mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11396                                    ? DW_OP_const4u
11397                                    : HOST_BITS_PER_WIDE_INT == 64
11398                                    ? DW_OP_const8u : DW_OP_constu,
11399                                    GET_MODE_MASK (mode), 0);
11400         else
11401           mask[i] = NULL;
11402         if (mask[i] == NULL)
11403           return NULL;
11404         add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
11405       }
11406   ret = op0;
11407   add_loc_descr (&ret, op1);
11408   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11409   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11410   if (GET_CODE (rtl) == ROTATERT)
11411     {
11412       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11413       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11414                                           GET_MODE_BITSIZE (mode), 0));
11415     }
11416   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11417   if (mask[0] != NULL)
11418     add_loc_descr (&ret, mask[0]);
11419   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11420   if (mask[1] != NULL)
11421     {
11422       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11423       add_loc_descr (&ret, mask[1]);
11424       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11425     }
11426   if (GET_CODE (rtl) == ROTATE)
11427     {
11428       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11429       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11430                                           GET_MODE_BITSIZE (mode), 0));
11431     }
11432   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11433   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11434   return ret;
11435 }
11436
11437 /* Helper function for mem_loc_descriptor.  Return DW_OP_GNU_parameter_ref
11438    for DEBUG_PARAMETER_REF RTL.  */
11439
11440 static dw_loc_descr_ref
11441 parameter_ref_descriptor (rtx rtl)
11442 {
11443   dw_loc_descr_ref ret;
11444   dw_die_ref ref;
11445
11446   if (dwarf_strict)
11447     return NULL;
11448   gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
11449   ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
11450   ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
11451   if (ref)
11452     {
11453       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11454       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
11455       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
11456     }
11457   else
11458     {
11459       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
11460       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
11461     }
11462   return ret;
11463 }
11464
11465 /* Helper function to get mode of MEM's address.  */
11466
11467 enum machine_mode
11468 get_address_mode (rtx mem)
11469 {
11470   enum machine_mode mode = GET_MODE (XEXP (mem, 0));
11471   if (mode != VOIDmode)
11472     return mode;
11473   return targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
11474 }
11475
11476 /* The following routine converts the RTL for a variable or parameter
11477    (resident in memory) into an equivalent Dwarf representation of a
11478    mechanism for getting the address of that same variable onto the top of a
11479    hypothetical "address evaluation" stack.
11480
11481    When creating memory location descriptors, we are effectively transforming
11482    the RTL for a memory-resident object into its Dwarf postfix expression
11483    equivalent.  This routine recursively descends an RTL tree, turning
11484    it into Dwarf postfix code as it goes.
11485
11486    MODE is the mode that should be assumed for the rtl if it is VOIDmode.
11487
11488    MEM_MODE is the mode of the memory reference, needed to handle some
11489    autoincrement addressing modes.
11490
11491    Return 0 if we can't represent the location.  */
11492
11493 dw_loc_descr_ref
11494 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
11495                     enum machine_mode mem_mode,
11496                     enum var_init_status initialized)
11497 {
11498   dw_loc_descr_ref mem_loc_result = NULL;
11499   enum dwarf_location_atom op;
11500   dw_loc_descr_ref op0, op1;
11501
11502   if (mode == VOIDmode)
11503     mode = GET_MODE (rtl);
11504
11505   /* Note that for a dynamically sized array, the location we will generate a
11506      description of here will be the lowest numbered location which is
11507      actually within the array.  That's *not* necessarily the same as the
11508      zeroth element of the array.  */
11509
11510   rtl = targetm.delegitimize_address (rtl);
11511
11512   if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
11513     return NULL;
11514
11515   switch (GET_CODE (rtl))
11516     {
11517     case POST_INC:
11518     case POST_DEC:
11519     case POST_MODIFY:
11520       return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
11521
11522     case SUBREG:
11523       /* The case of a subreg may arise when we have a local (register)
11524          variable or a formal (register) parameter which doesn't quite fill
11525          up an entire register.  For now, just assume that it is
11526          legitimate to make the Dwarf info refer to the whole register which
11527          contains the given subreg.  */
11528       if (!subreg_lowpart_p (rtl))
11529         break;
11530       if (GET_MODE_CLASS (mode) == MODE_INT
11531           && GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) == MODE_INT
11532           && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11533 #ifdef POINTERS_EXTEND_UNSIGNED
11534               || (mode == Pmode && mem_mode != VOIDmode)
11535 #endif
11536              )
11537           && GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) <= DWARF2_ADDR_SIZE)
11538         {
11539           mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11540                                                GET_MODE (SUBREG_REG (rtl)),
11541                                                mem_mode, initialized);
11542           break;
11543         }
11544       if (dwarf_strict)
11545         break;
11546       if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11547         break;
11548       if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl)))
11549           && (GET_MODE_CLASS (mode) != MODE_INT
11550               || GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) != MODE_INT))
11551         break;
11552       else
11553         {
11554           dw_die_ref type_die;
11555           dw_loc_descr_ref cvt;
11556
11557           mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11558                                                GET_MODE (SUBREG_REG (rtl)),
11559                                                mem_mode, initialized);
11560           if (mem_loc_result == NULL)
11561             break;
11562           type_die = base_type_for_mode (mode,
11563                                          GET_MODE_CLASS (mode) == MODE_INT);
11564           if (type_die == NULL)
11565             {
11566               mem_loc_result = NULL;
11567               break;
11568             }
11569           if (GET_MODE_SIZE (mode)
11570               != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11571             cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11572           else
11573             cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
11574           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11575           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11576           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11577           add_loc_descr (&mem_loc_result, cvt);
11578         }
11579       break;
11580
11581     case REG:
11582       if (GET_MODE_CLASS (mode) != MODE_INT
11583           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11584 #ifdef POINTERS_EXTEND_UNSIGNED
11585               && (mode != Pmode || mem_mode == VOIDmode)
11586 #endif
11587               ))
11588         {
11589           dw_die_ref type_die;
11590
11591           if (dwarf_strict)
11592             break;
11593           if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
11594             break;
11595           type_die = base_type_for_mode (mode,
11596                                          GET_MODE_CLASS (mode) == MODE_INT);
11597           if (type_die == NULL)
11598             break;
11599           mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
11600                                           dbx_reg_number (rtl), 0);
11601           mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11602           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11603           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
11604           break;
11605         }
11606       /* Whenever a register number forms a part of the description of the
11607          method for calculating the (dynamic) address of a memory resident
11608          object, DWARF rules require the register number be referred to as
11609          a "base register".  This distinction is not based in any way upon
11610          what category of register the hardware believes the given register
11611          belongs to.  This is strictly DWARF terminology we're dealing with
11612          here. Note that in cases where the location of a memory-resident
11613          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
11614          OP_CONST (0)) the actual DWARF location descriptor that we generate
11615          may just be OP_BASEREG (basereg).  This may look deceptively like
11616          the object in question was allocated to a register (rather than in
11617          memory) so DWARF consumers need to be aware of the subtle
11618          distinction between OP_REG and OP_BASEREG.  */
11619       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
11620         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
11621       else if (stack_realign_drap
11622                && crtl->drap_reg
11623                && crtl->args.internal_arg_pointer == rtl
11624                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
11625         {
11626           /* If RTL is internal_arg_pointer, which has been optimized
11627              out, use DRAP instead.  */
11628           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
11629                                             VAR_INIT_STATUS_INITIALIZED);
11630         }
11631       break;
11632
11633     case SIGN_EXTEND:
11634     case ZERO_EXTEND:
11635       if (GET_MODE_CLASS (mode) != MODE_INT)
11636         break;
11637       op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
11638                                 mem_mode, VAR_INIT_STATUS_INITIALIZED);
11639       if (op0 == 0)
11640         break;
11641       else if (GET_CODE (rtl) == ZERO_EXTEND
11642                && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11643                && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
11644                   < HOST_BITS_PER_WIDE_INT
11645                /* If DW_OP_const{1,2,4}u won't be used, it is shorter
11646                   to expand zero extend as two shifts instead of
11647                   masking.  */
11648                && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
11649         {
11650           enum machine_mode imode = GET_MODE (XEXP (rtl, 0));
11651           mem_loc_result = op0;
11652           add_loc_descr (&mem_loc_result,
11653                          int_loc_descriptor (GET_MODE_MASK (imode)));
11654           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
11655         }
11656       else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11657         {
11658           int shift = DWARF2_ADDR_SIZE
11659                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
11660           shift *= BITS_PER_UNIT;
11661           if (GET_CODE (rtl) == SIGN_EXTEND)
11662             op = DW_OP_shra;
11663           else
11664             op = DW_OP_shr;
11665           mem_loc_result = op0;
11666           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11667           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
11668           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11669           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11670         }
11671       else if (!dwarf_strict)
11672         {
11673           dw_die_ref type_die1, type_die2;
11674           dw_loc_descr_ref cvt;
11675
11676           type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
11677                                           GET_CODE (rtl) == ZERO_EXTEND);
11678           if (type_die1 == NULL)
11679             break;
11680           type_die2 = base_type_for_mode (mode, 1);
11681           if (type_die2 == NULL)
11682             break;
11683           mem_loc_result = op0;
11684           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11685           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11686           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
11687           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11688           add_loc_descr (&mem_loc_result, cvt);
11689           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11690           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11691           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
11692           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11693           add_loc_descr (&mem_loc_result, cvt);
11694         }
11695       break;
11696
11697     case MEM:
11698       {
11699         rtx new_rtl = avoid_constant_pool_reference (rtl);
11700         if (new_rtl != rtl)
11701           {
11702             mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
11703                                                  initialized);
11704             if (mem_loc_result != NULL)
11705               return mem_loc_result;
11706           }
11707       }
11708       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
11709                                            get_address_mode (rtl), mode,
11710                                            VAR_INIT_STATUS_INITIALIZED);
11711       if (mem_loc_result == NULL)
11712         mem_loc_result = tls_mem_loc_descriptor (rtl);
11713       if (mem_loc_result != NULL)
11714         {
11715           if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11716               || GET_MODE_CLASS (mode) != MODE_INT)
11717             {
11718               dw_die_ref type_die;
11719               dw_loc_descr_ref deref;
11720
11721               if (dwarf_strict)
11722                 return NULL;
11723               type_die
11724                 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
11725               if (type_die == NULL)
11726                 return NULL;
11727               deref = new_loc_descr (DW_OP_GNU_deref_type,
11728                                      GET_MODE_SIZE (mode), 0);
11729               deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11730               deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11731               deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
11732               add_loc_descr (&mem_loc_result, deref);
11733             }
11734           else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11735             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
11736           else
11737             add_loc_descr (&mem_loc_result,
11738                            new_loc_descr (DW_OP_deref_size,
11739                                           GET_MODE_SIZE (mode), 0));
11740         }
11741       break;
11742
11743     case LO_SUM:
11744       return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
11745
11746     case LABEL_REF:
11747       /* Some ports can transform a symbol ref into a label ref, because
11748          the symbol ref is too far away and has to be dumped into a constant
11749          pool.  */
11750     case CONST:
11751     case SYMBOL_REF:
11752       if (GET_MODE_CLASS (mode) != MODE_INT
11753           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11754 #ifdef POINTERS_EXTEND_UNSIGNED
11755               && (mode != Pmode || mem_mode == VOIDmode)
11756 #endif
11757               ))
11758         break;
11759       if (GET_CODE (rtl) == SYMBOL_REF
11760           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11761         {
11762           dw_loc_descr_ref temp;
11763
11764           /* If this is not defined, we have no way to emit the data.  */
11765           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
11766             break;
11767
11768           /* We used to emit DW_OP_addr here, but that's wrong, since
11769              DW_OP_addr should be relocated by the debug info consumer,
11770              while DW_OP_GNU_push_tls_address operand should not.  */
11771           temp = new_loc_descr (DWARF2_ADDR_SIZE == 4
11772                                 ? DW_OP_const4u : DW_OP_const8u, 0, 0);
11773           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
11774           temp->dw_loc_oprnd1.v.val_addr = rtl;
11775           temp->dtprel = true;
11776
11777           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
11778           add_loc_descr (&mem_loc_result, temp);
11779
11780           break;
11781         }
11782
11783       if (!const_ok_for_output (rtl))
11784         break;
11785
11786     symref:
11787       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
11788       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
11789       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
11790       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
11791       break;
11792
11793     case CONCAT:
11794     case CONCATN:
11795     case VAR_LOCATION:
11796     case DEBUG_IMPLICIT_PTR:
11797       expansion_failed (NULL_TREE, rtl,
11798                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
11799       return 0;
11800
11801     case ENTRY_VALUE:
11802       if (dwarf_strict)
11803         return NULL;
11804       if (REG_P (ENTRY_VALUE_EXP (rtl)))
11805         {
11806           if (GET_MODE_CLASS (mode) != MODE_INT
11807               || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11808             op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11809                                       VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11810           else
11811             op0
11812               = one_reg_loc_descriptor (dbx_reg_number (ENTRY_VALUE_EXP (rtl)),
11813                                         VAR_INIT_STATUS_INITIALIZED);
11814         }
11815       else if (MEM_P (ENTRY_VALUE_EXP (rtl))
11816                && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
11817         {
11818           op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11819                                     VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11820           if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
11821             return NULL;
11822         }
11823       else
11824         gcc_unreachable ();
11825       if (op0 == NULL)
11826         return NULL;
11827       mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
11828       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
11829       mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
11830       break;
11831
11832     case DEBUG_PARAMETER_REF:
11833       mem_loc_result = parameter_ref_descriptor (rtl);
11834       break;
11835
11836     case PRE_MODIFY:
11837       /* Extract the PLUS expression nested inside and fall into
11838          PLUS code below.  */
11839       rtl = XEXP (rtl, 1);
11840       goto plus;
11841
11842     case PRE_INC:
11843     case PRE_DEC:
11844       /* Turn these into a PLUS expression and fall into the PLUS code
11845          below.  */
11846       rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
11847                           GEN_INT (GET_CODE (rtl) == PRE_INC
11848                                    ? GET_MODE_UNIT_SIZE (mem_mode)
11849                                    : -GET_MODE_UNIT_SIZE (mem_mode)));
11850
11851       /* ... fall through ...  */
11852
11853     case PLUS:
11854     plus:
11855       if (is_based_loc (rtl)
11856           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11857           && GET_MODE_CLASS (mode) == MODE_INT)
11858         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
11859                                           INTVAL (XEXP (rtl, 1)),
11860                                           VAR_INIT_STATUS_INITIALIZED);
11861       else
11862         {
11863           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11864                                                VAR_INIT_STATUS_INITIALIZED);
11865           if (mem_loc_result == 0)
11866             break;
11867
11868           if (CONST_INT_P (XEXP (rtl, 1))
11869               && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11870             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
11871           else
11872             {
11873               op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11874                                         VAR_INIT_STATUS_INITIALIZED);
11875               if (op1 == 0)
11876                 break;
11877               add_loc_descr (&mem_loc_result, op1);
11878               add_loc_descr (&mem_loc_result,
11879                              new_loc_descr (DW_OP_plus, 0, 0));
11880             }
11881         }
11882       break;
11883
11884     /* If a pseudo-reg is optimized away, it is possible for it to
11885        be replaced with a MEM containing a multiply or shift.  */
11886     case MINUS:
11887       op = DW_OP_minus;
11888       goto do_binop;
11889
11890     case MULT:
11891       op = DW_OP_mul;
11892       goto do_binop;
11893
11894     case DIV:
11895       if (!dwarf_strict
11896           && GET_MODE_CLASS (mode) == MODE_INT
11897           && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11898         {
11899           mem_loc_result = typed_binop (DW_OP_div, rtl,
11900                                         base_type_for_mode (mode, 0),
11901                                         mode, mem_mode);
11902           break;
11903         }
11904       op = DW_OP_div;
11905       goto do_binop;
11906
11907     case UMOD:
11908       op = DW_OP_mod;
11909       goto do_binop;
11910
11911     case ASHIFT:
11912       op = DW_OP_shl;
11913       goto do_shift;
11914
11915     case ASHIFTRT:
11916       op = DW_OP_shra;
11917       goto do_shift;
11918
11919     case LSHIFTRT:
11920       op = DW_OP_shr;
11921       goto do_shift;
11922
11923     do_shift:
11924       if (GET_MODE_CLASS (mode) != MODE_INT)
11925         break;
11926       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11927                                 VAR_INIT_STATUS_INITIALIZED);
11928       {
11929         rtx rtlop1 = XEXP (rtl, 1);
11930         if (GET_MODE (rtlop1) != VOIDmode
11931             && GET_MODE_BITSIZE (GET_MODE (rtlop1))
11932                < GET_MODE_BITSIZE (mode))
11933           rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11934         op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11935                                   VAR_INIT_STATUS_INITIALIZED);
11936       }
11937
11938       if (op0 == 0 || op1 == 0)
11939         break;
11940
11941       mem_loc_result = op0;
11942       add_loc_descr (&mem_loc_result, op1);
11943       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11944       break;
11945
11946     case AND:
11947       op = DW_OP_and;
11948       goto do_binop;
11949
11950     case IOR:
11951       op = DW_OP_or;
11952       goto do_binop;
11953
11954     case XOR:
11955       op = DW_OP_xor;
11956       goto do_binop;
11957
11958     do_binop:
11959       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11960                                 VAR_INIT_STATUS_INITIALIZED);
11961       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11962                                 VAR_INIT_STATUS_INITIALIZED);
11963
11964       if (op0 == 0 || op1 == 0)
11965         break;
11966
11967       mem_loc_result = op0;
11968       add_loc_descr (&mem_loc_result, op1);
11969       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11970       break;
11971
11972     case MOD:
11973       if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
11974         {
11975           mem_loc_result = typed_binop (DW_OP_mod, rtl,
11976                                         base_type_for_mode (mode, 0),
11977                                         mode, mem_mode);
11978           break;
11979         }
11980
11981       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11982                                 VAR_INIT_STATUS_INITIALIZED);
11983       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11984                                 VAR_INIT_STATUS_INITIALIZED);
11985
11986       if (op0 == 0 || op1 == 0)
11987         break;
11988
11989       mem_loc_result = op0;
11990       add_loc_descr (&mem_loc_result, op1);
11991       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
11992       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
11993       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
11994       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
11995       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
11996       break;
11997
11998     case UDIV:
11999       if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
12000         {
12001           if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
12002             {
12003               op = DW_OP_div;
12004               goto do_binop;
12005             }
12006           mem_loc_result = typed_binop (DW_OP_div, rtl,
12007                                         base_type_for_mode (mode, 1),
12008                                         mode, mem_mode);
12009         }
12010       break;
12011
12012     case NOT:
12013       op = DW_OP_not;
12014       goto do_unop;
12015
12016     case ABS:
12017       op = DW_OP_abs;
12018       goto do_unop;
12019
12020     case NEG:
12021       op = DW_OP_neg;
12022       goto do_unop;
12023
12024     do_unop:
12025       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12026                                 VAR_INIT_STATUS_INITIALIZED);
12027
12028       if (op0 == 0)
12029         break;
12030
12031       mem_loc_result = op0;
12032       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12033       break;
12034
12035     case CONST_INT:
12036       if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12037 #ifdef POINTERS_EXTEND_UNSIGNED
12038           || (mode == Pmode
12039               && mem_mode != VOIDmode
12040               && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
12041 #endif
12042           )
12043         {
12044           mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12045           break;
12046         }
12047       if (!dwarf_strict
12048           && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
12049               || GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_WIDE_INT))
12050         {
12051           dw_die_ref type_die = base_type_for_mode (mode, 1);
12052           enum machine_mode amode;
12053           if (type_die == NULL)
12054             return NULL;
12055           amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
12056                                  MODE_INT, 0);
12057           if (INTVAL (rtl) >= 0
12058               && amode != BLKmode
12059               && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
12060               /* const DW_OP_GNU_convert <XXX> vs.
12061                  DW_OP_GNU_const_type <XXX, 1, const>.  */
12062               && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
12063                  < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
12064             {
12065               mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12066               op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12067               op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12068               op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12069               op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
12070               add_loc_descr (&mem_loc_result, op0);
12071               return mem_loc_result;
12072             }
12073           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
12074                                           INTVAL (rtl));
12075           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12076           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12077           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12078           if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12079             mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12080           else
12081             {
12082               mem_loc_result->dw_loc_oprnd2.val_class
12083                 = dw_val_class_const_double;
12084               mem_loc_result->dw_loc_oprnd2.v.val_double
12085                 = shwi_to_double_int (INTVAL (rtl));
12086             }
12087         }
12088       break;
12089
12090     case CONST_DOUBLE:
12091       if (!dwarf_strict)
12092         {
12093           dw_die_ref type_die;
12094
12095           /* Note that a CONST_DOUBLE rtx could represent either an integer
12096              or a floating-point constant.  A CONST_DOUBLE is used whenever
12097              the constant requires more than one word in order to be
12098              adequately represented.  We output CONST_DOUBLEs as blocks.  */
12099           if (mode == VOIDmode
12100               || (GET_MODE (rtl) == VOIDmode
12101                   && GET_MODE_BITSIZE (mode) != 2 * HOST_BITS_PER_WIDE_INT))
12102             break;
12103           type_die = base_type_for_mode (mode,
12104                                          GET_MODE_CLASS (mode) == MODE_INT);
12105           if (type_die == NULL)
12106             return NULL;
12107           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
12108           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12109           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12110           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12111           if (SCALAR_FLOAT_MODE_P (mode))
12112             {
12113               unsigned int length = GET_MODE_SIZE (mode);
12114               unsigned char *array
12115                   = (unsigned char*) ggc_alloc_atomic (length);
12116
12117               insert_float (rtl, array);
12118               mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12119               mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12120               mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12121               mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12122             }
12123           else
12124             {
12125               mem_loc_result->dw_loc_oprnd2.val_class
12126                 = dw_val_class_const_double;
12127               mem_loc_result->dw_loc_oprnd2.v.val_double
12128                 = rtx_to_double_int (rtl);
12129             }
12130         }
12131       break;
12132
12133     case EQ:
12134       mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
12135       break;
12136
12137     case GE:
12138       mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12139       break;
12140
12141     case GT:
12142       mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12143       break;
12144
12145     case LE:
12146       mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12147       break;
12148
12149     case LT:
12150       mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12151       break;
12152
12153     case NE:
12154       mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
12155       break;
12156
12157     case GEU:
12158       mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12159       break;
12160
12161     case GTU:
12162       mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12163       break;
12164
12165     case LEU:
12166       mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12167       break;
12168
12169     case LTU:
12170       mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12171       break;
12172
12173     case UMIN:
12174     case UMAX:
12175       if (GET_MODE_CLASS (mode) != MODE_INT)
12176         break;
12177       /* FALLTHRU */
12178     case SMIN:
12179     case SMAX:
12180       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
12181       break;
12182
12183     case ZERO_EXTRACT:
12184     case SIGN_EXTRACT:
12185       if (CONST_INT_P (XEXP (rtl, 1))
12186           && CONST_INT_P (XEXP (rtl, 2))
12187           && ((unsigned) INTVAL (XEXP (rtl, 1))
12188               + (unsigned) INTVAL (XEXP (rtl, 2))
12189               <= GET_MODE_BITSIZE (mode))
12190           && GET_MODE_CLASS (mode) == MODE_INT
12191           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12192           && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
12193         {
12194           int shift, size;
12195           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12196                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
12197           if (op0 == 0)
12198             break;
12199           if (GET_CODE (rtl) == SIGN_EXTRACT)
12200             op = DW_OP_shra;
12201           else
12202             op = DW_OP_shr;
12203           mem_loc_result = op0;
12204           size = INTVAL (XEXP (rtl, 1));
12205           shift = INTVAL (XEXP (rtl, 2));
12206           if (BITS_BIG_ENDIAN)
12207             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12208                     - shift - size;
12209           if (shift + size != (int) DWARF2_ADDR_SIZE)
12210             {
12211               add_loc_descr (&mem_loc_result,
12212                              int_loc_descriptor (DWARF2_ADDR_SIZE
12213                                                  - shift - size));
12214               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12215             }
12216           if (size != (int) DWARF2_ADDR_SIZE)
12217             {
12218               add_loc_descr (&mem_loc_result,
12219                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
12220               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12221             }
12222         }
12223       break;
12224
12225     case IF_THEN_ELSE:
12226       {
12227         dw_loc_descr_ref op2, bra_node, drop_node;
12228         op0 = mem_loc_descriptor (XEXP (rtl, 0),
12229                                   GET_MODE (XEXP (rtl, 0)) == VOIDmode
12230                                   ? word_mode : GET_MODE (XEXP (rtl, 0)),
12231                                   mem_mode, VAR_INIT_STATUS_INITIALIZED);
12232         op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12233                                   VAR_INIT_STATUS_INITIALIZED);
12234         op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
12235                                   VAR_INIT_STATUS_INITIALIZED);
12236         if (op0 == NULL || op1 == NULL || op2 == NULL)
12237           break;
12238
12239         mem_loc_result = op1;
12240         add_loc_descr (&mem_loc_result, op2);
12241         add_loc_descr (&mem_loc_result, op0);
12242         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12243         add_loc_descr (&mem_loc_result, bra_node);
12244         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
12245         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12246         add_loc_descr (&mem_loc_result, drop_node);
12247         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12248         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12249       }
12250       break;
12251
12252     case FLOAT_EXTEND:
12253     case FLOAT_TRUNCATE:
12254     case FLOAT:
12255     case UNSIGNED_FLOAT:
12256     case FIX:
12257     case UNSIGNED_FIX:
12258       if (!dwarf_strict)
12259         {
12260           dw_die_ref type_die;
12261           dw_loc_descr_ref cvt;
12262
12263           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12264                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
12265           if (op0 == NULL)
12266             break;
12267           if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
12268               && (GET_CODE (rtl) == FLOAT
12269                   || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
12270                      <= DWARF2_ADDR_SIZE))
12271             {
12272               type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12273                                              GET_CODE (rtl) == UNSIGNED_FLOAT);
12274               if (type_die == NULL)
12275                 break;
12276               cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12277               cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12278               cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12279               cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12280               add_loc_descr (&op0, cvt);
12281             }
12282           type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
12283           if (type_die == NULL)
12284             break;
12285           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12286           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12287           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12288           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12289           add_loc_descr (&op0, cvt);
12290           if (GET_MODE_CLASS (mode) == MODE_INT
12291               && (GET_CODE (rtl) == FIX
12292                   || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
12293             {
12294               op0 = convert_descriptor_to_mode (mode, op0);
12295               if (op0 == NULL)
12296                 break;
12297             }
12298           mem_loc_result = op0;
12299         }
12300       break;
12301
12302     case CLZ:
12303     case CTZ:
12304     case FFS:
12305       mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
12306       break;
12307
12308     case POPCOUNT:
12309     case PARITY:
12310       mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
12311       break;
12312
12313     case BSWAP:
12314       mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
12315       break;
12316
12317     case ROTATE:
12318     case ROTATERT:
12319       mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
12320       break;
12321
12322     case COMPARE:
12323     case TRUNCATE:
12324       /* In theory, we could implement the above.  */
12325       /* DWARF cannot represent the unsigned compare operations
12326          natively.  */
12327     case SS_MULT:
12328     case US_MULT:
12329     case SS_DIV:
12330     case US_DIV:
12331     case SS_PLUS:
12332     case US_PLUS:
12333     case SS_MINUS:
12334     case US_MINUS:
12335     case SS_NEG:
12336     case US_NEG:
12337     case SS_ABS:
12338     case SS_ASHIFT:
12339     case US_ASHIFT:
12340     case SS_TRUNCATE:
12341     case US_TRUNCATE:
12342     case UNORDERED:
12343     case ORDERED:
12344     case UNEQ:
12345     case UNGE:
12346     case UNGT:
12347     case UNLE:
12348     case UNLT:
12349     case LTGT:
12350     case FRACT_CONVERT:
12351     case UNSIGNED_FRACT_CONVERT:
12352     case SAT_FRACT:
12353     case UNSIGNED_SAT_FRACT:
12354     case SQRT:
12355     case ASM_OPERANDS:
12356     case VEC_MERGE:
12357     case VEC_SELECT:
12358     case VEC_CONCAT:
12359     case VEC_DUPLICATE:
12360     case UNSPEC:
12361     case HIGH:
12362     case FMA:
12363     case STRICT_LOW_PART:
12364     case CONST_VECTOR:
12365     case CONST_FIXED:
12366     case CLRSB:
12367       /* If delegitimize_address couldn't do anything with the UNSPEC, we
12368          can't express it in the debug info.  This can happen e.g. with some
12369          TLS UNSPECs.  */
12370       break;
12371
12372     case CONST_STRING:
12373       resolve_one_addr (&rtl, NULL);
12374       goto symref;
12375
12376     default:
12377 #ifdef ENABLE_CHECKING
12378       print_rtl (stderr, rtl);
12379       gcc_unreachable ();
12380 #else
12381       break;
12382 #endif
12383     }
12384
12385   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12386     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12387
12388   return mem_loc_result;
12389 }
12390
12391 /* Return a descriptor that describes the concatenation of two locations.
12392    This is typically a complex variable.  */
12393
12394 static dw_loc_descr_ref
12395 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
12396 {
12397   dw_loc_descr_ref cc_loc_result = NULL;
12398   dw_loc_descr_ref x0_ref
12399     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12400   dw_loc_descr_ref x1_ref
12401     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12402
12403   if (x0_ref == 0 || x1_ref == 0)
12404     return 0;
12405
12406   cc_loc_result = x0_ref;
12407   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
12408
12409   add_loc_descr (&cc_loc_result, x1_ref);
12410   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
12411
12412   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12413     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12414
12415   return cc_loc_result;
12416 }
12417
12418 /* Return a descriptor that describes the concatenation of N
12419    locations.  */
12420
12421 static dw_loc_descr_ref
12422 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
12423 {
12424   unsigned int i;
12425   dw_loc_descr_ref cc_loc_result = NULL;
12426   unsigned int n = XVECLEN (concatn, 0);
12427
12428   for (i = 0; i < n; ++i)
12429     {
12430       dw_loc_descr_ref ref;
12431       rtx x = XVECEXP (concatn, 0, i);
12432
12433       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12434       if (ref == NULL)
12435         return NULL;
12436
12437       add_loc_descr (&cc_loc_result, ref);
12438       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
12439     }
12440
12441   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12442     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12443
12444   return cc_loc_result;
12445 }
12446
12447 /* Helper function for loc_descriptor.  Return DW_OP_GNU_implicit_pointer
12448    for DEBUG_IMPLICIT_PTR RTL.  */
12449
12450 static dw_loc_descr_ref
12451 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
12452 {
12453   dw_loc_descr_ref ret;
12454   dw_die_ref ref;
12455
12456   if (dwarf_strict)
12457     return NULL;
12458   gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
12459               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
12460               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
12461   ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
12462   ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
12463   ret->dw_loc_oprnd2.val_class = dw_val_class_const;
12464   if (ref)
12465     {
12466       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12467       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12468       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12469     }
12470   else
12471     {
12472       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12473       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
12474     }
12475   return ret;
12476 }
12477
12478 /* Output a proper Dwarf location descriptor for a variable or parameter
12479    which is either allocated in a register or in a memory location.  For a
12480    register, we just generate an OP_REG and the register number.  For a
12481    memory location we provide a Dwarf postfix expression describing how to
12482    generate the (dynamic) address of the object onto the address stack.
12483
12484    MODE is mode of the decl if this loc_descriptor is going to be used in
12485    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
12486    allowed, VOIDmode otherwise.
12487
12488    If we don't know how to describe it, return 0.  */
12489
12490 static dw_loc_descr_ref
12491 loc_descriptor (rtx rtl, enum machine_mode mode,
12492                 enum var_init_status initialized)
12493 {
12494   dw_loc_descr_ref loc_result = NULL;
12495
12496   switch (GET_CODE (rtl))
12497     {
12498     case SUBREG:
12499       /* The case of a subreg may arise when we have a local (register)
12500          variable or a formal (register) parameter which doesn't quite fill
12501          up an entire register.  For now, just assume that it is
12502          legitimate to make the Dwarf info refer to the whole register which
12503          contains the given subreg.  */
12504       if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
12505         loc_result = loc_descriptor (SUBREG_REG (rtl),
12506                                      GET_MODE (SUBREG_REG (rtl)), initialized);
12507       else
12508         goto do_default;
12509       break;
12510
12511     case REG:
12512       loc_result = reg_loc_descriptor (rtl, initialized);
12513       break;
12514
12515     case MEM:
12516       loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
12517                                        GET_MODE (rtl), initialized);
12518       if (loc_result == NULL)
12519         loc_result = tls_mem_loc_descriptor (rtl);
12520       if (loc_result == NULL)
12521         {
12522           rtx new_rtl = avoid_constant_pool_reference (rtl);
12523           if (new_rtl != rtl)
12524             loc_result = loc_descriptor (new_rtl, mode, initialized);
12525         }
12526       break;
12527
12528     case CONCAT:
12529       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
12530                                           initialized);
12531       break;
12532
12533     case CONCATN:
12534       loc_result = concatn_loc_descriptor (rtl, initialized);
12535       break;
12536
12537     case VAR_LOCATION:
12538       /* Single part.  */
12539       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
12540         {
12541           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
12542           if (GET_CODE (loc) == EXPR_LIST)
12543             loc = XEXP (loc, 0);
12544           loc_result = loc_descriptor (loc, mode, initialized);
12545           break;
12546         }
12547
12548       rtl = XEXP (rtl, 1);
12549       /* FALLTHRU */
12550
12551     case PARALLEL:
12552       {
12553         rtvec par_elems = XVEC (rtl, 0);
12554         int num_elem = GET_NUM_ELEM (par_elems);
12555         enum machine_mode mode;
12556         int i;
12557
12558         /* Create the first one, so we have something to add to.  */
12559         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
12560                                      VOIDmode, initialized);
12561         if (loc_result == NULL)
12562           return NULL;
12563         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
12564         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12565         for (i = 1; i < num_elem; i++)
12566           {
12567             dw_loc_descr_ref temp;
12568
12569             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
12570                                    VOIDmode, initialized);
12571             if (temp == NULL)
12572               return NULL;
12573             add_loc_descr (&loc_result, temp);
12574             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
12575             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12576           }
12577       }
12578       break;
12579
12580     case CONST_INT:
12581       if (mode != VOIDmode && mode != BLKmode)
12582         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
12583                                                     INTVAL (rtl));
12584       break;
12585
12586     case CONST_DOUBLE:
12587       if (mode == VOIDmode)
12588         mode = GET_MODE (rtl);
12589
12590       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12591         {
12592           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12593
12594           /* Note that a CONST_DOUBLE rtx could represent either an integer
12595              or a floating-point constant.  A CONST_DOUBLE is used whenever
12596              the constant requires more than one word in order to be
12597              adequately represented.  We output CONST_DOUBLEs as blocks.  */
12598           loc_result = new_loc_descr (DW_OP_implicit_value,
12599                                       GET_MODE_SIZE (mode), 0);
12600           if (SCALAR_FLOAT_MODE_P (mode))
12601             {
12602               unsigned int length = GET_MODE_SIZE (mode);
12603               unsigned char *array
12604                   = (unsigned char*) ggc_alloc_atomic (length);
12605
12606               insert_float (rtl, array);
12607               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12608               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12609               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12610               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12611             }
12612           else
12613             {
12614               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
12615               loc_result->dw_loc_oprnd2.v.val_double
12616                 = rtx_to_double_int (rtl);
12617             }
12618         }
12619       break;
12620
12621     case CONST_VECTOR:
12622       if (mode == VOIDmode)
12623         mode = GET_MODE (rtl);
12624
12625       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12626         {
12627           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
12628           unsigned int length = CONST_VECTOR_NUNITS (rtl);
12629           unsigned char *array = (unsigned char *)
12630             ggc_alloc_atomic (length * elt_size);
12631           unsigned int i;
12632           unsigned char *p;
12633
12634           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12635           switch (GET_MODE_CLASS (mode))
12636             {
12637             case MODE_VECTOR_INT:
12638               for (i = 0, p = array; i < length; i++, p += elt_size)
12639                 {
12640                   rtx elt = CONST_VECTOR_ELT (rtl, i);
12641                   double_int val = rtx_to_double_int (elt);
12642
12643                   if (elt_size <= sizeof (HOST_WIDE_INT))
12644                     insert_int (double_int_to_shwi (val), elt_size, p);
12645                   else
12646                     {
12647                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
12648                       insert_double (val, p);
12649                     }
12650                 }
12651               break;
12652
12653             case MODE_VECTOR_FLOAT:
12654               for (i = 0, p = array; i < length; i++, p += elt_size)
12655                 {
12656                   rtx elt = CONST_VECTOR_ELT (rtl, i);
12657                   insert_float (elt, p);
12658                 }
12659               break;
12660
12661             default:
12662               gcc_unreachable ();
12663             }
12664
12665           loc_result = new_loc_descr (DW_OP_implicit_value,
12666                                       length * elt_size, 0);
12667           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12668           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
12669           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
12670           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12671         }
12672       break;
12673
12674     case CONST:
12675       if (mode == VOIDmode
12676           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
12677           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
12678           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
12679         {
12680           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
12681           break;
12682         }
12683       /* FALLTHROUGH */
12684     case SYMBOL_REF:
12685       if (!const_ok_for_output (rtl))
12686         break;
12687     case LABEL_REF:
12688       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
12689           && (dwarf_version >= 4 || !dwarf_strict))
12690         {
12691           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
12692           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
12693           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
12694           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
12695           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
12696         }
12697       break;
12698
12699     case DEBUG_IMPLICIT_PTR:
12700       loc_result = implicit_ptr_descriptor (rtl, 0);
12701       break;
12702
12703     case PLUS:
12704       if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
12705           && CONST_INT_P (XEXP (rtl, 1)))
12706         {
12707           loc_result
12708             = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
12709           break;
12710         }
12711       /* FALLTHRU */
12712     do_default:
12713     default:
12714       if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
12715            && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
12716            && dwarf_version >= 4)
12717           || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
12718         {
12719           /* Value expression.  */
12720           loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
12721           if (loc_result)
12722             add_loc_descr (&loc_result,
12723                            new_loc_descr (DW_OP_stack_value, 0, 0));
12724         }
12725       break;
12726     }
12727
12728   return loc_result;
12729 }
12730
12731 /* We need to figure out what section we should use as the base for the
12732    address ranges where a given location is valid.
12733    1. If this particular DECL has a section associated with it, use that.
12734    2. If this function has a section associated with it, use that.
12735    3. Otherwise, use the text section.
12736    XXX: If you split a variable across multiple sections, we won't notice.  */
12737
12738 static const char *
12739 secname_for_decl (const_tree decl)
12740 {
12741   const char *secname;
12742
12743   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
12744     {
12745       tree sectree = DECL_SECTION_NAME (decl);
12746       secname = TREE_STRING_POINTER (sectree);
12747     }
12748   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
12749     {
12750       tree sectree = DECL_SECTION_NAME (current_function_decl);
12751       secname = TREE_STRING_POINTER (sectree);
12752     }
12753   else if (cfun && in_cold_section_p)
12754     secname = crtl->subsections.cold_section_label;
12755   else
12756     secname = text_section_label;
12757
12758   return secname;
12759 }
12760
12761 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
12762
12763 static bool
12764 decl_by_reference_p (tree decl)
12765 {
12766   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
12767            || TREE_CODE (decl) == VAR_DECL)
12768           && DECL_BY_REFERENCE (decl));
12769 }
12770
12771 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12772    for VARLOC.  */
12773
12774 static dw_loc_descr_ref
12775 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
12776                enum var_init_status initialized)
12777 {
12778   int have_address = 0;
12779   dw_loc_descr_ref descr;
12780   enum machine_mode mode;
12781
12782   if (want_address != 2)
12783     {
12784       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
12785       /* Single part.  */
12786       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12787         {
12788           varloc = PAT_VAR_LOCATION_LOC (varloc);
12789           if (GET_CODE (varloc) == EXPR_LIST)
12790             varloc = XEXP (varloc, 0);
12791           mode = GET_MODE (varloc);
12792           if (MEM_P (varloc))
12793             {
12794               rtx addr = XEXP (varloc, 0);
12795               descr = mem_loc_descriptor (addr, get_address_mode (varloc),
12796                                           mode, initialized);
12797               if (descr)
12798                 have_address = 1;
12799               else
12800                 {
12801                   rtx x = avoid_constant_pool_reference (varloc);
12802                   if (x != varloc)
12803                     descr = mem_loc_descriptor (x, mode, VOIDmode,
12804                                                 initialized);
12805                 }
12806             }
12807           else
12808             descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
12809         }
12810       else
12811         return 0;
12812     }
12813   else
12814     {
12815       if (GET_CODE (varloc) == VAR_LOCATION)
12816         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
12817       else
12818         mode = DECL_MODE (loc);
12819       descr = loc_descriptor (varloc, mode, initialized);
12820       have_address = 1;
12821     }
12822
12823   if (!descr)
12824     return 0;
12825
12826   if (want_address == 2 && !have_address
12827       && (dwarf_version >= 4 || !dwarf_strict))
12828     {
12829       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
12830         {
12831           expansion_failed (loc, NULL_RTX,
12832                             "DWARF address size mismatch");
12833           return 0;
12834         }
12835       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
12836       have_address = 1;
12837     }
12838   /* Show if we can't fill the request for an address.  */
12839   if (want_address && !have_address)
12840     {
12841       expansion_failed (loc, NULL_RTX,
12842                         "Want address and only have value");
12843       return 0;
12844     }
12845
12846   /* If we've got an address and don't want one, dereference.  */
12847   if (!want_address && have_address)
12848     {
12849       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
12850       enum dwarf_location_atom op;
12851
12852       if (size > DWARF2_ADDR_SIZE || size == -1)
12853         {
12854           expansion_failed (loc, NULL_RTX,
12855                             "DWARF address size mismatch");
12856           return 0;
12857         }
12858       else if (size == DWARF2_ADDR_SIZE)
12859         op = DW_OP_deref;
12860       else
12861         op = DW_OP_deref_size;
12862
12863       add_loc_descr (&descr, new_loc_descr (op, size, 0));
12864     }
12865
12866   return descr;
12867 }
12868
12869 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
12870    if it is not possible.  */
12871
12872 static dw_loc_descr_ref
12873 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
12874 {
12875   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
12876     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
12877   else if (dwarf_version >= 3 || !dwarf_strict)
12878     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
12879   else
12880     return NULL;
12881 }
12882
12883 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12884    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
12885
12886 static dw_loc_descr_ref
12887 dw_sra_loc_expr (tree decl, rtx loc)
12888 {
12889   rtx p;
12890   unsigned int padsize = 0;
12891   dw_loc_descr_ref descr, *descr_tail;
12892   unsigned HOST_WIDE_INT decl_size;
12893   rtx varloc;
12894   enum var_init_status initialized;
12895
12896   if (DECL_SIZE (decl) == NULL
12897       || !host_integerp (DECL_SIZE (decl), 1))
12898     return NULL;
12899
12900   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
12901   descr = NULL;
12902   descr_tail = &descr;
12903
12904   for (p = loc; p; p = XEXP (p, 1))
12905     {
12906       unsigned int bitsize = decl_piece_bitsize (p);
12907       rtx loc_note = *decl_piece_varloc_ptr (p);
12908       dw_loc_descr_ref cur_descr;
12909       dw_loc_descr_ref *tail, last = NULL;
12910       unsigned int opsize = 0;
12911
12912       if (loc_note == NULL_RTX
12913           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
12914         {
12915           padsize += bitsize;
12916           continue;
12917         }
12918       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
12919       varloc = NOTE_VAR_LOCATION (loc_note);
12920       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
12921       if (cur_descr == NULL)
12922         {
12923           padsize += bitsize;
12924           continue;
12925         }
12926
12927       /* Check that cur_descr either doesn't use
12928          DW_OP_*piece operations, or their sum is equal
12929          to bitsize.  Otherwise we can't embed it.  */
12930       for (tail = &cur_descr; *tail != NULL;
12931            tail = &(*tail)->dw_loc_next)
12932         if ((*tail)->dw_loc_opc == DW_OP_piece)
12933           {
12934             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
12935                       * BITS_PER_UNIT;
12936             last = *tail;
12937           }
12938         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
12939           {
12940             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
12941             last = *tail;
12942           }
12943
12944       if (last != NULL && opsize != bitsize)
12945         {
12946           padsize += bitsize;
12947           continue;
12948         }
12949
12950       /* If there is a hole, add DW_OP_*piece after empty DWARF
12951          expression, which means that those bits are optimized out.  */
12952       if (padsize)
12953         {
12954           if (padsize > decl_size)
12955             return NULL;
12956           decl_size -= padsize;
12957           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
12958           if (*descr_tail == NULL)
12959             return NULL;
12960           descr_tail = &(*descr_tail)->dw_loc_next;
12961           padsize = 0;
12962         }
12963       *descr_tail = cur_descr;
12964       descr_tail = tail;
12965       if (bitsize > decl_size)
12966         return NULL;
12967       decl_size -= bitsize;
12968       if (last == NULL)
12969         {
12970           HOST_WIDE_INT offset = 0;
12971           if (GET_CODE (varloc) == VAR_LOCATION
12972               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12973             {
12974               varloc = PAT_VAR_LOCATION_LOC (varloc);
12975               if (GET_CODE (varloc) == EXPR_LIST)
12976                 varloc = XEXP (varloc, 0);
12977             }
12978           do 
12979             {
12980               if (GET_CODE (varloc) == CONST
12981                   || GET_CODE (varloc) == SIGN_EXTEND
12982                   || GET_CODE (varloc) == ZERO_EXTEND)
12983                 varloc = XEXP (varloc, 0);
12984               else if (GET_CODE (varloc) == SUBREG)
12985                 varloc = SUBREG_REG (varloc);
12986               else
12987                 break;
12988             }
12989           while (1);
12990           /* DW_OP_bit_size offset should be zero for register
12991              or implicit location descriptions and empty location
12992              descriptions, but for memory addresses needs big endian
12993              adjustment.  */
12994           if (MEM_P (varloc))
12995             {
12996               unsigned HOST_WIDE_INT memsize
12997                 = MEM_SIZE (varloc) * BITS_PER_UNIT;
12998               if (memsize != bitsize)
12999                 {
13000                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
13001                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
13002                     return NULL;
13003                   if (memsize < bitsize)
13004                     return NULL;
13005                   if (BITS_BIG_ENDIAN)
13006                     offset = memsize - bitsize;
13007                 }
13008             }
13009
13010           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
13011           if (*descr_tail == NULL)
13012             return NULL;
13013           descr_tail = &(*descr_tail)->dw_loc_next;
13014         }
13015     }
13016
13017   /* If there were any non-empty expressions, add padding till the end of
13018      the decl.  */
13019   if (descr != NULL && decl_size != 0)
13020     {
13021       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
13022       if (*descr_tail == NULL)
13023         return NULL;
13024     }
13025   return descr;
13026 }
13027
13028 /* Return the dwarf representation of the location list LOC_LIST of
13029    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
13030    function.  */
13031
13032 static dw_loc_list_ref
13033 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
13034 {
13035   const char *endname, *secname;
13036   rtx varloc;
13037   enum var_init_status initialized;
13038   struct var_loc_node *node;
13039   dw_loc_descr_ref descr;
13040   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13041   dw_loc_list_ref list = NULL;
13042   dw_loc_list_ref *listp = &list;
13043
13044   /* Now that we know what section we are using for a base,
13045      actually construct the list of locations.
13046      The first location information is what is passed to the
13047      function that creates the location list, and the remaining
13048      locations just get added on to that list.
13049      Note that we only know the start address for a location
13050      (IE location changes), so to build the range, we use
13051      the range [current location start, next location start].
13052      This means we have to special case the last node, and generate
13053      a range of [last location start, end of function label].  */
13054
13055   secname = secname_for_decl (decl);
13056
13057   for (node = loc_list->first; node; node = node->next)
13058     if (GET_CODE (node->loc) == EXPR_LIST
13059         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
13060       {
13061         if (GET_CODE (node->loc) == EXPR_LIST)
13062           {
13063             /* This requires DW_OP_{,bit_}piece, which is not usable
13064                inside DWARF expressions.  */
13065             if (want_address != 2)
13066               continue;
13067             descr = dw_sra_loc_expr (decl, node->loc);
13068             if (descr == NULL)
13069               continue;
13070           }
13071         else
13072           {
13073             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13074             varloc = NOTE_VAR_LOCATION (node->loc);
13075             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13076           }
13077         if (descr)
13078           {
13079             bool range_across_switch = false;
13080             /* If section switch happens in between node->label
13081                and node->next->label (or end of function) and
13082                we can't emit it as a single entry list,
13083                emit two ranges, first one ending at the end
13084                of first partition and second one starting at the
13085                beginning of second partition.  */
13086             if (node == loc_list->last_before_switch
13087                 && (node != loc_list->first || loc_list->first->next)
13088                 && current_function_decl)
13089               {
13090                 endname = cfun->fde->dw_fde_end;
13091                 range_across_switch = true;
13092               }
13093             /* The variable has a location between NODE->LABEL and
13094                NODE->NEXT->LABEL.  */
13095             else if (node->next)
13096               endname = node->next->label;
13097             /* If the variable has a location at the last label
13098                it keeps its location until the end of function.  */
13099             else if (!current_function_decl)
13100               endname = text_end_label;
13101             else
13102               {
13103                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
13104                                              current_function_funcdef_no);
13105                 endname = ggc_strdup (label_id);
13106               }
13107
13108             *listp = new_loc_list (descr, node->label, endname, secname);
13109             if (TREE_CODE (decl) == PARM_DECL
13110                 && node == loc_list->first
13111                 && GET_CODE (node->loc) == NOTE
13112                 && strcmp (node->label, endname) == 0)
13113               (*listp)->force = true;
13114             listp = &(*listp)->dw_loc_next;
13115
13116             if (range_across_switch)
13117               {
13118                 if (GET_CODE (node->loc) == EXPR_LIST)
13119                   descr = dw_sra_loc_expr (decl, node->loc);
13120                 else
13121                   {
13122                     initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13123                     varloc = NOTE_VAR_LOCATION (node->loc);
13124                     descr = dw_loc_list_1 (decl, varloc, want_address,
13125                                            initialized);
13126                   }
13127                 gcc_assert (descr);
13128                 /* The variable has a location between NODE->LABEL and
13129                    NODE->NEXT->LABEL.  */
13130                 if (node->next)
13131                   endname = node->next->label;
13132                 else
13133                   endname = cfun->fde->dw_fde_second_end;
13134                 *listp = new_loc_list (descr,
13135                                        cfun->fde->dw_fde_second_begin,
13136                                        endname, secname);
13137                 listp = &(*listp)->dw_loc_next;
13138               }
13139           }
13140       }
13141
13142   /* Try to avoid the overhead of a location list emitting a location
13143      expression instead, but only if we didn't have more than one
13144      location entry in the first place.  If some entries were not
13145      representable, we don't want to pretend a single entry that was
13146      applies to the entire scope in which the variable is
13147      available.  */
13148   if (list && loc_list->first->next)
13149     gen_llsym (list);
13150
13151   return list;
13152 }
13153
13154 /* Return if the loc_list has only single element and thus can be represented
13155    as location description.   */
13156
13157 static bool
13158 single_element_loc_list_p (dw_loc_list_ref list)
13159 {
13160   gcc_assert (!list->dw_loc_next || list->ll_symbol);
13161   return !list->ll_symbol;
13162 }
13163
13164 /* To each location in list LIST add loc descr REF.  */
13165
13166 static void
13167 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
13168 {
13169   dw_loc_descr_ref copy;
13170   add_loc_descr (&list->expr, ref);
13171   list = list->dw_loc_next;
13172   while (list)
13173     {
13174       copy = ggc_alloc_dw_loc_descr_node ();
13175       memcpy (copy, ref, sizeof (dw_loc_descr_node));
13176       add_loc_descr (&list->expr, copy);
13177       while (copy->dw_loc_next)
13178         {
13179           dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node ();
13180           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
13181           copy->dw_loc_next = new_copy;
13182           copy = new_copy;
13183         }
13184       list = list->dw_loc_next;
13185     }
13186 }
13187
13188 /* Given two lists RET and LIST
13189    produce location list that is result of adding expression in LIST
13190    to expression in RET on each possition in program.
13191    Might be destructive on both RET and LIST.
13192
13193    TODO: We handle only simple cases of RET or LIST having at most one
13194    element. General case would inolve sorting the lists in program order
13195    and merging them that will need some additional work.
13196    Adding that will improve quality of debug info especially for SRA-ed
13197    structures.  */
13198
13199 static void
13200 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
13201 {
13202   if (!list)
13203     return;
13204   if (!*ret)
13205     {
13206       *ret = list;
13207       return;
13208     }
13209   if (!list->dw_loc_next)
13210     {
13211       add_loc_descr_to_each (*ret, list->expr);
13212       return;
13213     }
13214   if (!(*ret)->dw_loc_next)
13215     {
13216       add_loc_descr_to_each (list, (*ret)->expr);
13217       *ret = list;
13218       return;
13219     }
13220   expansion_failed (NULL_TREE, NULL_RTX,
13221                     "Don't know how to merge two non-trivial"
13222                     " location lists.\n");
13223   *ret = NULL;
13224   return;
13225 }
13226
13227 /* LOC is constant expression.  Try a luck, look it up in constant
13228    pool and return its loc_descr of its address.  */
13229
13230 static dw_loc_descr_ref
13231 cst_pool_loc_descr (tree loc)
13232 {
13233   /* Get an RTL for this, if something has been emitted.  */
13234   rtx rtl = lookup_constant_def (loc);
13235
13236   if (!rtl || !MEM_P (rtl))
13237     {
13238       gcc_assert (!rtl);
13239       return 0;
13240     }
13241   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
13242
13243   /* TODO: We might get more coverage if we was actually delaying expansion
13244      of all expressions till end of compilation when constant pools are fully
13245      populated.  */
13246   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
13247     {
13248       expansion_failed (loc, NULL_RTX,
13249                         "CST value in contant pool but not marked.");
13250       return 0;
13251     }
13252   return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13253                              GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
13254 }
13255
13256 /* Return dw_loc_list representing address of addr_expr LOC
13257    by looking for innder INDIRECT_REF expression and turing it
13258    into simple arithmetics.  */
13259
13260 static dw_loc_list_ref
13261 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
13262 {
13263   tree obj, offset;
13264   HOST_WIDE_INT bitsize, bitpos, bytepos;
13265   enum machine_mode mode;
13266   int volatilep;
13267   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13268   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13269
13270   obj = get_inner_reference (TREE_OPERAND (loc, 0),
13271                              &bitsize, &bitpos, &offset, &mode,
13272                              &unsignedp, &volatilep, false);
13273   STRIP_NOPS (obj);
13274   if (bitpos % BITS_PER_UNIT)
13275     {
13276       expansion_failed (loc, NULL_RTX, "bitfield access");
13277       return 0;
13278     }
13279   if (!INDIRECT_REF_P (obj))
13280     {
13281       expansion_failed (obj,
13282                         NULL_RTX, "no indirect ref in inner refrence");
13283       return 0;
13284     }
13285   if (!offset && !bitpos)
13286     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
13287   else if (toplev
13288            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
13289            && (dwarf_version >= 4 || !dwarf_strict))
13290     {
13291       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
13292       if (!list_ret)
13293         return 0;
13294       if (offset)
13295         {
13296           /* Variable offset.  */
13297           list_ret1 = loc_list_from_tree (offset, 0);
13298           if (list_ret1 == 0)
13299             return 0;
13300           add_loc_list (&list_ret, list_ret1);
13301           if (!list_ret)
13302             return 0;
13303           add_loc_descr_to_each (list_ret,
13304                                  new_loc_descr (DW_OP_plus, 0, 0));
13305         }
13306       bytepos = bitpos / BITS_PER_UNIT;
13307       if (bytepos > 0)
13308         add_loc_descr_to_each (list_ret,
13309                                new_loc_descr (DW_OP_plus_uconst,
13310                                               bytepos, 0));
13311       else if (bytepos < 0)
13312         loc_list_plus_const (list_ret, bytepos);
13313       add_loc_descr_to_each (list_ret,
13314                              new_loc_descr (DW_OP_stack_value, 0, 0));
13315     }
13316   return list_ret;
13317 }
13318
13319
13320 /* Generate Dwarf location list representing LOC.
13321    If WANT_ADDRESS is false, expression computing LOC will be computed
13322    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
13323    if WANT_ADDRESS is 2, expression computing address useable in location
13324      will be returned (i.e. DW_OP_reg can be used
13325      to refer to register values).  */
13326
13327 static dw_loc_list_ref
13328 loc_list_from_tree (tree loc, int want_address)
13329 {
13330   dw_loc_descr_ref ret = NULL, ret1 = NULL;
13331   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13332   int have_address = 0;
13333   enum dwarf_location_atom op;
13334
13335   /* ??? Most of the time we do not take proper care for sign/zero
13336      extending the values properly.  Hopefully this won't be a real
13337      problem...  */
13338
13339   switch (TREE_CODE (loc))
13340     {
13341     case ERROR_MARK:
13342       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
13343       return 0;
13344
13345     case PLACEHOLDER_EXPR:
13346       /* This case involves extracting fields from an object to determine the
13347          position of other fields.  We don't try to encode this here.  The
13348          only user of this is Ada, which encodes the needed information using
13349          the names of types.  */
13350       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
13351       return 0;
13352
13353     case CALL_EXPR:
13354       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
13355       /* There are no opcodes for these operations.  */
13356       return 0;
13357
13358     case PREINCREMENT_EXPR:
13359     case PREDECREMENT_EXPR:
13360     case POSTINCREMENT_EXPR:
13361     case POSTDECREMENT_EXPR:
13362       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
13363       /* There are no opcodes for these operations.  */
13364       return 0;
13365
13366     case ADDR_EXPR:
13367       /* If we already want an address, see if there is INDIRECT_REF inside
13368          e.g. for &this->field.  */
13369       if (want_address)
13370         {
13371           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
13372                        (loc, want_address == 2);
13373           if (list_ret)
13374             have_address = 1;
13375           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
13376                    && (ret = cst_pool_loc_descr (loc)))
13377             have_address = 1;
13378         }
13379         /* Otherwise, process the argument and look for the address.  */
13380       if (!list_ret && !ret)
13381         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
13382       else
13383         {
13384           if (want_address)
13385             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
13386           return NULL;
13387         }
13388       break;
13389
13390     case VAR_DECL:
13391       if (DECL_THREAD_LOCAL_P (loc))
13392         {
13393           rtx rtl;
13394           enum dwarf_location_atom first_op;
13395           enum dwarf_location_atom second_op;
13396           bool dtprel = false;
13397
13398           if (targetm.have_tls)
13399             {
13400               /* If this is not defined, we have no way to emit the
13401                  data.  */
13402               if (!targetm.asm_out.output_dwarf_dtprel)
13403                 return 0;
13404
13405                /* The way DW_OP_GNU_push_tls_address is specified, we
13406                   can only look up addresses of objects in the current
13407                   module.  We used DW_OP_addr as first op, but that's
13408                   wrong, because DW_OP_addr is relocated by the debug
13409                   info consumer, while DW_OP_GNU_push_tls_address
13410                   operand shouldn't be.  */
13411               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
13412                 return 0;
13413               first_op = DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u;
13414               dtprel = true;
13415               second_op = DW_OP_GNU_push_tls_address;
13416             }
13417           else
13418             {
13419               if (!targetm.emutls.debug_form_tls_address
13420                   || !(dwarf_version >= 3 || !dwarf_strict))
13421                 return 0;
13422               /* We stuffed the control variable into the DECL_VALUE_EXPR
13423                  to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
13424                  no longer appear in gimple code.  We used the control
13425                  variable in specific so that we could pick it up here.  */
13426               loc = DECL_VALUE_EXPR (loc);
13427               first_op = DW_OP_addr;
13428               second_op = DW_OP_form_tls_address;
13429             }
13430
13431           rtl = rtl_for_decl_location (loc);
13432           if (rtl == NULL_RTX)
13433             return 0;
13434
13435           if (!MEM_P (rtl))
13436             return 0;
13437           rtl = XEXP (rtl, 0);
13438           if (! CONSTANT_P (rtl))
13439             return 0;
13440
13441           ret = new_loc_descr (first_op, 0, 0);
13442           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13443           ret->dw_loc_oprnd1.v.val_addr = rtl;
13444           ret->dtprel = dtprel;
13445
13446           ret1 = new_loc_descr (second_op, 0, 0);
13447           add_loc_descr (&ret, ret1);
13448
13449           have_address = 1;
13450           break;
13451         }
13452       /* FALLTHRU */
13453
13454     case PARM_DECL:
13455     case RESULT_DECL:
13456       if (DECL_HAS_VALUE_EXPR_P (loc))
13457         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
13458                                    want_address);
13459       /* FALLTHRU */
13460
13461     case FUNCTION_DECL:
13462       {
13463         rtx rtl;
13464         var_loc_list *loc_list = lookup_decl_loc (loc);
13465
13466         if (loc_list && loc_list->first)
13467           {
13468             list_ret = dw_loc_list (loc_list, loc, want_address);
13469             have_address = want_address != 0;
13470             break;
13471           }
13472         rtl = rtl_for_decl_location (loc);
13473         if (rtl == NULL_RTX)
13474           {
13475             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
13476             return 0;
13477           }
13478         else if (CONST_INT_P (rtl))
13479           {
13480             HOST_WIDE_INT val = INTVAL (rtl);
13481             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13482               val &= GET_MODE_MASK (DECL_MODE (loc));
13483             ret = int_loc_descriptor (val);
13484           }
13485         else if (GET_CODE (rtl) == CONST_STRING)
13486           {
13487             expansion_failed (loc, NULL_RTX, "CONST_STRING");
13488             return 0;
13489           }
13490         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
13491           {
13492             ret = new_loc_descr (DW_OP_addr, 0, 0);
13493             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13494             ret->dw_loc_oprnd1.v.val_addr = rtl;
13495           }
13496         else
13497           {
13498             enum machine_mode mode, mem_mode;
13499
13500             /* Certain constructs can only be represented at top-level.  */
13501             if (want_address == 2)
13502               {
13503                 ret = loc_descriptor (rtl, VOIDmode,
13504                                       VAR_INIT_STATUS_INITIALIZED);
13505                 have_address = 1;
13506               }
13507             else
13508               {
13509                 mode = GET_MODE (rtl);
13510                 mem_mode = VOIDmode;
13511                 if (MEM_P (rtl))
13512                   {
13513                     mem_mode = mode;
13514                     mode = get_address_mode (rtl);
13515                     rtl = XEXP (rtl, 0);
13516                     have_address = 1;
13517                   }
13518                 ret = mem_loc_descriptor (rtl, mode, mem_mode,
13519                                           VAR_INIT_STATUS_INITIALIZED);
13520               }
13521             if (!ret)
13522               expansion_failed (loc, rtl,
13523                                 "failed to produce loc descriptor for rtl");
13524           }
13525       }
13526       break;
13527
13528     case MEM_REF:
13529       /* ??? FIXME.  */
13530       if (!integer_zerop (TREE_OPERAND (loc, 1)))
13531         return 0;
13532       /* Fallthru.  */
13533     case INDIRECT_REF:
13534       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13535       have_address = 1;
13536       break;
13537
13538     case COMPOUND_EXPR:
13539       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
13540
13541     CASE_CONVERT:
13542     case VIEW_CONVERT_EXPR:
13543     case SAVE_EXPR:
13544     case MODIFY_EXPR:
13545       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
13546
13547     case COMPONENT_REF:
13548     case BIT_FIELD_REF:
13549     case ARRAY_REF:
13550     case ARRAY_RANGE_REF:
13551     case REALPART_EXPR:
13552     case IMAGPART_EXPR:
13553       {
13554         tree obj, offset;
13555         HOST_WIDE_INT bitsize, bitpos, bytepos;
13556         enum machine_mode mode;
13557         int volatilep;
13558         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13559
13560         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
13561                                    &unsignedp, &volatilep, false);
13562
13563         gcc_assert (obj != loc);
13564
13565         list_ret = loc_list_from_tree (obj,
13566                                        want_address == 2
13567                                        && !bitpos && !offset ? 2 : 1);
13568         /* TODO: We can extract value of the small expression via shifting even
13569            for nonzero bitpos.  */
13570         if (list_ret == 0)
13571           return 0;
13572         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
13573           {
13574             expansion_failed (loc, NULL_RTX,
13575                               "bitfield access");
13576             return 0;
13577           }
13578
13579         if (offset != NULL_TREE)
13580           {
13581             /* Variable offset.  */
13582             list_ret1 = loc_list_from_tree (offset, 0);
13583             if (list_ret1 == 0)
13584               return 0;
13585             add_loc_list (&list_ret, list_ret1);
13586             if (!list_ret)
13587               return 0;
13588             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
13589           }
13590
13591         bytepos = bitpos / BITS_PER_UNIT;
13592         if (bytepos > 0)
13593           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
13594         else if (bytepos < 0)
13595           loc_list_plus_const (list_ret, bytepos);
13596
13597         have_address = 1;
13598         break;
13599       }
13600
13601     case INTEGER_CST:
13602       if ((want_address || !host_integerp (loc, 0))
13603           && (ret = cst_pool_loc_descr (loc)))
13604         have_address = 1;
13605       else if (want_address == 2
13606                && host_integerp (loc, 0)
13607                && (ret = address_of_int_loc_descriptor
13608                            (int_size_in_bytes (TREE_TYPE (loc)),
13609                             tree_low_cst (loc, 0))))
13610         have_address = 1;
13611       else if (host_integerp (loc, 0))
13612         ret = int_loc_descriptor (tree_low_cst (loc, 0));
13613       else
13614         {
13615           expansion_failed (loc, NULL_RTX,
13616                             "Integer operand is not host integer");
13617           return 0;
13618         }
13619       break;
13620
13621     case CONSTRUCTOR:
13622     case REAL_CST:
13623     case STRING_CST:
13624     case COMPLEX_CST:
13625       if ((ret = cst_pool_loc_descr (loc)))
13626         have_address = 1;
13627       else
13628       /* We can construct small constants here using int_loc_descriptor.  */
13629         expansion_failed (loc, NULL_RTX,
13630                           "constructor or constant not in constant pool");
13631       break;
13632
13633     case TRUTH_AND_EXPR:
13634     case TRUTH_ANDIF_EXPR:
13635     case BIT_AND_EXPR:
13636       op = DW_OP_and;
13637       goto do_binop;
13638
13639     case TRUTH_XOR_EXPR:
13640     case BIT_XOR_EXPR:
13641       op = DW_OP_xor;
13642       goto do_binop;
13643
13644     case TRUTH_OR_EXPR:
13645     case TRUTH_ORIF_EXPR:
13646     case BIT_IOR_EXPR:
13647       op = DW_OP_or;
13648       goto do_binop;
13649
13650     case FLOOR_DIV_EXPR:
13651     case CEIL_DIV_EXPR:
13652     case ROUND_DIV_EXPR:
13653     case TRUNC_DIV_EXPR:
13654       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13655         return 0;
13656       op = DW_OP_div;
13657       goto do_binop;
13658
13659     case MINUS_EXPR:
13660       op = DW_OP_minus;
13661       goto do_binop;
13662
13663     case FLOOR_MOD_EXPR:
13664     case CEIL_MOD_EXPR:
13665     case ROUND_MOD_EXPR:
13666     case TRUNC_MOD_EXPR:
13667       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13668         {
13669           op = DW_OP_mod;
13670           goto do_binop;
13671         }
13672       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13673       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13674       if (list_ret == 0 || list_ret1 == 0)
13675         return 0;
13676
13677       add_loc_list (&list_ret, list_ret1);
13678       if (list_ret == 0)
13679         return 0;
13680       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13681       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13682       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
13683       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
13684       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
13685       break;
13686
13687     case MULT_EXPR:
13688       op = DW_OP_mul;
13689       goto do_binop;
13690
13691     case LSHIFT_EXPR:
13692       op = DW_OP_shl;
13693       goto do_binop;
13694
13695     case RSHIFT_EXPR:
13696       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
13697       goto do_binop;
13698
13699     case POINTER_PLUS_EXPR:
13700     case PLUS_EXPR:
13701       if (host_integerp (TREE_OPERAND (loc, 1), 0))
13702         {
13703           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13704           if (list_ret == 0)
13705             return 0;
13706
13707           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
13708           break;
13709         }
13710
13711       op = DW_OP_plus;
13712       goto do_binop;
13713
13714     case LE_EXPR:
13715       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13716         return 0;
13717
13718       op = DW_OP_le;
13719       goto do_binop;
13720
13721     case GE_EXPR:
13722       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13723         return 0;
13724
13725       op = DW_OP_ge;
13726       goto do_binop;
13727
13728     case LT_EXPR:
13729       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13730         return 0;
13731
13732       op = DW_OP_lt;
13733       goto do_binop;
13734
13735     case GT_EXPR:
13736       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13737         return 0;
13738
13739       op = DW_OP_gt;
13740       goto do_binop;
13741
13742     case EQ_EXPR:
13743       op = DW_OP_eq;
13744       goto do_binop;
13745
13746     case NE_EXPR:
13747       op = DW_OP_ne;
13748       goto do_binop;
13749
13750     do_binop:
13751       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13752       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13753       if (list_ret == 0 || list_ret1 == 0)
13754         return 0;
13755
13756       add_loc_list (&list_ret, list_ret1);
13757       if (list_ret == 0)
13758         return 0;
13759       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13760       break;
13761
13762     case TRUTH_NOT_EXPR:
13763     case BIT_NOT_EXPR:
13764       op = DW_OP_not;
13765       goto do_unop;
13766
13767     case ABS_EXPR:
13768       op = DW_OP_abs;
13769       goto do_unop;
13770
13771     case NEGATE_EXPR:
13772       op = DW_OP_neg;
13773       goto do_unop;
13774
13775     do_unop:
13776       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13777       if (list_ret == 0)
13778         return 0;
13779
13780       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13781       break;
13782
13783     case MIN_EXPR:
13784     case MAX_EXPR:
13785       {
13786         const enum tree_code code =
13787           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
13788
13789         loc = build3 (COND_EXPR, TREE_TYPE (loc),
13790                       build2 (code, integer_type_node,
13791                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
13792                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
13793       }
13794
13795       /* ... fall through ...  */
13796
13797     case COND_EXPR:
13798       {
13799         dw_loc_descr_ref lhs
13800           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
13801         dw_loc_list_ref rhs
13802           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
13803         dw_loc_descr_ref bra_node, jump_node, tmp;
13804
13805         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13806         if (list_ret == 0 || lhs == 0 || rhs == 0)
13807           return 0;
13808
13809         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13810         add_loc_descr_to_each (list_ret, bra_node);
13811
13812         add_loc_list (&list_ret, rhs);
13813         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
13814         add_loc_descr_to_each (list_ret, jump_node);
13815
13816         add_loc_descr_to_each (list_ret, lhs);
13817         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13818         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
13819
13820         /* ??? Need a node to point the skip at.  Use a nop.  */
13821         tmp = new_loc_descr (DW_OP_nop, 0, 0);
13822         add_loc_descr_to_each (list_ret, tmp);
13823         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13824         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
13825       }
13826       break;
13827
13828     case FIX_TRUNC_EXPR:
13829       return 0;
13830
13831     default:
13832       /* Leave front-end specific codes as simply unknown.  This comes
13833          up, for instance, with the C STMT_EXPR.  */
13834       if ((unsigned int) TREE_CODE (loc)
13835           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
13836         {
13837           expansion_failed (loc, NULL_RTX,
13838                             "language specific tree node");
13839           return 0;
13840         }
13841
13842 #ifdef ENABLE_CHECKING
13843       /* Otherwise this is a generic code; we should just lists all of
13844          these explicitly.  We forgot one.  */
13845       gcc_unreachable ();
13846 #else
13847       /* In a release build, we want to degrade gracefully: better to
13848          generate incomplete debugging information than to crash.  */
13849       return NULL;
13850 #endif
13851     }
13852
13853   if (!ret && !list_ret)
13854     return 0;
13855
13856   if (want_address == 2 && !have_address
13857       && (dwarf_version >= 4 || !dwarf_strict))
13858     {
13859       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13860         {
13861           expansion_failed (loc, NULL_RTX,
13862                             "DWARF address size mismatch");
13863           return 0;
13864         }
13865       if (ret)
13866         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
13867       else
13868         add_loc_descr_to_each (list_ret,
13869                                new_loc_descr (DW_OP_stack_value, 0, 0));
13870       have_address = 1;
13871     }
13872   /* Show if we can't fill the request for an address.  */
13873   if (want_address && !have_address)
13874     {
13875       expansion_failed (loc, NULL_RTX,
13876                         "Want address and only have value");
13877       return 0;
13878     }
13879
13880   gcc_assert (!ret || !list_ret);
13881
13882   /* If we've got an address and don't want one, dereference.  */
13883   if (!want_address && have_address)
13884     {
13885       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13886
13887       if (size > DWARF2_ADDR_SIZE || size == -1)
13888         {
13889           expansion_failed (loc, NULL_RTX,
13890                             "DWARF address size mismatch");
13891           return 0;
13892         }
13893       else if (size == DWARF2_ADDR_SIZE)
13894         op = DW_OP_deref;
13895       else
13896         op = DW_OP_deref_size;
13897
13898       if (ret)
13899         add_loc_descr (&ret, new_loc_descr (op, size, 0));
13900       else
13901         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
13902     }
13903   if (ret)
13904     list_ret = new_loc_list (ret, NULL, NULL, NULL);
13905
13906   return list_ret;
13907 }
13908
13909 /* Same as above but return only single location expression.  */
13910 static dw_loc_descr_ref
13911 loc_descriptor_from_tree (tree loc, int want_address)
13912 {
13913   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
13914   if (!ret)
13915     return NULL;
13916   if (ret->dw_loc_next)
13917     {
13918       expansion_failed (loc, NULL_RTX,
13919                         "Location list where only loc descriptor needed");
13920       return NULL;
13921     }
13922   return ret->expr;
13923 }
13924
13925 /* Given a value, round it up to the lowest multiple of `boundary'
13926    which is not less than the value itself.  */
13927
13928 static inline HOST_WIDE_INT
13929 ceiling (HOST_WIDE_INT value, unsigned int boundary)
13930 {
13931   return (((value + boundary - 1) / boundary) * boundary);
13932 }
13933
13934 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
13935    pointer to the declared type for the relevant field variable, or return
13936    `integer_type_node' if the given node turns out to be an
13937    ERROR_MARK node.  */
13938
13939 static inline tree
13940 field_type (const_tree decl)
13941 {
13942   tree type;
13943
13944   if (TREE_CODE (decl) == ERROR_MARK)
13945     return integer_type_node;
13946
13947   type = DECL_BIT_FIELD_TYPE (decl);
13948   if (type == NULL_TREE)
13949     type = TREE_TYPE (decl);
13950
13951   return type;
13952 }
13953
13954 /* Given a pointer to a tree node, return the alignment in bits for
13955    it, or else return BITS_PER_WORD if the node actually turns out to
13956    be an ERROR_MARK node.  */
13957
13958 static inline unsigned
13959 simple_type_align_in_bits (const_tree type)
13960 {
13961   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
13962 }
13963
13964 static inline unsigned
13965 simple_decl_align_in_bits (const_tree decl)
13966 {
13967   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
13968 }
13969
13970 /* Return the result of rounding T up to ALIGN.  */
13971
13972 static inline double_int
13973 round_up_to_align (double_int t, unsigned int align)
13974 {
13975   double_int alignd = uhwi_to_double_int (align);
13976   t = double_int_add (t, alignd);
13977   t = double_int_add (t, double_int_minus_one);
13978   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
13979   t = double_int_mul (t, alignd);
13980   return t;
13981 }
13982
13983 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
13984    lowest addressed byte of the "containing object" for the given FIELD_DECL,
13985    or return 0 if we are unable to determine what that offset is, either
13986    because the argument turns out to be a pointer to an ERROR_MARK node, or
13987    because the offset is actually variable.  (We can't handle the latter case
13988    just yet).  */
13989
13990 static HOST_WIDE_INT
13991 field_byte_offset (const_tree decl)
13992 {
13993   double_int object_offset_in_bits;
13994   double_int object_offset_in_bytes;
13995   double_int bitpos_int;
13996
13997   if (TREE_CODE (decl) == ERROR_MARK)
13998     return 0;
13999
14000   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14001
14002   /* We cannot yet cope with fields whose positions are variable, so
14003      for now, when we see such things, we simply return 0.  Someday, we may
14004      be able to handle such cases, but it will be damn difficult.  */
14005   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
14006     return 0;
14007
14008   bitpos_int = tree_to_double_int (bit_position (decl));
14009
14010 #ifdef PCC_BITFIELD_TYPE_MATTERS
14011   if (PCC_BITFIELD_TYPE_MATTERS)
14012     {
14013       tree type;
14014       tree field_size_tree;
14015       double_int deepest_bitpos;
14016       double_int field_size_in_bits;
14017       unsigned int type_align_in_bits;
14018       unsigned int decl_align_in_bits;
14019       double_int type_size_in_bits;
14020
14021       type = field_type (decl);
14022       type_size_in_bits = double_int_type_size_in_bits (type);
14023       type_align_in_bits = simple_type_align_in_bits (type);
14024
14025       field_size_tree = DECL_SIZE (decl);
14026
14027       /* The size could be unspecified if there was an error, or for
14028          a flexible array member.  */
14029       if (!field_size_tree)
14030         field_size_tree = bitsize_zero_node;
14031
14032       /* If the size of the field is not constant, use the type size.  */
14033       if (TREE_CODE (field_size_tree) == INTEGER_CST)
14034         field_size_in_bits = tree_to_double_int (field_size_tree);
14035       else
14036         field_size_in_bits = type_size_in_bits;
14037
14038       decl_align_in_bits = simple_decl_align_in_bits (decl);
14039
14040       /* The GCC front-end doesn't make any attempt to keep track of the
14041          starting bit offset (relative to the start of the containing
14042          structure type) of the hypothetical "containing object" for a
14043          bit-field.  Thus, when computing the byte offset value for the
14044          start of the "containing object" of a bit-field, we must deduce
14045          this information on our own. This can be rather tricky to do in
14046          some cases.  For example, handling the following structure type
14047          definition when compiling for an i386/i486 target (which only
14048          aligns long long's to 32-bit boundaries) can be very tricky:
14049
14050          struct S { int field1; long long field2:31; };
14051
14052          Fortunately, there is a simple rule-of-thumb which can be used
14053          in such cases.  When compiling for an i386/i486, GCC will
14054          allocate 8 bytes for the structure shown above.  It decides to
14055          do this based upon one simple rule for bit-field allocation.
14056          GCC allocates each "containing object" for each bit-field at
14057          the first (i.e. lowest addressed) legitimate alignment boundary
14058          (based upon the required minimum alignment for the declared
14059          type of the field) which it can possibly use, subject to the
14060          condition that there is still enough available space remaining
14061          in the containing object (when allocated at the selected point)
14062          to fully accommodate all of the bits of the bit-field itself.
14063
14064          This simple rule makes it obvious why GCC allocates 8 bytes for
14065          each object of the structure type shown above.  When looking
14066          for a place to allocate the "containing object" for `field2',
14067          the compiler simply tries to allocate a 64-bit "containing
14068          object" at each successive 32-bit boundary (starting at zero)
14069          until it finds a place to allocate that 64- bit field such that
14070          at least 31 contiguous (and previously unallocated) bits remain
14071          within that selected 64 bit field.  (As it turns out, for the
14072          example above, the compiler finds it is OK to allocate the
14073          "containing object" 64-bit field at bit-offset zero within the
14074          structure type.)
14075
14076          Here we attempt to work backwards from the limited set of facts
14077          we're given, and we try to deduce from those facts, where GCC
14078          must have believed that the containing object started (within
14079          the structure type). The value we deduce is then used (by the
14080          callers of this routine) to generate DW_AT_location and
14081          DW_AT_bit_offset attributes for fields (both bit-fields and, in
14082          the case of DW_AT_location, regular fields as well).  */
14083
14084       /* Figure out the bit-distance from the start of the structure to
14085          the "deepest" bit of the bit-field.  */
14086       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
14087
14088       /* This is the tricky part.  Use some fancy footwork to deduce
14089          where the lowest addressed bit of the containing object must
14090          be.  */
14091       object_offset_in_bits
14092         = double_int_sub (deepest_bitpos, type_size_in_bits);
14093
14094       /* Round up to type_align by default.  This works best for
14095          bitfields.  */
14096       object_offset_in_bits
14097         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14098
14099       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
14100         {
14101           object_offset_in_bits
14102             = double_int_sub (deepest_bitpos, type_size_in_bits);
14103
14104           /* Round up to decl_align instead.  */
14105           object_offset_in_bits
14106             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14107         }
14108     }
14109   else
14110 #endif /* PCC_BITFIELD_TYPE_MATTERS */
14111     object_offset_in_bits = bitpos_int;
14112
14113   object_offset_in_bytes
14114     = double_int_div (object_offset_in_bits,
14115                       uhwi_to_double_int (BITS_PER_UNIT), true,
14116                       TRUNC_DIV_EXPR);
14117   return double_int_to_shwi (object_offset_in_bytes);
14118 }
14119 \f
14120 /* The following routines define various Dwarf attributes and any data
14121    associated with them.  */
14122
14123 /* Add a location description attribute value to a DIE.
14124
14125    This emits location attributes suitable for whole variables and
14126    whole parameters.  Note that the location attributes for struct fields are
14127    generated by the routine `data_member_location_attribute' below.  */
14128
14129 static inline void
14130 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14131                              dw_loc_list_ref descr)
14132 {
14133   if (descr == 0)
14134     return;
14135   if (single_element_loc_list_p (descr))
14136     add_AT_loc (die, attr_kind, descr->expr);
14137   else
14138     add_AT_loc_list (die, attr_kind, descr);
14139 }
14140
14141 /* Add DW_AT_accessibility attribute to DIE if needed.  */
14142
14143 static void
14144 add_accessibility_attribute (dw_die_ref die, tree decl)
14145 {
14146   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
14147      children, otherwise the default is DW_ACCESS_public.  In DWARF2
14148      the default has always been DW_ACCESS_public.  */
14149   if (TREE_PROTECTED (decl))
14150     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
14151   else if (TREE_PRIVATE (decl))
14152     {
14153       if (dwarf_version == 2
14154           || die->die_parent == NULL
14155           || die->die_parent->die_tag != DW_TAG_class_type)
14156         add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
14157     }
14158   else if (dwarf_version > 2
14159            && die->die_parent
14160            && die->die_parent->die_tag == DW_TAG_class_type)
14161     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
14162 }
14163
14164 /* Attach the specialized form of location attribute used for data members of
14165    struct and union types.  In the special case of a FIELD_DECL node which
14166    represents a bit-field, the "offset" part of this special location
14167    descriptor must indicate the distance in bytes from the lowest-addressed
14168    byte of the containing struct or union type to the lowest-addressed byte of
14169    the "containing object" for the bit-field.  (See the `field_byte_offset'
14170    function above).
14171
14172    For any given bit-field, the "containing object" is a hypothetical object
14173    (of some integral or enum type) within which the given bit-field lives.  The
14174    type of this hypothetical "containing object" is always the same as the
14175    declared type of the individual bit-field itself (for GCC anyway... the
14176    DWARF spec doesn't actually mandate this).  Note that it is the size (in
14177    bytes) of the hypothetical "containing object" which will be given in the
14178    DW_AT_byte_size attribute for this bit-field.  (See the
14179    `byte_size_attribute' function below.)  It is also used when calculating the
14180    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
14181    function below.)  */
14182
14183 static void
14184 add_data_member_location_attribute (dw_die_ref die, tree decl)
14185 {
14186   HOST_WIDE_INT offset;
14187   dw_loc_descr_ref loc_descr = 0;
14188
14189   if (TREE_CODE (decl) == TREE_BINFO)
14190     {
14191       /* We're working on the TAG_inheritance for a base class.  */
14192       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
14193         {
14194           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
14195              aren't at a fixed offset from all (sub)objects of the same
14196              type.  We need to extract the appropriate offset from our
14197              vtable.  The following dwarf expression means
14198
14199                BaseAddr = ObAddr + *((*ObAddr) - Offset)
14200
14201              This is specific to the V3 ABI, of course.  */
14202
14203           dw_loc_descr_ref tmp;
14204
14205           /* Make a copy of the object address.  */
14206           tmp = new_loc_descr (DW_OP_dup, 0, 0);
14207           add_loc_descr (&loc_descr, tmp);
14208
14209           /* Extract the vtable address.  */
14210           tmp = new_loc_descr (DW_OP_deref, 0, 0);
14211           add_loc_descr (&loc_descr, tmp);
14212
14213           /* Calculate the address of the offset.  */
14214           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
14215           gcc_assert (offset < 0);
14216
14217           tmp = int_loc_descriptor (-offset);
14218           add_loc_descr (&loc_descr, tmp);
14219           tmp = new_loc_descr (DW_OP_minus, 0, 0);
14220           add_loc_descr (&loc_descr, tmp);
14221
14222           /* Extract the offset.  */
14223           tmp = new_loc_descr (DW_OP_deref, 0, 0);
14224           add_loc_descr (&loc_descr, tmp);
14225
14226           /* Add it to the object address.  */
14227           tmp = new_loc_descr (DW_OP_plus, 0, 0);
14228           add_loc_descr (&loc_descr, tmp);
14229         }
14230       else
14231         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
14232     }
14233   else
14234     offset = field_byte_offset (decl);
14235
14236   if (! loc_descr)
14237     {
14238       if (dwarf_version > 2)
14239         {
14240           /* Don't need to output a location expression, just the constant. */
14241           if (offset < 0)
14242             add_AT_int (die, DW_AT_data_member_location, offset);
14243           else
14244             add_AT_unsigned (die, DW_AT_data_member_location, offset);
14245           return;
14246         }
14247       else
14248         {
14249           enum dwarf_location_atom op;
14250
14251           /* The DWARF2 standard says that we should assume that the structure
14252              address is already on the stack, so we can specify a structure
14253              field address by using DW_OP_plus_uconst.  */
14254
14255 #ifdef MIPS_DEBUGGING_INFO
14256           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
14257              operator correctly.  It works only if we leave the offset on the
14258              stack.  */
14259           op = DW_OP_constu;
14260 #else
14261           op = DW_OP_plus_uconst;
14262 #endif
14263
14264           loc_descr = new_loc_descr (op, offset, 0);
14265         }
14266     }
14267
14268   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
14269 }
14270
14271 /* Writes integer values to dw_vec_const array.  */
14272
14273 static void
14274 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
14275 {
14276   while (size != 0)
14277     {
14278       *dest++ = val & 0xff;
14279       val >>= 8;
14280       --size;
14281     }
14282 }
14283
14284 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
14285
14286 static HOST_WIDE_INT
14287 extract_int (const unsigned char *src, unsigned int size)
14288 {
14289   HOST_WIDE_INT val = 0;
14290
14291   src += size;
14292   while (size != 0)
14293     {
14294       val <<= 8;
14295       val |= *--src & 0xff;
14296       --size;
14297     }
14298   return val;
14299 }
14300
14301 /* Writes double_int values to dw_vec_const array.  */
14302
14303 static void
14304 insert_double (double_int val, unsigned char *dest)
14305 {
14306   unsigned char *p0 = dest;
14307   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
14308
14309   if (WORDS_BIG_ENDIAN)
14310     {
14311       p0 = p1;
14312       p1 = dest;
14313     }
14314
14315   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
14316   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
14317 }
14318
14319 /* Writes floating point values to dw_vec_const array.  */
14320
14321 static void
14322 insert_float (const_rtx rtl, unsigned char *array)
14323 {
14324   REAL_VALUE_TYPE rv;
14325   long val[4];
14326   int i;
14327
14328   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
14329   real_to_target (val, &rv, GET_MODE (rtl));
14330
14331   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
14332   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
14333     {
14334       insert_int (val[i], 4, array);
14335       array += 4;
14336     }
14337 }
14338
14339 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
14340    does not have a "location" either in memory or in a register.  These
14341    things can arise in GNU C when a constant is passed as an actual parameter
14342    to an inlined function.  They can also arise in C++ where declared
14343    constants do not necessarily get memory "homes".  */
14344
14345 static bool
14346 add_const_value_attribute (dw_die_ref die, rtx rtl)
14347 {
14348   switch (GET_CODE (rtl))
14349     {
14350     case CONST_INT:
14351       {
14352         HOST_WIDE_INT val = INTVAL (rtl);
14353
14354         if (val < 0)
14355           add_AT_int (die, DW_AT_const_value, val);
14356         else
14357           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
14358       }
14359       return true;
14360
14361     case CONST_DOUBLE:
14362       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
14363          floating-point constant.  A CONST_DOUBLE is used whenever the
14364          constant requires more than one word in order to be adequately
14365          represented.  */
14366       {
14367         enum machine_mode mode = GET_MODE (rtl);
14368
14369         if (SCALAR_FLOAT_MODE_P (mode))
14370           {
14371             unsigned int length = GET_MODE_SIZE (mode);
14372             unsigned char *array = (unsigned char *) ggc_alloc_atomic (length);
14373
14374             insert_float (rtl, array);
14375             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
14376           }
14377         else
14378           add_AT_double (die, DW_AT_const_value,
14379                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
14380       }
14381       return true;
14382
14383     case CONST_VECTOR:
14384       {
14385         enum machine_mode mode = GET_MODE (rtl);
14386         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
14387         unsigned int length = CONST_VECTOR_NUNITS (rtl);
14388         unsigned char *array = (unsigned char *) ggc_alloc_atomic
14389           (length * elt_size);
14390         unsigned int i;
14391         unsigned char *p;
14392
14393         switch (GET_MODE_CLASS (mode))
14394           {
14395           case MODE_VECTOR_INT:
14396             for (i = 0, p = array; i < length; i++, p += elt_size)
14397               {
14398                 rtx elt = CONST_VECTOR_ELT (rtl, i);
14399                 double_int val = rtx_to_double_int (elt);
14400
14401                 if (elt_size <= sizeof (HOST_WIDE_INT))
14402                   insert_int (double_int_to_shwi (val), elt_size, p);
14403                 else
14404                   {
14405                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14406                     insert_double (val, p);
14407                   }
14408               }
14409             break;
14410
14411           case MODE_VECTOR_FLOAT:
14412             for (i = 0, p = array; i < length; i++, p += elt_size)
14413               {
14414                 rtx elt = CONST_VECTOR_ELT (rtl, i);
14415                 insert_float (elt, p);
14416               }
14417             break;
14418
14419           default:
14420             gcc_unreachable ();
14421           }
14422
14423         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
14424       }
14425       return true;
14426
14427     case CONST_STRING:
14428       if (dwarf_version >= 4 || !dwarf_strict)
14429         {
14430           dw_loc_descr_ref loc_result;
14431           resolve_one_addr (&rtl, NULL);
14432         rtl_addr:
14433           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14434           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14435           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14436           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14437           add_AT_loc (die, DW_AT_location, loc_result);
14438           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14439           return true;
14440         }
14441       return false;
14442
14443     case CONST:
14444       if (CONSTANT_P (XEXP (rtl, 0)))
14445         return add_const_value_attribute (die, XEXP (rtl, 0));
14446       /* FALLTHROUGH */
14447     case SYMBOL_REF:
14448       if (!const_ok_for_output (rtl))
14449         return false;
14450     case LABEL_REF:
14451       if (dwarf_version >= 4 || !dwarf_strict)
14452         goto rtl_addr;
14453       return false;
14454
14455     case PLUS:
14456       /* In cases where an inlined instance of an inline function is passed
14457          the address of an `auto' variable (which is local to the caller) we
14458          can get a situation where the DECL_RTL of the artificial local
14459          variable (for the inlining) which acts as a stand-in for the
14460          corresponding formal parameter (of the inline function) will look
14461          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
14462          exactly a compile-time constant expression, but it isn't the address
14463          of the (artificial) local variable either.  Rather, it represents the
14464          *value* which the artificial local variable always has during its
14465          lifetime.  We currently have no way to represent such quasi-constant
14466          values in Dwarf, so for now we just punt and generate nothing.  */
14467       return false;
14468
14469     case HIGH:
14470     case CONST_FIXED:
14471       return false;
14472
14473     case MEM:
14474       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
14475           && MEM_READONLY_P (rtl)
14476           && GET_MODE (rtl) == BLKmode)
14477         {
14478           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
14479           return true;
14480         }
14481       return false;
14482
14483     default:
14484       /* No other kinds of rtx should be possible here.  */
14485       gcc_unreachable ();
14486     }
14487   return false;
14488 }
14489
14490 /* Determine whether the evaluation of EXPR references any variables
14491    or functions which aren't otherwise used (and therefore may not be
14492    output).  */
14493 static tree
14494 reference_to_unused (tree * tp, int * walk_subtrees,
14495                      void * data ATTRIBUTE_UNUSED)
14496 {
14497   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
14498     *walk_subtrees = 0;
14499
14500   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
14501       && ! TREE_ASM_WRITTEN (*tp))
14502     return *tp;
14503   /* ???  The C++ FE emits debug information for using decls, so
14504      putting gcc_unreachable here falls over.  See PR31899.  For now
14505      be conservative.  */
14506   else if (!cgraph_global_info_ready
14507            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
14508     return *tp;
14509   else if (TREE_CODE (*tp) == VAR_DECL)
14510     {
14511       struct varpool_node *node = varpool_get_node (*tp);
14512       if (!node || !node->needed)
14513         return *tp;
14514     }
14515   else if (TREE_CODE (*tp) == FUNCTION_DECL
14516            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
14517     {
14518       /* The call graph machinery must have finished analyzing,
14519          optimizing and gimplifying the CU by now.
14520          So if *TP has no call graph node associated
14521          to it, it means *TP will not be emitted.  */
14522       if (!cgraph_get_node (*tp))
14523         return *tp;
14524     }
14525   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
14526     return *tp;
14527
14528   return NULL_TREE;
14529 }
14530
14531 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
14532    for use in a later add_const_value_attribute call.  */
14533
14534 static rtx
14535 rtl_for_decl_init (tree init, tree type)
14536 {
14537   rtx rtl = NULL_RTX;
14538
14539   STRIP_NOPS (init);
14540
14541   /* If a variable is initialized with a string constant without embedded
14542      zeros, build CONST_STRING.  */
14543   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
14544     {
14545       tree enttype = TREE_TYPE (type);
14546       tree domain = TYPE_DOMAIN (type);
14547       enum machine_mode mode = TYPE_MODE (enttype);
14548
14549       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
14550           && domain
14551           && integer_zerop (TYPE_MIN_VALUE (domain))
14552           && compare_tree_int (TYPE_MAX_VALUE (domain),
14553                                TREE_STRING_LENGTH (init) - 1) == 0
14554           && ((size_t) TREE_STRING_LENGTH (init)
14555               == strlen (TREE_STRING_POINTER (init)) + 1))
14556         {
14557           rtl = gen_rtx_CONST_STRING (VOIDmode,
14558                                       ggc_strdup (TREE_STRING_POINTER (init)));
14559           rtl = gen_rtx_MEM (BLKmode, rtl);
14560           MEM_READONLY_P (rtl) = 1;
14561         }
14562     }
14563   /* Other aggregates, and complex values, could be represented using
14564      CONCAT: FIXME!  */
14565   else if (AGGREGATE_TYPE_P (type)
14566            || (TREE_CODE (init) == VIEW_CONVERT_EXPR
14567                && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
14568            || TREE_CODE (type) == COMPLEX_TYPE)
14569     ;
14570   /* Vectors only work if their mode is supported by the target.
14571      FIXME: generic vectors ought to work too.  */
14572   else if (TREE_CODE (type) == VECTOR_TYPE
14573            && !VECTOR_MODE_P (TYPE_MODE (type)))
14574     ;
14575   /* If the initializer is something that we know will expand into an
14576      immediate RTL constant, expand it now.  We must be careful not to
14577      reference variables which won't be output.  */
14578   else if (initializer_constant_valid_p (init, type)
14579            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
14580     {
14581       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
14582          possible.  */
14583       if (TREE_CODE (type) == VECTOR_TYPE)
14584         switch (TREE_CODE (init))
14585           {
14586           case VECTOR_CST:
14587             break;
14588           case CONSTRUCTOR:
14589             if (TREE_CONSTANT (init))
14590               {
14591                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
14592                 bool constant_p = true;
14593                 tree value;
14594                 unsigned HOST_WIDE_INT ix;
14595
14596                 /* Even when ctor is constant, it might contain non-*_CST
14597                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
14598                    belong into VECTOR_CST nodes.  */
14599                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
14600                   if (!CONSTANT_CLASS_P (value))
14601                     {
14602                       constant_p = false;
14603                       break;
14604                     }
14605
14606                 if (constant_p)
14607                   {
14608                     init = build_vector_from_ctor (type, elts);
14609                     break;
14610                   }
14611               }
14612             /* FALLTHRU */
14613
14614           default:
14615             return NULL;
14616           }
14617
14618       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
14619
14620       /* If expand_expr returns a MEM, it wasn't immediate.  */
14621       gcc_assert (!rtl || !MEM_P (rtl));
14622     }
14623
14624   return rtl;
14625 }
14626
14627 /* Generate RTL for the variable DECL to represent its location.  */
14628
14629 static rtx
14630 rtl_for_decl_location (tree decl)
14631 {
14632   rtx rtl;
14633
14634   /* Here we have to decide where we are going to say the parameter "lives"
14635      (as far as the debugger is concerned).  We only have a couple of
14636      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
14637
14638      DECL_RTL normally indicates where the parameter lives during most of the
14639      activation of the function.  If optimization is enabled however, this
14640      could be either NULL or else a pseudo-reg.  Both of those cases indicate
14641      that the parameter doesn't really live anywhere (as far as the code
14642      generation parts of GCC are concerned) during most of the function's
14643      activation.  That will happen (for example) if the parameter is never
14644      referenced within the function.
14645
14646      We could just generate a location descriptor here for all non-NULL
14647      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
14648      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
14649      where DECL_RTL is NULL or is a pseudo-reg.
14650
14651      Note however that we can only get away with using DECL_INCOMING_RTL as
14652      a backup substitute for DECL_RTL in certain limited cases.  In cases
14653      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
14654      we can be sure that the parameter was passed using the same type as it is
14655      declared to have within the function, and that its DECL_INCOMING_RTL
14656      points us to a place where a value of that type is passed.
14657
14658      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
14659      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
14660      because in these cases DECL_INCOMING_RTL points us to a value of some
14661      type which is *different* from the type of the parameter itself.  Thus,
14662      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
14663      such cases, the debugger would end up (for example) trying to fetch a
14664      `float' from a place which actually contains the first part of a
14665      `double'.  That would lead to really incorrect and confusing
14666      output at debug-time.
14667
14668      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
14669      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
14670      are a couple of exceptions however.  On little-endian machines we can
14671      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
14672      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
14673      an integral type that is smaller than TREE_TYPE (decl). These cases arise
14674      when (on a little-endian machine) a non-prototyped function has a
14675      parameter declared to be of type `short' or `char'.  In such cases,
14676      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
14677      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
14678      passed `int' value.  If the debugger then uses that address to fetch
14679      a `short' or a `char' (on a little-endian machine) the result will be
14680      the correct data, so we allow for such exceptional cases below.
14681
14682      Note that our goal here is to describe the place where the given formal
14683      parameter lives during most of the function's activation (i.e. between the
14684      end of the prologue and the start of the epilogue).  We'll do that as best
14685      as we can. Note however that if the given formal parameter is modified
14686      sometime during the execution of the function, then a stack backtrace (at
14687      debug-time) will show the function as having been called with the *new*
14688      value rather than the value which was originally passed in.  This happens
14689      rarely enough that it is not a major problem, but it *is* a problem, and
14690      I'd like to fix it.
14691
14692      A future version of dwarf2out.c may generate two additional attributes for
14693      any given DW_TAG_formal_parameter DIE which will describe the "passed
14694      type" and the "passed location" for the given formal parameter in addition
14695      to the attributes we now generate to indicate the "declared type" and the
14696      "active location" for each parameter.  This additional set of attributes
14697      could be used by debuggers for stack backtraces. Separately, note that
14698      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
14699      This happens (for example) for inlined-instances of inline function formal
14700      parameters which are never referenced.  This really shouldn't be
14701      happening.  All PARM_DECL nodes should get valid non-NULL
14702      DECL_INCOMING_RTL values.  FIXME.  */
14703
14704   /* Use DECL_RTL as the "location" unless we find something better.  */
14705   rtl = DECL_RTL_IF_SET (decl);
14706
14707   /* When generating abstract instances, ignore everything except
14708      constants, symbols living in memory, and symbols living in
14709      fixed registers.  */
14710   if (! reload_completed)
14711     {
14712       if (rtl
14713           && (CONSTANT_P (rtl)
14714               || (MEM_P (rtl)
14715                   && CONSTANT_P (XEXP (rtl, 0)))
14716               || (REG_P (rtl)
14717                   && TREE_CODE (decl) == VAR_DECL
14718                   && TREE_STATIC (decl))))
14719         {
14720           rtl = targetm.delegitimize_address (rtl);
14721           return rtl;
14722         }
14723       rtl = NULL_RTX;
14724     }
14725   else if (TREE_CODE (decl) == PARM_DECL)
14726     {
14727       if (rtl == NULL_RTX
14728           || is_pseudo_reg (rtl)
14729           || (MEM_P (rtl)
14730               && is_pseudo_reg (XEXP (rtl, 0))
14731               && DECL_INCOMING_RTL (decl)
14732               && MEM_P (DECL_INCOMING_RTL (decl))
14733               && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
14734         {
14735           tree declared_type = TREE_TYPE (decl);
14736           tree passed_type = DECL_ARG_TYPE (decl);
14737           enum machine_mode dmode = TYPE_MODE (declared_type);
14738           enum machine_mode pmode = TYPE_MODE (passed_type);
14739
14740           /* This decl represents a formal parameter which was optimized out.
14741              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
14742              all cases where (rtl == NULL_RTX) just below.  */
14743           if (dmode == pmode)
14744             rtl = DECL_INCOMING_RTL (decl);
14745           else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
14746                    && SCALAR_INT_MODE_P (dmode)
14747                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
14748                    && DECL_INCOMING_RTL (decl))
14749             {
14750               rtx inc = DECL_INCOMING_RTL (decl);
14751               if (REG_P (inc))
14752                 rtl = inc;
14753               else if (MEM_P (inc))
14754                 {
14755                   if (BYTES_BIG_ENDIAN)
14756                     rtl = adjust_address_nv (inc, dmode,
14757                                              GET_MODE_SIZE (pmode)
14758                                              - GET_MODE_SIZE (dmode));
14759                   else
14760                     rtl = inc;
14761                 }
14762             }
14763         }
14764
14765       /* If the parm was passed in registers, but lives on the stack, then
14766          make a big endian correction if the mode of the type of the
14767          parameter is not the same as the mode of the rtl.  */
14768       /* ??? This is the same series of checks that are made in dbxout.c before
14769          we reach the big endian correction code there.  It isn't clear if all
14770          of these checks are necessary here, but keeping them all is the safe
14771          thing to do.  */
14772       else if (MEM_P (rtl)
14773                && XEXP (rtl, 0) != const0_rtx
14774                && ! CONSTANT_P (XEXP (rtl, 0))
14775                /* Not passed in memory.  */
14776                && !MEM_P (DECL_INCOMING_RTL (decl))
14777                /* Not passed by invisible reference.  */
14778                && (!REG_P (XEXP (rtl, 0))
14779                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
14780                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
14781 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
14782                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
14783 #endif
14784                      )
14785                /* Big endian correction check.  */
14786                && BYTES_BIG_ENDIAN
14787                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
14788                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
14789                    < UNITS_PER_WORD))
14790         {
14791           int offset = (UNITS_PER_WORD
14792                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
14793
14794           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14795                              plus_constant (XEXP (rtl, 0), offset));
14796         }
14797     }
14798   else if (TREE_CODE (decl) == VAR_DECL
14799            && rtl
14800            && MEM_P (rtl)
14801            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
14802            && BYTES_BIG_ENDIAN)
14803     {
14804       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
14805       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
14806
14807       /* If a variable is declared "register" yet is smaller than
14808          a register, then if we store the variable to memory, it
14809          looks like we're storing a register-sized value, when in
14810          fact we are not.  We need to adjust the offset of the
14811          storage location to reflect the actual value's bytes,
14812          else gdb will not be able to display it.  */
14813       if (rsize > dsize)
14814         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14815                            plus_constant (XEXP (rtl, 0), rsize-dsize));
14816     }
14817
14818   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
14819      and will have been substituted directly into all expressions that use it.
14820      C does not have such a concept, but C++ and other languages do.  */
14821   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
14822     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
14823
14824   if (rtl)
14825     rtl = targetm.delegitimize_address (rtl);
14826
14827   /* If we don't look past the constant pool, we risk emitting a
14828      reference to a constant pool entry that isn't referenced from
14829      code, and thus is not emitted.  */
14830   if (rtl)
14831     rtl = avoid_constant_pool_reference (rtl);
14832
14833   /* Try harder to get a rtl.  If this symbol ends up not being emitted
14834      in the current CU, resolve_addr will remove the expression referencing
14835      it.  */
14836   if (rtl == NULL_RTX
14837       && TREE_CODE (decl) == VAR_DECL
14838       && !DECL_EXTERNAL (decl)
14839       && TREE_STATIC (decl)
14840       && DECL_NAME (decl)
14841       && !DECL_HARD_REGISTER (decl)
14842       && DECL_MODE (decl) != VOIDmode)
14843     {
14844       rtl = make_decl_rtl_for_debug (decl);
14845       if (!MEM_P (rtl)
14846           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
14847           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
14848         rtl = NULL_RTX;
14849     }
14850
14851   return rtl;
14852 }
14853
14854 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
14855    returned.  If so, the decl for the COMMON block is returned, and the
14856    value is the offset into the common block for the symbol.  */
14857
14858 static tree
14859 fortran_common (tree decl, HOST_WIDE_INT *value)
14860 {
14861   tree val_expr, cvar;
14862   enum machine_mode mode;
14863   HOST_WIDE_INT bitsize, bitpos;
14864   tree offset;
14865   int volatilep = 0, unsignedp = 0;
14866
14867   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
14868      it does not have a value (the offset into the common area), or if it
14869      is thread local (as opposed to global) then it isn't common, and shouldn't
14870      be handled as such.  */
14871   if (TREE_CODE (decl) != VAR_DECL
14872       || !TREE_STATIC (decl)
14873       || !DECL_HAS_VALUE_EXPR_P (decl)
14874       || !is_fortran ())
14875     return NULL_TREE;
14876
14877   val_expr = DECL_VALUE_EXPR (decl);
14878   if (TREE_CODE (val_expr) != COMPONENT_REF)
14879     return NULL_TREE;
14880
14881   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
14882                               &mode, &unsignedp, &volatilep, true);
14883
14884   if (cvar == NULL_TREE
14885       || TREE_CODE (cvar) != VAR_DECL
14886       || DECL_ARTIFICIAL (cvar)
14887       || !TREE_PUBLIC (cvar))
14888     return NULL_TREE;
14889
14890   *value = 0;
14891   if (offset != NULL)
14892     {
14893       if (!host_integerp (offset, 0))
14894         return NULL_TREE;
14895       *value = tree_low_cst (offset, 0);
14896     }
14897   if (bitpos != 0)
14898     *value += bitpos / BITS_PER_UNIT;
14899
14900   return cvar;
14901 }
14902
14903 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
14904    data attribute for a variable or a parameter.  We generate the
14905    DW_AT_const_value attribute only in those cases where the given variable
14906    or parameter does not have a true "location" either in memory or in a
14907    register.  This can happen (for example) when a constant is passed as an
14908    actual argument in a call to an inline function.  (It's possible that
14909    these things can crop up in other ways also.)  Note that one type of
14910    constant value which can be passed into an inlined function is a constant
14911    pointer.  This can happen for example if an actual argument in an inlined
14912    function call evaluates to a compile-time constant address.
14913
14914    CACHE_P is true if it is worth caching the location list for DECL,
14915    so that future calls can reuse it rather than regenerate it from scratch.
14916    This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
14917    since we will need to refer to them each time the function is inlined.  */
14918
14919 static bool
14920 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
14921                                        enum dwarf_attribute attr)
14922 {
14923   rtx rtl;
14924   dw_loc_list_ref list;
14925   var_loc_list *loc_list;
14926   cached_dw_loc_list *cache;
14927   void **slot;
14928
14929   if (TREE_CODE (decl) == ERROR_MARK)
14930     return false;
14931
14932   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
14933               || TREE_CODE (decl) == RESULT_DECL);
14934
14935   /* Try to get some constant RTL for this decl, and use that as the value of
14936      the location.  */
14937
14938   rtl = rtl_for_decl_location (decl);
14939   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14940       && add_const_value_attribute (die, rtl))
14941     return true;
14942
14943   /* See if we have single element location list that is equivalent to
14944      a constant value.  That way we are better to use add_const_value_attribute
14945      rather than expanding constant value equivalent.  */
14946   loc_list = lookup_decl_loc (decl);
14947   if (loc_list
14948       && loc_list->first
14949       && loc_list->first->next == NULL
14950       && NOTE_P (loc_list->first->loc)
14951       && NOTE_VAR_LOCATION (loc_list->first->loc)
14952       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
14953     {
14954       struct var_loc_node *node;
14955
14956       node = loc_list->first;
14957       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
14958       if (GET_CODE (rtl) == EXPR_LIST)
14959         rtl = XEXP (rtl, 0);
14960       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14961           && add_const_value_attribute (die, rtl))
14962          return true;
14963     }
14964   /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
14965      list several times.  See if we've already cached the contents.  */
14966   list = NULL;
14967   if (loc_list == NULL || cached_dw_loc_list_table == NULL)
14968     cache_p = false;
14969   if (cache_p)
14970     {
14971       cache = (cached_dw_loc_list *)
14972         htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
14973       if (cache)
14974         list = cache->loc_list;
14975     }
14976   if (list == NULL)
14977     {
14978       list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
14979       /* It is usually worth caching this result if the decl is from
14980          BLOCK_NONLOCALIZED_VARS and if the list has at least two elements.  */
14981       if (cache_p && list && list->dw_loc_next)
14982         {
14983           slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
14984                                            DECL_UID (decl), INSERT);
14985           cache = ggc_alloc_cleared_cached_dw_loc_list ();
14986           cache->decl_id = DECL_UID (decl);
14987           cache->loc_list = list;
14988           *slot = cache;
14989         }
14990     }
14991   if (list)
14992     {
14993       add_AT_location_description (die, attr, list);
14994       return true;
14995     }
14996   /* None of that worked, so it must not really have a location;
14997      try adding a constant value attribute from the DECL_INITIAL.  */
14998   return tree_add_const_value_attribute_for_decl (die, decl);
14999 }
15000
15001 /* Add VARIABLE and DIE into deferred locations list.  */
15002
15003 static void
15004 defer_location (tree variable, dw_die_ref die)
15005 {
15006   deferred_locations entry;
15007   entry.variable = variable;
15008   entry.die = die;
15009   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15010 }
15011
15012 /* Helper function for tree_add_const_value_attribute.  Natively encode
15013    initializer INIT into an array.  Return true if successful.  */
15014
15015 static bool
15016 native_encode_initializer (tree init, unsigned char *array, int size)
15017 {
15018   tree type;
15019
15020   if (init == NULL_TREE)
15021     return false;
15022
15023   STRIP_NOPS (init);
15024   switch (TREE_CODE (init))
15025     {
15026     case STRING_CST:
15027       type = TREE_TYPE (init);
15028       if (TREE_CODE (type) == ARRAY_TYPE)
15029         {
15030           tree enttype = TREE_TYPE (type);
15031           enum machine_mode mode = TYPE_MODE (enttype);
15032
15033           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15034             return false;
15035           if (int_size_in_bytes (type) != size)
15036             return false;
15037           if (size > TREE_STRING_LENGTH (init))
15038             {
15039               memcpy (array, TREE_STRING_POINTER (init),
15040                       TREE_STRING_LENGTH (init));
15041               memset (array + TREE_STRING_LENGTH (init),
15042                       '\0', size - TREE_STRING_LENGTH (init));
15043             }
15044           else
15045             memcpy (array, TREE_STRING_POINTER (init), size);
15046           return true;
15047         }
15048       return false;
15049     case CONSTRUCTOR:
15050       type = TREE_TYPE (init);
15051       if (int_size_in_bytes (type) != size)
15052         return false;
15053       if (TREE_CODE (type) == ARRAY_TYPE)
15054         {
15055           HOST_WIDE_INT min_index;
15056           unsigned HOST_WIDE_INT cnt;
15057           int curpos = 0, fieldsize;
15058           constructor_elt *ce;
15059
15060           if (TYPE_DOMAIN (type) == NULL_TREE
15061               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15062             return false;
15063
15064           fieldsize = int_size_in_bytes (TREE_TYPE (type));
15065           if (fieldsize <= 0)
15066             return false;
15067
15068           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15069           memset (array, '\0', size);
15070           FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15071             {
15072               tree val = ce->value;
15073               tree index = ce->index;
15074               int pos = curpos;
15075               if (index && TREE_CODE (index) == RANGE_EXPR)
15076                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15077                       * fieldsize;
15078               else if (index)
15079                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15080
15081               if (val)
15082                 {
15083                   STRIP_NOPS (val);
15084                   if (!native_encode_initializer (val, array + pos, fieldsize))
15085                     return false;
15086                 }
15087               curpos = pos + fieldsize;
15088               if (index && TREE_CODE (index) == RANGE_EXPR)
15089                 {
15090                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15091                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
15092                   while (count-- > 0)
15093                     {
15094                       if (val)
15095                         memcpy (array + curpos, array + pos, fieldsize);
15096                       curpos += fieldsize;
15097                     }
15098                 }
15099               gcc_assert (curpos <= size);
15100             }
15101           return true;
15102         }
15103       else if (TREE_CODE (type) == RECORD_TYPE
15104                || TREE_CODE (type) == UNION_TYPE)
15105         {
15106           tree field = NULL_TREE;
15107           unsigned HOST_WIDE_INT cnt;
15108           constructor_elt *ce;
15109
15110           if (int_size_in_bytes (type) != size)
15111             return false;
15112
15113           if (TREE_CODE (type) == RECORD_TYPE)
15114             field = TYPE_FIELDS (type);
15115
15116           FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15117             {
15118               tree val = ce->value;
15119               int pos, fieldsize;
15120
15121               if (ce->index != 0)
15122                 field = ce->index;
15123
15124               if (val)
15125                 STRIP_NOPS (val);
15126
15127               if (field == NULL_TREE || DECL_BIT_FIELD (field))
15128                 return false;
15129
15130               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15131                   && TYPE_DOMAIN (TREE_TYPE (field))
15132                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15133                 return false;
15134               else if (DECL_SIZE_UNIT (field) == NULL_TREE
15135                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
15136                 return false;
15137               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15138               pos = int_byte_position (field);
15139               gcc_assert (pos + fieldsize <= size);
15140               if (val
15141                   && !native_encode_initializer (val, array + pos, fieldsize))
15142                 return false;
15143             }
15144           return true;
15145         }
15146       return false;
15147     case VIEW_CONVERT_EXPR:
15148     case NON_LVALUE_EXPR:
15149       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15150     default:
15151       return native_encode_expr (init, array, size) == size;
15152     }
15153 }
15154
15155 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15156    attribute is the const value T.  */
15157
15158 static bool
15159 tree_add_const_value_attribute (dw_die_ref die, tree t)
15160 {
15161   tree init;
15162   tree type = TREE_TYPE (t);
15163   rtx rtl;
15164
15165   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15166     return false;
15167
15168   init = t;
15169   gcc_assert (!DECL_P (init));
15170
15171   rtl = rtl_for_decl_init (init, type);
15172   if (rtl)
15173     return add_const_value_attribute (die, rtl);
15174   /* If the host and target are sane, try harder.  */
15175   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15176            && initializer_constant_valid_p (init, type))
15177     {
15178       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15179       if (size > 0 && (int) size == size)
15180         {
15181           unsigned char *array = (unsigned char *)
15182             ggc_alloc_cleared_atomic (size);
15183
15184           if (native_encode_initializer (init, array, size))
15185             {
15186               add_AT_vec (die, DW_AT_const_value, size, 1, array);
15187               return true;
15188             }
15189         }
15190     }
15191   return false;
15192 }
15193
15194 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
15195    attribute is the const value of T, where T is an integral constant
15196    variable with static storage duration
15197    (so it can't be a PARM_DECL or a RESULT_DECL).  */
15198
15199 static bool
15200 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
15201 {
15202
15203   if (!decl
15204       || (TREE_CODE (decl) != VAR_DECL
15205           && TREE_CODE (decl) != CONST_DECL)
15206       || (TREE_CODE (decl) == VAR_DECL
15207           && !TREE_STATIC (decl)))
15208     return false;
15209
15210     if (TREE_READONLY (decl)
15211         && ! TREE_THIS_VOLATILE (decl)
15212         && DECL_INITIAL (decl))
15213       /* OK */;
15214     else
15215       return false;
15216
15217   /* Don't add DW_AT_const_value if abstract origin already has one.  */
15218   if (get_AT (var_die, DW_AT_const_value))
15219     return false;
15220
15221   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
15222 }
15223
15224 /* Convert the CFI instructions for the current function into a
15225    location list.  This is used for DW_AT_frame_base when we targeting
15226    a dwarf2 consumer that does not support the dwarf3
15227    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
15228    expressions.  */
15229
15230 static dw_loc_list_ref
15231 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
15232 {
15233   int ix;
15234   dw_fde_ref fde;
15235   dw_loc_list_ref list, *list_tail;
15236   dw_cfi_ref cfi;
15237   dw_cfa_location last_cfa, next_cfa;
15238   const char *start_label, *last_label, *section;
15239   dw_cfa_location remember;
15240
15241   fde = cfun->fde;
15242   gcc_assert (fde != NULL);
15243
15244   section = secname_for_decl (current_function_decl);
15245   list_tail = &list;
15246   list = NULL;
15247
15248   memset (&next_cfa, 0, sizeof (next_cfa));
15249   next_cfa.reg = INVALID_REGNUM;
15250   remember = next_cfa;
15251
15252   start_label = fde->dw_fde_begin;
15253
15254   /* ??? Bald assumption that the CIE opcode list does not contain
15255      advance opcodes.  */
15256   FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, ix, cfi)
15257     lookup_cfa_1 (cfi, &next_cfa, &remember);
15258
15259   last_cfa = next_cfa;
15260   last_label = start_label;
15261
15262   if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
15263     {
15264       /* If the first partition contained no CFI adjustments, the
15265          CIE opcodes apply to the whole first partition.  */
15266       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15267                                  fde->dw_fde_begin, fde->dw_fde_end, section);
15268       list_tail =&(*list_tail)->dw_loc_next;
15269       start_label = last_label = fde->dw_fde_second_begin;
15270     }
15271
15272   FOR_EACH_VEC_ELT (dw_cfi_ref, fde->dw_fde_cfi, ix, cfi)
15273     {
15274       switch (cfi->dw_cfi_opc)
15275         {
15276         case DW_CFA_set_loc:
15277         case DW_CFA_advance_loc1:
15278         case DW_CFA_advance_loc2:
15279         case DW_CFA_advance_loc4:
15280           if (!cfa_equal_p (&last_cfa, &next_cfa))
15281             {
15282               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15283                                          start_label, last_label, section);
15284
15285               list_tail = &(*list_tail)->dw_loc_next;
15286               last_cfa = next_cfa;
15287               start_label = last_label;
15288             }
15289           last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
15290           break;
15291
15292         case DW_CFA_advance_loc:
15293           /* The encoding is complex enough that we should never emit this.  */
15294           gcc_unreachable ();
15295
15296         default:
15297           lookup_cfa_1 (cfi, &next_cfa, &remember);
15298           break;
15299         }
15300       if (ix + 1 == fde->dw_fde_switch_cfi_index)
15301         {
15302           if (!cfa_equal_p (&last_cfa, &next_cfa))
15303             {
15304               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15305                                          start_label, last_label, section);
15306
15307               list_tail = &(*list_tail)->dw_loc_next;
15308               last_cfa = next_cfa;
15309               start_label = last_label;
15310             }
15311           *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15312                                      start_label, fde->dw_fde_end, section);
15313           list_tail = &(*list_tail)->dw_loc_next;
15314           start_label = last_label = fde->dw_fde_second_begin;
15315         }
15316     }
15317
15318   if (!cfa_equal_p (&last_cfa, &next_cfa))
15319     {
15320       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15321                                  start_label, last_label, section);
15322       list_tail = &(*list_tail)->dw_loc_next;
15323       start_label = last_label;
15324     }
15325
15326   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
15327                              start_label,
15328                              fde->dw_fde_second_begin
15329                              ? fde->dw_fde_second_end : fde->dw_fde_end,
15330                              section);
15331
15332   if (list && list->dw_loc_next)
15333     gen_llsym (list);
15334
15335   return list;
15336 }
15337
15338 /* Compute a displacement from the "steady-state frame pointer" to the
15339    frame base (often the same as the CFA), and store it in
15340    frame_pointer_fb_offset.  OFFSET is added to the displacement
15341    before the latter is negated.  */
15342
15343 static void
15344 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
15345 {
15346   rtx reg, elim;
15347
15348 #ifdef FRAME_POINTER_CFA_OFFSET
15349   reg = frame_pointer_rtx;
15350   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
15351 #else
15352   reg = arg_pointer_rtx;
15353   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
15354 #endif
15355
15356   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
15357   if (GET_CODE (elim) == PLUS)
15358     {
15359       offset += INTVAL (XEXP (elim, 1));
15360       elim = XEXP (elim, 0);
15361     }
15362
15363   frame_pointer_fb_offset = -offset;
15364
15365   /* ??? AVR doesn't set up valid eliminations when there is no stack frame
15366      in which to eliminate.  This is because it's stack pointer isn't 
15367      directly accessible as a register within the ISA.  To work around
15368      this, assume that while we cannot provide a proper value for
15369      frame_pointer_fb_offset, we won't need one either.  */
15370   frame_pointer_fb_offset_valid
15371     = ((SUPPORTS_STACK_ALIGNMENT
15372         && (elim == hard_frame_pointer_rtx
15373             || elim == stack_pointer_rtx))
15374        || elim == (frame_pointer_needed
15375                    ? hard_frame_pointer_rtx
15376                    : stack_pointer_rtx));
15377 }
15378
15379 /* Generate a DW_AT_name attribute given some string value to be included as
15380    the value of the attribute.  */
15381
15382 static void
15383 add_name_attribute (dw_die_ref die, const char *name_string)
15384 {
15385   if (name_string != NULL && *name_string != 0)
15386     {
15387       if (demangle_name_func)
15388         name_string = (*demangle_name_func) (name_string);
15389
15390       add_AT_string (die, DW_AT_name, name_string);
15391     }
15392 }
15393
15394 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
15395    DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
15396    of TYPE accordingly.
15397
15398    ??? This is a temporary measure until after we're able to generate
15399    regular DWARF for the complex Ada type system.  */
15400
15401 static void 
15402 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
15403                                      dw_die_ref context_die)
15404 {
15405   tree dtype;
15406   dw_die_ref dtype_die;
15407
15408   if (!lang_hooks.types.descriptive_type)
15409     return;
15410
15411   dtype = lang_hooks.types.descriptive_type (type);
15412   if (!dtype)
15413     return;
15414
15415   dtype_die = lookup_type_die (dtype);
15416   if (!dtype_die)
15417     {
15418       gen_type_die (dtype, context_die);
15419       dtype_die = lookup_type_die (dtype);
15420       gcc_assert (dtype_die);
15421     }
15422
15423   add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
15424 }
15425
15426 /* Generate a DW_AT_comp_dir attribute for DIE.  */
15427
15428 static void
15429 add_comp_dir_attribute (dw_die_ref die)
15430 {
15431   const char *wd = get_src_pwd ();
15432   char *wd1;
15433
15434   if (wd == NULL)
15435     return;
15436
15437   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
15438     {
15439       int wdlen;
15440
15441       wdlen = strlen (wd);
15442       wd1 = (char *) ggc_alloc_atomic (wdlen + 2);
15443       strcpy (wd1, wd);
15444       wd1 [wdlen] = DIR_SEPARATOR;
15445       wd1 [wdlen + 1] = 0;
15446       wd = wd1;
15447     }
15448
15449     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
15450 }
15451
15452 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
15453    default.  */
15454
15455 static int
15456 lower_bound_default (void)
15457 {
15458   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
15459     {
15460     case DW_LANG_C:
15461     case DW_LANG_C89:
15462     case DW_LANG_C99:
15463     case DW_LANG_C_plus_plus:
15464     case DW_LANG_ObjC:
15465     case DW_LANG_ObjC_plus_plus:
15466     case DW_LANG_Java:
15467       return 0;
15468     case DW_LANG_Fortran77:
15469     case DW_LANG_Fortran90:
15470     case DW_LANG_Fortran95:
15471       return 1;
15472     case DW_LANG_UPC:
15473     case DW_LANG_D:
15474     case DW_LANG_Python:
15475       return dwarf_version >= 4 ? 0 : -1;
15476     case DW_LANG_Ada95:
15477     case DW_LANG_Ada83:
15478     case DW_LANG_Cobol74:
15479     case DW_LANG_Cobol85:
15480     case DW_LANG_Pascal83:
15481     case DW_LANG_Modula2:
15482     case DW_LANG_PLI:
15483       return dwarf_version >= 4 ? 1 : -1;
15484     default:
15485       return -1;
15486     }
15487 }
15488
15489 /* Given a tree node describing an array bound (either lower or upper) output
15490    a representation for that bound.  */
15491
15492 static void
15493 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
15494 {
15495   switch (TREE_CODE (bound))
15496     {
15497     case ERROR_MARK:
15498       return;
15499
15500     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
15501     case INTEGER_CST:
15502       {
15503         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
15504         int dflt;
15505
15506         /* Use the default if possible.  */
15507         if (bound_attr == DW_AT_lower_bound
15508             && host_integerp (bound, 0)
15509             && (dflt = lower_bound_default ()) != -1
15510             && tree_low_cst (bound, 0) == dflt)
15511           ;
15512
15513         /* Otherwise represent the bound as an unsigned value with the
15514            precision of its type.  The precision and signedness of the
15515            type will be necessary to re-interpret it unambiguously.  */
15516         else if (prec < HOST_BITS_PER_WIDE_INT)
15517           {
15518             unsigned HOST_WIDE_INT mask
15519               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
15520             add_AT_unsigned (subrange_die, bound_attr,
15521                              TREE_INT_CST_LOW (bound) & mask);
15522           }
15523         else if (prec == HOST_BITS_PER_WIDE_INT
15524                  || TREE_INT_CST_HIGH (bound) == 0)
15525           add_AT_unsigned (subrange_die, bound_attr,
15526                            TREE_INT_CST_LOW (bound));
15527         else
15528           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
15529                          TREE_INT_CST_LOW (bound));
15530       }
15531       break;
15532
15533     CASE_CONVERT:
15534     case VIEW_CONVERT_EXPR:
15535       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
15536       break;
15537
15538     case SAVE_EXPR:
15539       break;
15540
15541     case VAR_DECL:
15542     case PARM_DECL:
15543     case RESULT_DECL:
15544       {
15545         dw_die_ref decl_die = lookup_decl_die (bound);
15546
15547         /* ??? Can this happen, or should the variable have been bound
15548            first?  Probably it can, since I imagine that we try to create
15549            the types of parameters in the order in which they exist in
15550            the list, and won't have created a forward reference to a
15551            later parameter.  */
15552         if (decl_die != NULL)
15553           {
15554             add_AT_die_ref (subrange_die, bound_attr, decl_die);
15555             break;
15556           }
15557       }
15558       /* FALLTHRU */
15559
15560     default:
15561       {
15562         /* Otherwise try to create a stack operation procedure to
15563            evaluate the value of the array bound.  */
15564
15565         dw_die_ref ctx, decl_die;
15566         dw_loc_list_ref list;
15567
15568         list = loc_list_from_tree (bound, 2);
15569         if (list == NULL || single_element_loc_list_p (list))
15570           {
15571             /* If DW_AT_*bound is not a reference nor constant, it is
15572                a DWARF expression rather than location description.
15573                For that loc_list_from_tree (bound, 0) is needed.
15574                If that fails to give a single element list,
15575                fall back to outputting this as a reference anyway.  */
15576             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
15577             if (list2 && single_element_loc_list_p (list2))
15578               {
15579                 add_AT_loc (subrange_die, bound_attr, list2->expr);
15580                 break;
15581               }
15582           }
15583         if (list == NULL)
15584           break;
15585
15586         if (current_function_decl == 0)
15587           ctx = comp_unit_die ();
15588         else
15589           ctx = lookup_decl_die (current_function_decl);
15590
15591         decl_die = new_die (DW_TAG_variable, ctx, bound);
15592         add_AT_flag (decl_die, DW_AT_artificial, 1);
15593         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
15594         add_AT_location_description (decl_die, DW_AT_location, list);
15595         add_AT_die_ref (subrange_die, bound_attr, decl_die);
15596         break;
15597       }
15598     }
15599 }
15600
15601 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
15602    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
15603    Note that the block of subscript information for an array type also
15604    includes information about the element type of the given array type.  */
15605
15606 static void
15607 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
15608 {
15609   unsigned dimension_number;
15610   tree lower, upper;
15611   dw_die_ref subrange_die;
15612
15613   for (dimension_number = 0;
15614        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
15615        type = TREE_TYPE (type), dimension_number++)
15616     {
15617       tree domain = TYPE_DOMAIN (type);
15618
15619       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
15620         break;
15621
15622       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
15623          and (in GNU C only) variable bounds.  Handle all three forms
15624          here.  */
15625       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
15626       if (domain)
15627         {
15628           /* We have an array type with specified bounds.  */
15629           lower = TYPE_MIN_VALUE (domain);
15630           upper = TYPE_MAX_VALUE (domain);
15631
15632           /* Define the index type.  */
15633           if (TREE_TYPE (domain))
15634             {
15635               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
15636                  TREE_TYPE field.  We can't emit debug info for this
15637                  because it is an unnamed integral type.  */
15638               if (TREE_CODE (domain) == INTEGER_TYPE
15639                   && TYPE_NAME (domain) == NULL_TREE
15640                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
15641                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
15642                 ;
15643               else
15644                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
15645                                     type_die);
15646             }
15647
15648           /* ??? If upper is NULL, the array has unspecified length,
15649              but it does have a lower bound.  This happens with Fortran
15650                dimension arr(N:*)
15651              Since the debugger is definitely going to need to know N
15652              to produce useful results, go ahead and output the lower
15653              bound solo, and hope the debugger can cope.  */
15654
15655           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
15656           if (upper)
15657             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
15658         }
15659
15660       /* Otherwise we have an array type with an unspecified length.  The
15661          DWARF-2 spec does not say how to handle this; let's just leave out the
15662          bounds.  */
15663     }
15664 }
15665
15666 static void
15667 add_byte_size_attribute (dw_die_ref die, tree tree_node)
15668 {
15669   unsigned size;
15670
15671   switch (TREE_CODE (tree_node))
15672     {
15673     case ERROR_MARK:
15674       size = 0;
15675       break;
15676     case ENUMERAL_TYPE:
15677     case RECORD_TYPE:
15678     case UNION_TYPE:
15679     case QUAL_UNION_TYPE:
15680       size = int_size_in_bytes (tree_node);
15681       break;
15682     case FIELD_DECL:
15683       /* For a data member of a struct or union, the DW_AT_byte_size is
15684          generally given as the number of bytes normally allocated for an
15685          object of the *declared* type of the member itself.  This is true
15686          even for bit-fields.  */
15687       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
15688       break;
15689     default:
15690       gcc_unreachable ();
15691     }
15692
15693   /* Note that `size' might be -1 when we get to this point.  If it is, that
15694      indicates that the byte size of the entity in question is variable.  We
15695      have no good way of expressing this fact in Dwarf at the present time,
15696      so just let the -1 pass on through.  */
15697   add_AT_unsigned (die, DW_AT_byte_size, size);
15698 }
15699
15700 /* For a FIELD_DECL node which represents a bit-field, output an attribute
15701    which specifies the distance in bits from the highest order bit of the
15702    "containing object" for the bit-field to the highest order bit of the
15703    bit-field itself.
15704
15705    For any given bit-field, the "containing object" is a hypothetical object
15706    (of some integral or enum type) within which the given bit-field lives.  The
15707    type of this hypothetical "containing object" is always the same as the
15708    declared type of the individual bit-field itself.  The determination of the
15709    exact location of the "containing object" for a bit-field is rather
15710    complicated.  It's handled by the `field_byte_offset' function (above).
15711
15712    Note that it is the size (in bytes) of the hypothetical "containing object"
15713    which will be given in the DW_AT_byte_size attribute for this bit-field.
15714    (See `byte_size_attribute' above).  */
15715
15716 static inline void
15717 add_bit_offset_attribute (dw_die_ref die, tree decl)
15718 {
15719   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
15720   tree type = DECL_BIT_FIELD_TYPE (decl);
15721   HOST_WIDE_INT bitpos_int;
15722   HOST_WIDE_INT highest_order_object_bit_offset;
15723   HOST_WIDE_INT highest_order_field_bit_offset;
15724   HOST_WIDE_INT bit_offset;
15725
15726   /* Must be a field and a bit field.  */
15727   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
15728
15729   /* We can't yet handle bit-fields whose offsets are variable, so if we
15730      encounter such things, just return without generating any attribute
15731      whatsoever.  Likewise for variable or too large size.  */
15732   if (! host_integerp (bit_position (decl), 0)
15733       || ! host_integerp (DECL_SIZE (decl), 1))
15734     return;
15735
15736   bitpos_int = int_bit_position (decl);
15737
15738   /* Note that the bit offset is always the distance (in bits) from the
15739      highest-order bit of the "containing object" to the highest-order bit of
15740      the bit-field itself.  Since the "high-order end" of any object or field
15741      is different on big-endian and little-endian machines, the computation
15742      below must take account of these differences.  */
15743   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
15744   highest_order_field_bit_offset = bitpos_int;
15745
15746   if (! BYTES_BIG_ENDIAN)
15747     {
15748       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
15749       highest_order_object_bit_offset += simple_type_size_in_bits (type);
15750     }
15751
15752   bit_offset
15753     = (! BYTES_BIG_ENDIAN
15754        ? highest_order_object_bit_offset - highest_order_field_bit_offset
15755        : highest_order_field_bit_offset - highest_order_object_bit_offset);
15756
15757   if (bit_offset < 0)
15758     add_AT_int (die, DW_AT_bit_offset, bit_offset);
15759   else
15760     add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
15761 }
15762
15763 /* For a FIELD_DECL node which represents a bit field, output an attribute
15764    which specifies the length in bits of the given field.  */
15765
15766 static inline void
15767 add_bit_size_attribute (dw_die_ref die, tree decl)
15768 {
15769   /* Must be a field and a bit field.  */
15770   gcc_assert (TREE_CODE (decl) == FIELD_DECL
15771               && DECL_BIT_FIELD_TYPE (decl));
15772
15773   if (host_integerp (DECL_SIZE (decl), 1))
15774     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
15775 }
15776
15777 /* If the compiled language is ANSI C, then add a 'prototyped'
15778    attribute, if arg types are given for the parameters of a function.  */
15779
15780 static inline void
15781 add_prototyped_attribute (dw_die_ref die, tree func_type)
15782 {
15783   if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
15784       && prototype_p (func_type))
15785     add_AT_flag (die, DW_AT_prototyped, 1);
15786 }
15787
15788 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
15789    by looking in either the type declaration or object declaration
15790    equate table.  */
15791
15792 static inline dw_die_ref
15793 add_abstract_origin_attribute (dw_die_ref die, tree origin)
15794 {
15795   dw_die_ref origin_die = NULL;
15796
15797   if (TREE_CODE (origin) != FUNCTION_DECL)
15798     {
15799       /* We may have gotten separated from the block for the inlined
15800          function, if we're in an exception handler or some such; make
15801          sure that the abstract function has been written out.
15802
15803          Doing this for nested functions is wrong, however; functions are
15804          distinct units, and our context might not even be inline.  */
15805       tree fn = origin;
15806
15807       if (TYPE_P (fn))
15808         fn = TYPE_STUB_DECL (fn);
15809
15810       fn = decl_function_context (fn);
15811       if (fn)
15812         dwarf2out_abstract_function (fn);
15813     }
15814
15815   if (DECL_P (origin))
15816     origin_die = lookup_decl_die (origin);
15817   else if (TYPE_P (origin))
15818     origin_die = lookup_type_die (origin);
15819
15820   /* XXX: Functions that are never lowered don't always have correct block
15821      trees (in the case of java, they simply have no block tree, in some other
15822      languages).  For these functions, there is nothing we can really do to
15823      output correct debug info for inlined functions in all cases.  Rather
15824      than die, we'll just produce deficient debug info now, in that we will
15825      have variables without a proper abstract origin.  In the future, when all
15826      functions are lowered, we should re-add a gcc_assert (origin_die)
15827      here.  */
15828
15829   if (origin_die)
15830     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
15831   return origin_die;
15832 }
15833
15834 /* We do not currently support the pure_virtual attribute.  */
15835
15836 static inline void
15837 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
15838 {
15839   if (DECL_VINDEX (func_decl))
15840     {
15841       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
15842
15843       if (host_integerp (DECL_VINDEX (func_decl), 0))
15844         add_AT_loc (die, DW_AT_vtable_elem_location,
15845                     new_loc_descr (DW_OP_constu,
15846                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
15847                                    0));
15848
15849       /* GNU extension: Record what type this method came from originally.  */
15850       if (debug_info_level > DINFO_LEVEL_TERSE
15851           && DECL_CONTEXT (func_decl))
15852         add_AT_die_ref (die, DW_AT_containing_type,
15853                         lookup_type_die (DECL_CONTEXT (func_decl)));
15854     }
15855 }
15856 \f
15857 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
15858    given decl.  This used to be a vendor extension until after DWARF 4
15859    standardized it.  */
15860
15861 static void
15862 add_linkage_attr (dw_die_ref die, tree decl)
15863 {
15864   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
15865
15866   /* Mimic what assemble_name_raw does with a leading '*'.  */
15867   if (name[0] == '*')
15868     name = &name[1];
15869
15870   if (dwarf_version >= 4)
15871     add_AT_string (die, DW_AT_linkage_name, name);
15872   else
15873     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
15874 }
15875
15876 /* Add source coordinate attributes for the given decl.  */
15877
15878 static void
15879 add_src_coords_attributes (dw_die_ref die, tree decl)
15880 {
15881   expanded_location s;
15882
15883   if (DECL_SOURCE_LOCATION (decl) == UNKNOWN_LOCATION)
15884     return;
15885   s = expand_location (DECL_SOURCE_LOCATION (decl));
15886   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
15887   add_AT_unsigned (die, DW_AT_decl_line, s.line);
15888 }
15889
15890 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
15891
15892 static void
15893 add_linkage_name (dw_die_ref die, tree decl)
15894 {
15895   if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
15896        && TREE_PUBLIC (decl)
15897        && !DECL_ABSTRACT (decl)
15898        && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
15899        && die->die_tag != DW_TAG_member)
15900     {
15901       /* Defer until we have an assembler name set.  */
15902       if (!DECL_ASSEMBLER_NAME_SET_P (decl))
15903         {
15904           limbo_die_node *asm_name;
15905
15906           asm_name = ggc_alloc_cleared_limbo_die_node ();
15907           asm_name->die = die;
15908           asm_name->created_for = decl;
15909           asm_name->next = deferred_asm_name;
15910           deferred_asm_name = asm_name;
15911         }
15912       else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
15913         add_linkage_attr (die, decl);
15914     }
15915 }
15916
15917 /* Add a DW_AT_name attribute and source coordinate attribute for the
15918    given decl, but only if it actually has a name.  */
15919
15920 static void
15921 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
15922 {
15923   tree decl_name;
15924
15925   decl_name = DECL_NAME (decl);
15926   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
15927     {
15928       const char *name = dwarf2_name (decl, 0);
15929       if (name)
15930         add_name_attribute (die, name);
15931       if (! DECL_ARTIFICIAL (decl))
15932         add_src_coords_attributes (die, decl);
15933
15934       add_linkage_name (die, decl);
15935     }
15936
15937 #ifdef VMS_DEBUGGING_INFO
15938   /* Get the function's name, as described by its RTL.  This may be different
15939      from the DECL_NAME name used in the source file.  */
15940   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
15941     {
15942       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
15943                    XEXP (DECL_RTL (decl), 0));
15944       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
15945     }
15946 #endif /* VMS_DEBUGGING_INFO */
15947 }
15948
15949 #ifdef VMS_DEBUGGING_INFO
15950 /* Output the debug main pointer die for VMS */
15951
15952 void
15953 dwarf2out_vms_debug_main_pointer (void)
15954 {
15955   char label[MAX_ARTIFICIAL_LABEL_BYTES];
15956   dw_die_ref die;
15957
15958   /* Allocate the VMS debug main subprogram die.  */
15959   die = ggc_alloc_cleared_die_node ();
15960   die->die_tag = DW_TAG_subprogram;
15961   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
15962   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
15963                                current_function_funcdef_no);
15964   add_AT_lbl_id (die, DW_AT_entry_pc, label);
15965
15966   /* Make it the first child of comp_unit_die ().  */
15967   die->die_parent = comp_unit_die ();
15968   if (comp_unit_die ()->die_child)
15969     {
15970       die->die_sib = comp_unit_die ()->die_child->die_sib;
15971       comp_unit_die ()->die_child->die_sib = die;
15972     }
15973   else
15974     {
15975       die->die_sib = die;
15976       comp_unit_die ()->die_child = die;
15977     }
15978 }
15979 #endif /* VMS_DEBUGGING_INFO */
15980
15981 /* Push a new declaration scope.  */
15982
15983 static void
15984 push_decl_scope (tree scope)
15985 {
15986   VEC_safe_push (tree, gc, decl_scope_table, scope);
15987 }
15988
15989 /* Pop a declaration scope.  */
15990
15991 static inline void
15992 pop_decl_scope (void)
15993 {
15994   VEC_pop (tree, decl_scope_table);
15995 }
15996
15997 /* Return the DIE for the scope that immediately contains this type.
15998    Non-named types get global scope.  Named types nested in other
15999    types get their containing scope if it's open, or global scope
16000    otherwise.  All other types (i.e. function-local named types) get
16001    the current active scope.  */
16002
16003 static dw_die_ref
16004 scope_die_for (tree t, dw_die_ref context_die)
16005 {
16006   dw_die_ref scope_die = NULL;
16007   tree containing_scope;
16008   int i;
16009
16010   /* Non-types always go in the current scope.  */
16011   gcc_assert (TYPE_P (t));
16012
16013   containing_scope = TYPE_CONTEXT (t);
16014
16015   /* Use the containing namespace if it was passed in (for a declaration).  */
16016   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16017     {
16018       if (context_die == lookup_decl_die (containing_scope))
16019         /* OK */;
16020       else
16021         containing_scope = NULL_TREE;
16022     }
16023
16024   /* Ignore function type "scopes" from the C frontend.  They mean that
16025      a tagged type is local to a parmlist of a function declarator, but
16026      that isn't useful to DWARF.  */
16027   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16028     containing_scope = NULL_TREE;
16029
16030   if (SCOPE_FILE_SCOPE_P (containing_scope))
16031     scope_die = comp_unit_die ();
16032   else if (TYPE_P (containing_scope))
16033     {
16034       /* For types, we can just look up the appropriate DIE.  But
16035          first we check to see if we're in the middle of emitting it
16036          so we know where the new DIE should go.  */
16037       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16038         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16039           break;
16040
16041       if (i < 0)
16042         {
16043           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16044                       || TREE_ASM_WRITTEN (containing_scope));
16045           /*We are not in the middle of emitting the type
16046             CONTAINING_SCOPE. Let's see if it's emitted already.  */
16047           scope_die = lookup_type_die (containing_scope);
16048
16049           /* If none of the current dies are suitable, we get file scope.  */
16050           if (scope_die == NULL)
16051             scope_die = comp_unit_die ();
16052         }
16053       else
16054         scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
16055     }
16056   else
16057     scope_die = context_die;
16058
16059   return scope_die;
16060 }
16061
16062 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16063
16064 static inline int
16065 local_scope_p (dw_die_ref context_die)
16066 {
16067   for (; context_die; context_die = context_die->die_parent)
16068     if (context_die->die_tag == DW_TAG_inlined_subroutine
16069         || context_die->die_tag == DW_TAG_subprogram)
16070       return 1;
16071
16072   return 0;
16073 }
16074
16075 /* Returns nonzero if CONTEXT_DIE is a class.  */
16076
16077 static inline int
16078 class_scope_p (dw_die_ref context_die)
16079 {
16080   return (context_die
16081           && (context_die->die_tag == DW_TAG_structure_type
16082               || context_die->die_tag == DW_TAG_class_type
16083               || context_die->die_tag == DW_TAG_interface_type
16084               || context_die->die_tag == DW_TAG_union_type));
16085 }
16086
16087 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16088    whether or not to treat a DIE in this context as a declaration.  */
16089
16090 static inline int
16091 class_or_namespace_scope_p (dw_die_ref context_die)
16092 {
16093   return (class_scope_p (context_die)
16094           || (context_die && context_die->die_tag == DW_TAG_namespace));
16095 }
16096
16097 /* Many forms of DIEs require a "type description" attribute.  This
16098    routine locates the proper "type descriptor" die for the type given
16099    by 'type', and adds a DW_AT_type attribute below the given die.  */
16100
16101 static void
16102 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16103                     int decl_volatile, dw_die_ref context_die)
16104 {
16105   enum tree_code code  = TREE_CODE (type);
16106   dw_die_ref type_die  = NULL;
16107
16108   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16109      or fixed-point type, use the inner type.  This is because we have no
16110      support for unnamed types in base_type_die.  This can happen if this is
16111      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16112   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16113       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16114     type = TREE_TYPE (type), code = TREE_CODE (type);
16115
16116   if (code == ERROR_MARK
16117       /* Handle a special case.  For functions whose return type is void, we
16118          generate *no* type attribute.  (Note that no object may have type
16119          `void', so this only applies to function return types).  */
16120       || code == VOID_TYPE)
16121     return;
16122
16123   type_die = modified_type_die (type,
16124                                 decl_const || TYPE_READONLY (type),
16125                                 decl_volatile || TYPE_VOLATILE (type),
16126                                 context_die);
16127
16128   if (type_die != NULL)
16129     add_AT_die_ref (object_die, DW_AT_type, type_die);
16130 }
16131
16132 /* Given an object die, add the calling convention attribute for the
16133    function call type.  */
16134 static void
16135 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16136 {
16137   enum dwarf_calling_convention value = DW_CC_normal;
16138
16139   value = ((enum dwarf_calling_convention)
16140            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16141
16142   if (is_fortran ()
16143       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16144     {
16145       /* DWARF 2 doesn't provide a way to identify a program's source-level
16146         entry point.  DW_AT_calling_convention attributes are only meant
16147         to describe functions' calling conventions.  However, lacking a
16148         better way to signal the Fortran main program, we used this for 
16149         a long time, following existing custom.  Now, DWARF 4 has 
16150         DW_AT_main_subprogram, which we add below, but some tools still
16151         rely on the old way, which we thus keep.  */
16152       value = DW_CC_program;
16153
16154       if (dwarf_version >= 4 || !dwarf_strict)
16155         add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
16156     }
16157
16158   /* Only add the attribute if the backend requests it, and
16159      is not DW_CC_normal.  */
16160   if (value && (value != DW_CC_normal))
16161     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16162 }
16163
16164 /* Given a tree pointer to a struct, class, union, or enum type node, return
16165    a pointer to the (string) tag name for the given type, or zero if the type
16166    was declared without a tag.  */
16167
16168 static const char *
16169 type_tag (const_tree type)
16170 {
16171   const char *name = 0;
16172
16173   if (TYPE_NAME (type) != 0)
16174     {
16175       tree t = 0;
16176
16177       /* Find the IDENTIFIER_NODE for the type name.  */
16178       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
16179           && !TYPE_NAMELESS (type))
16180         t = TYPE_NAME (type);
16181
16182       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16183          a TYPE_DECL node, regardless of whether or not a `typedef' was
16184          involved.  */
16185       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16186                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16187         {
16188           /* We want to be extra verbose.  Don't call dwarf_name if
16189              DECL_NAME isn't set.  The default hook for decl_printable_name
16190              doesn't like that, and in this context it's correct to return
16191              0, instead of "<anonymous>" or the like.  */
16192           if (DECL_NAME (TYPE_NAME (type))
16193               && !DECL_NAMELESS (TYPE_NAME (type)))
16194             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16195         }
16196
16197       /* Now get the name as a string, or invent one.  */
16198       if (!name && t != 0)
16199         name = IDENTIFIER_POINTER (t);
16200     }
16201
16202   return (name == 0 || *name == '\0') ? 0 : name;
16203 }
16204
16205 /* Return the type associated with a data member, make a special check
16206    for bit field types.  */
16207
16208 static inline tree
16209 member_declared_type (const_tree member)
16210 {
16211   return (DECL_BIT_FIELD_TYPE (member)
16212           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16213 }
16214
16215 /* Get the decl's label, as described by its RTL. This may be different
16216    from the DECL_NAME name used in the source file.  */
16217
16218 #if 0
16219 static const char *
16220 decl_start_label (tree decl)
16221 {
16222   rtx x;
16223   const char *fnname;
16224
16225   x = DECL_RTL (decl);
16226   gcc_assert (MEM_P (x));
16227
16228   x = XEXP (x, 0);
16229   gcc_assert (GET_CODE (x) == SYMBOL_REF);
16230
16231   fnname = XSTR (x, 0);
16232   return fnname;
16233 }
16234 #endif
16235 \f
16236 /* These routines generate the internal representation of the DIE's for
16237    the compilation unit.  Debugging information is collected by walking
16238    the declaration trees passed in from dwarf2out_decl().  */
16239
16240 static void
16241 gen_array_type_die (tree type, dw_die_ref context_die)
16242 {
16243   dw_die_ref scope_die = scope_die_for (type, context_die);
16244   dw_die_ref array_die;
16245
16246   /* GNU compilers represent multidimensional array types as sequences of one
16247      dimensional array types whose element types are themselves array types.
16248      We sometimes squish that down to a single array_type DIE with multiple
16249      subscripts in the Dwarf debugging info.  The draft Dwarf specification
16250      say that we are allowed to do this kind of compression in C, because
16251      there is no difference between an array of arrays and a multidimensional
16252      array.  We don't do this for Ada to remain as close as possible to the
16253      actual representation, which is especially important against the language
16254      flexibilty wrt arrays of variable size.  */
16255
16256   bool collapse_nested_arrays = !is_ada ();
16257   tree element_type;
16258
16259   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16260      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
16261   if (TYPE_STRING_FLAG (type)
16262       && TREE_CODE (type) == ARRAY_TYPE
16263       && is_fortran ()
16264       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16265     {
16266       HOST_WIDE_INT size;
16267
16268       array_die = new_die (DW_TAG_string_type, scope_die, type);
16269       add_name_attribute (array_die, type_tag (type));
16270       equate_type_number_to_die (type, array_die);
16271       size = int_size_in_bytes (type);
16272       if (size >= 0)
16273         add_AT_unsigned (array_die, DW_AT_byte_size, size);
16274       else if (TYPE_DOMAIN (type) != NULL_TREE
16275                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16276                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16277         {
16278           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16279           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16280
16281           size = int_size_in_bytes (TREE_TYPE (szdecl));
16282           if (loc && size > 0)
16283             {
16284               add_AT_location_description (array_die, DW_AT_string_length, loc);
16285               if (size != DWARF2_ADDR_SIZE)
16286                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16287             }
16288         }
16289       return;
16290     }
16291
16292   /* ??? The SGI dwarf reader fails for array of array of enum types
16293      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16294      array type comes before the outer array type.  We thus call gen_type_die
16295      before we new_die and must prevent nested array types collapsing for this
16296      target.  */
16297
16298 #ifdef MIPS_DEBUGGING_INFO
16299   gen_type_die (TREE_TYPE (type), context_die);
16300   collapse_nested_arrays = false;
16301 #endif
16302
16303   array_die = new_die (DW_TAG_array_type, scope_die, type);
16304   add_name_attribute (array_die, type_tag (type));
16305   add_gnat_descriptive_type_attribute (array_die, type, context_die);
16306   if (TYPE_ARTIFICIAL (type))
16307     add_AT_flag (array_die, DW_AT_artificial, 1);
16308   equate_type_number_to_die (type, array_die);
16309
16310   if (TREE_CODE (type) == VECTOR_TYPE)
16311     add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16312
16313   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16314   if (is_fortran ()
16315       && TREE_CODE (type) == ARRAY_TYPE
16316       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16317       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16318     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16319
16320 #if 0
16321   /* We default the array ordering.  SDB will probably do
16322      the right things even if DW_AT_ordering is not present.  It's not even
16323      an issue until we start to get into multidimensional arrays anyway.  If
16324      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16325      then we'll have to put the DW_AT_ordering attribute back in.  (But if
16326      and when we find out that we need to put these in, we will only do so
16327      for multidimensional arrays.  */
16328   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16329 #endif
16330
16331 #ifdef MIPS_DEBUGGING_INFO
16332   /* The SGI compilers handle arrays of unknown bound by setting
16333      AT_declaration and not emitting any subrange DIEs.  */
16334   if (TREE_CODE (type) == ARRAY_TYPE
16335       && ! TYPE_DOMAIN (type))
16336     add_AT_flag (array_die, DW_AT_declaration, 1);
16337   else
16338 #endif
16339   if (TREE_CODE (type) == VECTOR_TYPE)
16340     {
16341       /* For VECTOR_TYPEs we use an array die with appropriate bounds.  */
16342       dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
16343       add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node);
16344       add_bound_info (subrange_die, DW_AT_upper_bound,
16345                       size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
16346     }
16347   else
16348     add_subscript_info (array_die, type, collapse_nested_arrays);
16349
16350   /* Add representation of the type of the elements of this array type and
16351      emit the corresponding DIE if we haven't done it already.  */
16352   element_type = TREE_TYPE (type);
16353   if (collapse_nested_arrays)
16354     while (TREE_CODE (element_type) == ARRAY_TYPE)
16355       {
16356         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16357           break;
16358         element_type = TREE_TYPE (element_type);
16359       }
16360
16361 #ifndef MIPS_DEBUGGING_INFO
16362   gen_type_die (element_type, context_die);
16363 #endif
16364
16365   add_type_attribute (array_die, element_type, 0, 0, context_die);
16366
16367   if (get_AT (array_die, DW_AT_name))
16368     add_pubtype (type, array_die);
16369 }
16370
16371 static dw_loc_descr_ref
16372 descr_info_loc (tree val, tree base_decl)
16373 {
16374   HOST_WIDE_INT size;
16375   dw_loc_descr_ref loc, loc2;
16376   enum dwarf_location_atom op;
16377
16378   if (val == base_decl)
16379     return new_loc_descr (DW_OP_push_object_address, 0, 0);
16380
16381   switch (TREE_CODE (val))
16382     {
16383     CASE_CONVERT:
16384       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16385     case VAR_DECL:
16386       return loc_descriptor_from_tree (val, 0);
16387     case INTEGER_CST:
16388       if (host_integerp (val, 0))
16389         return int_loc_descriptor (tree_low_cst (val, 0));
16390       break;
16391     case INDIRECT_REF:
16392       size = int_size_in_bytes (TREE_TYPE (val));
16393       if (size < 0)
16394         break;
16395       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16396       if (!loc)
16397         break;
16398       if (size == DWARF2_ADDR_SIZE)
16399         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
16400       else
16401         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
16402       return loc;
16403     case POINTER_PLUS_EXPR:
16404     case PLUS_EXPR:
16405       if (host_integerp (TREE_OPERAND (val, 1), 1)
16406           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
16407              < 16384)
16408         {
16409           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16410           if (!loc)
16411             break;
16412           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
16413         }
16414       else
16415         {
16416           op = DW_OP_plus;
16417         do_binop:
16418           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16419           if (!loc)
16420             break;
16421           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
16422           if (!loc2)
16423             break;
16424           add_loc_descr (&loc, loc2);
16425           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
16426         }
16427       return loc;
16428     case MINUS_EXPR:
16429       op = DW_OP_minus;
16430       goto do_binop;
16431     case MULT_EXPR:
16432       op = DW_OP_mul;
16433       goto do_binop;
16434     case EQ_EXPR:
16435       op = DW_OP_eq;
16436       goto do_binop;
16437     case NE_EXPR:
16438       op = DW_OP_ne;
16439       goto do_binop;
16440     default:
16441       break;
16442     }
16443   return NULL;
16444 }
16445
16446 static void
16447 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
16448                       tree val, tree base_decl)
16449 {
16450   dw_loc_descr_ref loc;
16451
16452   if (host_integerp (val, 0))
16453     {
16454       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
16455       return;
16456     }
16457
16458   loc = descr_info_loc (val, base_decl);
16459   if (!loc)
16460     return;
16461
16462   add_AT_loc (die, attr, loc);
16463 }
16464
16465 /* This routine generates DIE for array with hidden descriptor, details
16466    are filled into *info by a langhook.  */
16467
16468 static void
16469 gen_descr_array_type_die (tree type, struct array_descr_info *info,
16470                           dw_die_ref context_die)
16471 {
16472   dw_die_ref scope_die = scope_die_for (type, context_die);
16473   dw_die_ref array_die;
16474   int dim;
16475
16476   array_die = new_die (DW_TAG_array_type, scope_die, type);
16477   add_name_attribute (array_die, type_tag (type));
16478   equate_type_number_to_die (type, array_die);
16479
16480   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16481   if (is_fortran ()
16482       && info->ndimensions >= 2)
16483     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16484
16485   if (info->data_location)
16486     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
16487                           info->base_decl);
16488   if (info->associated)
16489     add_descr_info_field (array_die, DW_AT_associated, info->associated,
16490                           info->base_decl);
16491   if (info->allocated)
16492     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
16493                           info->base_decl);
16494
16495   for (dim = 0; dim < info->ndimensions; dim++)
16496     {
16497       dw_die_ref subrange_die
16498         = new_die (DW_TAG_subrange_type, array_die, NULL);
16499
16500       if (info->dimen[dim].lower_bound)
16501         {
16502           /* If it is the default value, omit it.  */
16503           int dflt;
16504
16505           if (host_integerp (info->dimen[dim].lower_bound, 0)
16506               && (dflt = lower_bound_default ()) != -1
16507               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
16508             ;
16509           else
16510             add_descr_info_field (subrange_die, DW_AT_lower_bound,
16511                                   info->dimen[dim].lower_bound,
16512                                   info->base_decl);
16513         }
16514       if (info->dimen[dim].upper_bound)
16515         add_descr_info_field (subrange_die, DW_AT_upper_bound,
16516                               info->dimen[dim].upper_bound,
16517                               info->base_decl);
16518       if (info->dimen[dim].stride)
16519         add_descr_info_field (subrange_die, DW_AT_byte_stride,
16520                               info->dimen[dim].stride,
16521                               info->base_decl);
16522     }
16523
16524   gen_type_die (info->element_type, context_die);
16525   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
16526
16527   if (get_AT (array_die, DW_AT_name))
16528     add_pubtype (type, array_die);
16529 }
16530
16531 #if 0
16532 static void
16533 gen_entry_point_die (tree decl, dw_die_ref context_die)
16534 {
16535   tree origin = decl_ultimate_origin (decl);
16536   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
16537
16538   if (origin != NULL)
16539     add_abstract_origin_attribute (decl_die, origin);
16540   else
16541     {
16542       add_name_and_src_coords_attributes (decl_die, decl);
16543       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
16544                           0, 0, context_die);
16545     }
16546
16547   if (DECL_ABSTRACT (decl))
16548     equate_decl_number_to_die (decl, decl_die);
16549   else
16550     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
16551 }
16552 #endif
16553
16554 /* Walk through the list of incomplete types again, trying once more to
16555    emit full debugging info for them.  */
16556
16557 static void
16558 retry_incomplete_types (void)
16559 {
16560   int i;
16561
16562   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
16563     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
16564                                   DINFO_USAGE_DIR_USE))
16565       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die ());
16566 }
16567
16568 /* Determine what tag to use for a record type.  */
16569
16570 static enum dwarf_tag
16571 record_type_tag (tree type)
16572 {
16573   if (! lang_hooks.types.classify_record)
16574     return DW_TAG_structure_type;
16575
16576   switch (lang_hooks.types.classify_record (type))
16577     {
16578     case RECORD_IS_STRUCT:
16579       return DW_TAG_structure_type;
16580
16581     case RECORD_IS_CLASS:
16582       return DW_TAG_class_type;
16583
16584     case RECORD_IS_INTERFACE:
16585       if (dwarf_version >= 3 || !dwarf_strict)
16586         return DW_TAG_interface_type;
16587       return DW_TAG_structure_type;
16588
16589     default:
16590       gcc_unreachable ();
16591     }
16592 }
16593
16594 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
16595    include all of the information about the enumeration values also. Each
16596    enumerated type name/value is listed as a child of the enumerated type
16597    DIE.  */
16598
16599 static dw_die_ref
16600 gen_enumeration_type_die (tree type, dw_die_ref context_die)
16601 {
16602   dw_die_ref type_die = lookup_type_die (type);
16603
16604   if (type_die == NULL)
16605     {
16606       type_die = new_die (DW_TAG_enumeration_type,
16607                           scope_die_for (type, context_die), type);
16608       equate_type_number_to_die (type, type_die);
16609       add_name_attribute (type_die, type_tag (type));
16610       add_gnat_descriptive_type_attribute (type_die, type, context_die);
16611       if (TYPE_ARTIFICIAL (type))
16612         add_AT_flag (type_die, DW_AT_artificial, 1);
16613       if (dwarf_version >= 4 || !dwarf_strict)
16614         {
16615           if (ENUM_IS_SCOPED (type))
16616             add_AT_flag (type_die, DW_AT_enum_class, 1);
16617           if (ENUM_IS_OPAQUE (type))
16618             add_AT_flag (type_die, DW_AT_declaration, 1);
16619         }
16620     }
16621   else if (! TYPE_SIZE (type))
16622     return type_die;
16623   else
16624     remove_AT (type_die, DW_AT_declaration);
16625
16626   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
16627      given enum type is incomplete, do not generate the DW_AT_byte_size
16628      attribute or the DW_AT_element_list attribute.  */
16629   if (TYPE_SIZE (type))
16630     {
16631       tree link;
16632
16633       TREE_ASM_WRITTEN (type) = 1;
16634       add_byte_size_attribute (type_die, type);
16635       if (TYPE_STUB_DECL (type) != NULL_TREE)
16636         {
16637           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
16638           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
16639         }
16640
16641       /* If the first reference to this type was as the return type of an
16642          inline function, then it may not have a parent.  Fix this now.  */
16643       if (type_die->die_parent == NULL)
16644         add_child_die (scope_die_for (type, context_die), type_die);
16645
16646       for (link = TYPE_VALUES (type);
16647            link != NULL; link = TREE_CHAIN (link))
16648         {
16649           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
16650           tree value = TREE_VALUE (link);
16651
16652           add_name_attribute (enum_die,
16653                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
16654
16655           if (TREE_CODE (value) == CONST_DECL)
16656             value = DECL_INITIAL (value);
16657
16658           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
16659             /* DWARF2 does not provide a way of indicating whether or
16660                not enumeration constants are signed or unsigned.  GDB
16661                always assumes the values are signed, so we output all
16662                values as if they were signed.  That means that
16663                enumeration constants with very large unsigned values
16664                will appear to have negative values in the debugger.  */
16665             add_AT_int (enum_die, DW_AT_const_value,
16666                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
16667         }
16668     }
16669   else
16670     add_AT_flag (type_die, DW_AT_declaration, 1);
16671
16672   if (get_AT (type_die, DW_AT_name))
16673     add_pubtype (type, type_die);
16674
16675   return type_die;
16676 }
16677
16678 /* Generate a DIE to represent either a real live formal parameter decl or to
16679    represent just the type of some formal parameter position in some function
16680    type.
16681
16682    Note that this routine is a bit unusual because its argument may be a
16683    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
16684    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
16685    node.  If it's the former then this function is being called to output a
16686    DIE to represent a formal parameter object (or some inlining thereof).  If
16687    it's the latter, then this function is only being called to output a
16688    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
16689    argument type of some subprogram type.
16690    If EMIT_NAME_P is true, name and source coordinate attributes
16691    are emitted.  */
16692
16693 static dw_die_ref
16694 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
16695                           dw_die_ref context_die)
16696 {
16697   tree node_or_origin = node ? node : origin;
16698   tree ultimate_origin;
16699   dw_die_ref parm_die
16700     = new_die (DW_TAG_formal_parameter, context_die, node);
16701
16702   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
16703     {
16704     case tcc_declaration:
16705       ultimate_origin = decl_ultimate_origin (node_or_origin);
16706       if (node || ultimate_origin)
16707         origin = ultimate_origin;
16708       if (origin != NULL)
16709         add_abstract_origin_attribute (parm_die, origin);
16710       else if (emit_name_p)
16711         add_name_and_src_coords_attributes (parm_die, node);
16712       if (origin == NULL
16713           || (! DECL_ABSTRACT (node_or_origin)
16714               && variably_modified_type_p (TREE_TYPE (node_or_origin),
16715                                            decl_function_context
16716                                                             (node_or_origin))))
16717         {
16718           tree type = TREE_TYPE (node_or_origin);
16719           if (decl_by_reference_p (node_or_origin))
16720             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
16721                                 context_die);
16722           else
16723             add_type_attribute (parm_die, type,
16724                                 TREE_READONLY (node_or_origin),
16725                                 TREE_THIS_VOLATILE (node_or_origin),
16726                                 context_die);
16727         }
16728       if (origin == NULL && DECL_ARTIFICIAL (node))
16729         add_AT_flag (parm_die, DW_AT_artificial, 1);
16730
16731       if (node && node != origin)
16732         equate_decl_number_to_die (node, parm_die);
16733       if (! DECL_ABSTRACT (node_or_origin))
16734         add_location_or_const_value_attribute (parm_die, node_or_origin,
16735                                                node == NULL, DW_AT_location);
16736
16737       break;
16738
16739     case tcc_type:
16740       /* We were called with some kind of a ..._TYPE node.  */
16741       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
16742       break;
16743
16744     default:
16745       gcc_unreachable ();
16746     }
16747
16748   return parm_die;
16749 }
16750
16751 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
16752    children DW_TAG_formal_parameter DIEs representing the arguments of the
16753    parameter pack.
16754
16755    PARM_PACK must be a function parameter pack.
16756    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
16757    must point to the subsequent arguments of the function PACK_ARG belongs to.
16758    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
16759    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
16760    following the last one for which a DIE was generated.  */
16761
16762 static dw_die_ref
16763 gen_formal_parameter_pack_die  (tree parm_pack,
16764                                 tree pack_arg,
16765                                 dw_die_ref subr_die,
16766                                 tree *next_arg)
16767 {
16768   tree arg;
16769   dw_die_ref parm_pack_die;
16770
16771   gcc_assert (parm_pack
16772               && lang_hooks.function_parameter_pack_p (parm_pack)
16773               && subr_die);
16774
16775   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
16776   add_src_coords_attributes (parm_pack_die, parm_pack);
16777
16778   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
16779     {
16780       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
16781                                                                  parm_pack))
16782         break;
16783       gen_formal_parameter_die (arg, NULL,
16784                                 false /* Don't emit name attribute.  */,
16785                                 parm_pack_die);
16786     }
16787   if (next_arg)
16788     *next_arg = arg;
16789   return parm_pack_die;
16790 }
16791
16792 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
16793    at the end of an (ANSI prototyped) formal parameters list.  */
16794
16795 static void
16796 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
16797 {
16798   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
16799 }
16800
16801 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
16802    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
16803    parameters as specified in some function type specification (except for
16804    those which appear as part of a function *definition*).  */
16805
16806 static void
16807 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
16808 {
16809   tree link;
16810   tree formal_type = NULL;
16811   tree first_parm_type;
16812   tree arg;
16813
16814   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
16815     {
16816       arg = DECL_ARGUMENTS (function_or_method_type);
16817       function_or_method_type = TREE_TYPE (function_or_method_type);
16818     }
16819   else
16820     arg = NULL_TREE;
16821
16822   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
16823
16824   /* Make our first pass over the list of formal parameter types and output a
16825      DW_TAG_formal_parameter DIE for each one.  */
16826   for (link = first_parm_type; link; )
16827     {
16828       dw_die_ref parm_die;
16829
16830       formal_type = TREE_VALUE (link);
16831       if (formal_type == void_type_node)
16832         break;
16833
16834       /* Output a (nameless) DIE to represent the formal parameter itself.  */
16835       parm_die = gen_formal_parameter_die (formal_type, NULL,
16836                                            true /* Emit name attribute.  */,
16837                                            context_die);
16838       if (TREE_CODE (function_or_method_type) == METHOD_TYPE
16839           && link == first_parm_type)
16840         {
16841           add_AT_flag (parm_die, DW_AT_artificial, 1);
16842           if (dwarf_version >= 3 || !dwarf_strict)
16843             add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
16844         }
16845       else if (arg && DECL_ARTIFICIAL (arg))
16846         add_AT_flag (parm_die, DW_AT_artificial, 1);
16847
16848       link = TREE_CHAIN (link);
16849       if (arg)
16850         arg = DECL_CHAIN (arg);
16851     }
16852
16853   /* If this function type has an ellipsis, add a
16854      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
16855   if (formal_type != void_type_node)
16856     gen_unspecified_parameters_die (function_or_method_type, context_die);
16857
16858   /* Make our second (and final) pass over the list of formal parameter types
16859      and output DIEs to represent those types (as necessary).  */
16860   for (link = TYPE_ARG_TYPES (function_or_method_type);
16861        link && TREE_VALUE (link);
16862        link = TREE_CHAIN (link))
16863     gen_type_die (TREE_VALUE (link), context_die);
16864 }
16865
16866 /* We want to generate the DIE for TYPE so that we can generate the
16867    die for MEMBER, which has been defined; we will need to refer back
16868    to the member declaration nested within TYPE.  If we're trying to
16869    generate minimal debug info for TYPE, processing TYPE won't do the
16870    trick; we need to attach the member declaration by hand.  */
16871
16872 static void
16873 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
16874 {
16875   gen_type_die (type, context_die);
16876
16877   /* If we're trying to avoid duplicate debug info, we may not have
16878      emitted the member decl for this function.  Emit it now.  */
16879   if (TYPE_STUB_DECL (type)
16880       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
16881       && ! lookup_decl_die (member))
16882     {
16883       dw_die_ref type_die;
16884       gcc_assert (!decl_ultimate_origin (member));
16885
16886       push_decl_scope (type);
16887       type_die = lookup_type_die_strip_naming_typedef (type);
16888       if (TREE_CODE (member) == FUNCTION_DECL)
16889         gen_subprogram_die (member, type_die);
16890       else if (TREE_CODE (member) == FIELD_DECL)
16891         {
16892           /* Ignore the nameless fields that are used to skip bits but handle
16893              C++ anonymous unions and structs.  */
16894           if (DECL_NAME (member) != NULL_TREE
16895               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
16896               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
16897             {
16898               gen_type_die (member_declared_type (member), type_die);
16899               gen_field_die (member, type_die);
16900             }
16901         }
16902       else
16903         gen_variable_die (member, NULL_TREE, type_die);
16904
16905       pop_decl_scope ();
16906     }
16907 }
16908
16909 /* Generate the DWARF2 info for the "abstract" instance of a function which we
16910    may later generate inlined and/or out-of-line instances of.  */
16911
16912 static void
16913 dwarf2out_abstract_function (tree decl)
16914 {
16915   dw_die_ref old_die;
16916   tree save_fn;
16917   tree context;
16918   int was_abstract;
16919   htab_t old_decl_loc_table;
16920   htab_t old_cached_dw_loc_list_table;
16921   int old_call_site_count, old_tail_call_site_count;
16922   struct call_arg_loc_node *old_call_arg_locations;
16923
16924   /* Make sure we have the actual abstract inline, not a clone.  */
16925   decl = DECL_ORIGIN (decl);
16926
16927   old_die = lookup_decl_die (decl);
16928   if (old_die && get_AT (old_die, DW_AT_inline))
16929     /* We've already generated the abstract instance.  */
16930     return;
16931
16932   /* We can be called while recursively when seeing block defining inlined subroutine
16933      DIE.  Be sure to not clobber the outer location table nor use it or we would
16934      get locations in abstract instantces.  */
16935   old_decl_loc_table = decl_loc_table;
16936   decl_loc_table = NULL;
16937   old_cached_dw_loc_list_table = cached_dw_loc_list_table;
16938   cached_dw_loc_list_table = NULL;
16939   old_call_arg_locations = call_arg_locations;
16940   call_arg_locations = NULL;
16941   old_call_site_count = call_site_count;
16942   call_site_count = -1;
16943   old_tail_call_site_count = tail_call_site_count;
16944   tail_call_site_count = -1;
16945
16946   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
16947      we don't get confused by DECL_ABSTRACT.  */
16948   if (debug_info_level > DINFO_LEVEL_TERSE)
16949     {
16950       context = decl_class_context (decl);
16951       if (context)
16952         gen_type_die_for_member
16953           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
16954     }
16955
16956   /* Pretend we've just finished compiling this function.  */
16957   save_fn = current_function_decl;
16958   current_function_decl = decl;
16959   push_cfun (DECL_STRUCT_FUNCTION (decl));
16960
16961   was_abstract = DECL_ABSTRACT (decl);
16962   set_decl_abstract_flags (decl, 1);
16963   dwarf2out_decl (decl);
16964   if (! was_abstract)
16965     set_decl_abstract_flags (decl, 0);
16966
16967   current_function_decl = save_fn;
16968   decl_loc_table = old_decl_loc_table;
16969   cached_dw_loc_list_table = old_cached_dw_loc_list_table;
16970   call_arg_locations = old_call_arg_locations;
16971   call_site_count = old_call_site_count;
16972   tail_call_site_count = old_tail_call_site_count;
16973   pop_cfun ();
16974 }
16975
16976 /* Helper function of premark_used_types() which gets called through
16977    htab_traverse.
16978
16979    Marks the DIE of a given type in *SLOT as perennial, so it never gets
16980    marked as unused by prune_unused_types.  */
16981
16982 static int
16983 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
16984 {
16985   tree type;
16986   dw_die_ref die;
16987
16988   type = (tree) *slot;
16989   die = lookup_type_die (type);
16990   if (die != NULL)
16991     die->die_perennial_p = 1;
16992   return 1;
16993 }
16994
16995 /* Helper function of premark_types_used_by_global_vars which gets called
16996    through htab_traverse.
16997
16998    Marks the DIE of a given type in *SLOT as perennial, so it never gets
16999    marked as unused by prune_unused_types. The DIE of the type is marked
17000    only if the global variable using the type will actually be emitted.  */
17001
17002 static int
17003 premark_types_used_by_global_vars_helper (void **slot,
17004                                           void *data ATTRIBUTE_UNUSED)
17005 {
17006   struct types_used_by_vars_entry *entry;
17007   dw_die_ref die;
17008
17009   entry = (struct types_used_by_vars_entry *) *slot;
17010   gcc_assert (entry->type != NULL
17011               && entry->var_decl != NULL);
17012   die = lookup_type_die (entry->type);
17013   if (die)
17014     {
17015       /* Ask cgraph if the global variable really is to be emitted.
17016          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17017       struct varpool_node *node = varpool_get_node (entry->var_decl);
17018       if (node && node->needed)
17019         {
17020           die->die_perennial_p = 1;
17021           /* Keep the parent DIEs as well.  */
17022           while ((die = die->die_parent) && die->die_perennial_p == 0)
17023             die->die_perennial_p = 1;
17024         }
17025     }
17026   return 1;
17027 }
17028
17029 /* Mark all members of used_types_hash as perennial.  */
17030
17031 static void
17032 premark_used_types (void)
17033 {
17034   if (cfun && cfun->used_types_hash)
17035     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17036 }
17037
17038 /* Mark all members of types_used_by_vars_entry as perennial.  */
17039
17040 static void
17041 premark_types_used_by_global_vars (void)
17042 {
17043   if (types_used_by_vars_hash)
17044     htab_traverse (types_used_by_vars_hash,
17045                    premark_types_used_by_global_vars_helper, NULL);
17046 }
17047
17048 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
17049    for CA_LOC call arg loc node.  */
17050
17051 static dw_die_ref
17052 gen_call_site_die (tree decl, dw_die_ref subr_die,
17053                    struct call_arg_loc_node *ca_loc)
17054 {
17055   dw_die_ref stmt_die = NULL, die;
17056   tree block = ca_loc->block;
17057
17058   while (block
17059          && block != DECL_INITIAL (decl)
17060          && TREE_CODE (block) == BLOCK)
17061     {
17062       if (VEC_length (dw_die_ref, block_map) > BLOCK_NUMBER (block))
17063         stmt_die = VEC_index (dw_die_ref, block_map, BLOCK_NUMBER (block));
17064       if (stmt_die)
17065         break;
17066       block = BLOCK_SUPERCONTEXT (block);
17067     }
17068   if (stmt_die == NULL)
17069     stmt_die = subr_die;
17070   die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
17071   add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
17072   if (ca_loc->tail_call_p)
17073     add_AT_flag (die, DW_AT_GNU_tail_call, 1);
17074   if (ca_loc->symbol_ref)
17075     {
17076       dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
17077       if (tdie)
17078         add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
17079       else
17080         add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref);
17081     }
17082   return die;
17083 }
17084
17085 /* Generate a DIE to represent a declared function (either file-scope or
17086    block-local).  */
17087
17088 static void
17089 gen_subprogram_die (tree decl, dw_die_ref context_die)
17090 {
17091   tree origin = decl_ultimate_origin (decl);
17092   dw_die_ref subr_die;
17093   tree outer_scope;
17094   dw_die_ref old_die = lookup_decl_die (decl);
17095   int declaration = (current_function_decl != decl
17096                      || class_or_namespace_scope_p (context_die));
17097
17098   premark_used_types ();
17099
17100   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17101      started to generate the abstract instance of an inline, decided to output
17102      its containing class, and proceeded to emit the declaration of the inline
17103      from the member list for the class.  If so, DECLARATION takes priority;
17104      we'll get back to the abstract instance when done with the class.  */
17105
17106   /* The class-scope declaration DIE must be the primary DIE.  */
17107   if (origin && declaration && class_or_namespace_scope_p (context_die))
17108     {
17109       origin = NULL;
17110       gcc_assert (!old_die);
17111     }
17112
17113   /* Now that the C++ front end lazily declares artificial member fns, we
17114      might need to retrofit the declaration into its class.  */
17115   if (!declaration && !origin && !old_die
17116       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17117       && !class_or_namespace_scope_p (context_die)
17118       && debug_info_level > DINFO_LEVEL_TERSE)
17119     old_die = force_decl_die (decl);
17120
17121   if (origin != NULL)
17122     {
17123       gcc_assert (!declaration || local_scope_p (context_die));
17124
17125       /* Fixup die_parent for the abstract instance of a nested
17126          inline function.  */
17127       if (old_die && old_die->die_parent == NULL)
17128         add_child_die (context_die, old_die);
17129
17130       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17131       add_abstract_origin_attribute (subr_die, origin);
17132       /*  This is where the actual code for a cloned function is.
17133           Let's emit linkage name attribute for it.  This helps
17134           debuggers to e.g, set breakpoints into
17135           constructors/destructors when the user asks "break
17136           K::K".  */
17137       add_linkage_name (subr_die, decl);
17138     }
17139   else if (old_die)
17140     {
17141       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17142       struct dwarf_file_data * file_index = lookup_filename (s.file);
17143
17144       if (!get_AT_flag (old_die, DW_AT_declaration)
17145           /* We can have a normal definition following an inline one in the
17146              case of redefinition of GNU C extern inlines.
17147              It seems reasonable to use AT_specification in this case.  */
17148           && !get_AT (old_die, DW_AT_inline))
17149         {
17150           /* Detect and ignore this case, where we are trying to output
17151              something we have already output.  */
17152           return;
17153         }
17154
17155       /* If the definition comes from the same place as the declaration,
17156          maybe use the old DIE.  We always want the DIE for this function
17157          that has the *_pc attributes to be under comp_unit_die so the
17158          debugger can find it.  We also need to do this for abstract
17159          instances of inlines, since the spec requires the out-of-line copy
17160          to have the same parent.  For local class methods, this doesn't
17161          apply; we just use the old DIE.  */
17162       if ((is_cu_die (old_die->die_parent) || context_die == NULL)
17163           && (DECL_ARTIFICIAL (decl)
17164               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17165                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17166                       == (unsigned) s.line))))
17167         {
17168           subr_die = old_die;
17169
17170           /* Clear out the declaration attribute and the formal parameters.
17171              Do not remove all children, because it is possible that this
17172              declaration die was forced using force_decl_die(). In such
17173              cases die that forced declaration die (e.g. TAG_imported_module)
17174              is one of the children that we do not want to remove.  */
17175           remove_AT (subr_die, DW_AT_declaration);
17176           remove_AT (subr_die, DW_AT_object_pointer);
17177           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17178         }
17179       else
17180         {
17181           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17182           add_AT_specification (subr_die, old_die);
17183           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17184             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17185           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17186             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17187         }
17188     }
17189   else
17190     {
17191       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17192
17193       if (TREE_PUBLIC (decl))
17194         add_AT_flag (subr_die, DW_AT_external, 1);
17195
17196       add_name_and_src_coords_attributes (subr_die, decl);
17197       if (debug_info_level > DINFO_LEVEL_TERSE)
17198         {
17199           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17200           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17201                               0, 0, context_die);
17202         }
17203
17204       add_pure_or_virtual_attribute (subr_die, decl);
17205       if (DECL_ARTIFICIAL (decl))
17206         add_AT_flag (subr_die, DW_AT_artificial, 1);
17207
17208       add_accessibility_attribute (subr_die, decl);
17209     }
17210
17211   if (declaration)
17212     {
17213       if (!old_die || !get_AT (old_die, DW_AT_inline))
17214         {
17215           add_AT_flag (subr_die, DW_AT_declaration, 1);
17216
17217           /* If this is an explicit function declaration then generate
17218              a DW_AT_explicit attribute.  */
17219           if (lang_hooks.decls.function_decl_explicit_p (decl)
17220               && (dwarf_version >= 3 || !dwarf_strict))
17221             add_AT_flag (subr_die, DW_AT_explicit, 1);
17222
17223           /* The first time we see a member function, it is in the context of
17224              the class to which it belongs.  We make sure of this by emitting
17225              the class first.  The next time is the definition, which is
17226              handled above.  The two may come from the same source text.
17227
17228              Note that force_decl_die() forces function declaration die. It is
17229              later reused to represent definition.  */
17230           equate_decl_number_to_die (decl, subr_die);
17231         }
17232     }
17233   else if (DECL_ABSTRACT (decl))
17234     {
17235       if (DECL_DECLARED_INLINE_P (decl))
17236         {
17237           if (cgraph_function_possibly_inlined_p (decl))
17238             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17239           else
17240             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17241         }
17242       else
17243         {
17244           if (cgraph_function_possibly_inlined_p (decl))
17245             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17246           else
17247             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17248         }
17249
17250       if (DECL_DECLARED_INLINE_P (decl)
17251           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17252         add_AT_flag (subr_die, DW_AT_artificial, 1);
17253
17254       equate_decl_number_to_die (decl, subr_die);
17255     }
17256   else if (!DECL_EXTERNAL (decl))
17257     {
17258       HOST_WIDE_INT cfa_fb_offset;
17259
17260       if (!old_die || !get_AT (old_die, DW_AT_inline))
17261         equate_decl_number_to_die (decl, subr_die);
17262
17263       if (!flag_reorder_blocks_and_partition)
17264         {
17265           dw_fde_ref fde = cfun->fde;
17266           if (fde->dw_fde_begin)
17267             {
17268               /* We have already generated the labels.  */
17269               add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17270               add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17271             }
17272           else
17273             {
17274               /* Create start/end labels and add the range.  */
17275               char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17276               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17277                                            current_function_funcdef_no);
17278               add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17279               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17280                                            current_function_funcdef_no);
17281               add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17282             }
17283
17284 #if VMS_DEBUGGING_INFO
17285       /* HP OpenVMS Industry Standard 64: DWARF Extensions
17286          Section 2.3 Prologue and Epilogue Attributes:
17287          When a breakpoint is set on entry to a function, it is generally
17288          desirable for execution to be suspended, not on the very first
17289          instruction of the function, but rather at a point after the
17290          function's frame has been set up, after any language defined local
17291          declaration processing has been completed, and before execution of
17292          the first statement of the function begins. Debuggers generally
17293          cannot properly determine where this point is.  Similarly for a
17294          breakpoint set on exit from a function. The prologue and epilogue
17295          attributes allow a compiler to communicate the location(s) to use.  */
17296
17297       {
17298         if (fde->dw_fde_vms_end_prologue)
17299           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
17300             fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
17301
17302         if (fde->dw_fde_vms_begin_epilogue)
17303           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
17304             fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
17305       }
17306 #endif
17307
17308           add_pubname (decl, subr_die);
17309         }
17310       else
17311         {
17312           /* Generate pubnames entries for the split function code ranges.  */
17313           dw_fde_ref fde = cfun->fde;
17314
17315           if (fde->dw_fde_second_begin)
17316             {
17317               if (dwarf_version >= 3 || !dwarf_strict)
17318                 {
17319                   /* We should use ranges for non-contiguous code section 
17320                      addresses.  Use the actual code range for the initial
17321                      section, since the HOT/COLD labels might precede an 
17322                      alignment offset.  */
17323                   bool range_list_added = false;
17324                   add_ranges_by_labels (subr_die, fde->dw_fde_begin,
17325                                         fde->dw_fde_end, &range_list_added);
17326                   add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
17327                                         fde->dw_fde_second_end,
17328                                         &range_list_added);
17329                   add_pubname (decl, subr_die);
17330                   if (range_list_added)
17331                     add_ranges (NULL);
17332                 }
17333               else
17334                 {
17335                   /* There is no real support in DW2 for this .. so we make
17336                      a work-around.  First, emit the pub name for the segment
17337                      containing the function label.  Then make and emit a
17338                      simplified subprogram DIE for the second segment with the
17339                      name pre-fixed by __hot/cold_sect_of_.  We use the same
17340                      linkage name for the second die so that gdb will find both
17341                      sections when given "b foo".  */
17342                   const char *name = NULL;
17343                   tree decl_name = DECL_NAME (decl);
17344                   dw_die_ref seg_die;
17345
17346                   /* Do the 'primary' section.   */
17347                   add_AT_lbl_id (subr_die, DW_AT_low_pc,
17348                                  fde->dw_fde_begin);
17349                   add_AT_lbl_id (subr_die, DW_AT_high_pc,
17350                                  fde->dw_fde_end);
17351                   /* Add it.   */
17352                   add_pubname (decl, subr_die);
17353
17354                   /* Build a minimal DIE for the secondary section.  */
17355                   seg_die = new_die (DW_TAG_subprogram,
17356                                      subr_die->die_parent, decl);
17357
17358                   if (TREE_PUBLIC (decl))
17359                     add_AT_flag (seg_die, DW_AT_external, 1);
17360
17361                   if (decl_name != NULL 
17362                       && IDENTIFIER_POINTER (decl_name) != NULL)
17363                     {
17364                       name = dwarf2_name (decl, 1);
17365                       if (! DECL_ARTIFICIAL (decl))
17366                         add_src_coords_attributes (seg_die, decl);
17367
17368                       add_linkage_name (seg_die, decl);
17369                     }
17370                   gcc_assert (name != NULL);
17371                   add_pure_or_virtual_attribute (seg_die, decl);
17372                   if (DECL_ARTIFICIAL (decl))
17373                     add_AT_flag (seg_die, DW_AT_artificial, 1);
17374
17375                   name = concat ("__second_sect_of_", name, NULL); 
17376                   add_AT_lbl_id (seg_die, DW_AT_low_pc,
17377                                  fde->dw_fde_second_begin);
17378                   add_AT_lbl_id (seg_die, DW_AT_high_pc,
17379                                  fde->dw_fde_second_end);
17380                   add_name_attribute (seg_die, name);
17381                   add_pubname_string (name, seg_die);
17382                 }
17383             }
17384           else
17385             {
17386               add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17387               add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17388               add_pubname (decl, subr_die);
17389             }
17390         }
17391
17392 #ifdef MIPS_DEBUGGING_INFO
17393       /* Add a reference to the FDE for this routine.  */
17394       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, cfun->fde->fde_index);
17395 #endif
17396
17397       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17398
17399       /* We define the "frame base" as the function's CFA.  This is more
17400          convenient for several reasons: (1) It's stable across the prologue
17401          and epilogue, which makes it better than just a frame pointer,
17402          (2) With dwarf3, there exists a one-byte encoding that allows us
17403          to reference the .debug_frame data by proxy, but failing that,
17404          (3) We can at least reuse the code inspection and interpretation
17405          code that determines the CFA position at various points in the
17406          function.  */
17407       if (dwarf_version >= 3)
17408         {
17409           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17410           add_AT_loc (subr_die, DW_AT_frame_base, op);
17411         }
17412       else
17413         {
17414           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17415           if (list->dw_loc_next)
17416             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17417           else
17418             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17419         }
17420
17421       /* Compute a displacement from the "steady-state frame pointer" to
17422          the CFA.  The former is what all stack slots and argument slots
17423          will reference in the rtl; the later is what we've told the
17424          debugger about.  We'll need to adjust all frame_base references
17425          by this displacement.  */
17426       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17427
17428       if (cfun->static_chain_decl)
17429         add_AT_location_description (subr_die, DW_AT_static_link,
17430                  loc_list_from_tree (cfun->static_chain_decl, 2));
17431     }
17432
17433   /* Generate child dies for template paramaters.  */
17434   if (debug_info_level > DINFO_LEVEL_TERSE)
17435     gen_generic_params_dies (decl);
17436
17437   /* Now output descriptions of the arguments for this function. This gets
17438      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17439      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17440      `...' at the end of the formal parameter list.  In order to find out if
17441      there was a trailing ellipsis or not, we must instead look at the type
17442      associated with the FUNCTION_DECL.  This will be a node of type
17443      FUNCTION_TYPE. If the chain of type nodes hanging off of this
17444      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17445      an ellipsis at the end.  */
17446
17447   /* In the case where we are describing a mere function declaration, all we
17448      need to do here (and all we *can* do here) is to describe the *types* of
17449      its formal parameters.  */
17450   if (debug_info_level <= DINFO_LEVEL_TERSE)
17451     ;
17452   else if (declaration)
17453     gen_formal_types_die (decl, subr_die);
17454   else
17455     {
17456       /* Generate DIEs to represent all known formal parameters.  */
17457       tree parm = DECL_ARGUMENTS (decl);
17458       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17459       tree generic_decl_parm = generic_decl
17460                                 ? DECL_ARGUMENTS (generic_decl)
17461                                 : NULL;
17462
17463       /* Now we want to walk the list of parameters of the function and
17464          emit their relevant DIEs.
17465
17466          We consider the case of DECL being an instance of a generic function
17467          as well as it being a normal function.
17468
17469          If DECL is an instance of a generic function we walk the
17470          parameters of the generic function declaration _and_ the parameters of
17471          DECL itself. This is useful because we want to emit specific DIEs for
17472          function parameter packs and those are declared as part of the
17473          generic function declaration. In that particular case,
17474          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17475          That DIE has children DIEs representing the set of arguments
17476          of the pack. Note that the set of pack arguments can be empty.
17477          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17478          children DIE.
17479
17480          Otherwise, we just consider the parameters of DECL.  */
17481       while (generic_decl_parm || parm)
17482         {
17483           if (generic_decl_parm
17484               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17485             gen_formal_parameter_pack_die (generic_decl_parm,
17486                                            parm, subr_die,
17487                                            &parm);
17488           else if (parm)
17489             {
17490               dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
17491
17492               if (parm == DECL_ARGUMENTS (decl)
17493                   && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
17494                   && parm_die
17495                   && (dwarf_version >= 3 || !dwarf_strict))
17496                 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
17497
17498               parm = DECL_CHAIN (parm);
17499             }
17500
17501           if (generic_decl_parm)
17502             generic_decl_parm = DECL_CHAIN (generic_decl_parm);
17503         }
17504
17505       /* Decide whether we need an unspecified_parameters DIE at the end.
17506          There are 2 more cases to do this for: 1) the ansi ... declaration -
17507          this is detectable when the end of the arg list is not a
17508          void_type_node 2) an unprototyped function declaration (not a
17509          definition).  This just means that we have no info about the
17510          parameters at all.  */
17511       if (prototype_p (TREE_TYPE (decl)))
17512         {
17513           /* This is the prototyped case, check for....  */
17514           if (stdarg_p (TREE_TYPE (decl)))
17515             gen_unspecified_parameters_die (decl, subr_die);
17516         }
17517       else if (DECL_INITIAL (decl) == NULL_TREE)
17518         gen_unspecified_parameters_die (decl, subr_die);
17519     }
17520
17521   /* Output Dwarf info for all of the stuff within the body of the function
17522      (if it has one - it may be just a declaration).  */
17523   outer_scope = DECL_INITIAL (decl);
17524
17525   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17526      a function.  This BLOCK actually represents the outermost binding contour
17527      for the function, i.e. the contour in which the function's formal
17528      parameters and labels get declared. Curiously, it appears that the front
17529      end doesn't actually put the PARM_DECL nodes for the current function onto
17530      the BLOCK_VARS list for this outer scope, but are strung off of the
17531      DECL_ARGUMENTS list for the function instead.
17532
17533      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17534      the LABEL_DECL nodes for the function however, and we output DWARF info
17535      for those in decls_for_scope.  Just within the `outer_scope' there will be
17536      a BLOCK node representing the function's outermost pair of curly braces,
17537      and any blocks used for the base and member initializers of a C++
17538      constructor function.  */
17539   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17540     {
17541       int call_site_note_count = 0;
17542       int tail_call_site_note_count = 0;
17543
17544       /* Emit a DW_TAG_variable DIE for a named return value.  */
17545       if (DECL_NAME (DECL_RESULT (decl)))
17546         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17547
17548       current_function_has_inlines = 0;
17549       decls_for_scope (outer_scope, subr_die, 0);
17550
17551       if (call_arg_locations && !dwarf_strict)
17552         {
17553           struct call_arg_loc_node *ca_loc;
17554           for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
17555             {
17556               dw_die_ref die = NULL;
17557               rtx tloc = NULL_RTX, tlocc = NULL_RTX;
17558               rtx arg, next_arg;
17559
17560               for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
17561                    arg; arg = next_arg)
17562                 {
17563                   dw_loc_descr_ref reg, val;
17564                   enum machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
17565                   dw_die_ref cdie, tdie = NULL;
17566
17567                   next_arg = XEXP (arg, 1);
17568                   if (REG_P (XEXP (XEXP (arg, 0), 0))
17569                       && next_arg
17570                       && MEM_P (XEXP (XEXP (next_arg, 0), 0))
17571                       && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
17572                       && REGNO (XEXP (XEXP (arg, 0), 0))
17573                          == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
17574                     next_arg = XEXP (next_arg, 1);
17575                   if (mode == VOIDmode)
17576                     {
17577                       mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
17578                       if (mode == VOIDmode)
17579                         mode = GET_MODE (XEXP (arg, 0));
17580                     }
17581                   if (mode == VOIDmode || mode == BLKmode)
17582                     continue;
17583                   if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
17584                     {
17585                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17586                       tloc = XEXP (XEXP (arg, 0), 1);
17587                       continue;
17588                     }
17589                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
17590                            && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
17591                     {
17592                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17593                       tlocc = XEXP (XEXP (arg, 0), 1);
17594                       continue;
17595                     }
17596                   reg = NULL;
17597                   if (REG_P (XEXP (XEXP (arg, 0), 0)))
17598                     reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
17599                                               VAR_INIT_STATUS_INITIALIZED);
17600                   else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
17601                     {
17602                       rtx mem = XEXP (XEXP (arg, 0), 0);
17603                       reg = mem_loc_descriptor (XEXP (mem, 0),
17604                                                 get_address_mode (mem),
17605                                                 GET_MODE (mem),
17606                                                 VAR_INIT_STATUS_INITIALIZED);
17607                     }
17608                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
17609                            == DEBUG_PARAMETER_REF)
17610                     {
17611                       tree tdecl
17612                         = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
17613                       tdie = lookup_decl_die (tdecl);
17614                       if (tdie == NULL)
17615                         continue;
17616                     }
17617                   else
17618                     continue;
17619                   if (reg == NULL
17620                       && GET_CODE (XEXP (XEXP (arg, 0), 0))
17621                          != DEBUG_PARAMETER_REF)
17622                     continue;
17623                   val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
17624                                             VOIDmode,
17625                                             VAR_INIT_STATUS_INITIALIZED);
17626                   if (val == NULL)
17627                     continue;
17628                   if (die == NULL)
17629                     die = gen_call_site_die (decl, subr_die, ca_loc);
17630                   cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
17631                                   NULL_TREE);
17632                   if (reg != NULL)
17633                     add_AT_loc (cdie, DW_AT_location, reg);
17634                   else if (tdie != NULL)
17635                     add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
17636                   add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
17637                   if (next_arg != XEXP (arg, 1))
17638                     {
17639                       mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
17640                       if (mode == VOIDmode)
17641                         mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
17642                       val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
17643                                                             0), 1),
17644                                                 mode, VOIDmode,
17645                                                 VAR_INIT_STATUS_INITIALIZED);
17646                       if (val != NULL)
17647                         add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
17648                     }
17649                 }
17650               if (die == NULL
17651                   && (ca_loc->symbol_ref || tloc))
17652                 die = gen_call_site_die (decl, subr_die, ca_loc);
17653               if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
17654                 {
17655                   dw_loc_descr_ref tval = NULL;
17656
17657                   if (tloc != NULL_RTX)
17658                     tval = mem_loc_descriptor (tloc,
17659                                                GET_MODE (tloc) == VOIDmode
17660                                                ? Pmode : GET_MODE (tloc),
17661                                                VOIDmode,
17662                                                VAR_INIT_STATUS_INITIALIZED);
17663                   if (tval)
17664                     add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
17665                   else if (tlocc != NULL_RTX)
17666                     {
17667                       tval = mem_loc_descriptor (tlocc,
17668                                                  GET_MODE (tlocc) == VOIDmode
17669                                                  ? Pmode : GET_MODE (tlocc),
17670                                                  VOIDmode,
17671                                                  VAR_INIT_STATUS_INITIALIZED);
17672                       if (tval)
17673                         add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
17674                                     tval);
17675                     }
17676                 }
17677               if (die != NULL)
17678                 {
17679                   call_site_note_count++;
17680                   if (ca_loc->tail_call_p)
17681                     tail_call_site_note_count++;
17682                 }
17683             }
17684         }
17685       call_arg_locations = NULL;
17686       call_arg_loc_last = NULL;
17687       if (tail_call_site_count >= 0
17688           && tail_call_site_count == tail_call_site_note_count
17689           && !dwarf_strict)
17690         {
17691           if (call_site_count >= 0
17692               && call_site_count == call_site_note_count)
17693             add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
17694           else
17695             add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
17696         }
17697       call_site_count = -1;
17698       tail_call_site_count = -1;
17699     }
17700   /* Add the calling convention attribute if requested.  */
17701   add_calling_convention_attribute (subr_die, decl);
17702
17703 }
17704
17705 /* Returns a hash value for X (which really is a die_struct).  */
17706
17707 static hashval_t
17708 common_block_die_table_hash (const void *x)
17709 {
17710   const_dw_die_ref d = (const_dw_die_ref) x;
17711   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17712 }
17713
17714 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17715    as decl_id and die_parent of die_struct Y.  */
17716
17717 static int
17718 common_block_die_table_eq (const void *x, const void *y)
17719 {
17720   const_dw_die_ref d = (const_dw_die_ref) x;
17721   const_dw_die_ref e = (const_dw_die_ref) y;
17722   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
17723 }
17724
17725 /* Generate a DIE to represent a declared data object.
17726    Either DECL or ORIGIN must be non-null.  */
17727
17728 static void
17729 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
17730 {
17731   HOST_WIDE_INT off;
17732   tree com_decl;
17733   tree decl_or_origin = decl ? decl : origin;
17734   tree ultimate_origin;
17735   dw_die_ref var_die;
17736   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
17737   dw_die_ref origin_die;
17738   bool declaration = (DECL_EXTERNAL (decl_or_origin)
17739                       || class_or_namespace_scope_p (context_die));
17740   bool specialization_p = false;
17741
17742   ultimate_origin = decl_ultimate_origin (decl_or_origin);
17743   if (decl || ultimate_origin)
17744     origin = ultimate_origin;
17745   com_decl = fortran_common (decl_or_origin, &off);
17746
17747   /* Symbol in common gets emitted as a child of the common block, in the form
17748      of a data member.  */
17749   if (com_decl)
17750     {
17751       dw_die_ref com_die;
17752       dw_loc_list_ref loc;
17753       die_node com_die_arg;
17754
17755       var_die = lookup_decl_die (decl_or_origin);
17756       if (var_die)
17757         {
17758           if (get_AT (var_die, DW_AT_location) == NULL)
17759             {
17760               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
17761               if (loc)
17762                 {
17763                   if (off)
17764                     {
17765                       /* Optimize the common case.  */
17766                       if (single_element_loc_list_p (loc)
17767                           && loc->expr->dw_loc_opc == DW_OP_addr
17768                           && loc->expr->dw_loc_next == NULL
17769                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
17770                              == SYMBOL_REF)
17771                         loc->expr->dw_loc_oprnd1.v.val_addr
17772                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17773                         else
17774                           loc_list_plus_const (loc, off);
17775                     }
17776                   add_AT_location_description (var_die, DW_AT_location, loc);
17777                   remove_AT (var_die, DW_AT_declaration);
17778                 }
17779             }
17780           return;
17781         }
17782
17783       if (common_block_die_table == NULL)
17784         common_block_die_table
17785           = htab_create_ggc (10, common_block_die_table_hash,
17786                              common_block_die_table_eq, NULL);
17787
17788       com_die_arg.decl_id = DECL_UID (com_decl);
17789       com_die_arg.die_parent = context_die;
17790       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
17791       loc = loc_list_from_tree (com_decl, 2);
17792       if (com_die == NULL)
17793         {
17794           const char *cnam
17795             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
17796           void **slot;
17797
17798           com_die = new_die (DW_TAG_common_block, context_die, decl);
17799           add_name_and_src_coords_attributes (com_die, com_decl);
17800           if (loc)
17801             {
17802               add_AT_location_description (com_die, DW_AT_location, loc);
17803               /* Avoid sharing the same loc descriptor between
17804                  DW_TAG_common_block and DW_TAG_variable.  */
17805               loc = loc_list_from_tree (com_decl, 2);
17806             }
17807           else if (DECL_EXTERNAL (decl))
17808             add_AT_flag (com_die, DW_AT_declaration, 1);
17809           add_pubname_string (cnam, com_die); /* ??? needed? */
17810           com_die->decl_id = DECL_UID (com_decl);
17811           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
17812           *slot = (void *) com_die;
17813         }
17814       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
17815         {
17816           add_AT_location_description (com_die, DW_AT_location, loc);
17817           loc = loc_list_from_tree (com_decl, 2);
17818           remove_AT (com_die, DW_AT_declaration);
17819         }
17820       var_die = new_die (DW_TAG_variable, com_die, decl);
17821       add_name_and_src_coords_attributes (var_die, decl);
17822       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
17823                           TREE_THIS_VOLATILE (decl), context_die);
17824       add_AT_flag (var_die, DW_AT_external, 1);
17825       if (loc)
17826         {
17827           if (off)
17828             {
17829               /* Optimize the common case.  */
17830               if (single_element_loc_list_p (loc)
17831                   && loc->expr->dw_loc_opc == DW_OP_addr
17832                   && loc->expr->dw_loc_next == NULL
17833                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
17834                 loc->expr->dw_loc_oprnd1.v.val_addr
17835                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17836               else
17837                 loc_list_plus_const (loc, off);
17838             }
17839           add_AT_location_description (var_die, DW_AT_location, loc);
17840         }
17841       else if (DECL_EXTERNAL (decl))
17842         add_AT_flag (var_die, DW_AT_declaration, 1);
17843       equate_decl_number_to_die (decl, var_die);
17844       return;
17845     }
17846
17847   /* If the compiler emitted a definition for the DECL declaration
17848      and if we already emitted a DIE for it, don't emit a second
17849      DIE for it again. Allow re-declarations of DECLs that are
17850      inside functions, though.  */
17851   if (old_die && declaration && !local_scope_p (context_die))
17852     return;
17853
17854   /* For static data members, the declaration in the class is supposed
17855      to have DW_TAG_member tag; the specification should still be
17856      DW_TAG_variable referencing the DW_TAG_member DIE.  */
17857   if (declaration && class_scope_p (context_die))
17858     var_die = new_die (DW_TAG_member, context_die, decl);
17859   else
17860     var_die = new_die (DW_TAG_variable, context_die, decl);
17861
17862   origin_die = NULL;
17863   if (origin != NULL)
17864     origin_die = add_abstract_origin_attribute (var_die, origin);
17865
17866   /* Loop unrolling can create multiple blocks that refer to the same
17867      static variable, so we must test for the DW_AT_declaration flag.
17868
17869      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
17870      copy decls and set the DECL_ABSTRACT flag on them instead of
17871      sharing them.
17872
17873      ??? Duplicated blocks have been rewritten to use .debug_ranges.
17874
17875      ??? The declare_in_namespace support causes us to get two DIEs for one
17876      variable, both of which are declarations.  We want to avoid considering
17877      one to be a specification, so we must test that this DIE is not a
17878      declaration.  */
17879   else if (old_die && TREE_STATIC (decl) && ! declaration
17880            && get_AT_flag (old_die, DW_AT_declaration) == 1)
17881     {
17882       /* This is a definition of a C++ class level static.  */
17883       add_AT_specification (var_die, old_die);
17884       specialization_p = true;
17885       if (DECL_NAME (decl))
17886         {
17887           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17888           struct dwarf_file_data * file_index = lookup_filename (s.file);
17889
17890           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17891             add_AT_file (var_die, DW_AT_decl_file, file_index);
17892
17893           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17894             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
17895
17896           if (old_die->die_tag == DW_TAG_member)
17897             add_linkage_name (var_die, decl);
17898         }
17899     }
17900   else
17901     add_name_and_src_coords_attributes (var_die, decl);
17902
17903   if ((origin == NULL && !specialization_p)
17904       || (origin != NULL
17905           && !DECL_ABSTRACT (decl_or_origin)
17906           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
17907                                        decl_function_context
17908                                                         (decl_or_origin))))
17909     {
17910       tree type = TREE_TYPE (decl_or_origin);
17911
17912       if (decl_by_reference_p (decl_or_origin))
17913         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
17914       else
17915         add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
17916                             TREE_THIS_VOLATILE (decl_or_origin), context_die);
17917     }
17918
17919   if (origin == NULL && !specialization_p)
17920     {
17921       if (TREE_PUBLIC (decl))
17922         add_AT_flag (var_die, DW_AT_external, 1);
17923
17924       if (DECL_ARTIFICIAL (decl))
17925         add_AT_flag (var_die, DW_AT_artificial, 1);
17926
17927       add_accessibility_attribute (var_die, decl);
17928     }
17929
17930   if (declaration)
17931     add_AT_flag (var_die, DW_AT_declaration, 1);
17932
17933   if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL))
17934     equate_decl_number_to_die (decl, var_die);
17935
17936   if (! declaration
17937       && (! DECL_ABSTRACT (decl_or_origin)
17938           /* Local static vars are shared between all clones/inlines,
17939              so emit DW_AT_location on the abstract DIE if DECL_RTL is
17940              already set.  */
17941           || (TREE_CODE (decl_or_origin) == VAR_DECL
17942               && TREE_STATIC (decl_or_origin)
17943               && DECL_RTL_SET_P (decl_or_origin)))
17944       /* When abstract origin already has DW_AT_location attribute, no need
17945          to add it again.  */
17946       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
17947     {
17948       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
17949           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
17950         defer_location (decl_or_origin, var_die);
17951       else
17952         add_location_or_const_value_attribute (var_die, decl_or_origin,
17953                                                decl == NULL, DW_AT_location);
17954       add_pubname (decl_or_origin, var_die);
17955     }
17956   else
17957     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
17958 }
17959
17960 /* Generate a DIE to represent a named constant.  */
17961
17962 static void
17963 gen_const_die (tree decl, dw_die_ref context_die)
17964 {
17965   dw_die_ref const_die;
17966   tree type = TREE_TYPE (decl);
17967
17968   const_die = new_die (DW_TAG_constant, context_die, decl);
17969   add_name_and_src_coords_attributes (const_die, decl);
17970   add_type_attribute (const_die, type, 1, 0, context_die);
17971   if (TREE_PUBLIC (decl))
17972     add_AT_flag (const_die, DW_AT_external, 1);
17973   if (DECL_ARTIFICIAL (decl))
17974     add_AT_flag (const_die, DW_AT_artificial, 1);
17975   tree_add_const_value_attribute_for_decl (const_die, decl);
17976 }
17977
17978 /* Generate a DIE to represent a label identifier.  */
17979
17980 static void
17981 gen_label_die (tree decl, dw_die_ref context_die)
17982 {
17983   tree origin = decl_ultimate_origin (decl);
17984   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
17985   rtx insn;
17986   char label[MAX_ARTIFICIAL_LABEL_BYTES];
17987
17988   if (origin != NULL)
17989     add_abstract_origin_attribute (lbl_die, origin);
17990   else
17991     add_name_and_src_coords_attributes (lbl_die, decl);
17992
17993   if (DECL_ABSTRACT (decl))
17994     equate_decl_number_to_die (decl, lbl_die);
17995   else
17996     {
17997       insn = DECL_RTL_IF_SET (decl);
17998
17999       /* Deleted labels are programmer specified labels which have been
18000          eliminated because of various optimizations.  We still emit them
18001          here so that it is possible to put breakpoints on them.  */
18002       if (insn
18003           && (LABEL_P (insn)
18004               || ((NOTE_P (insn)
18005                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18006         {
18007           /* When optimization is enabled (via -O) some parts of the compiler
18008              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18009              represent source-level labels which were explicitly declared by
18010              the user.  This really shouldn't be happening though, so catch
18011              it if it ever does happen.  */
18012           gcc_assert (!INSN_DELETED_P (insn));
18013
18014           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18015           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18016         }
18017     }
18018 }
18019
18020 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18021    attributes to the DIE for a block STMT, to describe where the inlined
18022    function was called from.  This is similar to add_src_coords_attributes.  */
18023
18024 static inline void
18025 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18026 {
18027   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18028
18029   if (dwarf_version >= 3 || !dwarf_strict)
18030     {
18031       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18032       add_AT_unsigned (die, DW_AT_call_line, s.line);
18033     }
18034 }
18035
18036
18037 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18038    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18039
18040 static inline void
18041 add_high_low_attributes (tree stmt, dw_die_ref die)
18042 {
18043   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18044
18045   if (BLOCK_FRAGMENT_CHAIN (stmt)
18046       && (dwarf_version >= 3 || !dwarf_strict))
18047     {
18048       tree chain;
18049
18050       if (inlined_function_outer_scope_p (stmt))
18051         {
18052           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18053                                        BLOCK_NUMBER (stmt));
18054           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18055         }
18056
18057       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18058
18059       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18060       do
18061         {
18062           add_ranges (chain);
18063           chain = BLOCK_FRAGMENT_CHAIN (chain);
18064         }
18065       while (chain);
18066       add_ranges (NULL);
18067     }
18068   else
18069     {
18070       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18071                                    BLOCK_NUMBER (stmt));
18072       add_AT_lbl_id (die, DW_AT_low_pc, label);
18073       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18074                                    BLOCK_NUMBER (stmt));
18075       add_AT_lbl_id (die, DW_AT_high_pc, label);
18076     }
18077 }
18078
18079 /* Generate a DIE for a lexical block.  */
18080
18081 static void
18082 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18083 {
18084   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18085
18086   if (call_arg_locations)
18087     {
18088       if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18089         VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18090                                BLOCK_NUMBER (stmt) + 1);
18091       VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), stmt_die);
18092     }
18093
18094   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18095     add_high_low_attributes (stmt, stmt_die);
18096
18097   decls_for_scope (stmt, stmt_die, depth);
18098 }
18099
18100 /* Generate a DIE for an inlined subprogram.  */
18101
18102 static void
18103 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18104 {
18105   tree decl;
18106
18107   /* The instance of function that is effectively being inlined shall not
18108      be abstract.  */
18109   gcc_assert (! BLOCK_ABSTRACT (stmt));
18110
18111   decl = block_ultimate_origin (stmt);
18112
18113   /* Emit info for the abstract instance first, if we haven't yet.  We
18114      must emit this even if the block is abstract, otherwise when we
18115      emit the block below (or elsewhere), we may end up trying to emit
18116      a die whose origin die hasn't been emitted, and crashing.  */
18117   dwarf2out_abstract_function (decl);
18118
18119   if (! BLOCK_ABSTRACT (stmt))
18120     {
18121       dw_die_ref subr_die
18122         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18123
18124       if (call_arg_locations)
18125         {
18126           if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18127             VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18128                                    BLOCK_NUMBER (stmt) + 1);
18129           VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), subr_die);
18130         }
18131       add_abstract_origin_attribute (subr_die, decl);
18132       if (TREE_ASM_WRITTEN (stmt))
18133         add_high_low_attributes (stmt, subr_die);
18134       add_call_src_coords_attributes (stmt, subr_die);
18135
18136       decls_for_scope (stmt, subr_die, depth);
18137       current_function_has_inlines = 1;
18138     }
18139 }
18140
18141 /* Generate a DIE for a field in a record, or structure.  */
18142
18143 static void
18144 gen_field_die (tree decl, dw_die_ref context_die)
18145 {
18146   dw_die_ref decl_die;
18147
18148   if (TREE_TYPE (decl) == error_mark_node)
18149     return;
18150
18151   decl_die = new_die (DW_TAG_member, context_die, decl);
18152   add_name_and_src_coords_attributes (decl_die, decl);
18153   add_type_attribute (decl_die, member_declared_type (decl),
18154                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18155                       context_die);
18156
18157   if (DECL_BIT_FIELD_TYPE (decl))
18158     {
18159       add_byte_size_attribute (decl_die, decl);
18160       add_bit_size_attribute (decl_die, decl);
18161       add_bit_offset_attribute (decl_die, decl);
18162     }
18163
18164   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18165     add_data_member_location_attribute (decl_die, decl);
18166
18167   if (DECL_ARTIFICIAL (decl))
18168     add_AT_flag (decl_die, DW_AT_artificial, 1);
18169
18170   add_accessibility_attribute (decl_die, decl);
18171
18172   /* Equate decl number to die, so that we can look up this decl later on.  */
18173   equate_decl_number_to_die (decl, decl_die);
18174 }
18175
18176 #if 0
18177 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18178    Use modified_type_die instead.
18179    We keep this code here just in case these types of DIEs may be needed to
18180    represent certain things in other languages (e.g. Pascal) someday.  */
18181
18182 static void
18183 gen_pointer_type_die (tree type, dw_die_ref context_die)
18184 {
18185   dw_die_ref ptr_die
18186     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18187
18188   equate_type_number_to_die (type, ptr_die);
18189   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18190   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18191 }
18192
18193 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18194    Use modified_type_die instead.
18195    We keep this code here just in case these types of DIEs may be needed to
18196    represent certain things in other languages (e.g. Pascal) someday.  */
18197
18198 static void
18199 gen_reference_type_die (tree type, dw_die_ref context_die)
18200 {
18201   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18202
18203   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18204     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18205   else
18206     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18207
18208   equate_type_number_to_die (type, ref_die);
18209   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18210   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18211 }
18212 #endif
18213
18214 /* Generate a DIE for a pointer to a member type.  */
18215
18216 static void
18217 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18218 {
18219   dw_die_ref ptr_die
18220     = new_die (DW_TAG_ptr_to_member_type,
18221                scope_die_for (type, context_die), type);
18222
18223   equate_type_number_to_die (type, ptr_die);
18224   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18225                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18226   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18227 }
18228
18229 typedef const char *dchar_p; /* For DEF_VEC_P.  */
18230 DEF_VEC_P(dchar_p);
18231 DEF_VEC_ALLOC_P(dchar_p,heap);
18232
18233 static char *producer_string;
18234
18235 /* Return a heap allocated producer string including command line options
18236    if -grecord-gcc-switches.  */
18237
18238 static char *
18239 gen_producer_string (void)
18240 {
18241   size_t j;
18242   VEC(dchar_p, heap) *switches = NULL;
18243   const char *language_string = lang_hooks.name;
18244   char *producer, *tail;
18245   const char *p;
18246   size_t len = dwarf_record_gcc_switches ? 0 : 3;
18247   size_t plen = strlen (language_string) + 1 + strlen (version_string);
18248
18249   for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
18250     switch (save_decoded_options[j].opt_index)
18251       {
18252       case OPT_o:
18253       case OPT_d:
18254       case OPT_dumpbase:
18255       case OPT_dumpdir:
18256       case OPT_auxbase:
18257       case OPT_auxbase_strip:
18258       case OPT_quiet:
18259       case OPT_version:
18260       case OPT_v:
18261       case OPT_w:
18262       case OPT_L:
18263       case OPT_D:
18264       case OPT_I:
18265       case OPT_U:
18266       case OPT_SPECIAL_unknown:
18267       case OPT_SPECIAL_ignore:
18268       case OPT_SPECIAL_program_name:
18269       case OPT_SPECIAL_input_file:
18270       case OPT_grecord_gcc_switches:
18271       case OPT_gno_record_gcc_switches:
18272       case OPT__output_pch_:
18273       case OPT_fdiagnostics_show_location_:
18274       case OPT_fdiagnostics_show_option:
18275       case OPT_fverbose_asm:
18276       case OPT____:
18277       case OPT__sysroot_:
18278       case OPT_nostdinc:
18279       case OPT_nostdinc__:
18280         /* Ignore these.  */
18281         continue;
18282       default:
18283         gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
18284                              == '-');
18285         switch (save_decoded_options[j].canonical_option[0][1])
18286           {
18287           case 'M':
18288           case 'i':
18289           case 'W':
18290             continue;
18291           case 'f':
18292             if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
18293                          "dump", 4) == 0)
18294               continue;
18295             break;
18296           default:
18297             break;
18298           }
18299         VEC_safe_push (dchar_p, heap, switches,
18300                        save_decoded_options[j].orig_option_with_args_text);
18301         len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
18302         break;
18303       }
18304
18305   producer = XNEWVEC (char, plen + 1 + len + 1);
18306   tail = producer;
18307   sprintf (tail, "%s %s", language_string, version_string);
18308   tail += plen;
18309
18310   if (!dwarf_record_gcc_switches)
18311     {
18312 #ifdef MIPS_DEBUGGING_INFO
18313       /* The MIPS/SGI compilers place the 'cc' command line options in the
18314          producer string.  The SGI debugger looks for -g, -g1, -g2, or -g3;
18315          if they do not appear in the producer string, the debugger reaches
18316          the conclusion that the object file is stripped and has no debugging
18317          information.  To get the MIPS/SGI debugger to believe that there is
18318          debugging information in the object file, we add a -g to the producer
18319          string.  */
18320       if (debug_info_level > DINFO_LEVEL_TERSE)
18321         {
18322           memcpy (tail, " -g", 3);
18323           tail += 3;
18324         }
18325 #endif
18326     }
18327
18328   FOR_EACH_VEC_ELT (dchar_p, switches, j, p)
18329     {
18330       len = strlen (p);
18331       *tail = ' ';
18332       memcpy (tail + 1, p, len);
18333       tail += len + 1;
18334     }
18335
18336   *tail = '\0';
18337   VEC_free (dchar_p, heap, switches);
18338   return producer;
18339 }
18340
18341 /* Generate the DIE for the compilation unit.  */
18342
18343 static dw_die_ref
18344 gen_compile_unit_die (const char *filename)
18345 {
18346   dw_die_ref die;
18347   const char *language_string = lang_hooks.name;
18348   int language;
18349
18350   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18351
18352   if (filename)
18353     {
18354       add_name_attribute (die, filename);
18355       /* Don't add cwd for <built-in>.  */
18356       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18357         add_comp_dir_attribute (die);
18358     }
18359
18360   if (producer_string == NULL)
18361     producer_string = gen_producer_string ();
18362   add_AT_string (die, DW_AT_producer, producer_string);
18363
18364   /* If our producer is LTO try to figure out a common language to use
18365      from the global list of translation units.  */
18366   if (strcmp (language_string, "GNU GIMPLE") == 0)
18367     {
18368       unsigned i;
18369       tree t;
18370       const char *common_lang = NULL;
18371
18372       FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
18373         {
18374           if (!TRANSLATION_UNIT_LANGUAGE (t))
18375             continue;
18376           if (!common_lang)
18377             common_lang = TRANSLATION_UNIT_LANGUAGE (t);
18378           else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
18379             ;
18380           else if (strncmp (common_lang, "GNU C", 5) == 0
18381                    && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
18382             /* Mixing C and C++ is ok, use C++ in that case.  */
18383             common_lang = "GNU C++";
18384           else
18385             {
18386               /* Fall back to C.  */
18387               common_lang = NULL;
18388               break;
18389             }
18390         }
18391
18392       if (common_lang)
18393         language_string = common_lang;
18394     }
18395
18396   language = DW_LANG_C89;
18397   if (strcmp (language_string, "GNU C++") == 0)
18398     language = DW_LANG_C_plus_plus;
18399   else if (strcmp (language_string, "GNU F77") == 0)
18400     language = DW_LANG_Fortran77;
18401   else if (strcmp (language_string, "GNU Pascal") == 0)
18402     language = DW_LANG_Pascal83;
18403   else if (dwarf_version >= 3 || !dwarf_strict)
18404     {
18405       if (strcmp (language_string, "GNU Ada") == 0)
18406         language = DW_LANG_Ada95;
18407       else if (strcmp (language_string, "GNU Fortran") == 0)
18408         language = DW_LANG_Fortran95;
18409       else if (strcmp (language_string, "GNU Java") == 0)
18410         language = DW_LANG_Java;
18411       else if (strcmp (language_string, "GNU Objective-C") == 0)
18412         language = DW_LANG_ObjC;
18413       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18414         language = DW_LANG_ObjC_plus_plus;
18415     }
18416
18417   add_AT_unsigned (die, DW_AT_language, language);
18418
18419   switch (language)
18420     {
18421     case DW_LANG_Fortran77:
18422     case DW_LANG_Fortran90:
18423     case DW_LANG_Fortran95:
18424       /* Fortran has case insensitive identifiers and the front-end
18425          lowercases everything.  */
18426       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
18427       break;
18428     default:
18429       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
18430       break;
18431     }
18432   return die;
18433 }
18434
18435 /* Generate the DIE for a base class.  */
18436
18437 static void
18438 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18439 {
18440   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18441
18442   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18443   add_data_member_location_attribute (die, binfo);
18444
18445   if (BINFO_VIRTUAL_P (binfo))
18446     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18447
18448   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
18449      children, otherwise the default is DW_ACCESS_public.  In DWARF2
18450      the default has always been DW_ACCESS_private.  */
18451   if (access == access_public_node)
18452     {
18453       if (dwarf_version == 2
18454           || context_die->die_tag == DW_TAG_class_type)
18455       add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18456     }
18457   else if (access == access_protected_node)
18458     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18459   else if (dwarf_version > 2
18460            && context_die->die_tag != DW_TAG_class_type)
18461     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
18462 }
18463
18464 /* Generate a DIE for a class member.  */
18465
18466 static void
18467 gen_member_die (tree type, dw_die_ref context_die)
18468 {
18469   tree member;
18470   tree binfo = TYPE_BINFO (type);
18471   dw_die_ref child;
18472
18473   /* If this is not an incomplete type, output descriptions of each of its
18474      members. Note that as we output the DIEs necessary to represent the
18475      members of this record or union type, we will also be trying to output
18476      DIEs to represent the *types* of those members. However the `type'
18477      function (above) will specifically avoid generating type DIEs for member
18478      types *within* the list of member DIEs for this (containing) type except
18479      for those types (of members) which are explicitly marked as also being
18480      members of this (containing) type themselves.  The g++ front- end can
18481      force any given type to be treated as a member of some other (containing)
18482      type by setting the TYPE_CONTEXT of the given (member) type to point to
18483      the TREE node representing the appropriate (containing) type.  */
18484
18485   /* First output info about the base classes.  */
18486   if (binfo)
18487     {
18488       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18489       int i;
18490       tree base;
18491
18492       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18493         gen_inheritance_die (base,
18494                              (accesses ? VEC_index (tree, accesses, i)
18495                               : access_public_node), context_die);
18496     }
18497
18498   /* Now output info about the data members and type members.  */
18499   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
18500     {
18501       /* If we thought we were generating minimal debug info for TYPE
18502          and then changed our minds, some of the member declarations
18503          may have already been defined.  Don't define them again, but
18504          do put them in the right order.  */
18505
18506       child = lookup_decl_die (member);
18507       if (child)
18508         splice_child_die (context_die, child);
18509       else
18510         gen_decl_die (member, NULL, context_die);
18511     }
18512
18513   /* Now output info about the function members (if any).  */
18514   for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
18515     {
18516       /* Don't include clones in the member list.  */
18517       if (DECL_ABSTRACT_ORIGIN (member))
18518         continue;
18519
18520       child = lookup_decl_die (member);
18521       if (child)
18522         splice_child_die (context_die, child);
18523       else
18524         gen_decl_die (member, NULL, context_die);
18525     }
18526 }
18527
18528 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18529    is set, we pretend that the type was never defined, so we only get the
18530    member DIEs needed by later specification DIEs.  */
18531
18532 static void
18533 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18534                                 enum debug_info_usage usage)
18535 {
18536   dw_die_ref type_die = lookup_type_die (type);
18537   dw_die_ref scope_die = 0;
18538   int nested = 0;
18539   int complete = (TYPE_SIZE (type)
18540                   && (! TYPE_STUB_DECL (type)
18541                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18542   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18543   complete = complete && should_emit_struct_debug (type, usage);
18544
18545   if (type_die && ! complete)
18546     return;
18547
18548   if (TYPE_CONTEXT (type) != NULL_TREE
18549       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18550           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18551     nested = 1;
18552
18553   scope_die = scope_die_for (type, context_die);
18554
18555   if (! type_die || (nested && is_cu_die (scope_die)))
18556     /* First occurrence of type or toplevel definition of nested class.  */
18557     {
18558       dw_die_ref old_die = type_die;
18559
18560       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18561                           ? record_type_tag (type) : DW_TAG_union_type,
18562                           scope_die, type);
18563       equate_type_number_to_die (type, type_die);
18564       if (old_die)
18565         add_AT_specification (type_die, old_die);
18566       else
18567         {
18568           add_name_attribute (type_die, type_tag (type));
18569           add_gnat_descriptive_type_attribute (type_die, type, context_die);
18570           if (TYPE_ARTIFICIAL (type))
18571             add_AT_flag (type_die, DW_AT_artificial, 1);
18572         }
18573     }
18574   else
18575     remove_AT (type_die, DW_AT_declaration);
18576
18577   /* Generate child dies for template paramaters.  */
18578   if (debug_info_level > DINFO_LEVEL_TERSE
18579       && COMPLETE_TYPE_P (type))
18580     schedule_generic_params_dies_gen (type);
18581
18582   /* If this type has been completed, then give it a byte_size attribute and
18583      then give a list of members.  */
18584   if (complete && !ns_decl)
18585     {
18586       /* Prevent infinite recursion in cases where the type of some member of
18587          this type is expressed in terms of this type itself.  */
18588       TREE_ASM_WRITTEN (type) = 1;
18589       add_byte_size_attribute (type_die, type);
18590       if (TYPE_STUB_DECL (type) != NULL_TREE)
18591         {
18592           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18593           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
18594         }
18595
18596       /* If the first reference to this type was as the return type of an
18597          inline function, then it may not have a parent.  Fix this now.  */
18598       if (type_die->die_parent == NULL)
18599         add_child_die (scope_die, type_die);
18600
18601       push_decl_scope (type);
18602       gen_member_die (type, type_die);
18603       pop_decl_scope ();
18604
18605       /* GNU extension: Record what type our vtable lives in.  */
18606       if (TYPE_VFIELD (type))
18607         {
18608           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18609
18610           gen_type_die (vtype, context_die);
18611           add_AT_die_ref (type_die, DW_AT_containing_type,
18612                           lookup_type_die (vtype));
18613         }
18614     }
18615   else
18616     {
18617       add_AT_flag (type_die, DW_AT_declaration, 1);
18618
18619       /* We don't need to do this for function-local types.  */
18620       if (TYPE_STUB_DECL (type)
18621           && ! decl_function_context (TYPE_STUB_DECL (type)))
18622         VEC_safe_push (tree, gc, incomplete_types, type);
18623     }
18624
18625   if (get_AT (type_die, DW_AT_name))
18626     add_pubtype (type, type_die);
18627 }
18628
18629 /* Generate a DIE for a subroutine _type_.  */
18630
18631 static void
18632 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18633 {
18634   tree return_type = TREE_TYPE (type);
18635   dw_die_ref subr_die
18636     = new_die (DW_TAG_subroutine_type,
18637                scope_die_for (type, context_die), type);
18638
18639   equate_type_number_to_die (type, subr_die);
18640   add_prototyped_attribute (subr_die, type);
18641   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18642   gen_formal_types_die (type, subr_die);
18643
18644   if (get_AT (subr_die, DW_AT_name))
18645     add_pubtype (type, subr_die);
18646 }
18647
18648 /* Generate a DIE for a type definition.  */
18649
18650 static void
18651 gen_typedef_die (tree decl, dw_die_ref context_die)
18652 {
18653   dw_die_ref type_die;
18654   tree origin;
18655
18656   if (TREE_ASM_WRITTEN (decl))
18657     return;
18658
18659   TREE_ASM_WRITTEN (decl) = 1;
18660   type_die = new_die (DW_TAG_typedef, context_die, decl);
18661   origin = decl_ultimate_origin (decl);
18662   if (origin != NULL)
18663     add_abstract_origin_attribute (type_die, origin);
18664   else
18665     {
18666       tree type;
18667
18668       add_name_and_src_coords_attributes (type_die, decl);
18669       if (DECL_ORIGINAL_TYPE (decl))
18670         {
18671           type = DECL_ORIGINAL_TYPE (decl);
18672
18673           gcc_assert (type != TREE_TYPE (decl));
18674           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18675         }
18676       else
18677         {
18678           type = TREE_TYPE (decl);
18679
18680           if (is_naming_typedef_decl (TYPE_NAME (type)))
18681             {
18682               /* Here, we are in the case of decl being a typedef naming
18683                  an anonymous type, e.g:
18684                      typedef struct {...} foo;
18685                  In that case TREE_TYPE (decl) is not a typedef variant
18686                  type and TYPE_NAME of the anonymous type is set to the
18687                  TYPE_DECL of the typedef. This construct is emitted by
18688                  the C++ FE.
18689
18690                  TYPE is the anonymous struct named by the typedef
18691                  DECL. As we need the DW_AT_type attribute of the
18692                  DW_TAG_typedef to point to the DIE of TYPE, let's
18693                  generate that DIE right away. add_type_attribute
18694                  called below will then pick (via lookup_type_die) that
18695                  anonymous struct DIE.  */
18696               if (!TREE_ASM_WRITTEN (type))
18697                 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
18698
18699               /* This is a GNU Extension.  We are adding a
18700                  DW_AT_linkage_name attribute to the DIE of the
18701                  anonymous struct TYPE.  The value of that attribute
18702                  is the name of the typedef decl naming the anonymous
18703                  struct.  This greatly eases the work of consumers of
18704                  this debug info.  */
18705               add_linkage_attr (lookup_type_die (type), decl);
18706             }
18707         }
18708
18709       add_type_attribute (type_die, type, TREE_READONLY (decl),
18710                           TREE_THIS_VOLATILE (decl), context_die);
18711
18712       if (is_naming_typedef_decl (decl))
18713         /* We want that all subsequent calls to lookup_type_die with
18714            TYPE in argument yield the DW_TAG_typedef we have just
18715            created.  */
18716         equate_type_number_to_die (type, type_die);
18717
18718       add_accessibility_attribute (type_die, decl);
18719     }
18720
18721   if (DECL_ABSTRACT (decl))
18722     equate_decl_number_to_die (decl, type_die);
18723
18724   if (get_AT (type_die, DW_AT_name))
18725     add_pubtype (decl, type_die);
18726 }
18727
18728 /* Generate a DIE for a struct, class, enum or union type.  */
18729
18730 static void
18731 gen_tagged_type_die (tree type,
18732                      dw_die_ref context_die,
18733                      enum debug_info_usage usage)
18734 {
18735   int need_pop;
18736
18737   if (type == NULL_TREE
18738       || !is_tagged_type (type))
18739     return;
18740
18741   /* If this is a nested type whose containing class hasn't been written
18742      out yet, writing it out will cover this one, too.  This does not apply
18743      to instantiations of member class templates; they need to be added to
18744      the containing class as they are generated.  FIXME: This hurts the
18745      idea of combining type decls from multiple TUs, since we can't predict
18746      what set of template instantiations we'll get.  */
18747   if (TYPE_CONTEXT (type)
18748       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18749       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18750     {
18751       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18752
18753       if (TREE_ASM_WRITTEN (type))
18754         return;
18755
18756       /* If that failed, attach ourselves to the stub.  */
18757       push_decl_scope (TYPE_CONTEXT (type));
18758       context_die = lookup_type_die (TYPE_CONTEXT (type));
18759       need_pop = 1;
18760     }
18761   else if (TYPE_CONTEXT (type) != NULL_TREE
18762            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18763     {
18764       /* If this type is local to a function that hasn't been written
18765          out yet, use a NULL context for now; it will be fixed up in
18766          decls_for_scope.  */
18767       context_die = lookup_decl_die (TYPE_CONTEXT (type));
18768       /* A declaration DIE doesn't count; nested types need to go in the
18769          specification.  */
18770       if (context_die && is_declaration_die (context_die))
18771         context_die = NULL;
18772       need_pop = 0;
18773     }
18774   else
18775     {
18776       context_die = declare_in_namespace (type, context_die);
18777       need_pop = 0;
18778     }
18779
18780   if (TREE_CODE (type) == ENUMERAL_TYPE)
18781     {
18782       /* This might have been written out by the call to
18783          declare_in_namespace.  */
18784       if (!TREE_ASM_WRITTEN (type))
18785         gen_enumeration_type_die (type, context_die);
18786     }
18787   else
18788     gen_struct_or_union_type_die (type, context_die, usage);
18789
18790   if (need_pop)
18791     pop_decl_scope ();
18792
18793   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18794      it up if it is ever completed.  gen_*_type_die will set it for us
18795      when appropriate.  */
18796 }
18797
18798 /* Generate a type description DIE.  */
18799
18800 static void
18801 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18802                          enum debug_info_usage usage)
18803 {
18804   struct array_descr_info info;
18805
18806   if (type == NULL_TREE || type == error_mark_node)
18807     return;
18808
18809   if (TYPE_NAME (type) != NULL_TREE
18810       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18811       && is_redundant_typedef (TYPE_NAME (type))
18812       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18813     /* The DECL of this type is a typedef we don't want to emit debug
18814        info for but we want debug info for its underlying typedef.
18815        This can happen for e.g, the injected-class-name of a C++
18816        type.  */
18817     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
18818
18819   /* If TYPE is a typedef type variant, let's generate debug info
18820      for the parent typedef which TYPE is a type of.  */
18821   if (typedef_variant_p (type))
18822     {
18823       if (TREE_ASM_WRITTEN (type))
18824         return;
18825
18826       /* Prevent broken recursion; we can't hand off to the same type.  */
18827       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18828
18829       /* Use the DIE of the containing namespace as the parent DIE of
18830          the type description DIE we want to generate.  */
18831       if (DECL_CONTEXT (TYPE_NAME (type))
18832           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18833         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18834
18835       TREE_ASM_WRITTEN (type) = 1;
18836
18837       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18838       return;
18839     }
18840
18841   /* If type is an anonymous tagged type named by a typedef, let's
18842      generate debug info for the typedef.  */
18843   if (is_naming_typedef_decl (TYPE_NAME (type)))
18844     {
18845       /* Use the DIE of the containing namespace as the parent DIE of
18846          the type description DIE we want to generate.  */
18847       if (DECL_CONTEXT (TYPE_NAME (type))
18848           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18849         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18850       
18851       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18852       return;
18853     }
18854
18855   /* If this is an array type with hidden descriptor, handle it first.  */
18856   if (!TREE_ASM_WRITTEN (type)
18857       && lang_hooks.types.get_array_descr_info
18858       && lang_hooks.types.get_array_descr_info (type, &info)
18859       && (dwarf_version >= 3 || !dwarf_strict))
18860     {
18861       gen_descr_array_type_die (type, &info, context_die);
18862       TREE_ASM_WRITTEN (type) = 1;
18863       return;
18864     }
18865
18866   /* We are going to output a DIE to represent the unqualified version
18867      of this type (i.e. without any const or volatile qualifiers) so
18868      get the main variant (i.e. the unqualified version) of this type
18869      now.  (Vectors are special because the debugging info is in the
18870      cloned type itself).  */
18871   if (TREE_CODE (type) != VECTOR_TYPE)
18872     type = type_main_variant (type);
18873
18874   if (TREE_ASM_WRITTEN (type))
18875     return;
18876
18877   switch (TREE_CODE (type))
18878     {
18879     case ERROR_MARK:
18880       break;
18881
18882     case POINTER_TYPE:
18883     case REFERENCE_TYPE:
18884       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
18885          ensures that the gen_type_die recursion will terminate even if the
18886          type is recursive.  Recursive types are possible in Ada.  */
18887       /* ??? We could perhaps do this for all types before the switch
18888          statement.  */
18889       TREE_ASM_WRITTEN (type) = 1;
18890
18891       /* For these types, all that is required is that we output a DIE (or a
18892          set of DIEs) to represent the "basis" type.  */
18893       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18894                                 DINFO_USAGE_IND_USE);
18895       break;
18896
18897     case OFFSET_TYPE:
18898       /* This code is used for C++ pointer-to-data-member types.
18899          Output a description of the relevant class type.  */
18900       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
18901                                         DINFO_USAGE_IND_USE);
18902
18903       /* Output a description of the type of the object pointed to.  */
18904       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18905                                         DINFO_USAGE_IND_USE);
18906
18907       /* Now output a DIE to represent this pointer-to-data-member type
18908          itself.  */
18909       gen_ptr_to_mbr_type_die (type, context_die);
18910       break;
18911
18912     case FUNCTION_TYPE:
18913       /* Force out return type (in case it wasn't forced out already).  */
18914       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18915                                         DINFO_USAGE_DIR_USE);
18916       gen_subroutine_type_die (type, context_die);
18917       break;
18918
18919     case METHOD_TYPE:
18920       /* Force out return type (in case it wasn't forced out already).  */
18921       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18922                                         DINFO_USAGE_DIR_USE);
18923       gen_subroutine_type_die (type, context_die);
18924       break;
18925
18926     case ARRAY_TYPE:
18927       gen_array_type_die (type, context_die);
18928       break;
18929
18930     case VECTOR_TYPE:
18931       gen_array_type_die (type, context_die);
18932       break;
18933
18934     case ENUMERAL_TYPE:
18935     case RECORD_TYPE:
18936     case UNION_TYPE:
18937     case QUAL_UNION_TYPE:
18938       gen_tagged_type_die (type, context_die, usage);
18939       return;
18940
18941     case VOID_TYPE:
18942     case INTEGER_TYPE:
18943     case REAL_TYPE:
18944     case FIXED_POINT_TYPE:
18945     case COMPLEX_TYPE:
18946     case BOOLEAN_TYPE:
18947       /* No DIEs needed for fundamental types.  */
18948       break;
18949
18950     case NULLPTR_TYPE:
18951     case LANG_TYPE:
18952       /* Just use DW_TAG_unspecified_type.  */
18953       {
18954         dw_die_ref type_die = lookup_type_die (type);
18955         if (type_die == NULL)
18956           {
18957             tree name = TYPE_NAME (type);
18958             if (TREE_CODE (name) == TYPE_DECL)
18959               name = DECL_NAME (name);
18960             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (), type);
18961             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
18962             equate_type_number_to_die (type, type_die);
18963           }
18964       }
18965       break;
18966
18967     default:
18968       gcc_unreachable ();
18969     }
18970
18971   TREE_ASM_WRITTEN (type) = 1;
18972 }
18973
18974 static void
18975 gen_type_die (tree type, dw_die_ref context_die)
18976 {
18977   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
18978 }
18979
18980 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
18981    things which are local to the given block.  */
18982
18983 static void
18984 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
18985 {
18986   int must_output_die = 0;
18987   bool inlined_func;
18988
18989   /* Ignore blocks that are NULL.  */
18990   if (stmt == NULL_TREE)
18991     return;
18992
18993   inlined_func = inlined_function_outer_scope_p (stmt);
18994
18995   /* If the block is one fragment of a non-contiguous block, do not
18996      process the variables, since they will have been done by the
18997      origin block.  Do process subblocks.  */
18998   if (BLOCK_FRAGMENT_ORIGIN (stmt))
18999     {
19000       tree sub;
19001
19002       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19003         gen_block_die (sub, context_die, depth + 1);
19004
19005       return;
19006     }
19007
19008   /* Determine if we need to output any Dwarf DIEs at all to represent this
19009      block.  */
19010   if (inlined_func)
19011     /* The outer scopes for inlinings *must* always be represented.  We
19012        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19013     must_output_die = 1;
19014   else
19015     {
19016       /* Determine if this block directly contains any "significant"
19017          local declarations which we will need to output DIEs for.  */
19018       if (debug_info_level > DINFO_LEVEL_TERSE)
19019         /* We are not in terse mode so *any* local declaration counts
19020            as being a "significant" one.  */
19021         must_output_die = ((BLOCK_VARS (stmt) != NULL
19022                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19023                            && (TREE_USED (stmt)
19024                                || TREE_ASM_WRITTEN (stmt)
19025                                || BLOCK_ABSTRACT (stmt)));
19026       else if ((TREE_USED (stmt)
19027                 || TREE_ASM_WRITTEN (stmt)
19028                 || BLOCK_ABSTRACT (stmt))
19029                && !dwarf2out_ignore_block (stmt))
19030         must_output_die = 1;
19031     }
19032
19033   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19034      DIE for any block which contains no significant local declarations at
19035      all.  Rather, in such cases we just call `decls_for_scope' so that any
19036      needed Dwarf info for any sub-blocks will get properly generated. Note
19037      that in terse mode, our definition of what constitutes a "significant"
19038      local declaration gets restricted to include only inlined function
19039      instances and local (nested) function definitions.  */
19040   if (must_output_die)
19041     {
19042       if (inlined_func)
19043         {
19044           /* If STMT block is abstract, that means we have been called
19045              indirectly from dwarf2out_abstract_function.
19046              That function rightfully marks the descendent blocks (of
19047              the abstract function it is dealing with) as being abstract,
19048              precisely to prevent us from emitting any
19049              DW_TAG_inlined_subroutine DIE as a descendent
19050              of an abstract function instance. So in that case, we should
19051              not call gen_inlined_subroutine_die.
19052
19053              Later though, when cgraph asks dwarf2out to emit info
19054              for the concrete instance of the function decl into which
19055              the concrete instance of STMT got inlined, the later will lead
19056              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19057           if (! BLOCK_ABSTRACT (stmt))
19058             gen_inlined_subroutine_die (stmt, context_die, depth);
19059         }
19060       else
19061         gen_lexical_block_die (stmt, context_die, depth);
19062     }
19063   else
19064     decls_for_scope (stmt, context_die, depth);
19065 }
19066
19067 /* Process variable DECL (or variable with origin ORIGIN) within
19068    block STMT and add it to CONTEXT_DIE.  */
19069 static void
19070 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19071 {
19072   dw_die_ref die;
19073   tree decl_or_origin = decl ? decl : origin;
19074
19075   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19076     die = lookup_decl_die (decl_or_origin);
19077   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19078            && TYPE_DECL_IS_STUB (decl_or_origin))
19079     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19080   else
19081     die = NULL;
19082
19083   if (die != NULL && die->die_parent == NULL)
19084     add_child_die (context_die, die);
19085   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19086     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19087                                          stmt, context_die);
19088   else
19089     gen_decl_die (decl, origin, context_die);
19090 }
19091
19092 /* Generate all of the decls declared within a given scope and (recursively)
19093    all of its sub-blocks.  */
19094
19095 static void
19096 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19097 {
19098   tree decl;
19099   unsigned int i;
19100   tree subblocks;
19101
19102   /* Ignore NULL blocks.  */
19103   if (stmt == NULL_TREE)
19104     return;
19105
19106   /* Output the DIEs to represent all of the data objects and typedefs
19107      declared directly within this block but not within any nested
19108      sub-blocks.  Also, nested function and tag DIEs have been
19109      generated with a parent of NULL; fix that up now.  */
19110   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
19111     process_scope_var (stmt, decl, NULL_TREE, context_die);
19112   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19113     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19114                        context_die);
19115
19116   /* If we're at -g1, we're not interested in subblocks.  */
19117   if (debug_info_level <= DINFO_LEVEL_TERSE)
19118     return;
19119
19120   /* Output the DIEs to represent all sub-blocks (and the items declared
19121      therein) of this block.  */
19122   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19123        subblocks != NULL;
19124        subblocks = BLOCK_CHAIN (subblocks))
19125     gen_block_die (subblocks, context_die, depth + 1);
19126 }
19127
19128 /* Is this a typedef we can avoid emitting?  */
19129
19130 static inline int
19131 is_redundant_typedef (const_tree decl)
19132 {
19133   if (TYPE_DECL_IS_STUB (decl))
19134     return 1;
19135
19136   if (DECL_ARTIFICIAL (decl)
19137       && DECL_CONTEXT (decl)
19138       && is_tagged_type (DECL_CONTEXT (decl))
19139       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19140       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19141     /* Also ignore the artificial member typedef for the class name.  */
19142     return 1;
19143
19144   return 0;
19145 }
19146
19147 /* Return TRUE if TYPE is a typedef that names a type for linkage
19148    purposes. This kind of typedefs is produced by the C++ FE for
19149    constructs like:
19150
19151    typedef struct {...} foo;
19152
19153    In that case, there is no typedef variant type produced for foo.
19154    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
19155    struct type.  */
19156
19157 static bool
19158 is_naming_typedef_decl (const_tree decl)
19159 {
19160   if (decl == NULL_TREE
19161       || TREE_CODE (decl) != TYPE_DECL
19162       || !is_tagged_type (TREE_TYPE (decl))
19163       || DECL_IS_BUILTIN (decl)
19164       || is_redundant_typedef (decl)
19165       /* It looks like Ada produces TYPE_DECLs that are very similar
19166          to C++ naming typedefs but that have different
19167          semantics. Let's be specific to c++ for now.  */
19168       || !is_cxx ())
19169     return FALSE;
19170
19171   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
19172           && TYPE_NAME (TREE_TYPE (decl)) == decl
19173           && (TYPE_STUB_DECL (TREE_TYPE (decl))
19174               != TYPE_NAME (TREE_TYPE (decl))));
19175 }
19176
19177 /* Returns the DIE for a context.  */
19178
19179 static inline dw_die_ref
19180 get_context_die (tree context)
19181 {
19182   if (context)
19183     {
19184       /* Find die that represents this context.  */
19185       if (TYPE_P (context))
19186         {
19187           context = TYPE_MAIN_VARIANT (context);
19188           return strip_naming_typedef (context, force_type_die (context));
19189         }
19190       else
19191         return force_decl_die (context);
19192     }
19193   return comp_unit_die ();
19194 }
19195
19196 /* Returns the DIE for decl.  A DIE will always be returned.  */
19197
19198 static dw_die_ref
19199 force_decl_die (tree decl)
19200 {
19201   dw_die_ref decl_die;
19202   unsigned saved_external_flag;
19203   tree save_fn = NULL_TREE;
19204   decl_die = lookup_decl_die (decl);
19205   if (!decl_die)
19206     {
19207       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19208
19209       decl_die = lookup_decl_die (decl);
19210       if (decl_die)
19211         return decl_die;
19212
19213       switch (TREE_CODE (decl))
19214         {
19215         case FUNCTION_DECL:
19216           /* Clear current_function_decl, so that gen_subprogram_die thinks
19217              that this is a declaration. At this point, we just want to force
19218              declaration die.  */
19219           save_fn = current_function_decl;
19220           current_function_decl = NULL_TREE;
19221           gen_subprogram_die (decl, context_die);
19222           current_function_decl = save_fn;
19223           break;
19224
19225         case VAR_DECL:
19226           /* Set external flag to force declaration die. Restore it after
19227            gen_decl_die() call.  */
19228           saved_external_flag = DECL_EXTERNAL (decl);
19229           DECL_EXTERNAL (decl) = 1;
19230           gen_decl_die (decl, NULL, context_die);
19231           DECL_EXTERNAL (decl) = saved_external_flag;
19232           break;
19233
19234         case NAMESPACE_DECL:
19235           if (dwarf_version >= 3 || !dwarf_strict)
19236             dwarf2out_decl (decl);
19237           else
19238             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19239             decl_die = comp_unit_die ();
19240           break;
19241
19242         case TRANSLATION_UNIT_DECL:
19243           decl_die = comp_unit_die ();
19244           break;
19245
19246         default:
19247           gcc_unreachable ();
19248         }
19249
19250       /* We should be able to find the DIE now.  */
19251       if (!decl_die)
19252         decl_die = lookup_decl_die (decl);
19253       gcc_assert (decl_die);
19254     }
19255
19256   return decl_die;
19257 }
19258
19259 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19260    always returned.  */
19261
19262 static dw_die_ref
19263 force_type_die (tree type)
19264 {
19265   dw_die_ref type_die;
19266
19267   type_die = lookup_type_die (type);
19268   if (!type_die)
19269     {
19270       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19271
19272       type_die = modified_type_die (type, TYPE_READONLY (type),
19273                                     TYPE_VOLATILE (type), context_die);
19274       gcc_assert (type_die);
19275     }
19276   return type_die;
19277 }
19278
19279 /* Force out any required namespaces to be able to output DECL,
19280    and return the new context_die for it, if it's changed.  */
19281
19282 static dw_die_ref
19283 setup_namespace_context (tree thing, dw_die_ref context_die)
19284 {
19285   tree context = (DECL_P (thing)
19286                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19287   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19288     /* Force out the namespace.  */
19289     context_die = force_decl_die (context);
19290
19291   return context_die;
19292 }
19293
19294 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19295    type) within its namespace, if appropriate.
19296
19297    For compatibility with older debuggers, namespace DIEs only contain
19298    declarations; all definitions are emitted at CU scope.  */
19299
19300 static dw_die_ref
19301 declare_in_namespace (tree thing, dw_die_ref context_die)
19302 {
19303   dw_die_ref ns_context;
19304
19305   if (debug_info_level <= DINFO_LEVEL_TERSE)
19306     return context_die;
19307
19308   /* If this decl is from an inlined function, then don't try to emit it in its
19309      namespace, as we will get confused.  It would have already been emitted
19310      when the abstract instance of the inline function was emitted anyways.  */
19311   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19312     return context_die;
19313
19314   ns_context = setup_namespace_context (thing, context_die);
19315
19316   if (ns_context != context_die)
19317     {
19318       if (is_fortran ())
19319         return ns_context;
19320       if (DECL_P (thing))
19321         gen_decl_die (thing, NULL, ns_context);
19322       else
19323         gen_type_die (thing, ns_context);
19324     }
19325   return context_die;
19326 }
19327
19328 /* Generate a DIE for a namespace or namespace alias.  */
19329
19330 static void
19331 gen_namespace_die (tree decl, dw_die_ref context_die)
19332 {
19333   dw_die_ref namespace_die;
19334
19335   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19336      they are an alias of.  */
19337   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19338     {
19339       /* Output a real namespace or module.  */
19340       context_die = setup_namespace_context (decl, comp_unit_die ());
19341       namespace_die = new_die (is_fortran ()
19342                                ? DW_TAG_module : DW_TAG_namespace,
19343                                context_die, decl);
19344       /* For Fortran modules defined in different CU don't add src coords.  */
19345       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19346         {
19347           const char *name = dwarf2_name (decl, 0);
19348           if (name)
19349             add_name_attribute (namespace_die, name);
19350         }
19351       else
19352         add_name_and_src_coords_attributes (namespace_die, decl);
19353       if (DECL_EXTERNAL (decl))
19354         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19355       equate_decl_number_to_die (decl, namespace_die);
19356     }
19357   else
19358     {
19359       /* Output a namespace alias.  */
19360
19361       /* Force out the namespace we are an alias of, if necessary.  */
19362       dw_die_ref origin_die
19363         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19364
19365       if (DECL_FILE_SCOPE_P (decl)
19366           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19367         context_die = setup_namespace_context (decl, comp_unit_die ());
19368       /* Now create the namespace alias DIE.  */
19369       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19370       add_name_and_src_coords_attributes (namespace_die, decl);
19371       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19372       equate_decl_number_to_die (decl, namespace_die);
19373     }
19374 }
19375
19376 /* Generate Dwarf debug information for a decl described by DECL.
19377    The return value is currently only meaningful for PARM_DECLs,
19378    for all other decls it returns NULL.  */
19379
19380 static dw_die_ref
19381 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19382 {
19383   tree decl_or_origin = decl ? decl : origin;
19384   tree class_origin = NULL, ultimate_origin;
19385
19386   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19387     return NULL;
19388
19389   switch (TREE_CODE (decl_or_origin))
19390     {
19391     case ERROR_MARK:
19392       break;
19393
19394     case CONST_DECL:
19395       if (!is_fortran () && !is_ada ())
19396         {
19397           /* The individual enumerators of an enum type get output when we output
19398              the Dwarf representation of the relevant enum type itself.  */
19399           break;
19400         }
19401
19402       /* Emit its type.  */
19403       gen_type_die (TREE_TYPE (decl), context_die);
19404
19405       /* And its containing namespace.  */
19406       context_die = declare_in_namespace (decl, context_die);
19407
19408       gen_const_die (decl, context_die);
19409       break;
19410
19411     case FUNCTION_DECL:
19412       /* Don't output any DIEs to represent mere function declarations,
19413          unless they are class members or explicit block externs.  */
19414       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19415           && DECL_FILE_SCOPE_P (decl_or_origin)
19416           && (current_function_decl == NULL_TREE
19417               || DECL_ARTIFICIAL (decl_or_origin)))
19418         break;
19419
19420 #if 0
19421       /* FIXME */
19422       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19423          on local redeclarations of global functions.  That seems broken.  */
19424       if (current_function_decl != decl)
19425         /* This is only a declaration.  */;
19426 #endif
19427
19428       /* If we're emitting a clone, emit info for the abstract instance.  */
19429       if (origin || DECL_ORIGIN (decl) != decl)
19430         dwarf2out_abstract_function (origin
19431                                      ? DECL_ORIGIN (origin)
19432                                      : DECL_ABSTRACT_ORIGIN (decl));
19433
19434       /* If we're emitting an out-of-line copy of an inline function,
19435          emit info for the abstract instance and set up to refer to it.  */
19436       else if (cgraph_function_possibly_inlined_p (decl)
19437                && ! DECL_ABSTRACT (decl)
19438                && ! class_or_namespace_scope_p (context_die)
19439                /* dwarf2out_abstract_function won't emit a die if this is just
19440                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19441                   that case, because that works only if we have a die.  */
19442                && DECL_INITIAL (decl) != NULL_TREE)
19443         {
19444           dwarf2out_abstract_function (decl);
19445           set_decl_origin_self (decl);
19446         }
19447
19448       /* Otherwise we're emitting the primary DIE for this decl.  */
19449       else if (debug_info_level > DINFO_LEVEL_TERSE)
19450         {
19451           /* Before we describe the FUNCTION_DECL itself, make sure that we
19452              have its containing type.  */
19453           if (!origin)
19454             origin = decl_class_context (decl);
19455           if (origin != NULL_TREE)
19456             gen_type_die (origin, context_die);
19457
19458           /* And its return type.  */
19459           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19460
19461           /* And its virtual context.  */
19462           if (DECL_VINDEX (decl) != NULL_TREE)
19463             gen_type_die (DECL_CONTEXT (decl), context_die);
19464
19465           /* Make sure we have a member DIE for decl.  */
19466           if (origin != NULL_TREE)
19467             gen_type_die_for_member (origin, decl, context_die);
19468
19469           /* And its containing namespace.  */
19470           context_die = declare_in_namespace (decl, context_die);
19471         }
19472
19473       /* Now output a DIE to represent the function itself.  */
19474       if (decl)
19475         gen_subprogram_die (decl, context_die);
19476       break;
19477
19478     case TYPE_DECL:
19479       /* If we are in terse mode, don't generate any DIEs to represent any
19480          actual typedefs.  */
19481       if (debug_info_level <= DINFO_LEVEL_TERSE)
19482         break;
19483
19484       /* In the special case of a TYPE_DECL node representing the declaration
19485          of some type tag, if the given TYPE_DECL is marked as having been
19486          instantiated from some other (original) TYPE_DECL node (e.g. one which
19487          was generated within the original definition of an inline function) we
19488          used to generate a special (abbreviated) DW_TAG_structure_type,
19489          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19490          should be actually referencing those DIEs, as variable DIEs with that
19491          type would be emitted already in the abstract origin, so it was always
19492          removed during unused type prunning.  Don't add anything in this
19493          case.  */
19494       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19495         break;
19496
19497       if (is_redundant_typedef (decl))
19498         gen_type_die (TREE_TYPE (decl), context_die);
19499       else
19500         /* Output a DIE to represent the typedef itself.  */
19501         gen_typedef_die (decl, context_die);
19502       break;
19503
19504     case LABEL_DECL:
19505       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19506         gen_label_die (decl, context_die);
19507       break;
19508
19509     case VAR_DECL:
19510     case RESULT_DECL:
19511       /* If we are in terse mode, don't generate any DIEs to represent any
19512          variable declarations or definitions.  */
19513       if (debug_info_level <= DINFO_LEVEL_TERSE)
19514         break;
19515
19516       /* Output any DIEs that are needed to specify the type of this data
19517          object.  */
19518       if (decl_by_reference_p (decl_or_origin))
19519         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19520       else
19521         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19522
19523       /* And its containing type.  */
19524       class_origin = decl_class_context (decl_or_origin);
19525       if (class_origin != NULL_TREE)
19526         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19527
19528       /* And its containing namespace.  */
19529       context_die = declare_in_namespace (decl_or_origin, context_die);
19530
19531       /* Now output the DIE to represent the data object itself.  This gets
19532          complicated because of the possibility that the VAR_DECL really
19533          represents an inlined instance of a formal parameter for an inline
19534          function.  */
19535       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19536       if (ultimate_origin != NULL_TREE
19537           && TREE_CODE (ultimate_origin) == PARM_DECL)
19538         gen_formal_parameter_die (decl, origin,
19539                                   true /* Emit name attribute.  */,
19540                                   context_die);
19541       else
19542         gen_variable_die (decl, origin, context_die);
19543       break;
19544
19545     case FIELD_DECL:
19546       /* Ignore the nameless fields that are used to skip bits but handle C++
19547          anonymous unions and structs.  */
19548       if (DECL_NAME (decl) != NULL_TREE
19549           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19550           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19551         {
19552           gen_type_die (member_declared_type (decl), context_die);
19553           gen_field_die (decl, context_die);
19554         }
19555       break;
19556
19557     case PARM_DECL:
19558       if (DECL_BY_REFERENCE (decl_or_origin))
19559         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19560       else
19561         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19562       return gen_formal_parameter_die (decl, origin,
19563                                        true /* Emit name attribute.  */,
19564                                        context_die);
19565
19566     case NAMESPACE_DECL:
19567     case IMPORTED_DECL:
19568       if (dwarf_version >= 3 || !dwarf_strict)
19569         gen_namespace_die (decl, context_die);
19570       break;
19571
19572     default:
19573       /* Probably some frontend-internal decl.  Assume we don't care.  */
19574       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19575       break;
19576     }
19577
19578   return NULL;
19579 }
19580 \f
19581 /* Output debug information for global decl DECL.  Called from toplev.c after
19582    compilation proper has finished.  */
19583
19584 static void
19585 dwarf2out_global_decl (tree decl)
19586 {
19587   /* Output DWARF2 information for file-scope tentative data object
19588      declarations, file-scope (extern) function declarations (which
19589      had no corresponding body) and file-scope tagged type declarations
19590      and definitions which have not yet been forced out.  */
19591   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19592     dwarf2out_decl (decl);
19593 }
19594
19595 /* Output debug information for type decl DECL.  Called from toplev.c
19596    and from language front ends (to record built-in types).  */
19597 static void
19598 dwarf2out_type_decl (tree decl, int local)
19599 {
19600   if (!local)
19601     dwarf2out_decl (decl);
19602 }
19603
19604 /* Output debug information for imported module or decl DECL.
19605    NAME is non-NULL name in the lexical block if the decl has been renamed.
19606    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19607    that DECL belongs to.
19608    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19609 static void
19610 dwarf2out_imported_module_or_decl_1 (tree decl,
19611                                      tree name,
19612                                      tree lexical_block,
19613                                      dw_die_ref lexical_block_die)
19614 {
19615   expanded_location xloc;
19616   dw_die_ref imported_die = NULL;
19617   dw_die_ref at_import_die;
19618
19619   if (TREE_CODE (decl) == IMPORTED_DECL)
19620     {
19621       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19622       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19623       gcc_assert (decl);
19624     }
19625   else
19626     xloc = expand_location (input_location);
19627
19628   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19629     {
19630       at_import_die = force_type_die (TREE_TYPE (decl));
19631       /* For namespace N { typedef void T; } using N::T; base_type_die
19632          returns NULL, but DW_TAG_imported_declaration requires
19633          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19634       if (!at_import_die)
19635         {
19636           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19637           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19638           at_import_die = lookup_type_die (TREE_TYPE (decl));
19639           gcc_assert (at_import_die);
19640         }
19641     }
19642   else
19643     {
19644       at_import_die = lookup_decl_die (decl);
19645       if (!at_import_die)
19646         {
19647           /* If we're trying to avoid duplicate debug info, we may not have
19648              emitted the member decl for this field.  Emit it now.  */
19649           if (TREE_CODE (decl) == FIELD_DECL)
19650             {
19651               tree type = DECL_CONTEXT (decl);
19652
19653               if (TYPE_CONTEXT (type)
19654                   && TYPE_P (TYPE_CONTEXT (type))
19655                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19656                                                 DINFO_USAGE_DIR_USE))
19657                 return;
19658               gen_type_die_for_member (type, decl,
19659                                        get_context_die (TYPE_CONTEXT (type)));
19660             }
19661           at_import_die = force_decl_die (decl);
19662         }
19663     }
19664
19665   if (TREE_CODE (decl) == NAMESPACE_DECL)
19666     {
19667       if (dwarf_version >= 3 || !dwarf_strict)
19668         imported_die = new_die (DW_TAG_imported_module,
19669                                 lexical_block_die,
19670                                 lexical_block);
19671       else
19672         return;
19673     }
19674   else
19675     imported_die = new_die (DW_TAG_imported_declaration,
19676                             lexical_block_die,
19677                             lexical_block);
19678
19679   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19680   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19681   if (name)
19682     add_AT_string (imported_die, DW_AT_name,
19683                    IDENTIFIER_POINTER (name));
19684   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19685 }
19686
19687 /* Output debug information for imported module or decl DECL.
19688    NAME is non-NULL name in context if the decl has been renamed.
19689    CHILD is true if decl is one of the renamed decls as part of
19690    importing whole module.  */
19691
19692 static void
19693 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19694                                    bool child)
19695 {
19696   /* dw_die_ref at_import_die;  */
19697   dw_die_ref scope_die;
19698
19699   if (debug_info_level <= DINFO_LEVEL_TERSE)
19700     return;
19701
19702   gcc_assert (decl);
19703
19704   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19705      We need decl DIE for reference and scope die. First, get DIE for the decl
19706      itself.  */
19707
19708   /* Get the scope die for decl context. Use comp_unit_die for global module
19709      or decl. If die is not found for non globals, force new die.  */
19710   if (context
19711       && TYPE_P (context)
19712       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19713     return;
19714
19715   if (!(dwarf_version >= 3 || !dwarf_strict))
19716     return;
19717
19718   scope_die = get_context_die (context);
19719
19720   if (child)
19721     {
19722       gcc_assert (scope_die->die_child);
19723       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19724       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19725       scope_die = scope_die->die_child;
19726     }
19727
19728   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19729   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19730
19731 }
19732
19733 /* Write the debugging output for DECL.  */
19734
19735 void
19736 dwarf2out_decl (tree decl)
19737 {
19738   dw_die_ref context_die = comp_unit_die ();
19739
19740   switch (TREE_CODE (decl))
19741     {
19742     case ERROR_MARK:
19743       return;
19744
19745     case FUNCTION_DECL:
19746       /* What we would really like to do here is to filter out all mere
19747          file-scope declarations of file-scope functions which are never
19748          referenced later within this translation unit (and keep all of ones
19749          that *are* referenced later on) but we aren't clairvoyant, so we have
19750          no idea which functions will be referenced in the future (i.e. later
19751          on within the current translation unit). So here we just ignore all
19752          file-scope function declarations which are not also definitions.  If
19753          and when the debugger needs to know something about these functions,
19754          it will have to hunt around and find the DWARF information associated
19755          with the definition of the function.
19756
19757          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19758          nodes represent definitions and which ones represent mere
19759          declarations.  We have to check DECL_INITIAL instead. That's because
19760          the C front-end supports some weird semantics for "extern inline"
19761          function definitions.  These can get inlined within the current
19762          translation unit (and thus, we need to generate Dwarf info for their
19763          abstract instances so that the Dwarf info for the concrete inlined
19764          instances can have something to refer to) but the compiler never
19765          generates any out-of-lines instances of such things (despite the fact
19766          that they *are* definitions).
19767
19768          The important point is that the C front-end marks these "extern
19769          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19770          them anyway. Note that the C++ front-end also plays some similar games
19771          for inline function definitions appearing within include files which
19772          also contain `#pragma interface' pragmas.  */
19773       if (DECL_INITIAL (decl) == NULL_TREE)
19774         return;
19775
19776       /* If we're a nested function, initially use a parent of NULL; if we're
19777          a plain function, this will be fixed up in decls_for_scope.  If
19778          we're a method, it will be ignored, since we already have a DIE.  */
19779       if (decl_function_context (decl)
19780           /* But if we're in terse mode, we don't care about scope.  */
19781           && debug_info_level > DINFO_LEVEL_TERSE)
19782         context_die = NULL;
19783       break;
19784
19785     case VAR_DECL:
19786       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19787          declaration and if the declaration was never even referenced from
19788          within this entire compilation unit.  We suppress these DIEs in
19789          order to save space in the .debug section (by eliminating entries
19790          which are probably useless).  Note that we must not suppress
19791          block-local extern declarations (whether used or not) because that
19792          would screw-up the debugger's name lookup mechanism and cause it to
19793          miss things which really ought to be in scope at a given point.  */
19794       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19795         return;
19796
19797       /* For local statics lookup proper context die.  */
19798       if (TREE_STATIC (decl) && decl_function_context (decl))
19799         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19800
19801       /* If we are in terse mode, don't generate any DIEs to represent any
19802          variable declarations or definitions.  */
19803       if (debug_info_level <= DINFO_LEVEL_TERSE)
19804         return;
19805       break;
19806
19807     case CONST_DECL:
19808       if (debug_info_level <= DINFO_LEVEL_TERSE)
19809         return;
19810       if (!is_fortran () && !is_ada ())
19811         return;
19812       if (TREE_STATIC (decl) && decl_function_context (decl))
19813         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19814       break;
19815
19816     case NAMESPACE_DECL:
19817     case IMPORTED_DECL:
19818       if (debug_info_level <= DINFO_LEVEL_TERSE)
19819         return;
19820       if (lookup_decl_die (decl) != NULL)
19821         return;
19822       break;
19823
19824     case TYPE_DECL:
19825       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19826       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19827         return;
19828
19829       /* Don't bother trying to generate any DIEs to represent any of the
19830          normal built-in types for the language we are compiling.  */
19831       if (DECL_IS_BUILTIN (decl))
19832         return;
19833
19834       /* If we are in terse mode, don't generate any DIEs for types.  */
19835       if (debug_info_level <= DINFO_LEVEL_TERSE)
19836         return;
19837
19838       /* If we're a function-scope tag, initially use a parent of NULL;
19839          this will be fixed up in decls_for_scope.  */
19840       if (decl_function_context (decl))
19841         context_die = NULL;
19842
19843       break;
19844
19845     default:
19846       return;
19847     }
19848
19849   gen_decl_die (decl, NULL, context_die);
19850 }
19851
19852 /* Write the debugging output for DECL.  */
19853
19854 static void
19855 dwarf2out_function_decl (tree decl)
19856 {
19857   dwarf2out_decl (decl);
19858   call_arg_locations = NULL;
19859   call_arg_loc_last = NULL;
19860   call_site_count = -1;
19861   tail_call_site_count = -1;
19862   VEC_free (dw_die_ref, heap, block_map);
19863   htab_empty (decl_loc_table);
19864   htab_empty (cached_dw_loc_list_table);
19865 }
19866
19867 /* Output a marker (i.e. a label) for the beginning of the generated code for
19868    a lexical block.  */
19869
19870 static void
19871 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19872                        unsigned int blocknum)
19873 {
19874   switch_to_section (current_function_section ());
19875   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19876 }
19877
19878 /* Output a marker (i.e. a label) for the end of the generated code for a
19879    lexical block.  */
19880
19881 static void
19882 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19883 {
19884   switch_to_section (current_function_section ());
19885   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
19886 }
19887
19888 /* Returns nonzero if it is appropriate not to emit any debugging
19889    information for BLOCK, because it doesn't contain any instructions.
19890
19891    Don't allow this for blocks with nested functions or local classes
19892    as we would end up with orphans, and in the presence of scheduling
19893    we may end up calling them anyway.  */
19894
19895 static bool
19896 dwarf2out_ignore_block (const_tree block)
19897 {
19898   tree decl;
19899   unsigned int i;
19900
19901   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
19902     if (TREE_CODE (decl) == FUNCTION_DECL
19903         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19904       return 0;
19905   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
19906     {
19907       decl = BLOCK_NONLOCALIZED_VAR (block, i);
19908       if (TREE_CODE (decl) == FUNCTION_DECL
19909           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19910       return 0;
19911     }
19912
19913   return 1;
19914 }
19915
19916 /* Hash table routines for file_hash.  */
19917
19918 static int
19919 file_table_eq (const void *p1_p, const void *p2_p)
19920 {
19921   const struct dwarf_file_data *const p1 =
19922     (const struct dwarf_file_data *) p1_p;
19923   const char *const p2 = (const char *) p2_p;
19924   return filename_cmp (p1->filename, p2) == 0;
19925 }
19926
19927 static hashval_t
19928 file_table_hash (const void *p_p)
19929 {
19930   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
19931   return htab_hash_string (p->filename);
19932 }
19933
19934 /* Lookup FILE_NAME (in the list of filenames that we know about here in
19935    dwarf2out.c) and return its "index".  The index of each (known) filename is
19936    just a unique number which is associated with only that one filename.  We
19937    need such numbers for the sake of generating labels (in the .debug_sfnames
19938    section) and references to those files numbers (in the .debug_srcinfo
19939    and.debug_macinfo sections).  If the filename given as an argument is not
19940    found in our current list, add it to the list and assign it the next
19941    available unique index number.  In order to speed up searches, we remember
19942    the index of the filename was looked up last.  This handles the majority of
19943    all searches.  */
19944
19945 static struct dwarf_file_data *
19946 lookup_filename (const char *file_name)
19947 {
19948   void ** slot;
19949   struct dwarf_file_data * created;
19950
19951   /* Check to see if the file name that was searched on the previous
19952      call matches this file name.  If so, return the index.  */
19953   if (file_table_last_lookup
19954       && (file_name == file_table_last_lookup->filename
19955           || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
19956     return file_table_last_lookup;
19957
19958   /* Didn't match the previous lookup, search the table.  */
19959   slot = htab_find_slot_with_hash (file_table, file_name,
19960                                    htab_hash_string (file_name), INSERT);
19961   if (*slot)
19962     return (struct dwarf_file_data *) *slot;
19963
19964   created = ggc_alloc_dwarf_file_data ();
19965   created->filename = file_name;
19966   created->emitted_number = 0;
19967   *slot = created;
19968   return created;
19969 }
19970
19971 /* If the assembler will construct the file table, then translate the compiler
19972    internal file table number into the assembler file table number, and emit
19973    a .file directive if we haven't already emitted one yet.  The file table
19974    numbers are different because we prune debug info for unused variables and
19975    types, which may include filenames.  */
19976
19977 static int
19978 maybe_emit_file (struct dwarf_file_data * fd)
19979 {
19980   if (! fd->emitted_number)
19981     {
19982       if (last_emitted_file)
19983         fd->emitted_number = last_emitted_file->emitted_number + 1;
19984       else
19985         fd->emitted_number = 1;
19986       last_emitted_file = fd;
19987
19988       if (DWARF2_ASM_LINE_DEBUG_INFO)
19989         {
19990           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
19991           output_quoted_string (asm_out_file,
19992                                 remap_debug_filename (fd->filename));
19993           fputc ('\n', asm_out_file);
19994         }
19995     }
19996
19997   return fd->emitted_number;
19998 }
19999
20000 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20001    That generation should happen after function debug info has been
20002    generated. The value of the attribute is the constant value of ARG.  */
20003
20004 static void
20005 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20006 {
20007   die_arg_entry entry;
20008
20009   if (!die || !arg)
20010     return;
20011
20012   if (!tmpl_value_parm_die_table)
20013     tmpl_value_parm_die_table
20014       = VEC_alloc (die_arg_entry, gc, 32);
20015
20016   entry.die = die;
20017   entry.arg = arg;
20018   VEC_safe_push (die_arg_entry, gc,
20019                  tmpl_value_parm_die_table,
20020                  &entry);
20021 }
20022
20023 /* Return TRUE if T is an instance of generic type, FALSE
20024    otherwise.  */
20025
20026 static bool
20027 generic_type_p (tree t)
20028 {
20029   if (t == NULL_TREE || !TYPE_P (t))
20030     return false;
20031   return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
20032 }
20033
20034 /* Schedule the generation of the generic parameter dies for the
20035   instance of generic type T. The proper generation itself is later
20036   done by gen_scheduled_generic_parms_dies. */
20037
20038 static void
20039 schedule_generic_params_dies_gen (tree t)
20040 {
20041   if (!generic_type_p (t))
20042     return;
20043
20044   if (generic_type_instances == NULL)
20045     generic_type_instances = VEC_alloc (tree, gc, 256);
20046
20047   VEC_safe_push (tree, gc, generic_type_instances, t);
20048 }
20049
20050 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20051    by append_entry_to_tmpl_value_parm_die_table. This function must
20052    be called after function DIEs have been generated.  */
20053
20054 static void
20055 gen_remaining_tmpl_value_param_die_attribute (void)
20056 {
20057   if (tmpl_value_parm_die_table)
20058     {
20059       unsigned i;
20060       die_arg_entry *e;
20061
20062       FOR_EACH_VEC_ELT (die_arg_entry, tmpl_value_parm_die_table, i, e)
20063         tree_add_const_value_attribute (e->die, e->arg);
20064     }
20065 }
20066
20067 /* Generate generic parameters DIEs for instances of generic types
20068    that have been previously scheduled by
20069    schedule_generic_params_dies_gen. This function must be called
20070    after all the types of the CU have been laid out.  */
20071
20072 static void
20073 gen_scheduled_generic_parms_dies (void)
20074 {
20075   unsigned i;
20076   tree t;
20077
20078   if (generic_type_instances == NULL)
20079     return;
20080   
20081   FOR_EACH_VEC_ELT (tree, generic_type_instances, i, t)
20082     gen_generic_params_dies (t);
20083 }
20084
20085
20086 /* Replace DW_AT_name for the decl with name.  */
20087
20088 static void
20089 dwarf2out_set_name (tree decl, tree name)
20090 {
20091   dw_die_ref die;
20092   dw_attr_ref attr;
20093   const char *dname;
20094
20095   die = TYPE_SYMTAB_DIE (decl);
20096   if (!die)
20097     return;
20098
20099   dname = dwarf2_name (name, 0);
20100   if (!dname)
20101     return;
20102
20103   attr = get_AT (die, DW_AT_name);
20104   if (attr)
20105     {
20106       struct indirect_string_node *node;
20107
20108       node = find_AT_string (dname);
20109       /* replace the string.  */
20110       attr->dw_attr_val.v.val_str = node;
20111     }
20112
20113   else
20114     add_name_attribute (die, dname);
20115 }
20116
20117 /* Called by the final INSN scan whenever we see a var location.  We
20118    use it to drop labels in the right places, and throw the location in
20119    our lookup table.  */
20120
20121 static void
20122 dwarf2out_var_location (rtx loc_note)
20123 {
20124   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20125   struct var_loc_node *newloc;
20126   rtx next_real;
20127   static const char *last_label;
20128   static const char *last_postcall_label;
20129   static bool last_in_cold_section_p;
20130   tree decl;
20131   bool var_loc_p;
20132
20133   if (!NOTE_P (loc_note))
20134     {
20135       if (CALL_P (loc_note))
20136         {
20137           call_site_count++;
20138           if (SIBLING_CALL_P (loc_note))
20139             tail_call_site_count++;
20140         }
20141       return;
20142     }
20143
20144   var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
20145   if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20146     return;
20147
20148   next_real = next_real_insn (loc_note);
20149
20150   /* If there are no instructions which would be affected by this note,
20151      don't do anything.  */
20152   if (var_loc_p
20153       && next_real == NULL_RTX
20154       && !NOTE_DURING_CALL_P (loc_note))
20155     return;
20156
20157   if (next_real == NULL_RTX)
20158     next_real = get_last_insn ();
20159
20160   /* If there were any real insns between note we processed last time
20161      and this note (or if it is the first note), clear
20162      last_{,postcall_}label so that they are not reused this time.  */
20163   if (last_var_location_insn == NULL_RTX
20164       || last_var_location_insn != next_real
20165       || last_in_cold_section_p != in_cold_section_p)
20166     {
20167       last_label = NULL;
20168       last_postcall_label = NULL;
20169     }
20170
20171   if (var_loc_p)
20172     {
20173       decl = NOTE_VAR_LOCATION_DECL (loc_note);
20174       newloc = add_var_loc_to_decl (decl, loc_note,
20175                                     NOTE_DURING_CALL_P (loc_note)
20176                                     ? last_postcall_label : last_label);
20177       if (newloc == NULL)
20178         return;
20179     }
20180   else
20181     {
20182       decl = NULL_TREE;
20183       newloc = NULL;
20184     }
20185
20186   /* If there were no real insns between note we processed last time
20187      and this note, use the label we emitted last time.  Otherwise
20188      create a new label and emit it.  */
20189   if (last_label == NULL)
20190     {
20191       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20192       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20193       loclabel_num++;
20194       last_label = ggc_strdup (loclabel);
20195     }
20196
20197   if (!var_loc_p)
20198     {
20199       struct call_arg_loc_node *ca_loc
20200         = ggc_alloc_cleared_call_arg_loc_node ();
20201       rtx prev = prev_real_insn (loc_note), x;
20202       ca_loc->call_arg_loc_note = loc_note;
20203       ca_loc->next = NULL;
20204       ca_loc->label = last_label;
20205       gcc_assert (prev
20206                   && (CALL_P (prev)
20207                       || (NONJUMP_INSN_P (prev)
20208                           && GET_CODE (PATTERN (prev)) == SEQUENCE
20209                           && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
20210       if (!CALL_P (prev))
20211         prev = XVECEXP (PATTERN (prev), 0, 0);
20212       ca_loc->tail_call_p = SIBLING_CALL_P (prev);
20213       x = PATTERN (prev);
20214       if (GET_CODE (x) == PARALLEL)
20215         x = XVECEXP (x, 0, 0);
20216       if (GET_CODE (x) == SET)
20217         x = SET_SRC (x);
20218       if (GET_CODE (x) == CALL && MEM_P (XEXP (x, 0)))
20219         {
20220           x = XEXP (XEXP (x, 0), 0);
20221           if (GET_CODE (x) == SYMBOL_REF
20222               && SYMBOL_REF_DECL (x)
20223               && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
20224             ca_loc->symbol_ref = x;
20225         }
20226       ca_loc->block = insn_scope (prev);
20227       if (call_arg_locations)
20228         call_arg_loc_last->next = ca_loc;
20229       else
20230         call_arg_locations = ca_loc;
20231       call_arg_loc_last = ca_loc;
20232     }
20233   else if (!NOTE_DURING_CALL_P (loc_note))
20234     newloc->label = last_label;
20235   else
20236     {
20237       if (!last_postcall_label)
20238         {
20239           sprintf (loclabel, "%s-1", last_label);
20240           last_postcall_label = ggc_strdup (loclabel);
20241         }
20242       newloc->label = last_postcall_label;
20243     }
20244
20245   last_var_location_insn = next_real;
20246   last_in_cold_section_p = in_cold_section_p;
20247 }
20248
20249 /* Note in one location list that text section has changed.  */
20250
20251 static int
20252 var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED)
20253 {
20254   var_loc_list *list = (var_loc_list *) *slot;
20255   if (list->first)
20256     list->last_before_switch
20257       = list->last->next ? list->last->next : list->last;
20258   return 1;
20259 }
20260
20261 /* Note in all location lists that text section has changed.  */
20262
20263 static void
20264 var_location_switch_text_section (void)
20265 {
20266   if (decl_loc_table == NULL)
20267     return;
20268
20269   htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL);
20270 }
20271
20272 /* Create a new line number table.  */
20273
20274 static dw_line_info_table *
20275 new_line_info_table (void)
20276 {
20277   dw_line_info_table *table;
20278
20279   table = ggc_alloc_cleared_dw_line_info_table_struct ();
20280   table->file_num = 1;
20281   table->line_num = 1;
20282   table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
20283
20284   return table;
20285 }
20286
20287 /* Lookup the "current" table into which we emit line info, so
20288    that we don't have to do it for every source line.  */
20289
20290 static void
20291 set_cur_line_info_table (section *sec)
20292 {
20293   dw_line_info_table *table;
20294
20295   if (sec == text_section)
20296     table = text_section_line_info;
20297   else if (sec == cold_text_section)
20298     {
20299       table = cold_text_section_line_info;
20300       if (!table)
20301         {
20302           cold_text_section_line_info = table = new_line_info_table ();
20303           table->end_label = cold_end_label;
20304         }
20305     }
20306   else
20307     {
20308       const char *end_label;
20309
20310       if (flag_reorder_blocks_and_partition)
20311         {
20312           if (in_cold_section_p)
20313             end_label = crtl->subsections.cold_section_end_label;
20314           else
20315             end_label = crtl->subsections.hot_section_end_label;
20316         }
20317       else
20318         {
20319           char label[MAX_ARTIFICIAL_LABEL_BYTES];
20320           ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
20321                                        current_function_funcdef_no);
20322           end_label = ggc_strdup (label);
20323         }
20324
20325       table = new_line_info_table ();
20326       table->end_label = end_label;
20327
20328       VEC_safe_push (dw_line_info_table_p, gc, separate_line_info, table);
20329     }
20330
20331   cur_line_info_table = table;
20332 }
20333
20334
20335 /* We need to reset the locations at the beginning of each
20336    function. We can't do this in the end_function hook, because the
20337    declarations that use the locations won't have been output when
20338    that hook is called.  Also compute have_multiple_function_sections here.  */
20339
20340 static void
20341 dwarf2out_begin_function (tree fun)
20342 {
20343   section *sec = function_section (fun);
20344
20345   if (sec != text_section)
20346     have_multiple_function_sections = true;
20347
20348   if (flag_reorder_blocks_and_partition && !cold_text_section)
20349     {
20350       gcc_assert (current_function_decl == fun);
20351       cold_text_section = unlikely_text_section ();
20352       switch_to_section (cold_text_section);
20353       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20354       switch_to_section (sec);
20355     }
20356
20357   dwarf2out_note_section_used ();
20358   call_site_count = 0;
20359   tail_call_site_count = 0;
20360
20361   set_cur_line_info_table (sec);
20362 }
20363
20364 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.  */
20365
20366 static void
20367 push_dw_line_info_entry (dw_line_info_table *table,
20368                          enum dw_line_info_opcode opcode, unsigned int val)
20369 {
20370   dw_line_info_entry e;
20371   e.opcode = opcode;
20372   e.val = val;
20373   VEC_safe_push (dw_line_info_entry, gc, table->entries, &e);
20374 }
20375
20376 /* Output a label to mark the beginning of a source code line entry
20377    and record information relating to this source line, in
20378    'line_info_table' for later output of the .debug_line section.  */
20379 /* ??? The discriminator parameter ought to be unsigned.  */
20380
20381 static void
20382 dwarf2out_source_line (unsigned int line, const char *filename,
20383                        int discriminator, bool is_stmt)
20384 {
20385   unsigned int file_num;
20386   dw_line_info_table *table;
20387
20388   if (debug_info_level < DINFO_LEVEL_NORMAL || line == 0)
20389     return;
20390
20391   /* The discriminator column was added in dwarf4.  Simplify the below
20392      by simply removing it if we're not supposed to output it.  */
20393   if (dwarf_version < 4 && dwarf_strict)
20394     discriminator = 0;
20395
20396   table = cur_line_info_table;
20397   file_num = maybe_emit_file (lookup_filename (filename));
20398
20399   /* ??? TODO: Elide duplicate line number entries.  Traditionally,
20400      the debugger has used the second (possibly duplicate) line number
20401      at the beginning of the function to mark the end of the prologue.
20402      We could eliminate any other duplicates within the function.  For
20403      Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
20404      that second line number entry.  */
20405   /* Recall that this end-of-prologue indication is *not* the same thing
20406      as the end_prologue debug hook.  The NOTE_INSN_PROLOGUE_END note,
20407      to which the hook corresponds, follows the last insn that was 
20408      emitted by gen_prologue.  What we need is to preceed the first insn
20409      that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
20410      insn that corresponds to something the user wrote.  These may be
20411      very different locations once scheduling is enabled.  */
20412
20413   if (0 && file_num == table->file_num
20414       && line == table->line_num
20415       && discriminator == table->discrim_num
20416       && is_stmt == table->is_stmt)
20417     return;
20418
20419   switch_to_section (current_function_section ());
20420
20421   /* If requested, emit something human-readable.  */
20422   if (flag_debug_asm)
20423     fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
20424
20425   if (DWARF2_ASM_LINE_DEBUG_INFO)
20426     {
20427       /* Emit the .loc directive understood by GNU as.  */
20428       fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20429       if (is_stmt != table->is_stmt)
20430         fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20431       if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20432         fprintf (asm_out_file, " discriminator %d", discriminator);
20433       fputc ('\n', asm_out_file);
20434     }
20435   else
20436     {
20437       unsigned int label_num = ++line_info_label_num;
20438
20439       targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
20440
20441       push_dw_line_info_entry (table, LI_set_address, label_num);
20442       if (file_num != table->file_num)
20443         push_dw_line_info_entry (table, LI_set_file, file_num);
20444       if (discriminator != table->discrim_num)
20445         push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
20446       if (is_stmt != table->is_stmt)
20447         push_dw_line_info_entry (table, LI_negate_stmt, 0);
20448       push_dw_line_info_entry (table, LI_set_line, line);
20449     }
20450
20451   table->file_num = file_num;
20452   table->line_num = line;
20453   table->discrim_num = discriminator;
20454   table->is_stmt = is_stmt;
20455   table->in_use = true;
20456 }
20457
20458 /* Record the beginning of a new source file.  */
20459
20460 static void
20461 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20462 {
20463   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20464     {
20465       /* Record the beginning of the file for break_out_includes.  */
20466       dw_die_ref bincl_die;
20467
20468       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
20469       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20470     }
20471
20472   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20473     {
20474       macinfo_entry e;
20475       e.code = DW_MACINFO_start_file;
20476       e.lineno = lineno;
20477       e.info = xstrdup (filename);
20478       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20479     }
20480 }
20481
20482 /* Record the end of a source file.  */
20483
20484 static void
20485 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20486 {
20487   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20488     /* Record the end of the file for break_out_includes.  */
20489     new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
20490
20491   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20492     {
20493       macinfo_entry e;
20494       e.code = DW_MACINFO_end_file;
20495       e.lineno = lineno;
20496       e.info = NULL;
20497       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20498     }
20499 }
20500
20501 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20502    the tail part of the directive line, i.e. the part which is past the
20503    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20504
20505 static void
20506 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20507                   const char *buffer ATTRIBUTE_UNUSED)
20508 {
20509   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20510     {
20511       macinfo_entry e;
20512       /* Insert a dummy first entry to be able to optimize the whole
20513          predefined macro block using DW_MACRO_GNU_transparent_include.  */
20514       if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20515         {
20516           e.code = 0;
20517           e.lineno = 0;
20518           e.info = NULL;
20519           VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20520         }
20521       e.code = DW_MACINFO_define;
20522       e.lineno = lineno;
20523       e.info = xstrdup (buffer);;
20524       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20525     }
20526 }
20527
20528 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20529    the tail part of the directive line, i.e. the part which is past the
20530    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20531
20532 static void
20533 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20534                  const char *buffer ATTRIBUTE_UNUSED)
20535 {
20536   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20537     {
20538       macinfo_entry e;
20539       /* Insert a dummy first entry to be able to optimize the whole
20540          predefined macro block using DW_MACRO_GNU_transparent_include.  */
20541       if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20542         {
20543           e.code = 0;
20544           e.lineno = 0;
20545           e.info = NULL;
20546           VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20547         }
20548       e.code = DW_MACINFO_undef;
20549       e.lineno = lineno;
20550       e.info = xstrdup (buffer);
20551       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20552     }
20553 }
20554
20555 /* Routines to manipulate hash table of CUs.  */
20556
20557 static hashval_t
20558 htab_macinfo_hash (const void *of)
20559 {
20560   const macinfo_entry *const entry =
20561     (const macinfo_entry *) of;
20562
20563   return htab_hash_string (entry->info);
20564 }
20565
20566 static int
20567 htab_macinfo_eq (const void *of1, const void *of2)
20568 {
20569   const macinfo_entry *const entry1 = (const macinfo_entry *) of1;
20570   const macinfo_entry *const entry2 = (const macinfo_entry *) of2;
20571
20572   return !strcmp (entry1->info, entry2->info);
20573 }
20574
20575 /* Output a single .debug_macinfo entry.  */
20576
20577 static void
20578 output_macinfo_op (macinfo_entry *ref)
20579 {
20580   int file_num;
20581   size_t len;
20582   struct indirect_string_node *node;
20583   char label[MAX_ARTIFICIAL_LABEL_BYTES];
20584   struct dwarf_file_data *fd;
20585
20586   switch (ref->code)
20587     {
20588     case DW_MACINFO_start_file:
20589       fd = lookup_filename (ref->info);
20590       if (fd->filename == ref->info)
20591         fd->filename = ggc_strdup (fd->filename);
20592       file_num = maybe_emit_file (fd);
20593       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20594       dw2_asm_output_data_uleb128 (ref->lineno,
20595                                    "Included from line number %lu", 
20596                                    (unsigned long) ref->lineno);
20597       dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
20598       break;
20599     case DW_MACINFO_end_file:
20600       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20601       break;
20602     case DW_MACINFO_define:
20603     case DW_MACINFO_undef:
20604       len = strlen (ref->info) + 1;
20605       if (!dwarf_strict
20606           && len > DWARF_OFFSET_SIZE
20607           && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
20608           && (debug_str_section->common.flags & SECTION_MERGE) != 0)
20609         {
20610           ref->code = ref->code == DW_MACINFO_define
20611                       ? DW_MACRO_GNU_define_indirect
20612                       : DW_MACRO_GNU_undef_indirect;
20613           output_macinfo_op (ref);
20614           return;
20615         }
20616       dw2_asm_output_data (1, ref->code,
20617                            ref->code == DW_MACINFO_define
20618                            ? "Define macro" : "Undefine macro");
20619       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 
20620                                    (unsigned long) ref->lineno);
20621       dw2_asm_output_nstring (ref->info, -1, "The macro");
20622       break;
20623     case DW_MACRO_GNU_define_indirect:
20624     case DW_MACRO_GNU_undef_indirect:
20625       node = find_AT_string (ref->info);
20626       if (node->form != DW_FORM_strp)
20627         {
20628           char label[32];
20629           ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
20630           ++dw2_string_counter;
20631           node->label = xstrdup (label);
20632           node->form = DW_FORM_strp;
20633         }
20634       dw2_asm_output_data (1, ref->code,
20635                            ref->code == DW_MACRO_GNU_define_indirect
20636                            ? "Define macro indirect"
20637                            : "Undefine macro indirect");
20638       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
20639                                    (unsigned long) ref->lineno);
20640       dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
20641                              debug_str_section, "The macro: \"%s\"",
20642                              ref->info);
20643       break;
20644     case DW_MACRO_GNU_transparent_include:
20645       dw2_asm_output_data (1, ref->code, "Transparent include");
20646       ASM_GENERATE_INTERNAL_LABEL (label,
20647                                    DEBUG_MACRO_SECTION_LABEL, ref->lineno);
20648       dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
20649       break;
20650     default:
20651       fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
20652                ASM_COMMENT_START, (unsigned long) ref->code);
20653       break;
20654     }
20655 }
20656
20657 /* Attempt to make a sequence of define/undef macinfo ops shareable with
20658    other compilation unit .debug_macinfo sections.  IDX is the first
20659    index of a define/undef, return the number of ops that should be
20660    emitted in a comdat .debug_macinfo section and emit
20661    a DW_MACRO_GNU_transparent_include entry referencing it.
20662    If the define/undef entry should be emitted normally, return 0.  */
20663
20664 static unsigned
20665 optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
20666                         htab_t *macinfo_htab)
20667 {
20668   macinfo_entry *first, *second, *cur, *inc;
20669   char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
20670   unsigned char checksum[16];
20671   struct md5_ctx ctx;
20672   char *grp_name, *tail;
20673   const char *base;
20674   unsigned int i, count, encoded_filename_len, linebuf_len;
20675   void **slot;
20676
20677   first = VEC_index (macinfo_entry, macinfo_table, idx);
20678   second = VEC_index (macinfo_entry, macinfo_table, idx + 1);
20679
20680   /* Optimize only if there are at least two consecutive define/undef ops,
20681      and either all of them are before first DW_MACINFO_start_file
20682      with lineno 0 (i.e. predefined macro block), or all of them are
20683      in some included header file.  */
20684   if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
20685     return 0;
20686   if (VEC_empty (macinfo_entry, files))
20687     {
20688       if (first->lineno != 0 || second->lineno != 0)
20689         return 0;
20690     }
20691   else if (first->lineno == 0)
20692     return 0;
20693
20694   /* Find the last define/undef entry that can be grouped together
20695      with first and at the same time compute md5 checksum of their
20696      codes, linenumbers and strings.  */
20697   md5_init_ctx (&ctx);
20698   for (i = idx; VEC_iterate (macinfo_entry, macinfo_table, i, cur); i++)
20699     if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
20700       break;
20701     else if (first->lineno == 0 && cur->lineno != 0)
20702       break;
20703     else
20704       {
20705         unsigned char code = cur->code;
20706         md5_process_bytes (&code, 1, &ctx);
20707         checksum_uleb128 (cur->lineno, &ctx);
20708         md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
20709       }
20710   md5_finish_ctx (&ctx, checksum);
20711   count = i - idx;
20712
20713   /* From the containing include filename (if any) pick up just
20714      usable characters from its basename.  */
20715   if (first->lineno == 0)
20716     base = "";
20717   else
20718     base = lbasename (VEC_last (macinfo_entry, files)->info);
20719   for (encoded_filename_len = 0, i = 0; base[i]; i++)
20720     if (ISIDNUM (base[i]) || base[i] == '.')
20721       encoded_filename_len++;
20722   /* Count . at the end.  */
20723   if (encoded_filename_len)
20724     encoded_filename_len++;
20725
20726   sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
20727   linebuf_len = strlen (linebuf);
20728
20729   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
20730   grp_name = XNEWVEC (char, 4 + encoded_filename_len + linebuf_len + 1
20731                       + 16 * 2 + 1);
20732   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
20733   tail = grp_name + 4;
20734   if (encoded_filename_len)
20735     {
20736       for (i = 0; base[i]; i++)
20737         if (ISIDNUM (base[i]) || base[i] == '.')
20738           *tail++ = base[i];
20739       *tail++ = '.';
20740     }
20741   memcpy (tail, linebuf, linebuf_len);
20742   tail += linebuf_len;
20743   *tail++ = '.';
20744   for (i = 0; i < 16; i++)
20745     sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
20746
20747   /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
20748      in the empty vector entry before the first define/undef.  */
20749   inc = VEC_index (macinfo_entry, macinfo_table, idx - 1);
20750   inc->code = DW_MACRO_GNU_transparent_include;
20751   inc->lineno = 0;
20752   inc->info = grp_name;
20753   if (*macinfo_htab == NULL)
20754     *macinfo_htab = htab_create (10, htab_macinfo_hash, htab_macinfo_eq, NULL);
20755   /* Avoid emitting duplicates.  */
20756   slot = htab_find_slot (*macinfo_htab, inc, INSERT);
20757   if (*slot != NULL)
20758     {
20759       free (CONST_CAST (char *, inc->info));
20760       inc->code = 0;
20761       inc->info = NULL;
20762       /* If such an entry has been used before, just emit
20763          a DW_MACRO_GNU_transparent_include op.  */
20764       inc = (macinfo_entry *) *slot;
20765       output_macinfo_op (inc);
20766       /* And clear all macinfo_entry in the range to avoid emitting them
20767          in the second pass.  */
20768       for (i = idx;
20769            VEC_iterate (macinfo_entry, macinfo_table, i, cur)
20770            && i < idx + count;
20771            i++)
20772         {
20773           cur->code = 0;
20774           free (CONST_CAST (char *, cur->info));
20775           cur->info = NULL;
20776         }
20777     }
20778   else
20779     {
20780       *slot = inc;
20781       inc->lineno = htab_elements (*macinfo_htab);
20782       output_macinfo_op (inc);
20783     }
20784   return count;
20785 }
20786
20787 /* Output macinfo section(s).  */
20788
20789 static void
20790 output_macinfo (void)
20791 {
20792   unsigned i;
20793   unsigned long length = VEC_length (macinfo_entry, macinfo_table);
20794   macinfo_entry *ref;
20795   VEC (macinfo_entry, gc) *files = NULL;
20796   htab_t macinfo_htab = NULL;
20797
20798   if (! length)
20799     return;
20800
20801   /* output_macinfo* uses these interchangeably.  */
20802   gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
20803               && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
20804               && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
20805               && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
20806
20807   /* For .debug_macro emit the section header.  */
20808   if (!dwarf_strict)
20809     {
20810       dw2_asm_output_data (2, 4, "DWARF macro version number");
20811       if (DWARF_OFFSET_SIZE == 8)
20812         dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
20813       else
20814         dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
20815       dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_line_section_label,
20816                              debug_line_section, NULL);
20817     }
20818
20819   /* In the first loop, it emits the primary .debug_macinfo section
20820      and after each emitted op the macinfo_entry is cleared.
20821      If a longer range of define/undef ops can be optimized using
20822      DW_MACRO_GNU_transparent_include, the
20823      DW_MACRO_GNU_transparent_include op is emitted and kept in
20824      the vector before the first define/undef in the range and the
20825      whole range of define/undef ops is not emitted and kept.  */
20826   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20827     {
20828       switch (ref->code)
20829         {
20830         case DW_MACINFO_start_file:
20831           VEC_safe_push (macinfo_entry, gc, files, ref);
20832           break;
20833         case DW_MACINFO_end_file:
20834           if (!VEC_empty (macinfo_entry, files))
20835             {
20836               macinfo_entry *file = VEC_last (macinfo_entry, files);
20837               free (CONST_CAST (char *, file->info));
20838               VEC_pop (macinfo_entry, files);
20839             }
20840           break;
20841         case DW_MACINFO_define:
20842         case DW_MACINFO_undef:
20843           if (!dwarf_strict
20844               && HAVE_COMDAT_GROUP
20845               && VEC_length (macinfo_entry, files) != 1
20846               && i > 0
20847               && i + 1 < length
20848               && VEC_index (macinfo_entry, macinfo_table, i - 1)->code == 0)
20849             {
20850               unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
20851               if (count)
20852                 {
20853                   i += count - 1;
20854                   continue;
20855                 }
20856             }
20857           break;
20858         case 0:
20859           /* A dummy entry may be inserted at the beginning to be able
20860              to optimize the whole block of predefined macros.  */
20861           if (i == 0)
20862             continue;
20863         default:
20864           break;
20865         }
20866       output_macinfo_op (ref);
20867       /* For DW_MACINFO_start_file ref->info has been copied into files
20868          vector.  */
20869       if (ref->code != DW_MACINFO_start_file)
20870         free (CONST_CAST (char *, ref->info));
20871       ref->info = NULL;
20872       ref->code = 0;
20873     }
20874
20875   if (macinfo_htab == NULL)
20876     return;
20877
20878   htab_delete (macinfo_htab);
20879
20880   /* If any DW_MACRO_GNU_transparent_include were used, on those
20881      DW_MACRO_GNU_transparent_include entries terminate the
20882      current chain and switch to a new comdat .debug_macinfo
20883      section and emit the define/undef entries within it.  */
20884   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20885     switch (ref->code)
20886       {
20887       case 0:
20888         continue;
20889       case DW_MACRO_GNU_transparent_include:
20890         {
20891           char label[MAX_ARTIFICIAL_LABEL_BYTES];
20892           tree comdat_key = get_identifier (ref->info);
20893           /* Terminate the previous .debug_macinfo section.  */
20894           dw2_asm_output_data (1, 0, "End compilation unit");
20895           targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
20896                                          SECTION_DEBUG
20897                                          | SECTION_LINKONCE,
20898                                          comdat_key);
20899           ASM_GENERATE_INTERNAL_LABEL (label,
20900                                        DEBUG_MACRO_SECTION_LABEL,
20901                                        ref->lineno);
20902           ASM_OUTPUT_LABEL (asm_out_file, label);
20903           ref->code = 0;
20904           free (CONST_CAST (char *, ref->info));
20905           ref->info = NULL;
20906           dw2_asm_output_data (2, 4, "DWARF macro version number");
20907           if (DWARF_OFFSET_SIZE == 8)
20908             dw2_asm_output_data (1, 1, "Flags: 64-bit");
20909           else
20910             dw2_asm_output_data (1, 0, "Flags: 32-bit");
20911         }
20912         break;
20913       case DW_MACINFO_define:
20914       case DW_MACINFO_undef:
20915         output_macinfo_op (ref);
20916         ref->code = 0;
20917         free (CONST_CAST (char *, ref->info));
20918         ref->info = NULL;
20919         break;
20920       default:
20921         gcc_unreachable ();
20922       }
20923 }
20924
20925 /* Set up for Dwarf output at the start of compilation.  */
20926
20927 static void
20928 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20929 {
20930   /* Allocate the file_table.  */
20931   file_table = htab_create_ggc (50, file_table_hash,
20932                                 file_table_eq, NULL);
20933
20934   /* Allocate the decl_die_table.  */
20935   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20936                                     decl_die_table_eq, NULL);
20937
20938   /* Allocate the decl_loc_table.  */
20939   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20940                                     decl_loc_table_eq, NULL);
20941
20942   /* Allocate the cached_dw_loc_list_table.  */
20943   cached_dw_loc_list_table
20944     = htab_create_ggc (10, cached_dw_loc_list_table_hash,
20945                        cached_dw_loc_list_table_eq, NULL);
20946
20947   /* Allocate the initial hunk of the decl_scope_table.  */
20948   decl_scope_table = VEC_alloc (tree, gc, 256);
20949
20950   /* Allocate the initial hunk of the abbrev_die_table.  */
20951   abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref
20952     (ABBREV_DIE_TABLE_INCREMENT);
20953   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20954   /* Zero-th entry is allocated, but unused.  */
20955   abbrev_die_table_in_use = 1;
20956
20957   /* Allocate the pubtypes and pubnames vectors.  */
20958   pubname_table = VEC_alloc (pubname_entry, gc, 32);
20959   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20960
20961   incomplete_types = VEC_alloc (tree, gc, 64);
20962
20963   used_rtx_array = VEC_alloc (rtx, gc, 32);
20964
20965   debug_info_section = get_section (DEBUG_INFO_SECTION,
20966                                     SECTION_DEBUG, NULL);
20967   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20968                                       SECTION_DEBUG, NULL);
20969   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20970                                        SECTION_DEBUG, NULL);
20971   debug_macinfo_section = get_section (dwarf_strict
20972                                        ? DEBUG_MACINFO_SECTION
20973                                        : DEBUG_MACRO_SECTION,
20974                                        SECTION_DEBUG, NULL);
20975   debug_line_section = get_section (DEBUG_LINE_SECTION,
20976                                     SECTION_DEBUG, NULL);
20977   debug_loc_section = get_section (DEBUG_LOC_SECTION,
20978                                    SECTION_DEBUG, NULL);
20979   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20980                                         SECTION_DEBUG, NULL);
20981   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20982                                         SECTION_DEBUG, NULL);
20983   debug_str_section = get_section (DEBUG_STR_SECTION,
20984                                    DEBUG_STR_SECTION_FLAGS, NULL);
20985   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20986                                       SECTION_DEBUG, NULL);
20987   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20988                                      SECTION_DEBUG, NULL);
20989
20990   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20991   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20992                                DEBUG_ABBREV_SECTION_LABEL, 0);
20993   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20994   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20995                                COLD_TEXT_SECTION_LABEL, 0);
20996   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20997
20998   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20999                                DEBUG_INFO_SECTION_LABEL, 0);
21000   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21001                                DEBUG_LINE_SECTION_LABEL, 0);
21002   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21003                                DEBUG_RANGES_SECTION_LABEL, 0);
21004   ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21005                                dwarf_strict
21006                                ? DEBUG_MACINFO_SECTION_LABEL
21007                                : DEBUG_MACRO_SECTION_LABEL, 0);
21008
21009   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21010     macinfo_table = VEC_alloc (macinfo_entry, gc, 64);
21011
21012   switch_to_section (text_section);
21013   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21014
21015   /* Make sure the line number table for .text always exists.  */
21016   text_section_line_info = new_line_info_table ();
21017   text_section_line_info->end_label = text_end_label;
21018 }
21019
21020 /* Called before cgraph_optimize starts outputtting functions, variables
21021    and toplevel asms into assembly.  */
21022
21023 static void
21024 dwarf2out_assembly_start (void)
21025 {
21026   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
21027       && dwarf2out_do_cfi_asm ()
21028       && (!(flag_unwind_tables || flag_exceptions)
21029           || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
21030     fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21031 }
21032
21033 /* A helper function for dwarf2out_finish called through
21034    htab_traverse.  Emit one queued .debug_str string.  */
21035
21036 static int
21037 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21038 {
21039   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21040
21041   if (node->form == DW_FORM_strp)
21042     {
21043       switch_to_section (debug_str_section);
21044       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21045       assemble_string (node->str, strlen (node->str) + 1);
21046     }
21047
21048   return 1;
21049 }
21050
21051 #if ENABLE_ASSERT_CHECKING
21052 /* Verify that all marks are clear.  */
21053
21054 static void
21055 verify_marks_clear (dw_die_ref die)
21056 {
21057   dw_die_ref c;
21058
21059   gcc_assert (! die->die_mark);
21060   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21061 }
21062 #endif /* ENABLE_ASSERT_CHECKING */
21063
21064 /* Clear the marks for a die and its children.
21065    Be cool if the mark isn't set.  */
21066
21067 static void
21068 prune_unmark_dies (dw_die_ref die)
21069 {
21070   dw_die_ref c;
21071
21072   if (die->die_mark)
21073     die->die_mark = 0;
21074   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21075 }
21076
21077 /* Given DIE that we're marking as used, find any other dies
21078    it references as attributes and mark them as used.  */
21079
21080 static void
21081 prune_unused_types_walk_attribs (dw_die_ref die)
21082 {
21083   dw_attr_ref a;
21084   unsigned ix;
21085
21086   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21087     {
21088       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21089         {
21090           /* A reference to another DIE.
21091              Make sure that it will get emitted.
21092              If it was broken out into a comdat group, don't follow it.  */
21093           if (! use_debug_types
21094               || a->dw_attr == DW_AT_specification
21095               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21096             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21097         }
21098       /* Set the string's refcount to 0 so that prune_unused_types_mark
21099          accounts properly for it.  */
21100       if (AT_class (a) == dw_val_class_str)
21101         a->dw_attr_val.v.val_str->refcount = 0;
21102     }
21103 }
21104
21105 /* Mark the generic parameters and arguments children DIEs of DIE.  */
21106
21107 static void
21108 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
21109 {
21110   dw_die_ref c;
21111
21112   if (die == NULL || die->die_child == NULL)
21113     return;
21114   c = die->die_child;
21115   do
21116     {
21117       switch (c->die_tag)
21118         {
21119         case DW_TAG_template_type_param:
21120         case DW_TAG_template_value_param:
21121         case DW_TAG_GNU_template_template_param:
21122         case DW_TAG_GNU_template_parameter_pack:
21123           prune_unused_types_mark (c, 1);
21124           break;
21125         default:
21126           break;
21127         }
21128       c = c->die_sib;
21129     } while (c && c != die->die_child);
21130 }
21131
21132 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21133    to DIE's children.  */
21134
21135 static void
21136 prune_unused_types_mark (dw_die_ref die, int dokids)
21137 {
21138   dw_die_ref c;
21139
21140   if (die->die_mark == 0)
21141     {
21142       /* We haven't done this node yet.  Mark it as used.  */
21143       die->die_mark = 1;
21144       /* If this is the DIE of a generic type instantiation,
21145          mark the children DIEs that describe its generic parms and
21146          args.  */
21147       prune_unused_types_mark_generic_parms_dies (die);
21148
21149       /* We also have to mark its parents as used.
21150          (But we don't want to mark our parents' kids due to this.)  */
21151       if (die->die_parent)
21152         prune_unused_types_mark (die->die_parent, 0);
21153
21154       /* Mark any referenced nodes.  */
21155       prune_unused_types_walk_attribs (die);
21156
21157       /* If this node is a specification,
21158          also mark the definition, if it exists.  */
21159       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21160         prune_unused_types_mark (die->die_definition, 1);
21161     }
21162
21163   if (dokids && die->die_mark != 2)
21164     {
21165       /* We need to walk the children, but haven't done so yet.
21166          Remember that we've walked the kids.  */
21167       die->die_mark = 2;
21168
21169       /* If this is an array type, we need to make sure our
21170          kids get marked, even if they're types.  If we're
21171          breaking out types into comdat sections, do this
21172          for all type definitions.  */
21173       if (die->die_tag == DW_TAG_array_type
21174           || (use_debug_types
21175               && is_type_die (die) && ! is_declaration_die (die)))
21176         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21177       else
21178         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21179     }
21180 }
21181
21182 /* For local classes, look if any static member functions were emitted
21183    and if so, mark them.  */
21184
21185 static void
21186 prune_unused_types_walk_local_classes (dw_die_ref die)
21187 {
21188   dw_die_ref c;
21189
21190   if (die->die_mark == 2)
21191     return;
21192
21193   switch (die->die_tag)
21194     {
21195     case DW_TAG_structure_type:
21196     case DW_TAG_union_type:
21197     case DW_TAG_class_type:
21198       break;
21199
21200     case DW_TAG_subprogram:
21201       if (!get_AT_flag (die, DW_AT_declaration)
21202           || die->die_definition != NULL)
21203         prune_unused_types_mark (die, 1);
21204       return;
21205
21206     default:
21207       return;
21208     }
21209
21210   /* Mark children.  */
21211   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21212 }
21213
21214 /* Walk the tree DIE and mark types that we actually use.  */
21215
21216 static void
21217 prune_unused_types_walk (dw_die_ref die)
21218 {
21219   dw_die_ref c;
21220
21221   /* Don't do anything if this node is already marked and
21222      children have been marked as well.  */
21223   if (die->die_mark == 2)
21224     return;
21225
21226   switch (die->die_tag)
21227     {
21228     case DW_TAG_structure_type:
21229     case DW_TAG_union_type:
21230     case DW_TAG_class_type:
21231       if (die->die_perennial_p)
21232         break;
21233
21234       for (c = die->die_parent; c; c = c->die_parent)
21235         if (c->die_tag == DW_TAG_subprogram)
21236           break;
21237
21238       /* Finding used static member functions inside of classes
21239          is needed just for local classes, because for other classes
21240          static member function DIEs with DW_AT_specification
21241          are emitted outside of the DW_TAG_*_type.  If we ever change
21242          it, we'd need to call this even for non-local classes.  */
21243       if (c)
21244         prune_unused_types_walk_local_classes (die);
21245
21246       /* It's a type node --- don't mark it.  */
21247       return;
21248
21249     case DW_TAG_const_type:
21250     case DW_TAG_packed_type:
21251     case DW_TAG_pointer_type:
21252     case DW_TAG_reference_type:
21253     case DW_TAG_rvalue_reference_type:
21254     case DW_TAG_volatile_type:
21255     case DW_TAG_typedef:
21256     case DW_TAG_array_type:
21257     case DW_TAG_interface_type:
21258     case DW_TAG_friend:
21259     case DW_TAG_variant_part:
21260     case DW_TAG_enumeration_type:
21261     case DW_TAG_subroutine_type:
21262     case DW_TAG_string_type:
21263     case DW_TAG_set_type:
21264     case DW_TAG_subrange_type:
21265     case DW_TAG_ptr_to_member_type:
21266     case DW_TAG_file_type:
21267       if (die->die_perennial_p)
21268         break;
21269
21270       /* It's a type node --- don't mark it.  */
21271       return;
21272
21273     default:
21274       /* Mark everything else.  */
21275       break;
21276   }
21277
21278   if (die->die_mark == 0)
21279     {
21280       die->die_mark = 1;
21281
21282       /* Now, mark any dies referenced from here.  */
21283       prune_unused_types_walk_attribs (die);
21284     }
21285
21286   die->die_mark = 2;
21287
21288   /* Mark children.  */
21289   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21290 }
21291
21292 /* Increment the string counts on strings referred to from DIE's
21293    attributes.  */
21294
21295 static void
21296 prune_unused_types_update_strings (dw_die_ref die)
21297 {
21298   dw_attr_ref a;
21299   unsigned ix;
21300
21301   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21302     if (AT_class (a) == dw_val_class_str)
21303       {
21304         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21305         s->refcount++;
21306         /* Avoid unnecessarily putting strings that are used less than
21307            twice in the hash table.  */
21308         if (s->refcount
21309             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21310           {
21311             void ** slot;
21312             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21313                                              htab_hash_string (s->str),
21314                                              INSERT);
21315             gcc_assert (*slot == NULL);
21316             *slot = s;
21317           }
21318       }
21319 }
21320
21321 /* Remove from the tree DIE any dies that aren't marked.  */
21322
21323 static void
21324 prune_unused_types_prune (dw_die_ref die)
21325 {
21326   dw_die_ref c;
21327
21328   gcc_assert (die->die_mark);
21329   prune_unused_types_update_strings (die);
21330
21331   if (! die->die_child)
21332     return;
21333
21334   c = die->die_child;
21335   do {
21336     dw_die_ref prev = c;
21337     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21338       if (c == die->die_child)
21339         {
21340           /* No marked children between 'prev' and the end of the list.  */
21341           if (prev == c)
21342             /* No marked children at all.  */
21343             die->die_child = NULL;
21344           else
21345             {
21346               prev->die_sib = c->die_sib;
21347               die->die_child = prev;
21348             }
21349           return;
21350         }
21351
21352     if (c != prev->die_sib)
21353       prev->die_sib = c;
21354     prune_unused_types_prune (c);
21355   } while (c != die->die_child);
21356 }
21357
21358 /* Remove dies representing declarations that we never use.  */
21359
21360 static void
21361 prune_unused_types (void)
21362 {
21363   unsigned int i;
21364   limbo_die_node *node;
21365   comdat_type_node *ctnode;
21366   pubname_ref pub;
21367   dw_die_ref base_type;
21368
21369 #if ENABLE_ASSERT_CHECKING
21370   /* All the marks should already be clear.  */
21371   verify_marks_clear (comp_unit_die ());
21372   for (node = limbo_die_list; node; node = node->next)
21373     verify_marks_clear (node->die);
21374   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21375     verify_marks_clear (ctnode->root_die);
21376 #endif /* ENABLE_ASSERT_CHECKING */
21377
21378   /* Mark types that are used in global variables.  */
21379   premark_types_used_by_global_vars ();
21380
21381   /* Set the mark on nodes that are actually used.  */
21382   prune_unused_types_walk (comp_unit_die ());
21383   for (node = limbo_die_list; node; node = node->next)
21384     prune_unused_types_walk (node->die);
21385   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21386     {
21387       prune_unused_types_walk (ctnode->root_die);
21388       prune_unused_types_mark (ctnode->type_die, 1);
21389     }
21390
21391   /* Also set the mark on nodes referenced from the
21392      pubname_table.  */
21393   FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
21394     prune_unused_types_mark (pub->die, 1);
21395   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21396     prune_unused_types_mark (base_type, 1);
21397
21398   if (debug_str_hash)
21399     htab_empty (debug_str_hash);
21400   prune_unused_types_prune (comp_unit_die ());
21401   for (node = limbo_die_list; node; node = node->next)
21402     prune_unused_types_prune (node->die);
21403   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21404     prune_unused_types_prune (ctnode->root_die);
21405
21406   /* Leave the marks clear.  */
21407   prune_unmark_dies (comp_unit_die ());
21408   for (node = limbo_die_list; node; node = node->next)
21409     prune_unmark_dies (node->die);
21410   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21411     prune_unmark_dies (ctnode->root_die);
21412 }
21413
21414 /* Set the parameter to true if there are any relative pathnames in
21415    the file table.  */
21416 static int
21417 file_table_relative_p (void ** slot, void *param)
21418 {
21419   bool *p = (bool *) param;
21420   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21421   if (!IS_ABSOLUTE_PATH (d->filename))
21422     {
21423       *p = true;
21424       return 0;
21425     }
21426   return 1;
21427 }
21428
21429 /* Routines to manipulate hash table of comdat type units.  */
21430
21431 static hashval_t
21432 htab_ct_hash (const void *of)
21433 {
21434   hashval_t h;
21435   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21436
21437   memcpy (&h, type_node->signature, sizeof (h));
21438   return h;
21439 }
21440
21441 static int
21442 htab_ct_eq (const void *of1, const void *of2)
21443 {
21444   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21445   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21446
21447   return (! memcmp (type_node_1->signature, type_node_2->signature,
21448                     DWARF_TYPE_SIGNATURE_SIZE));
21449 }
21450
21451 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21452    to the location it would have been added, should we know its
21453    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21454    probably improve compactness of debug info, removing equivalent
21455    abbrevs, and hide any differences caused by deferring the
21456    computation of the assembler name, triggered by e.g. PCH.  */
21457
21458 static inline void
21459 move_linkage_attr (dw_die_ref die)
21460 {
21461   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21462   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21463
21464   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
21465               || linkage.dw_attr == DW_AT_MIPS_linkage_name);
21466
21467   while (--ix > 0)
21468     {
21469       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21470
21471       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21472         break;
21473     }
21474
21475   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21476     {
21477       VEC_pop (dw_attr_node, die->die_attr);
21478       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21479     }
21480 }
21481
21482 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
21483    referenced from typed stack ops and count how often they are used.  */
21484
21485 static void
21486 mark_base_types (dw_loc_descr_ref loc)
21487 {
21488   dw_die_ref base_type = NULL;
21489
21490   for (; loc; loc = loc->dw_loc_next)
21491     {
21492       switch (loc->dw_loc_opc)
21493         {
21494         case DW_OP_GNU_regval_type:
21495         case DW_OP_GNU_deref_type:
21496           base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
21497           break;
21498         case DW_OP_GNU_convert:
21499         case DW_OP_GNU_reinterpret:
21500           if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
21501             continue;
21502           /* FALLTHRU */
21503         case DW_OP_GNU_const_type:
21504           base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
21505           break;
21506         case DW_OP_GNU_entry_value:
21507           mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
21508           continue;
21509         default:
21510           continue;
21511         }
21512       gcc_assert (base_type->die_parent == comp_unit_die ());
21513       if (base_type->die_mark)
21514         base_type->die_mark++;
21515       else
21516         {
21517           VEC_safe_push (dw_die_ref, heap, base_types, base_type);
21518           base_type->die_mark = 1;
21519         }
21520     }
21521 }
21522
21523 /* Comparison function for sorting marked base types.  */
21524
21525 static int
21526 base_type_cmp (const void *x, const void *y)
21527 {
21528   dw_die_ref dx = *(const dw_die_ref *) x;
21529   dw_die_ref dy = *(const dw_die_ref *) y;
21530   unsigned int byte_size1, byte_size2;
21531   unsigned int encoding1, encoding2;
21532   if (dx->die_mark > dy->die_mark)
21533     return -1;
21534   if (dx->die_mark < dy->die_mark)
21535     return 1;
21536   byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
21537   byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
21538   if (byte_size1 < byte_size2)
21539     return 1;
21540   if (byte_size1 > byte_size2)
21541     return -1;
21542   encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
21543   encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
21544   if (encoding1 < encoding2)
21545     return 1;
21546   if (encoding1 > encoding2)
21547     return -1;
21548   return 0;
21549 }
21550
21551 /* Move base types marked by mark_base_types as early as possible
21552    in the CU, sorted by decreasing usage count both to make the
21553    uleb128 references as small as possible and to make sure they
21554    will have die_offset already computed by calc_die_sizes when
21555    sizes of typed stack loc ops is computed.  */
21556
21557 static void
21558 move_marked_base_types (void)
21559 {
21560   unsigned int i;
21561   dw_die_ref base_type, die, c;
21562
21563   if (VEC_empty (dw_die_ref, base_types))
21564     return;
21565
21566   /* Sort by decreasing usage count, they will be added again in that
21567      order later on.  */
21568   VEC_qsort (dw_die_ref, base_types, base_type_cmp);
21569   die = comp_unit_die ();
21570   c = die->die_child;
21571   do
21572     {
21573       dw_die_ref prev = c;
21574       c = c->die_sib;
21575       while (c->die_mark)
21576         {
21577           remove_child_with_prev (c, prev);
21578           /* As base types got marked, there must be at least
21579              one node other than DW_TAG_base_type.  */
21580           gcc_assert (c != c->die_sib);
21581           c = c->die_sib;
21582         }
21583     }
21584   while (c != die->die_child);
21585   gcc_assert (die->die_child);
21586   c = die->die_child;
21587   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21588     {
21589       base_type->die_mark = 0;
21590       base_type->die_sib = c->die_sib;
21591       c->die_sib = base_type;
21592       c = base_type;
21593     }
21594 }
21595
21596 /* Helper function for resolve_addr, attempt to resolve
21597    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21598    SYMBOL_REFs refer to variables emitted in the current CU.  */
21599
21600 static int
21601 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21602 {
21603   rtx rtl = *addr;
21604
21605   if (GET_CODE (rtl) == CONST_STRING)
21606     {
21607       size_t len = strlen (XSTR (rtl, 0)) + 1;
21608       tree t = build_string (len, XSTR (rtl, 0));
21609       tree tlen = size_int (len - 1);
21610       TREE_TYPE (t)
21611         = build_array_type (char_type_node, build_index_type (tlen));
21612       rtl = lookup_constant_def (t);
21613       if (!rtl || !MEM_P (rtl))
21614         return 1;
21615       rtl = XEXP (rtl, 0);
21616       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21617       *addr = rtl;
21618       return 0;
21619     }
21620
21621   if (GET_CODE (rtl) == SYMBOL_REF
21622       && SYMBOL_REF_DECL (rtl))
21623     {
21624       if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
21625         {
21626           if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
21627             return 1;
21628         }
21629       else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21630         return 1;
21631     }
21632
21633   if (GET_CODE (rtl) == CONST
21634       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21635     return 1;
21636
21637   return 0;
21638 }
21639
21640 /* Helper function for resolve_addr, handle one location
21641    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21642    the location list couldn't be resolved.  */
21643
21644 static bool
21645 resolve_addr_in_expr (dw_loc_descr_ref loc)
21646 {
21647   dw_loc_descr_ref keep = NULL;
21648   for (; loc; loc = loc->dw_loc_next)
21649     switch (loc->dw_loc_opc)
21650       {
21651       case DW_OP_addr:
21652         if (resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21653           return false;
21654         break;
21655       case DW_OP_const4u:
21656       case DW_OP_const8u:
21657         if (loc->dtprel
21658             && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21659           return false;
21660         break;
21661       case DW_OP_plus_uconst:
21662         if (size_of_loc_descr (loc)
21663             > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
21664               + 1
21665             && loc->dw_loc_oprnd1.v.val_unsigned > 0)
21666           {
21667             dw_loc_descr_ref repl
21668               = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
21669             add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
21670             add_loc_descr (&repl, loc->dw_loc_next);
21671             *loc = *repl;
21672           }
21673         break;
21674       case DW_OP_implicit_value:
21675         if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21676             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL))
21677           return false;
21678         break;
21679       case DW_OP_GNU_implicit_pointer:
21680       case DW_OP_GNU_parameter_ref:
21681         if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
21682           {
21683             dw_die_ref ref
21684               = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
21685             if (ref == NULL)
21686               return false;
21687             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
21688             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
21689             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
21690           }
21691         break;
21692       case DW_OP_GNU_const_type:
21693       case DW_OP_GNU_regval_type:
21694       case DW_OP_GNU_deref_type:
21695       case DW_OP_GNU_convert:
21696       case DW_OP_GNU_reinterpret:
21697         while (loc->dw_loc_next
21698                && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
21699           {
21700             dw_die_ref base1, base2;
21701             unsigned enc1, enc2, size1, size2;
21702             if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21703                 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21704               base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
21705             else if (loc->dw_loc_oprnd1.val_class
21706                      == dw_val_class_unsigned_const)
21707               break;
21708             else
21709               base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
21710             if (loc->dw_loc_next->dw_loc_oprnd1.val_class
21711                 == dw_val_class_unsigned_const)
21712               break;
21713             base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
21714             gcc_assert (base1->die_tag == DW_TAG_base_type
21715                         && base2->die_tag == DW_TAG_base_type);
21716             enc1 = get_AT_unsigned (base1, DW_AT_encoding);
21717             enc2 = get_AT_unsigned (base2, DW_AT_encoding);
21718             size1 = get_AT_unsigned (base1, DW_AT_byte_size);
21719             size2 = get_AT_unsigned (base2, DW_AT_byte_size);
21720             if (size1 == size2
21721                 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
21722                      && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
21723                      && loc != keep)
21724                     || enc1 == enc2))
21725               {
21726                 /* Optimize away next DW_OP_GNU_convert after
21727                    adjusting LOC's base type die reference.  */
21728                 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21729                     || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21730                   loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
21731                 else
21732                   loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
21733                 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
21734                 continue;
21735               }
21736             /* Don't change integer DW_OP_GNU_convert after e.g. floating
21737                point typed stack entry.  */
21738             else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
21739               keep = loc->dw_loc_next;
21740             break;
21741           }
21742         break;
21743       default:
21744         break;
21745       }
21746   return true;
21747 }
21748
21749 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21750    an address in .rodata section if the string literal is emitted there,
21751    or remove the containing location list or replace DW_AT_const_value
21752    with DW_AT_location and empty location expression, if it isn't found
21753    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21754    to something that has been emitted in the current CU.  */
21755
21756 static void
21757 resolve_addr (dw_die_ref die)
21758 {
21759   dw_die_ref c;
21760   dw_attr_ref a;
21761   dw_loc_list_ref *curr, *start, loc;
21762   unsigned ix;
21763
21764   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21765     switch (AT_class (a))
21766       {
21767       case dw_val_class_loc_list:
21768         start = curr = AT_loc_list_ptr (a);
21769         loc = *curr;
21770         gcc_assert (loc);
21771         /* The same list can be referenced more than once.  See if we have
21772            already recorded the result from a previous pass.  */
21773         if (loc->replaced)
21774           *curr = loc->dw_loc_next;
21775         else if (!loc->resolved_addr)
21776           {
21777             /* As things stand, we do not expect or allow one die to
21778                reference a suffix of another die's location list chain.
21779                References must be identical or completely separate.
21780                There is therefore no need to cache the result of this
21781                pass on any list other than the first; doing so
21782                would lead to unnecessary writes.  */
21783             while (*curr)
21784               {
21785                 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
21786                 if (!resolve_addr_in_expr ((*curr)->expr))
21787                   {
21788                     dw_loc_list_ref next = (*curr)->dw_loc_next;
21789                     if (next && (*curr)->ll_symbol)
21790                       {
21791                         gcc_assert (!next->ll_symbol);
21792                         next->ll_symbol = (*curr)->ll_symbol;
21793                       }
21794                     *curr = next;
21795                   }
21796                 else
21797                   {
21798                     mark_base_types ((*curr)->expr);
21799                     curr = &(*curr)->dw_loc_next;
21800                   }
21801               }
21802             if (loc == *start)
21803               loc->resolved_addr = 1;
21804             else
21805               {
21806                 loc->replaced = 1;
21807                 loc->dw_loc_next = *start;
21808               }
21809           }
21810         if (!*start)
21811           {
21812             remove_AT (die, a->dw_attr);
21813             ix--;
21814           }
21815         break;
21816       case dw_val_class_loc:
21817         {
21818           dw_loc_descr_ref l = AT_loc (a);
21819           /* For -gdwarf-2 don't attempt to optimize
21820              DW_AT_data_member_location containing
21821              DW_OP_plus_uconst - older consumers might
21822              rely on it being that op instead of a more complex,
21823              but shorter, location description.  */
21824           if ((dwarf_version > 2
21825                || a->dw_attr != DW_AT_data_member_location
21826                || l == NULL
21827                || l->dw_loc_opc != DW_OP_plus_uconst
21828                || l->dw_loc_next != NULL)
21829               && !resolve_addr_in_expr (l))
21830             {
21831               remove_AT (die, a->dw_attr);
21832               ix--;
21833             }
21834           else
21835             mark_base_types (l);
21836         }
21837         break;
21838       case dw_val_class_addr:
21839         if (a->dw_attr == DW_AT_const_value
21840             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21841           {
21842             remove_AT (die, a->dw_attr);
21843             ix--;
21844           }
21845         if (die->die_tag == DW_TAG_GNU_call_site
21846             && a->dw_attr == DW_AT_abstract_origin)
21847           {
21848             tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
21849             dw_die_ref tdie = lookup_decl_die (tdecl);
21850             if (tdie == NULL
21851                 && DECL_EXTERNAL (tdecl)
21852                 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
21853               {
21854                 force_decl_die (tdecl);
21855                 tdie = lookup_decl_die (tdecl);
21856               }
21857             if (tdie)
21858               {
21859                 a->dw_attr_val.val_class = dw_val_class_die_ref;
21860                 a->dw_attr_val.v.val_die_ref.die = tdie;
21861                 a->dw_attr_val.v.val_die_ref.external = 0;
21862               }
21863             else
21864               {
21865                 remove_AT (die, a->dw_attr);
21866                 ix--;
21867               }
21868           }
21869         break;
21870       default:
21871         break;
21872       }
21873
21874   FOR_EACH_CHILD (die, c, resolve_addr (c));
21875 }
21876 \f
21877 /* Helper routines for optimize_location_lists.
21878    This pass tries to share identical local lists in .debug_loc
21879    section.  */
21880
21881 /* Iteratively hash operands of LOC opcode.  */
21882
21883 static inline hashval_t
21884 hash_loc_operands (dw_loc_descr_ref loc, hashval_t hash)
21885 {
21886   dw_val_ref val1 = &loc->dw_loc_oprnd1;
21887   dw_val_ref val2 = &loc->dw_loc_oprnd2;
21888
21889   switch (loc->dw_loc_opc)
21890     {
21891     case DW_OP_const4u:
21892     case DW_OP_const8u:
21893       if (loc->dtprel)
21894         goto hash_addr;
21895       /* FALLTHRU */
21896     case DW_OP_const1u:
21897     case DW_OP_const1s:
21898     case DW_OP_const2u:
21899     case DW_OP_const2s:
21900     case DW_OP_const4s:
21901     case DW_OP_const8s:
21902     case DW_OP_constu:
21903     case DW_OP_consts:
21904     case DW_OP_pick:
21905     case DW_OP_plus_uconst:
21906     case DW_OP_breg0:
21907     case DW_OP_breg1:
21908     case DW_OP_breg2:
21909     case DW_OP_breg3:
21910     case DW_OP_breg4:
21911     case DW_OP_breg5:
21912     case DW_OP_breg6:
21913     case DW_OP_breg7:
21914     case DW_OP_breg8:
21915     case DW_OP_breg9:
21916     case DW_OP_breg10:
21917     case DW_OP_breg11:
21918     case DW_OP_breg12:
21919     case DW_OP_breg13:
21920     case DW_OP_breg14:
21921     case DW_OP_breg15:
21922     case DW_OP_breg16:
21923     case DW_OP_breg17:
21924     case DW_OP_breg18:
21925     case DW_OP_breg19:
21926     case DW_OP_breg20:
21927     case DW_OP_breg21:
21928     case DW_OP_breg22:
21929     case DW_OP_breg23:
21930     case DW_OP_breg24:
21931     case DW_OP_breg25:
21932     case DW_OP_breg26:
21933     case DW_OP_breg27:
21934     case DW_OP_breg28:
21935     case DW_OP_breg29:
21936     case DW_OP_breg30:
21937     case DW_OP_breg31:
21938     case DW_OP_regx:
21939     case DW_OP_fbreg:
21940     case DW_OP_piece:
21941     case DW_OP_deref_size:
21942     case DW_OP_xderef_size:
21943       hash = iterative_hash_object (val1->v.val_int, hash);
21944       break;
21945     case DW_OP_skip:
21946     case DW_OP_bra:
21947       {
21948         int offset;
21949
21950         gcc_assert (val1->val_class == dw_val_class_loc);
21951         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
21952         hash = iterative_hash_object (offset, hash);
21953       }
21954       break;
21955     case DW_OP_implicit_value:
21956       hash = iterative_hash_object (val1->v.val_unsigned, hash);
21957       switch (val2->val_class)
21958         {
21959         case dw_val_class_const:
21960           hash = iterative_hash_object (val2->v.val_int, hash);
21961           break;
21962         case dw_val_class_vec:
21963           {
21964             unsigned int elt_size = val2->v.val_vec.elt_size;
21965             unsigned int len = val2->v.val_vec.length;
21966
21967             hash = iterative_hash_object (elt_size, hash);
21968             hash = iterative_hash_object (len, hash);
21969             hash = iterative_hash (val2->v.val_vec.array,
21970                                    len * elt_size, hash);
21971           }
21972           break;
21973         case dw_val_class_const_double:
21974           hash = iterative_hash_object (val2->v.val_double.low, hash);
21975           hash = iterative_hash_object (val2->v.val_double.high, hash);
21976           break;
21977         case dw_val_class_addr:
21978           hash = iterative_hash_rtx (val2->v.val_addr, hash);
21979           break;
21980         default:
21981           gcc_unreachable ();
21982         }
21983       break;
21984     case DW_OP_bregx:
21985     case DW_OP_bit_piece:
21986       hash = iterative_hash_object (val1->v.val_int, hash);
21987       hash = iterative_hash_object (val2->v.val_int, hash);
21988       break;
21989     case DW_OP_addr:
21990     hash_addr:
21991       if (loc->dtprel)
21992         {
21993           unsigned char dtprel = 0xd1;
21994           hash = iterative_hash_object (dtprel, hash);
21995         }
21996       hash = iterative_hash_rtx (val1->v.val_addr, hash);
21997       break;
21998     case DW_OP_GNU_implicit_pointer:
21999       hash = iterative_hash_object (val2->v.val_int, hash);
22000       break;
22001     case DW_OP_GNU_entry_value:
22002       hash = hash_loc_operands (val1->v.val_loc, hash);
22003       break;
22004     case DW_OP_GNU_regval_type:
22005     case DW_OP_GNU_deref_type:
22006       {
22007         unsigned int byte_size
22008           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
22009         unsigned int encoding
22010           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
22011         hash = iterative_hash_object (val1->v.val_int, hash);
22012         hash = iterative_hash_object (byte_size, hash);
22013         hash = iterative_hash_object (encoding, hash);
22014       }
22015       break;
22016     case DW_OP_GNU_convert:
22017     case DW_OP_GNU_reinterpret:
22018       if (val1->val_class == dw_val_class_unsigned_const)
22019         {
22020           hash = iterative_hash_object (val1->v.val_unsigned, hash);
22021           break;
22022         }
22023       /* FALLTHRU */
22024     case DW_OP_GNU_const_type:
22025       {
22026         unsigned int byte_size
22027           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
22028         unsigned int encoding
22029           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
22030         hash = iterative_hash_object (byte_size, hash);
22031         hash = iterative_hash_object (encoding, hash);
22032         if (loc->dw_loc_opc != DW_OP_GNU_const_type)
22033           break;
22034         hash = iterative_hash_object (val2->val_class, hash);
22035         switch (val2->val_class)
22036           {
22037           case dw_val_class_const:
22038             hash = iterative_hash_object (val2->v.val_int, hash);
22039             break;
22040           case dw_val_class_vec:
22041             {
22042               unsigned int elt_size = val2->v.val_vec.elt_size;
22043               unsigned int len = val2->v.val_vec.length;
22044
22045               hash = iterative_hash_object (elt_size, hash);
22046               hash = iterative_hash_object (len, hash);
22047               hash = iterative_hash (val2->v.val_vec.array,
22048                                      len * elt_size, hash);
22049             }
22050             break;
22051           case dw_val_class_const_double:
22052             hash = iterative_hash_object (val2->v.val_double.low, hash);
22053             hash = iterative_hash_object (val2->v.val_double.high, hash);
22054             break;
22055           default:
22056             gcc_unreachable ();
22057           }
22058       }
22059       break;
22060
22061     default:
22062       /* Other codes have no operands.  */
22063       break;
22064     }
22065   return hash;
22066 }
22067
22068 /* Iteratively hash the whole DWARF location expression LOC.  */
22069
22070 static inline hashval_t
22071 hash_locs (dw_loc_descr_ref loc, hashval_t hash)
22072 {
22073   dw_loc_descr_ref l;
22074   bool sizes_computed = false;
22075   /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed.  */
22076   size_of_locs (loc);
22077
22078   for (l = loc; l != NULL; l = l->dw_loc_next)
22079     {
22080       enum dwarf_location_atom opc = l->dw_loc_opc;
22081       hash = iterative_hash_object (opc, hash);
22082       if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
22083         {
22084           size_of_locs (loc);
22085           sizes_computed = true;
22086         }
22087       hash = hash_loc_operands (l, hash);
22088     }
22089   return hash;
22090 }
22091
22092 /* Compute hash of the whole location list LIST_HEAD.  */
22093
22094 static inline void
22095 hash_loc_list (dw_loc_list_ref list_head)
22096 {
22097   dw_loc_list_ref curr = list_head;
22098   hashval_t hash = 0;
22099
22100   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
22101     {
22102       hash = iterative_hash (curr->begin, strlen (curr->begin) + 1, hash);
22103       hash = iterative_hash (curr->end, strlen (curr->end) + 1, hash);
22104       if (curr->section)
22105         hash = iterative_hash (curr->section, strlen (curr->section) + 1,
22106                                hash);
22107       hash = hash_locs (curr->expr, hash);
22108     }
22109   list_head->hash = hash;
22110 }
22111
22112 /* Return true if X and Y opcodes have the same operands.  */
22113
22114 static inline bool
22115 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
22116 {
22117   dw_val_ref valx1 = &x->dw_loc_oprnd1;
22118   dw_val_ref valx2 = &x->dw_loc_oprnd2;
22119   dw_val_ref valy1 = &y->dw_loc_oprnd1;
22120   dw_val_ref valy2 = &y->dw_loc_oprnd2;
22121
22122   switch (x->dw_loc_opc)
22123     {
22124     case DW_OP_const4u:
22125     case DW_OP_const8u:
22126       if (x->dtprel)
22127         goto hash_addr;
22128       /* FALLTHRU */
22129     case DW_OP_const1u:
22130     case DW_OP_const1s:
22131     case DW_OP_const2u:
22132     case DW_OP_const2s:
22133     case DW_OP_const4s:
22134     case DW_OP_const8s:
22135     case DW_OP_constu:
22136     case DW_OP_consts:
22137     case DW_OP_pick:
22138     case DW_OP_plus_uconst:
22139     case DW_OP_breg0:
22140     case DW_OP_breg1:
22141     case DW_OP_breg2:
22142     case DW_OP_breg3:
22143     case DW_OP_breg4:
22144     case DW_OP_breg5:
22145     case DW_OP_breg6:
22146     case DW_OP_breg7:
22147     case DW_OP_breg8:
22148     case DW_OP_breg9:
22149     case DW_OP_breg10:
22150     case DW_OP_breg11:
22151     case DW_OP_breg12:
22152     case DW_OP_breg13:
22153     case DW_OP_breg14:
22154     case DW_OP_breg15:
22155     case DW_OP_breg16:
22156     case DW_OP_breg17:
22157     case DW_OP_breg18:
22158     case DW_OP_breg19:
22159     case DW_OP_breg20:
22160     case DW_OP_breg21:
22161     case DW_OP_breg22:
22162     case DW_OP_breg23:
22163     case DW_OP_breg24:
22164     case DW_OP_breg25:
22165     case DW_OP_breg26:
22166     case DW_OP_breg27:
22167     case DW_OP_breg28:
22168     case DW_OP_breg29:
22169     case DW_OP_breg30:
22170     case DW_OP_breg31:
22171     case DW_OP_regx:
22172     case DW_OP_fbreg:
22173     case DW_OP_piece:
22174     case DW_OP_deref_size:
22175     case DW_OP_xderef_size:
22176       return valx1->v.val_int == valy1->v.val_int;
22177     case DW_OP_skip:
22178     case DW_OP_bra:
22179       gcc_assert (valx1->val_class == dw_val_class_loc
22180                   && valy1->val_class == dw_val_class_loc
22181                   && x->dw_loc_addr == y->dw_loc_addr);
22182       return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
22183     case DW_OP_implicit_value:
22184       if (valx1->v.val_unsigned != valy1->v.val_unsigned
22185           || valx2->val_class != valy2->val_class)
22186         return false;
22187       switch (valx2->val_class)
22188         {
22189         case dw_val_class_const:
22190           return valx2->v.val_int == valy2->v.val_int;
22191         case dw_val_class_vec:
22192           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22193                  && valx2->v.val_vec.length == valy2->v.val_vec.length
22194                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22195                             valx2->v.val_vec.elt_size
22196                             * valx2->v.val_vec.length) == 0;
22197         case dw_val_class_const_double:
22198           return valx2->v.val_double.low == valy2->v.val_double.low
22199                  && valx2->v.val_double.high == valy2->v.val_double.high;
22200         case dw_val_class_addr:
22201           return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
22202         default:
22203           gcc_unreachable ();
22204         }
22205     case DW_OP_bregx:
22206     case DW_OP_bit_piece:
22207       return valx1->v.val_int == valy1->v.val_int
22208              && valx2->v.val_int == valy2->v.val_int;
22209     case DW_OP_addr:
22210     hash_addr:
22211       return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
22212     case DW_OP_GNU_implicit_pointer:
22213       return valx1->val_class == dw_val_class_die_ref
22214              && valx1->val_class == valy1->val_class
22215              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
22216              && valx2->v.val_int == valy2->v.val_int;
22217     case DW_OP_GNU_entry_value:
22218       return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
22219     case DW_OP_GNU_const_type:
22220       if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
22221           || valx2->val_class != valy2->val_class)
22222         return false;
22223       switch (valx2->val_class)
22224         {
22225         case dw_val_class_const:
22226           return valx2->v.val_int == valy2->v.val_int;
22227         case dw_val_class_vec:
22228           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22229                  && valx2->v.val_vec.length == valy2->v.val_vec.length
22230                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22231                             valx2->v.val_vec.elt_size
22232                             * valx2->v.val_vec.length) == 0;
22233         case dw_val_class_const_double:
22234           return valx2->v.val_double.low == valy2->v.val_double.low
22235                  && valx2->v.val_double.high == valy2->v.val_double.high;
22236         default:
22237           gcc_unreachable ();
22238         }
22239     case DW_OP_GNU_regval_type:
22240     case DW_OP_GNU_deref_type:
22241       return valx1->v.val_int == valy1->v.val_int
22242              && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
22243     case DW_OP_GNU_convert:
22244     case DW_OP_GNU_reinterpret:
22245       if (valx1->val_class != valy1->val_class)
22246         return false;
22247       if (valx1->val_class == dw_val_class_unsigned_const)
22248         return valx1->v.val_unsigned == valy1->v.val_unsigned;
22249       return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22250     case DW_OP_GNU_parameter_ref:
22251       return valx1->val_class == dw_val_class_die_ref
22252              && valx1->val_class == valy1->val_class
22253              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22254     default:
22255       /* Other codes have no operands.  */
22256       return true;
22257     }
22258 }
22259
22260 /* Return true if DWARF location expressions X and Y are the same.  */
22261
22262 static inline bool
22263 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
22264 {
22265   for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
22266     if (x->dw_loc_opc != y->dw_loc_opc
22267         || x->dtprel != y->dtprel
22268         || !compare_loc_operands (x, y))
22269       break;
22270   return x == NULL && y == NULL;
22271 }
22272
22273 /* Return precomputed hash of location list X.  */
22274
22275 static hashval_t
22276 loc_list_hash (const void *x)
22277 {
22278   return ((const struct dw_loc_list_struct *) x)->hash;
22279 }
22280
22281 /* Return 1 if location lists X and Y are the same.  */
22282
22283 static int
22284 loc_list_eq (const void *x, const void *y)
22285 {
22286   const struct dw_loc_list_struct *a = (const struct dw_loc_list_struct *) x;
22287   const struct dw_loc_list_struct *b = (const struct dw_loc_list_struct *) y;
22288   if (a == b)
22289     return 1;
22290   if (a->hash != b->hash)
22291     return 0;
22292   for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
22293     if (strcmp (a->begin, b->begin) != 0
22294         || strcmp (a->end, b->end) != 0
22295         || (a->section == NULL) != (b->section == NULL)
22296         || (a->section && strcmp (a->section, b->section) != 0)
22297         || !compare_locs (a->expr, b->expr))
22298       break;
22299   return a == NULL && b == NULL;
22300 }
22301
22302 /* Recursively optimize location lists referenced from DIE
22303    children and share them whenever possible.  */
22304
22305 static void
22306 optimize_location_lists_1 (dw_die_ref die, htab_t htab)
22307 {
22308   dw_die_ref c;
22309   dw_attr_ref a;
22310   unsigned ix;
22311   void **slot;
22312
22313   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
22314     if (AT_class (a) == dw_val_class_loc_list)
22315       {
22316         dw_loc_list_ref list = AT_loc_list (a);
22317         /* TODO: perform some optimizations here, before hashing
22318            it and storing into the hash table.  */
22319         hash_loc_list (list);
22320         slot = htab_find_slot_with_hash (htab, list, list->hash,
22321                                          INSERT);
22322         if (*slot == NULL)
22323           *slot = (void *) list;
22324         else
22325           a->dw_attr_val.v.val_loc_list = (dw_loc_list_ref) *slot;
22326       }
22327
22328   FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
22329 }
22330
22331 /* Optimize location lists referenced from DIE
22332    children and share them whenever possible.  */
22333
22334 static void
22335 optimize_location_lists (dw_die_ref die)
22336 {
22337   htab_t htab = htab_create (500, loc_list_hash, loc_list_eq, NULL);
22338   optimize_location_lists_1 (die, htab);
22339   htab_delete (htab);
22340 }
22341 \f
22342 /* Output stuff that dwarf requires at the end of every file,
22343    and generate the DWARF-2 debugging info.  */
22344
22345 static void
22346 dwarf2out_finish (const char *filename)
22347 {
22348   limbo_die_node *node, *next_node;
22349   comdat_type_node *ctnode;
22350   htab_t comdat_type_table;
22351   unsigned int i;
22352
22353   /* PCH might result in DW_AT_producer string being restored from the
22354      header compilation, fix it up if needed.  */
22355   dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
22356   if (strcmp (AT_string (producer), producer_string) != 0)
22357     {
22358       struct indirect_string_node *node = find_AT_string (producer_string);
22359       producer->dw_attr_val.v.val_str = node;
22360     }
22361
22362   gen_scheduled_generic_parms_dies ();
22363   gen_remaining_tmpl_value_param_die_attribute ();
22364
22365   /* Add the name for the main input file now.  We delayed this from
22366      dwarf2out_init to avoid complications with PCH.  */
22367   add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
22368   if (!IS_ABSOLUTE_PATH (filename))
22369     add_comp_dir_attribute (comp_unit_die ());
22370   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
22371     {
22372       bool p = false;
22373       htab_traverse (file_table, file_table_relative_p, &p);
22374       if (p)
22375         add_comp_dir_attribute (comp_unit_die ());
22376     }
22377
22378   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
22379     {
22380       add_location_or_const_value_attribute (
22381         VEC_index (deferred_locations, deferred_locations_list, i)->die,
22382         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
22383         false,
22384         DW_AT_location);
22385     }
22386
22387   /* Traverse the limbo die list, and add parent/child links.  The only
22388      dies without parents that should be here are concrete instances of
22389      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
22390      For concrete instances, we can get the parent die from the abstract
22391      instance.  */
22392   for (node = limbo_die_list; node; node = next_node)
22393     {
22394       dw_die_ref die = node->die;
22395       next_node = node->next;
22396
22397       if (die->die_parent == NULL)
22398         {
22399           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
22400
22401           if (origin && origin->die_parent)
22402             add_child_die (origin->die_parent, die);
22403           else if (is_cu_die (die))
22404             ;
22405           else if (seen_error ())
22406             /* It's OK to be confused by errors in the input.  */
22407             add_child_die (comp_unit_die (), die);
22408           else
22409             {
22410               /* In certain situations, the lexical block containing a
22411                  nested function can be optimized away, which results
22412                  in the nested function die being orphaned.  Likewise
22413                  with the return type of that nested function.  Force
22414                  this to be a child of the containing function.
22415
22416                  It may happen that even the containing function got fully
22417                  inlined and optimized out.  In that case we are lost and
22418                  assign the empty child.  This should not be big issue as
22419                  the function is likely unreachable too.  */
22420               tree context = NULL_TREE;
22421
22422               gcc_assert (node->created_for);
22423
22424               if (DECL_P (node->created_for))
22425                 context = DECL_CONTEXT (node->created_for);
22426               else if (TYPE_P (node->created_for))
22427                 context = TYPE_CONTEXT (node->created_for);
22428
22429               gcc_assert (context
22430                           && (TREE_CODE (context) == FUNCTION_DECL
22431                               || TREE_CODE (context) == NAMESPACE_DECL));
22432
22433               origin = lookup_decl_die (context);
22434               if (origin)
22435                 add_child_die (origin, die);
22436               else
22437                 add_child_die (comp_unit_die (), die);
22438             }
22439         }
22440     }
22441
22442   limbo_die_list = NULL;
22443
22444 #if ENABLE_ASSERT_CHECKING
22445   {
22446     dw_die_ref die = comp_unit_die (), c;
22447     FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
22448   }
22449 #endif
22450   resolve_addr (comp_unit_die ());
22451   move_marked_base_types ();
22452
22453   for (node = deferred_asm_name; node; node = node->next)
22454     {
22455       tree decl = node->created_for;
22456       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
22457         {
22458           add_linkage_attr (node->die, decl);
22459           move_linkage_attr (node->die);
22460         }
22461     }
22462
22463   deferred_asm_name = NULL;
22464
22465   /* Walk through the list of incomplete types again, trying once more to
22466      emit full debugging info for them.  */
22467   retry_incomplete_types ();
22468
22469   if (flag_eliminate_unused_debug_types)
22470     prune_unused_types ();
22471
22472   /* Generate separate CUs for each of the include files we've seen.
22473      They will go into limbo_die_list.  */
22474   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
22475     break_out_includes (comp_unit_die ());
22476
22477   /* Generate separate COMDAT sections for type DIEs. */
22478   if (use_debug_types)
22479     {
22480       break_out_comdat_types (comp_unit_die ());
22481
22482       /* Each new type_unit DIE was added to the limbo die list when created.
22483          Since these have all been added to comdat_type_list, clear the
22484          limbo die list.  */
22485       limbo_die_list = NULL;
22486
22487       /* For each new comdat type unit, copy declarations for incomplete
22488          types to make the new unit self-contained (i.e., no direct
22489          references to the main compile unit).  */
22490       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22491         copy_decls_for_unworthy_types (ctnode->root_die);
22492       copy_decls_for_unworthy_types (comp_unit_die ());
22493
22494       /* In the process of copying declarations from one unit to another,
22495          we may have left some declarations behind that are no longer
22496          referenced.  Prune them.  */
22497       prune_unused_types ();
22498     }
22499
22500   /* Traverse the DIE's and add add sibling attributes to those DIE's
22501      that have children.  */
22502   add_sibling_attributes (comp_unit_die ());
22503   for (node = limbo_die_list; node; node = node->next)
22504     add_sibling_attributes (node->die);
22505   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22506     add_sibling_attributes (ctnode->root_die);
22507
22508   /* Output a terminator label for the .text section.  */
22509   switch_to_section (text_section);
22510   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22511   if (cold_text_section)
22512     {
22513       switch_to_section (cold_text_section);
22514       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22515     }
22516
22517   /* We can only use the low/high_pc attributes if all of the code was
22518      in .text.  */
22519   if (!have_multiple_function_sections 
22520       || (dwarf_version < 3 && dwarf_strict))
22521     {
22522       /* Don't add if the CU has no associated code.  */
22523       if (text_section_used)
22524         {
22525           add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label);
22526           add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
22527         }
22528     }
22529   else
22530     {
22531       unsigned fde_idx;
22532       dw_fde_ref fde;
22533       bool range_list_added = false;
22534
22535       if (text_section_used)
22536         add_ranges_by_labels (comp_unit_die (), text_section_label,
22537                               text_end_label, &range_list_added);
22538       if (cold_text_section_used)
22539         add_ranges_by_labels (comp_unit_die (), cold_text_section_label,
22540                               cold_end_label, &range_list_added);
22541
22542       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
22543         {
22544           if (!fde->in_std_section)
22545             add_ranges_by_labels (comp_unit_die (), fde->dw_fde_begin,
22546                                   fde->dw_fde_end, &range_list_added);
22547           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
22548             add_ranges_by_labels (comp_unit_die (), fde->dw_fde_second_begin,
22549                                   fde->dw_fde_second_end, &range_list_added);
22550         }
22551
22552       if (range_list_added)
22553         {
22554           /* We need to give .debug_loc and .debug_ranges an appropriate
22555              "base address".  Use zero so that these addresses become
22556              absolute.  Historically, we've emitted the unexpected
22557              DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22558              Emit both to give time for other tools to adapt.  */
22559           add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx);
22560           if (! dwarf_strict && dwarf_version < 4)
22561             add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx);
22562
22563           add_ranges (NULL);
22564         }
22565     }
22566
22567   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22568     add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list,
22569                     debug_line_section_label);
22570
22571   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22572     add_AT_macptr (comp_unit_die (),
22573                    dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
22574                    macinfo_section_label);
22575
22576   if (have_location_lists)
22577     optimize_location_lists (comp_unit_die ());
22578
22579   /* Output all of the compilation units.  We put the main one last so that
22580      the offsets are available to output_pubnames.  */
22581   for (node = limbo_die_list; node; node = node->next)
22582     output_comp_unit (node->die, 0);
22583
22584   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22585   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22586     {
22587       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22588
22589       /* Don't output duplicate types.  */
22590       if (*slot != HTAB_EMPTY_ENTRY)
22591         continue;
22592
22593       /* Add a pointer to the line table for the main compilation unit
22594          so that the debugger can make sense of DW_AT_decl_file
22595          attributes.  */
22596       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22597         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22598                         debug_line_section_label);
22599
22600       output_comdat_type_unit (ctnode);
22601       *slot = ctnode;
22602     }
22603   htab_delete (comdat_type_table);
22604
22605   /* Output the main compilation unit if non-empty or if .debug_macinfo
22606      will be emitted.  */
22607   output_comp_unit (comp_unit_die (), debug_info_level >= DINFO_LEVEL_VERBOSE);
22608
22609   /* Output the abbreviation table.  */
22610   if (abbrev_die_table_in_use != 1)
22611     {
22612       switch_to_section (debug_abbrev_section);
22613       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
22614       output_abbrev_section ();
22615     }
22616
22617   /* Output location list section if necessary.  */
22618   if (have_location_lists)
22619     {
22620       /* Output the location lists info.  */
22621       switch_to_section (debug_loc_section);
22622       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22623                                    DEBUG_LOC_SECTION_LABEL, 0);
22624       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22625       output_location_lists (comp_unit_die ());
22626     }
22627
22628   /* Output public names table if necessary.  */
22629   if (!VEC_empty (pubname_entry, pubname_table))
22630     {
22631       gcc_assert (info_section_emitted);
22632       switch_to_section (debug_pubnames_section);
22633       output_pubnames (pubname_table);
22634     }
22635
22636   /* Output public types table if necessary.  */
22637   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22638      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22639      simply won't look for the section.  */
22640   if (!VEC_empty (pubname_entry, pubtype_table))
22641     {
22642       bool empty = false;
22643       
22644       if (flag_eliminate_unused_debug_types)
22645         {
22646           /* The pubtypes table might be emptied by pruning unused items.  */
22647           unsigned i;
22648           pubname_ref p;
22649           empty = true;
22650           FOR_EACH_VEC_ELT (pubname_entry, pubtype_table, i, p)
22651             if (p->die->die_offset != 0)
22652               {
22653                 empty = false;
22654                 break;
22655               }
22656         }
22657       if (!empty)
22658         {
22659           gcc_assert (info_section_emitted);
22660           switch_to_section (debug_pubtypes_section);
22661           output_pubnames (pubtype_table);
22662         }
22663     }
22664
22665   /* Output the address range information if a CU (.debug_info section)
22666      was emitted.  We output an empty table even if we had no functions
22667      to put in it.  This because the consumer has no way to tell the
22668      difference between an empty table that we omitted and failure to
22669      generate a table that would have contained data.  */
22670   if (info_section_emitted)
22671     {
22672       unsigned long aranges_length = size_of_aranges ();
22673
22674       switch_to_section (debug_aranges_section);
22675       output_aranges (aranges_length);
22676     }
22677
22678   /* Output ranges section if necessary.  */
22679   if (ranges_table_in_use)
22680     {
22681       switch_to_section (debug_ranges_section);
22682       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22683       output_ranges ();
22684     }
22685
22686   /* Have to end the macro section.  */
22687   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22688     {
22689       switch_to_section (debug_macinfo_section);
22690       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
22691       if (!VEC_empty (macinfo_entry, macinfo_table))
22692         output_macinfo ();
22693       dw2_asm_output_data (1, 0, "End compilation unit");
22694     }
22695
22696   /* Output the source line correspondence table.  We must do this
22697      even if there is no line information.  Otherwise, on an empty
22698      translation unit, we will generate a present, but empty,
22699      .debug_info section.  IRIX 6.5 `nm' will then complain when
22700      examining the file.  This is done late so that any filenames
22701      used by the debug_info section are marked as 'used'.  */
22702   switch_to_section (debug_line_section);
22703   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
22704   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22705     output_line_info ();
22706
22707   /* If we emitted any DW_FORM_strp form attribute, output the string
22708      table too.  */
22709   if (debug_str_hash)
22710     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22711 }
22712
22713 #include "gt-dwarf2out.h"