OSDN Git Service

2012-01-19 Cary Coutant <ccoutant@google.com>
[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, 2012
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 static rtx cached_next_real_insn;
102
103 #ifdef VMS_DEBUGGING_INFO
104 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
105
106 /* Define this macro to be a nonzero value if the directory specifications
107     which are output in the debug info should end with a separator.  */
108 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
109 /* Define this macro to evaluate to a nonzero value if GCC should refrain
110    from generating indirect strings in DWARF2 debug information, for instance
111    if your target is stuck with an old version of GDB that is unable to
112    process them properly or uses VMS Debug.  */
113 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
114 #else
115 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
116 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
117 #endif
118
119 /* ??? Poison these here until it can be done generically.  They've been
120    totally replaced in this file; make sure it stays that way.  */
121 #undef DWARF2_UNWIND_INFO
122 #undef DWARF2_FRAME_INFO
123 #if (GCC_VERSION >= 3000)
124  #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
125 #endif
126
127 /* The size of the target's pointer type.  */
128 #ifndef PTR_SIZE
129 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
130 #endif
131
132 /* Array of RTXes referenced by the debugging information, which therefore
133    must be kept around forever.  */
134 static GTY(()) VEC(rtx,gc) *used_rtx_array;
135
136 /* A pointer to the base of a list of incomplete types which might be
137    completed at some later time.  incomplete_types_list needs to be a
138    VEC(tree,gc) because we want to tell the garbage collector about
139    it.  */
140 static GTY(()) VEC(tree,gc) *incomplete_types;
141
142 /* A pointer to the base of a table of references to declaration
143    scopes.  This table is a display which tracks the nesting
144    of declaration scopes at the current scope and containing
145    scopes.  This table is used to find the proper place to
146    define type declaration DIE's.  */
147 static GTY(()) VEC(tree,gc) *decl_scope_table;
148
149 /* Pointers to various DWARF2 sections.  */
150 static GTY(()) section *debug_info_section;
151 static GTY(()) section *debug_abbrev_section;
152 static GTY(()) section *debug_aranges_section;
153 static GTY(()) section *debug_macinfo_section;
154 static GTY(()) section *debug_line_section;
155 static GTY(()) section *debug_loc_section;
156 static GTY(()) section *debug_pubnames_section;
157 static GTY(()) section *debug_pubtypes_section;
158 static GTY(()) section *debug_str_section;
159 static GTY(()) section *debug_ranges_section;
160 static GTY(()) section *debug_frame_section;
161
162 /* Maximum size (in bytes) of an artificially generated label.  */
163 #define MAX_ARTIFICIAL_LABEL_BYTES      30
164
165 /* According to the (draft) DWARF 3 specification, the initial length
166    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
167    bytes are 0xffffffff, followed by the length stored in the next 8
168    bytes.
169
170    However, the SGI/MIPS ABI uses an initial length which is equal to
171    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
172
173 #ifndef DWARF_INITIAL_LENGTH_SIZE
174 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
175 #endif
176
177 /* Round SIZE up to the nearest BOUNDARY.  */
178 #define DWARF_ROUND(SIZE,BOUNDARY) \
179   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
180
181 /* CIE identifier.  */
182 #if HOST_BITS_PER_WIDE_INT >= 64
183 #define DWARF_CIE_ID \
184   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
185 #else
186 #define DWARF_CIE_ID DW_CIE_ID
187 #endif
188
189 DEF_VEC_P (dw_fde_ref);
190 DEF_VEC_ALLOC_P (dw_fde_ref, gc);
191
192 /* A vector for a table that contains frame description
193    information for each routine.  */
194 static GTY(()) VEC(dw_fde_ref, gc) *fde_vec;
195
196 struct GTY(()) indirect_string_node {
197   const char *str;
198   unsigned int refcount;
199   enum dwarf_form form;
200   char *label;
201 };
202
203 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
204
205 static GTY(()) int dw2_string_counter;
206
207 /* True if the compilation unit places functions in more than one section.  */
208 static GTY(()) bool have_multiple_function_sections = false;
209
210 /* Whether the default text and cold text sections have been used at all.  */
211
212 static GTY(()) bool text_section_used = false;
213 static GTY(()) bool cold_text_section_used = false;
214
215 /* The default cold text section.  */
216 static GTY(()) section *cold_text_section;
217
218 /* Forward declarations for functions defined in this file.  */
219
220 static char *stripattributes (const char *);
221 static void output_call_frame_info (int);
222 static void dwarf2out_note_section_used (void);
223
224 /* Personality decl of current unit.  Used only when assembler does not support
225    personality CFI.  */
226 static GTY(()) rtx current_unit_personality;
227
228 /* Data and reference forms for relocatable data.  */
229 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
230 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
231
232 #ifndef DEBUG_FRAME_SECTION
233 #define DEBUG_FRAME_SECTION     ".debug_frame"
234 #endif
235
236 #ifndef FUNC_BEGIN_LABEL
237 #define FUNC_BEGIN_LABEL        "LFB"
238 #endif
239
240 #ifndef FUNC_END_LABEL
241 #define FUNC_END_LABEL          "LFE"
242 #endif
243
244 #ifndef PROLOGUE_END_LABEL
245 #define PROLOGUE_END_LABEL      "LPE"
246 #endif
247
248 #ifndef EPILOGUE_BEGIN_LABEL
249 #define EPILOGUE_BEGIN_LABEL    "LEB"
250 #endif
251
252 #ifndef FRAME_BEGIN_LABEL
253 #define FRAME_BEGIN_LABEL       "Lframe"
254 #endif
255 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
256 #define CIE_END_LABEL           "LECIE"
257 #define FDE_LABEL               "LSFDE"
258 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
259 #define FDE_END_LABEL           "LEFDE"
260 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
261 #define LINE_NUMBER_END_LABEL   "LELT"
262 #define LN_PROLOG_AS_LABEL      "LASLTP"
263 #define LN_PROLOG_END_LABEL     "LELTP"
264 #define DIE_LABEL_PREFIX        "DW"
265 \f
266 /* Match the base name of a file to the base name of a compilation unit. */
267
268 static int
269 matches_main_base (const char *path)
270 {
271   /* Cache the last query. */
272   static const char *last_path = NULL;
273   static int last_match = 0;
274   if (path != last_path)
275     {
276       const char *base;
277       int length = base_of_path (path, &base);
278       last_path = path;
279       last_match = (length == main_input_baselength
280                     && memcmp (base, main_input_basename, length) == 0);
281     }
282   return last_match;
283 }
284
285 #ifdef DEBUG_DEBUG_STRUCT
286
287 static int
288 dump_struct_debug (tree type, enum debug_info_usage usage,
289                    enum debug_struct_file criterion, int generic,
290                    int matches, int result)
291 {
292   /* Find the type name. */
293   tree type_decl = TYPE_STUB_DECL (type);
294   tree t = type_decl;
295   const char *name = 0;
296   if (TREE_CODE (t) == TYPE_DECL)
297     t = DECL_NAME (t);
298   if (t)
299     name = IDENTIFIER_POINTER (t);
300
301   fprintf (stderr, "    struct %d %s %s %s %s %d %p %s\n",
302            criterion,
303            DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr",
304            matches ? "bas" : "hdr",
305            generic ? "gen" : "ord",
306            usage == DINFO_USAGE_DFN ? ";" :
307              usage == DINFO_USAGE_DIR_USE ? "." : "*",
308            result,
309            (void*) type_decl, name);
310   return result;
311 }
312 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
313   dump_struct_debug (type, usage, criterion, generic, matches, result)
314
315 #else
316
317 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
318   (result)
319
320 #endif
321
322 static bool
323 should_emit_struct_debug (tree type, enum debug_info_usage usage)
324 {
325   enum debug_struct_file criterion;
326   tree type_decl;
327   bool generic = lang_hooks.types.generic_p (type);
328
329   if (generic)
330     criterion = debug_struct_generic[usage];
331   else
332     criterion = debug_struct_ordinary[usage];
333
334   if (criterion == DINFO_STRUCT_FILE_NONE)
335     return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
336   if (criterion == DINFO_STRUCT_FILE_ANY)
337     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
338
339   type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
340
341   if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
342     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
343
344   if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
345     return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
346   return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
347 }
348 \f
349 /* Return a pointer to a copy of the section string name S with all
350    attributes stripped off, and an asterisk prepended (for assemble_name).  */
351
352 static inline char *
353 stripattributes (const char *s)
354 {
355   char *stripped = XNEWVEC (char, strlen (s) + 2);
356   char *p = stripped;
357
358   *p++ = '*';
359
360   while (*s && *s != ',')
361     *p++ = *s++;
362
363   *p = '\0';
364   return stripped;
365 }
366
367 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
368    switch to the data section instead, and write out a synthetic start label
369    for collect2 the first time around.  */
370
371 static void
372 switch_to_eh_frame_section (bool back)
373 {
374   tree label;
375
376 #ifdef EH_FRAME_SECTION_NAME
377   if (eh_frame_section == 0)
378     {
379       int flags;
380
381       if (EH_TABLES_CAN_BE_READ_ONLY)
382         {
383           int fde_encoding;
384           int per_encoding;
385           int lsda_encoding;
386
387           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
388                                                        /*global=*/0);
389           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
390                                                        /*global=*/1);
391           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
392                                                         /*global=*/0);
393           flags = ((! flag_pic
394                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
395                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
396                         && (per_encoding & 0x70) != DW_EH_PE_absptr
397                         && (per_encoding & 0x70) != DW_EH_PE_aligned
398                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
399                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
400                    ? 0 : SECTION_WRITE);
401         }
402       else
403         flags = SECTION_WRITE;
404       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
405     }
406 #endif /* EH_FRAME_SECTION_NAME */
407
408   if (eh_frame_section)
409     switch_to_section (eh_frame_section);
410   else
411     {
412       /* We have no special eh_frame section.  Put the information in
413          the data section and emit special labels to guide collect2.  */
414       switch_to_section (data_section);
415
416       if (!back)
417         {
418           label = get_file_function_name ("F");
419           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
420           targetm.asm_out.globalize_label (asm_out_file,
421                                            IDENTIFIER_POINTER (label));
422           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
423         }
424     }
425 }
426
427 /* Switch [BACK] to the eh or debug frame table section, depending on
428    FOR_EH.  */
429
430 static void
431 switch_to_frame_table_section (int for_eh, bool back)
432 {
433   if (for_eh)
434     switch_to_eh_frame_section (back);
435   else
436     {
437       if (!debug_frame_section)
438         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
439                                            SECTION_DEBUG, NULL);
440       switch_to_section (debug_frame_section);
441     }
442 }
443
444 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
445
446 enum dw_cfi_oprnd_type
447 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
448 {
449   switch (cfi)
450     {
451     case DW_CFA_nop:
452     case DW_CFA_GNU_window_save:
453     case DW_CFA_remember_state:
454     case DW_CFA_restore_state:
455       return dw_cfi_oprnd_unused;
456
457     case DW_CFA_set_loc:
458     case DW_CFA_advance_loc1:
459     case DW_CFA_advance_loc2:
460     case DW_CFA_advance_loc4:
461     case DW_CFA_MIPS_advance_loc8:
462       return dw_cfi_oprnd_addr;
463
464     case DW_CFA_offset:
465     case DW_CFA_offset_extended:
466     case DW_CFA_def_cfa:
467     case DW_CFA_offset_extended_sf:
468     case DW_CFA_def_cfa_sf:
469     case DW_CFA_restore:
470     case DW_CFA_restore_extended:
471     case DW_CFA_undefined:
472     case DW_CFA_same_value:
473     case DW_CFA_def_cfa_register:
474     case DW_CFA_register:
475     case DW_CFA_expression:
476       return dw_cfi_oprnd_reg_num;
477
478     case DW_CFA_def_cfa_offset:
479     case DW_CFA_GNU_args_size:
480     case DW_CFA_def_cfa_offset_sf:
481       return dw_cfi_oprnd_offset;
482
483     case DW_CFA_def_cfa_expression:
484       return dw_cfi_oprnd_loc;
485
486     default:
487       gcc_unreachable ();
488     }
489 }
490
491 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
492
493 enum dw_cfi_oprnd_type
494 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
495 {
496   switch (cfi)
497     {
498     case DW_CFA_def_cfa:
499     case DW_CFA_def_cfa_sf:
500     case DW_CFA_offset:
501     case DW_CFA_offset_extended_sf:
502     case DW_CFA_offset_extended:
503       return dw_cfi_oprnd_offset;
504
505     case DW_CFA_register:
506       return dw_cfi_oprnd_reg_num;
507
508     case DW_CFA_expression:
509       return dw_cfi_oprnd_loc;
510
511     default:
512       return dw_cfi_oprnd_unused;
513     }
514 }
515
516 /* Output one FDE.  */
517
518 static void
519 output_fde (dw_fde_ref fde, bool for_eh, bool second,
520             char *section_start_label, int fde_encoding, char *augmentation,
521             bool any_lsda_needed, int lsda_encoding)
522 {
523   const char *begin, *end;
524   static unsigned int j;
525   char l1[20], l2[20];
526
527   targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
528                                      /* empty */ 0);
529   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
530                                   for_eh + j);
531   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
532   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
533   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
534     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
535                          " indicating 64-bit DWARF extension");
536   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
537                         "FDE Length");
538   ASM_OUTPUT_LABEL (asm_out_file, l1);
539
540   if (for_eh)
541     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
542   else
543     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
544                            debug_frame_section, "FDE CIE offset");
545
546   begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
547   end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
548
549   if (for_eh)
550     {
551       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
552       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
553       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
554                                        "FDE initial location");
555       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
556                             end, begin, "FDE address range");
557     }
558   else
559     {
560       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
561       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
562     }
563
564   if (augmentation[0])
565     {
566       if (any_lsda_needed)
567         {
568           int size = size_of_encoded_value (lsda_encoding);
569
570           if (lsda_encoding == DW_EH_PE_aligned)
571             {
572               int offset = (  4         /* Length */
573                             + 4         /* CIE offset */
574                             + 2 * size_of_encoded_value (fde_encoding)
575                             + 1         /* Augmentation size */ );
576               int pad = -offset & (PTR_SIZE - 1);
577
578               size += pad;
579               gcc_assert (size_of_uleb128 (size) == 1);
580             }
581
582           dw2_asm_output_data_uleb128 (size, "Augmentation size");
583
584           if (fde->uses_eh_lsda)
585             {
586               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
587                                            fde->funcdef_number);
588               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
589                                                gen_rtx_SYMBOL_REF (Pmode, l1),
590                                                false,
591                                                "Language Specific Data Area");
592             }
593           else
594             {
595               if (lsda_encoding == DW_EH_PE_aligned)
596                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
597               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
598                                    "Language Specific Data Area (none)");
599             }
600         }
601       else
602         dw2_asm_output_data_uleb128 (0, "Augmentation size");
603     }
604
605   /* Loop through the Call Frame Instructions associated with this FDE.  */
606   fde->dw_fde_current_label = begin;
607   {
608     size_t from, until, i;
609
610     from = 0;
611     until = VEC_length (dw_cfi_ref, fde->dw_fde_cfi);
612
613     if (fde->dw_fde_second_begin == NULL)
614       ;
615     else if (!second)
616       until = fde->dw_fde_switch_cfi_index;
617     else
618       from = fde->dw_fde_switch_cfi_index;
619
620     for (i = from; i < until; i++)
621       output_cfi (VEC_index (dw_cfi_ref, fde->dw_fde_cfi, i), fde, for_eh);
622   }
623
624   /* If we are to emit a ref/link from function bodies to their frame tables,
625      do it now.  This is typically performed to make sure that tables
626      associated with functions are dragged with them and not discarded in
627      garbage collecting links. We need to do this on a per function basis to
628      cope with -ffunction-sections.  */
629
630 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
631   /* Switch to the function section, emit the ref to the tables, and
632      switch *back* into the table section.  */
633   switch_to_section (function_section (fde->decl));
634   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
635   switch_to_frame_table_section (for_eh, true);
636 #endif
637
638   /* Pad the FDE out to an address sized boundary.  */
639   ASM_OUTPUT_ALIGN (asm_out_file,
640                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
641   ASM_OUTPUT_LABEL (asm_out_file, l2);
642
643   j += 2;
644 }
645
646 /* Return true if frame description entry FDE is needed for EH.  */
647
648 static bool
649 fde_needed_for_eh_p (dw_fde_ref fde)
650 {
651   if (flag_asynchronous_unwind_tables)
652     return true;
653
654   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
655     return true;
656
657   if (fde->uses_eh_lsda)
658     return true;
659
660   /* If exceptions are enabled, we have collected nothrow info.  */
661   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
662     return false;
663
664   return true;
665 }
666
667 /* Output the call frame information used to record information
668    that relates to calculating the frame pointer, and records the
669    location of saved registers.  */
670
671 static void
672 output_call_frame_info (int for_eh)
673 {
674   unsigned int i;
675   dw_fde_ref fde;
676   dw_cfi_ref cfi;
677   char l1[20], l2[20], section_start_label[20];
678   bool any_lsda_needed = false;
679   char augmentation[6];
680   int augmentation_size;
681   int fde_encoding = DW_EH_PE_absptr;
682   int per_encoding = DW_EH_PE_absptr;
683   int lsda_encoding = DW_EH_PE_absptr;
684   int return_reg;
685   rtx personality = NULL;
686   int dw_cie_version;
687
688   /* Don't emit a CIE if there won't be any FDEs.  */
689   if (fde_vec == NULL)
690     return;
691
692   /* Nothing to do if the assembler's doing it all.  */
693   if (dwarf2out_do_cfi_asm ())
694     return;
695
696   /* If we don't have any functions we'll want to unwind out of, don't emit
697      any EH unwind information.  If we make FDEs linkonce, we may have to
698      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
699      want to avoid having an FDE kept around when the function it refers to
700      is discarded.  Example where this matters: a primary function template
701      in C++ requires EH information, an explicit specialization doesn't.  */
702   if (for_eh)
703     {
704       bool any_eh_needed = false;
705
706       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde)
707         {
708           if (fde->uses_eh_lsda)
709             any_eh_needed = any_lsda_needed = true;
710           else if (fde_needed_for_eh_p (fde))
711             any_eh_needed = true;
712           else if (TARGET_USES_WEAK_UNWIND_INFO)
713             targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
714         }
715
716       if (!any_eh_needed)
717         return;
718     }
719
720   /* We're going to be generating comments, so turn on app.  */
721   if (flag_debug_asm)
722     app_enable ();
723
724   /* Switch to the proper frame section, first time.  */
725   switch_to_frame_table_section (for_eh, false);
726
727   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
728   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
729
730   /* Output the CIE.  */
731   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
732   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
733   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
734     dw2_asm_output_data (4, 0xffffffff,
735       "Initial length escape value indicating 64-bit DWARF extension");
736   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
737                         "Length of Common Information Entry");
738   ASM_OUTPUT_LABEL (asm_out_file, l1);
739
740   /* Now that the CIE pointer is PC-relative for EH,
741      use 0 to identify the CIE.  */
742   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
743                        (for_eh ? 0 : DWARF_CIE_ID),
744                        "CIE Identifier Tag");
745
746   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
747      use CIE version 1, unless that would produce incorrect results
748      due to overflowing the return register column.  */
749   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
750   dw_cie_version = 1;
751   if (return_reg >= 256 || dwarf_version > 2)
752     dw_cie_version = 3;
753   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
754
755   augmentation[0] = 0;
756   augmentation_size = 0;
757
758   personality = current_unit_personality;
759   if (for_eh)
760     {
761       char *p;
762
763       /* Augmentation:
764          z      Indicates that a uleb128 is present to size the
765                 augmentation section.
766          L      Indicates the encoding (and thus presence) of
767                 an LSDA pointer in the FDE augmentation.
768          R      Indicates a non-default pointer encoding for
769                 FDE code pointers.
770          P      Indicates the presence of an encoding + language
771                 personality routine in the CIE augmentation.  */
772
773       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
774       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
775       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
776
777       p = augmentation + 1;
778       if (personality)
779         {
780           *p++ = 'P';
781           augmentation_size += 1 + size_of_encoded_value (per_encoding);
782           assemble_external_libcall (personality);
783         }
784       if (any_lsda_needed)
785         {
786           *p++ = 'L';
787           augmentation_size += 1;
788         }
789       if (fde_encoding != DW_EH_PE_absptr)
790         {
791           *p++ = 'R';
792           augmentation_size += 1;
793         }
794       if (p > augmentation + 1)
795         {
796           augmentation[0] = 'z';
797           *p = '\0';
798         }
799
800       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
801       if (personality && per_encoding == DW_EH_PE_aligned)
802         {
803           int offset = (  4             /* Length */
804                         + 4             /* CIE Id */
805                         + 1             /* CIE version */
806                         + strlen (augmentation) + 1     /* Augmentation */
807                         + size_of_uleb128 (1)           /* Code alignment */
808                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
809                         + 1             /* RA column */
810                         + 1             /* Augmentation size */
811                         + 1             /* Personality encoding */ );
812           int pad = -offset & (PTR_SIZE - 1);
813
814           augmentation_size += pad;
815
816           /* Augmentations should be small, so there's scarce need to
817              iterate for a solution.  Die if we exceed one uleb128 byte.  */
818           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
819         }
820     }
821
822   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
823   if (dw_cie_version >= 4)
824     {
825       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
826       dw2_asm_output_data (1, 0, "CIE Segment Size");
827     }
828   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
829   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
830                                "CIE Data Alignment Factor");
831
832   if (dw_cie_version == 1)
833     dw2_asm_output_data (1, return_reg, "CIE RA Column");
834   else
835     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
836
837   if (augmentation[0])
838     {
839       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
840       if (personality)
841         {
842           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
843                                eh_data_format_name (per_encoding));
844           dw2_asm_output_encoded_addr_rtx (per_encoding,
845                                            personality,
846                                            true, NULL);
847         }
848
849       if (any_lsda_needed)
850         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
851                              eh_data_format_name (lsda_encoding));
852
853       if (fde_encoding != DW_EH_PE_absptr)
854         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
855                              eh_data_format_name (fde_encoding));
856     }
857
858   FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, i, cfi)
859     output_cfi (cfi, NULL, for_eh);
860
861   /* Pad the CIE out to an address sized boundary.  */
862   ASM_OUTPUT_ALIGN (asm_out_file,
863                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
864   ASM_OUTPUT_LABEL (asm_out_file, l2);
865
866   /* Loop through all of the FDE's.  */
867   FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde)
868     {
869       unsigned int k;
870
871       /* Don't emit EH unwind info for leaf functions that don't need it.  */
872       if (for_eh && !fde_needed_for_eh_p (fde))
873         continue;
874
875       for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
876         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
877                     augmentation, any_lsda_needed, lsda_encoding);
878     }
879
880   if (for_eh && targetm.terminate_dw2_eh_frame_info)
881     dw2_asm_output_data (4, 0, "End of Table");
882 #ifdef MIPS_DEBUGGING_INFO
883   /* Work around Irix 6 assembler bug whereby labels at the end of a section
884      get a value of 0.  Putting .align 0 after the label fixes it.  */
885   ASM_OUTPUT_ALIGN (asm_out_file, 0);
886 #endif
887
888   /* Turn off app to make assembly quicker.  */
889   if (flag_debug_asm)
890     app_disable ();
891 }
892
893 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
894
895 static void
896 dwarf2out_do_cfi_startproc (bool second)
897 {
898   int enc;
899   rtx ref;
900   rtx personality = get_personality_function (current_function_decl);
901
902   fprintf (asm_out_file, "\t.cfi_startproc\n");
903
904   if (personality)
905     {
906       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
907       ref = personality;
908
909       /* ??? The GAS support isn't entirely consistent.  We have to
910          handle indirect support ourselves, but PC-relative is done
911          in the assembler.  Further, the assembler can't handle any
912          of the weirder relocation types.  */
913       if (enc & DW_EH_PE_indirect)
914         ref = dw2_force_const_mem (ref, true);
915
916       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
917       output_addr_const (asm_out_file, ref);
918       fputc ('\n', asm_out_file);
919     }
920
921   if (crtl->uses_eh_lsda)
922     {
923       char lab[20];
924
925       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
926       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
927                                    current_function_funcdef_no);
928       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
929       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
930
931       if (enc & DW_EH_PE_indirect)
932         ref = dw2_force_const_mem (ref, true);
933
934       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
935       output_addr_const (asm_out_file, ref);
936       fputc ('\n', asm_out_file);
937     }
938 }
939
940 /* Allocate CURRENT_FDE.  Immediately initialize all we can, noting that
941    this allocation may be done before pass_final.  */
942
943 dw_fde_ref
944 dwarf2out_alloc_current_fde (void)
945 {
946   dw_fde_ref fde;
947
948   fde = ggc_alloc_cleared_dw_fde_node ();
949   fde->decl = current_function_decl;
950   fde->funcdef_number = current_function_funcdef_no;
951   fde->fde_index = VEC_length (dw_fde_ref, fde_vec);
952   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
953   fde->uses_eh_lsda = crtl->uses_eh_lsda;
954   fde->nothrow = crtl->nothrow;
955   fde->drap_reg = INVALID_REGNUM;
956   fde->vdrap_reg = INVALID_REGNUM;
957
958   /* Record the FDE associated with this function.  */
959   cfun->fde = fde;
960   VEC_safe_push (dw_fde_ref, gc, fde_vec, fde);
961
962   return fde;
963 }
964
965 /* Output a marker (i.e. a label) for the beginning of a function, before
966    the prologue.  */
967
968 void
969 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
970                           const char *file ATTRIBUTE_UNUSED)
971 {
972   char label[MAX_ARTIFICIAL_LABEL_BYTES];
973   char * dup_label;
974   dw_fde_ref fde;
975   section *fnsec;
976   bool do_frame;
977
978   current_function_func_begin_label = NULL;
979
980   do_frame = dwarf2out_do_frame ();
981
982   /* ??? current_function_func_begin_label is also used by except.c for
983      call-site information.  We must emit this label if it might be used.  */
984   if (!do_frame
985       && (!flag_exceptions
986           || targetm_common.except_unwind_info (&global_options) != UI_TARGET))
987     return;
988
989   fnsec = function_section (current_function_decl);
990   switch_to_section (fnsec);
991   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
992                                current_function_funcdef_no);
993   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
994                           current_function_funcdef_no);
995   dup_label = xstrdup (label);
996   current_function_func_begin_label = dup_label;
997
998   /* We can elide the fde allocation if we're not emitting debug info.  */
999   if (!do_frame)
1000     return;
1001
1002   /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1003      emit insns as rtx but bypass the bulk of rest_of_compilation, which
1004      would include pass_dwarf2_frame.  If we've not created the FDE yet,
1005      do so now.  */
1006   fde = cfun->fde;
1007   if (fde == NULL)
1008     fde = dwarf2out_alloc_current_fde ();
1009
1010   /* Initialize the bits of CURRENT_FDE that were not available earlier.  */
1011   fde->dw_fde_begin = dup_label;
1012   fde->dw_fde_current_label = dup_label;
1013   fde->in_std_section = (fnsec == text_section
1014                          || (cold_text_section && fnsec == cold_text_section));
1015
1016   /* We only want to output line number information for the genuine dwarf2
1017      prologue case, not the eh frame case.  */
1018 #ifdef DWARF2_DEBUGGING_INFO
1019   if (file)
1020     dwarf2out_source_line (line, file, 0, true);
1021 #endif
1022
1023   if (dwarf2out_do_cfi_asm ())
1024     dwarf2out_do_cfi_startproc (false);
1025   else
1026     {
1027       rtx personality = get_personality_function (current_function_decl);
1028       if (!current_unit_personality)
1029         current_unit_personality = personality;
1030
1031       /* We cannot keep a current personality per function as without CFI
1032          asm, at the point where we emit the CFI data, there is no current
1033          function anymore.  */
1034       if (personality && current_unit_personality != personality)
1035         sorry ("multiple EH personalities are supported only with assemblers "
1036                "supporting .cfi_personality directive");
1037     }
1038 }
1039
1040 /* Output a marker (i.e. a label) for the end of the generated code
1041    for a function prologue.  This gets called *after* the prologue code has
1042    been generated.  */
1043
1044 void
1045 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1046                         const char *file ATTRIBUTE_UNUSED)
1047 {
1048   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1049
1050   /* Output a label to mark the endpoint of the code generated for this
1051      function.  */
1052   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1053                                current_function_funcdef_no);
1054   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1055                           current_function_funcdef_no);
1056   cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1057 }
1058
1059 /* Output a marker (i.e. a label) for the beginning of the generated code
1060    for a function epilogue.  This gets called *before* the prologue code has
1061    been generated.  */
1062
1063 void
1064 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1065                           const char *file ATTRIBUTE_UNUSED)
1066 {
1067   dw_fde_ref fde = cfun->fde;
1068   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1069
1070   if (fde->dw_fde_vms_begin_epilogue)
1071     return;
1072
1073   /* Output a label to mark the endpoint of the code generated for this
1074      function.  */
1075   ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1076                                current_function_funcdef_no);
1077   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1078                           current_function_funcdef_no);
1079   fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1080 }
1081
1082 /* Output a marker (i.e. a label) for the absolute end of the generated code
1083    for a function definition.  This gets called *after* the epilogue code has
1084    been generated.  */
1085
1086 void
1087 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1088                         const char *file ATTRIBUTE_UNUSED)
1089 {
1090   dw_fde_ref fde;
1091   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1092
1093   last_var_location_insn = NULL_RTX;
1094   cached_next_real_insn = NULL_RTX;
1095
1096   if (dwarf2out_do_cfi_asm ())
1097     fprintf (asm_out_file, "\t.cfi_endproc\n");
1098
1099   /* Output a label to mark the endpoint of the code generated for this
1100      function.  */
1101   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1102                                current_function_funcdef_no);
1103   ASM_OUTPUT_LABEL (asm_out_file, label);
1104   fde = cfun->fde;
1105   gcc_assert (fde != NULL);
1106   if (fde->dw_fde_second_begin == NULL)
1107     fde->dw_fde_end = xstrdup (label);
1108 }
1109
1110 void
1111 dwarf2out_frame_finish (void)
1112 {
1113   /* Output call frame information.  */
1114   if (targetm.debug_unwind_info () == UI_DWARF2)
1115     output_call_frame_info (0);
1116
1117   /* Output another copy for the unwinder.  */
1118   if ((flag_unwind_tables || flag_exceptions)
1119       && targetm_common.except_unwind_info (&global_options) == UI_DWARF2)
1120     output_call_frame_info (1);
1121 }
1122
1123 /* Note that the current function section is being used for code.  */
1124
1125 static void
1126 dwarf2out_note_section_used (void)
1127 {
1128   section *sec = current_function_section ();
1129   if (sec == text_section)
1130     text_section_used = true;
1131   else if (sec == cold_text_section)
1132     cold_text_section_used = true;
1133 }
1134
1135 static void var_location_switch_text_section (void);
1136 static void set_cur_line_info_table (section *);
1137
1138 void
1139 dwarf2out_switch_text_section (void)
1140 {
1141   section *sect;
1142   dw_fde_ref fde = cfun->fde;
1143
1144   gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
1145
1146   if (!in_cold_section_p)
1147     {
1148       fde->dw_fde_end = crtl->subsections.cold_section_end_label;
1149       fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
1150       fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
1151     }
1152   else
1153     {
1154       fde->dw_fde_end = crtl->subsections.hot_section_end_label;
1155       fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
1156       fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
1157     }
1158   have_multiple_function_sections = true;
1159
1160   /* There is no need to mark used sections when not debugging.  */
1161   if (cold_text_section != NULL)
1162     dwarf2out_note_section_used ();
1163
1164   if (dwarf2out_do_cfi_asm ())
1165     fprintf (asm_out_file, "\t.cfi_endproc\n");
1166
1167   /* Now do the real section switch.  */
1168   sect = current_function_section ();
1169   switch_to_section (sect);
1170
1171   fde->second_in_std_section
1172     = (sect == text_section
1173        || (cold_text_section && sect == cold_text_section));
1174
1175   if (dwarf2out_do_cfi_asm ())
1176     dwarf2out_do_cfi_startproc (true);
1177
1178   var_location_switch_text_section ();
1179
1180   set_cur_line_info_table (sect);
1181 }
1182 \f
1183 /* And now, the subset of the debugging information support code necessary
1184    for emitting location expressions.  */
1185
1186 /* Data about a single source file.  */
1187 struct GTY(()) dwarf_file_data {
1188   const char * filename;
1189   int emitted_number;
1190 };
1191
1192 typedef struct GTY(()) deferred_locations_struct
1193 {
1194   tree variable;
1195   dw_die_ref die;
1196 } deferred_locations;
1197
1198 DEF_VEC_O(deferred_locations);
1199 DEF_VEC_ALLOC_O(deferred_locations,gc);
1200
1201 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
1202
1203 DEF_VEC_P(dw_die_ref);
1204 DEF_VEC_ALLOC_P(dw_die_ref,heap);
1205
1206 /* Location lists are ranges + location descriptions for that range,
1207    so you can track variables that are in different places over
1208    their entire life.  */
1209 typedef struct GTY(()) dw_loc_list_struct {
1210   dw_loc_list_ref dw_loc_next;
1211   const char *begin; /* Label for begin address of range */
1212   const char *end;  /* Label for end address of range */
1213   char *ll_symbol; /* Label for beginning of location list.
1214                       Only on head of list */
1215   const char *section; /* Section this loclist is relative to */
1216   dw_loc_descr_ref expr;
1217   hashval_t hash;
1218   /* True if all addresses in this and subsequent lists are known to be
1219      resolved.  */
1220   bool resolved_addr;
1221   /* True if this list has been replaced by dw_loc_next.  */
1222   bool replaced;
1223   bool emitted;
1224   /* True if the range should be emitted even if begin and end
1225      are the same.  */
1226   bool force;
1227 } dw_loc_list_node;
1228
1229 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
1230
1231 /* Convert a DWARF stack opcode into its string name.  */
1232
1233 static const char *
1234 dwarf_stack_op_name (unsigned int op)
1235 {
1236   switch (op)
1237     {
1238     case DW_OP_addr:
1239       return "DW_OP_addr";
1240     case DW_OP_deref:
1241       return "DW_OP_deref";
1242     case DW_OP_const1u:
1243       return "DW_OP_const1u";
1244     case DW_OP_const1s:
1245       return "DW_OP_const1s";
1246     case DW_OP_const2u:
1247       return "DW_OP_const2u";
1248     case DW_OP_const2s:
1249       return "DW_OP_const2s";
1250     case DW_OP_const4u:
1251       return "DW_OP_const4u";
1252     case DW_OP_const4s:
1253       return "DW_OP_const4s";
1254     case DW_OP_const8u:
1255       return "DW_OP_const8u";
1256     case DW_OP_const8s:
1257       return "DW_OP_const8s";
1258     case DW_OP_constu:
1259       return "DW_OP_constu";
1260     case DW_OP_consts:
1261       return "DW_OP_consts";
1262     case DW_OP_dup:
1263       return "DW_OP_dup";
1264     case DW_OP_drop:
1265       return "DW_OP_drop";
1266     case DW_OP_over:
1267       return "DW_OP_over";
1268     case DW_OP_pick:
1269       return "DW_OP_pick";
1270     case DW_OP_swap:
1271       return "DW_OP_swap";
1272     case DW_OP_rot:
1273       return "DW_OP_rot";
1274     case DW_OP_xderef:
1275       return "DW_OP_xderef";
1276     case DW_OP_abs:
1277       return "DW_OP_abs";
1278     case DW_OP_and:
1279       return "DW_OP_and";
1280     case DW_OP_div:
1281       return "DW_OP_div";
1282     case DW_OP_minus:
1283       return "DW_OP_minus";
1284     case DW_OP_mod:
1285       return "DW_OP_mod";
1286     case DW_OP_mul:
1287       return "DW_OP_mul";
1288     case DW_OP_neg:
1289       return "DW_OP_neg";
1290     case DW_OP_not:
1291       return "DW_OP_not";
1292     case DW_OP_or:
1293       return "DW_OP_or";
1294     case DW_OP_plus:
1295       return "DW_OP_plus";
1296     case DW_OP_plus_uconst:
1297       return "DW_OP_plus_uconst";
1298     case DW_OP_shl:
1299       return "DW_OP_shl";
1300     case DW_OP_shr:
1301       return "DW_OP_shr";
1302     case DW_OP_shra:
1303       return "DW_OP_shra";
1304     case DW_OP_xor:
1305       return "DW_OP_xor";
1306     case DW_OP_bra:
1307       return "DW_OP_bra";
1308     case DW_OP_eq:
1309       return "DW_OP_eq";
1310     case DW_OP_ge:
1311       return "DW_OP_ge";
1312     case DW_OP_gt:
1313       return "DW_OP_gt";
1314     case DW_OP_le:
1315       return "DW_OP_le";
1316     case DW_OP_lt:
1317       return "DW_OP_lt";
1318     case DW_OP_ne:
1319       return "DW_OP_ne";
1320     case DW_OP_skip:
1321       return "DW_OP_skip";
1322     case DW_OP_lit0:
1323       return "DW_OP_lit0";
1324     case DW_OP_lit1:
1325       return "DW_OP_lit1";
1326     case DW_OP_lit2:
1327       return "DW_OP_lit2";
1328     case DW_OP_lit3:
1329       return "DW_OP_lit3";
1330     case DW_OP_lit4:
1331       return "DW_OP_lit4";
1332     case DW_OP_lit5:
1333       return "DW_OP_lit5";
1334     case DW_OP_lit6:
1335       return "DW_OP_lit6";
1336     case DW_OP_lit7:
1337       return "DW_OP_lit7";
1338     case DW_OP_lit8:
1339       return "DW_OP_lit8";
1340     case DW_OP_lit9:
1341       return "DW_OP_lit9";
1342     case DW_OP_lit10:
1343       return "DW_OP_lit10";
1344     case DW_OP_lit11:
1345       return "DW_OP_lit11";
1346     case DW_OP_lit12:
1347       return "DW_OP_lit12";
1348     case DW_OP_lit13:
1349       return "DW_OP_lit13";
1350     case DW_OP_lit14:
1351       return "DW_OP_lit14";
1352     case DW_OP_lit15:
1353       return "DW_OP_lit15";
1354     case DW_OP_lit16:
1355       return "DW_OP_lit16";
1356     case DW_OP_lit17:
1357       return "DW_OP_lit17";
1358     case DW_OP_lit18:
1359       return "DW_OP_lit18";
1360     case DW_OP_lit19:
1361       return "DW_OP_lit19";
1362     case DW_OP_lit20:
1363       return "DW_OP_lit20";
1364     case DW_OP_lit21:
1365       return "DW_OP_lit21";
1366     case DW_OP_lit22:
1367       return "DW_OP_lit22";
1368     case DW_OP_lit23:
1369       return "DW_OP_lit23";
1370     case DW_OP_lit24:
1371       return "DW_OP_lit24";
1372     case DW_OP_lit25:
1373       return "DW_OP_lit25";
1374     case DW_OP_lit26:
1375       return "DW_OP_lit26";
1376     case DW_OP_lit27:
1377       return "DW_OP_lit27";
1378     case DW_OP_lit28:
1379       return "DW_OP_lit28";
1380     case DW_OP_lit29:
1381       return "DW_OP_lit29";
1382     case DW_OP_lit30:
1383       return "DW_OP_lit30";
1384     case DW_OP_lit31:
1385       return "DW_OP_lit31";
1386     case DW_OP_reg0:
1387       return "DW_OP_reg0";
1388     case DW_OP_reg1:
1389       return "DW_OP_reg1";
1390     case DW_OP_reg2:
1391       return "DW_OP_reg2";
1392     case DW_OP_reg3:
1393       return "DW_OP_reg3";
1394     case DW_OP_reg4:
1395       return "DW_OP_reg4";
1396     case DW_OP_reg5:
1397       return "DW_OP_reg5";
1398     case DW_OP_reg6:
1399       return "DW_OP_reg6";
1400     case DW_OP_reg7:
1401       return "DW_OP_reg7";
1402     case DW_OP_reg8:
1403       return "DW_OP_reg8";
1404     case DW_OP_reg9:
1405       return "DW_OP_reg9";
1406     case DW_OP_reg10:
1407       return "DW_OP_reg10";
1408     case DW_OP_reg11:
1409       return "DW_OP_reg11";
1410     case DW_OP_reg12:
1411       return "DW_OP_reg12";
1412     case DW_OP_reg13:
1413       return "DW_OP_reg13";
1414     case DW_OP_reg14:
1415       return "DW_OP_reg14";
1416     case DW_OP_reg15:
1417       return "DW_OP_reg15";
1418     case DW_OP_reg16:
1419       return "DW_OP_reg16";
1420     case DW_OP_reg17:
1421       return "DW_OP_reg17";
1422     case DW_OP_reg18:
1423       return "DW_OP_reg18";
1424     case DW_OP_reg19:
1425       return "DW_OP_reg19";
1426     case DW_OP_reg20:
1427       return "DW_OP_reg20";
1428     case DW_OP_reg21:
1429       return "DW_OP_reg21";
1430     case DW_OP_reg22:
1431       return "DW_OP_reg22";
1432     case DW_OP_reg23:
1433       return "DW_OP_reg23";
1434     case DW_OP_reg24:
1435       return "DW_OP_reg24";
1436     case DW_OP_reg25:
1437       return "DW_OP_reg25";
1438     case DW_OP_reg26:
1439       return "DW_OP_reg26";
1440     case DW_OP_reg27:
1441       return "DW_OP_reg27";
1442     case DW_OP_reg28:
1443       return "DW_OP_reg28";
1444     case DW_OP_reg29:
1445       return "DW_OP_reg29";
1446     case DW_OP_reg30:
1447       return "DW_OP_reg30";
1448     case DW_OP_reg31:
1449       return "DW_OP_reg31";
1450     case DW_OP_breg0:
1451       return "DW_OP_breg0";
1452     case DW_OP_breg1:
1453       return "DW_OP_breg1";
1454     case DW_OP_breg2:
1455       return "DW_OP_breg2";
1456     case DW_OP_breg3:
1457       return "DW_OP_breg3";
1458     case DW_OP_breg4:
1459       return "DW_OP_breg4";
1460     case DW_OP_breg5:
1461       return "DW_OP_breg5";
1462     case DW_OP_breg6:
1463       return "DW_OP_breg6";
1464     case DW_OP_breg7:
1465       return "DW_OP_breg7";
1466     case DW_OP_breg8:
1467       return "DW_OP_breg8";
1468     case DW_OP_breg9:
1469       return "DW_OP_breg9";
1470     case DW_OP_breg10:
1471       return "DW_OP_breg10";
1472     case DW_OP_breg11:
1473       return "DW_OP_breg11";
1474     case DW_OP_breg12:
1475       return "DW_OP_breg12";
1476     case DW_OP_breg13:
1477       return "DW_OP_breg13";
1478     case DW_OP_breg14:
1479       return "DW_OP_breg14";
1480     case DW_OP_breg15:
1481       return "DW_OP_breg15";
1482     case DW_OP_breg16:
1483       return "DW_OP_breg16";
1484     case DW_OP_breg17:
1485       return "DW_OP_breg17";
1486     case DW_OP_breg18:
1487       return "DW_OP_breg18";
1488     case DW_OP_breg19:
1489       return "DW_OP_breg19";
1490     case DW_OP_breg20:
1491       return "DW_OP_breg20";
1492     case DW_OP_breg21:
1493       return "DW_OP_breg21";
1494     case DW_OP_breg22:
1495       return "DW_OP_breg22";
1496     case DW_OP_breg23:
1497       return "DW_OP_breg23";
1498     case DW_OP_breg24:
1499       return "DW_OP_breg24";
1500     case DW_OP_breg25:
1501       return "DW_OP_breg25";
1502     case DW_OP_breg26:
1503       return "DW_OP_breg26";
1504     case DW_OP_breg27:
1505       return "DW_OP_breg27";
1506     case DW_OP_breg28:
1507       return "DW_OP_breg28";
1508     case DW_OP_breg29:
1509       return "DW_OP_breg29";
1510     case DW_OP_breg30:
1511       return "DW_OP_breg30";
1512     case DW_OP_breg31:
1513       return "DW_OP_breg31";
1514     case DW_OP_regx:
1515       return "DW_OP_regx";
1516     case DW_OP_fbreg:
1517       return "DW_OP_fbreg";
1518     case DW_OP_bregx:
1519       return "DW_OP_bregx";
1520     case DW_OP_piece:
1521       return "DW_OP_piece";
1522     case DW_OP_deref_size:
1523       return "DW_OP_deref_size";
1524     case DW_OP_xderef_size:
1525       return "DW_OP_xderef_size";
1526     case DW_OP_nop:
1527       return "DW_OP_nop";
1528
1529     case DW_OP_push_object_address:
1530       return "DW_OP_push_object_address";
1531     case DW_OP_call2:
1532       return "DW_OP_call2";
1533     case DW_OP_call4:
1534       return "DW_OP_call4";
1535     case DW_OP_call_ref:
1536       return "DW_OP_call_ref";
1537     case DW_OP_implicit_value:
1538       return "DW_OP_implicit_value";
1539     case DW_OP_stack_value:
1540       return "DW_OP_stack_value";
1541     case DW_OP_form_tls_address:
1542       return "DW_OP_form_tls_address";
1543     case DW_OP_call_frame_cfa:
1544       return "DW_OP_call_frame_cfa";
1545     case DW_OP_bit_piece:
1546       return "DW_OP_bit_piece";
1547
1548     case DW_OP_GNU_push_tls_address:
1549       return "DW_OP_GNU_push_tls_address";
1550     case DW_OP_GNU_uninit:
1551       return "DW_OP_GNU_uninit";
1552     case DW_OP_GNU_encoded_addr:
1553       return "DW_OP_GNU_encoded_addr";
1554     case DW_OP_GNU_implicit_pointer:
1555       return "DW_OP_GNU_implicit_pointer";
1556     case DW_OP_GNU_entry_value:
1557       return "DW_OP_GNU_entry_value";
1558     case DW_OP_GNU_const_type:
1559       return "DW_OP_GNU_const_type";
1560     case DW_OP_GNU_regval_type:
1561       return "DW_OP_GNU_regval_type";
1562     case DW_OP_GNU_deref_type:
1563       return "DW_OP_GNU_deref_type";
1564     case DW_OP_GNU_convert:
1565       return "DW_OP_GNU_convert";
1566     case DW_OP_GNU_reinterpret:
1567       return "DW_OP_GNU_reinterpret";
1568     case DW_OP_GNU_parameter_ref:
1569       return "DW_OP_GNU_parameter_ref";
1570
1571     default:
1572       return "OP_<unknown>";
1573     }
1574 }
1575
1576 /* Return a pointer to a newly allocated location description.  Location
1577    descriptions are simple expression terms that can be strung
1578    together to form more complicated location (address) descriptions.  */
1579
1580 static inline dw_loc_descr_ref
1581 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1582                unsigned HOST_WIDE_INT oprnd2)
1583 {
1584   dw_loc_descr_ref descr = ggc_alloc_cleared_dw_loc_descr_node ();
1585
1586   descr->dw_loc_opc = op;
1587   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1588   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1589   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1590   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1591
1592   return descr;
1593 }
1594
1595 /* Return a pointer to a newly allocated location description for
1596    REG and OFFSET.  */
1597
1598 static inline dw_loc_descr_ref
1599 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
1600 {
1601   if (reg <= 31)
1602     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1603                           offset, 0);
1604   else
1605     return new_loc_descr (DW_OP_bregx, reg, offset);
1606 }
1607
1608 /* Add a location description term to a location description expression.  */
1609
1610 static inline void
1611 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1612 {
1613   dw_loc_descr_ref *d;
1614
1615   /* Find the end of the chain.  */
1616   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1617     ;
1618
1619   *d = descr;
1620 }
1621
1622 /* Compare two location operands for exact equality.  */
1623
1624 static bool
1625 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1626 {
1627   if (a->val_class != b->val_class)
1628     return false;
1629   switch (a->val_class)
1630     {
1631     case dw_val_class_none:
1632       return true;
1633     case dw_val_class_addr:
1634       return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1635
1636     case dw_val_class_offset:
1637     case dw_val_class_unsigned_const:
1638     case dw_val_class_const:
1639     case dw_val_class_range_list:
1640     case dw_val_class_lineptr:
1641     case dw_val_class_macptr:
1642       /* These are all HOST_WIDE_INT, signed or unsigned.  */
1643       return a->v.val_unsigned == b->v.val_unsigned;
1644
1645     case dw_val_class_loc:
1646       return a->v.val_loc == b->v.val_loc;
1647     case dw_val_class_loc_list:
1648       return a->v.val_loc_list == b->v.val_loc_list;
1649     case dw_val_class_die_ref:
1650       return a->v.val_die_ref.die == b->v.val_die_ref.die;
1651     case dw_val_class_fde_ref:
1652       return a->v.val_fde_index == b->v.val_fde_index;
1653     case dw_val_class_lbl_id:
1654       return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1655     case dw_val_class_str:
1656       return a->v.val_str == b->v.val_str;
1657     case dw_val_class_flag:
1658       return a->v.val_flag == b->v.val_flag;
1659     case dw_val_class_file:
1660       return a->v.val_file == b->v.val_file;
1661     case dw_val_class_decl_ref:
1662       return a->v.val_decl_ref == b->v.val_decl_ref;
1663     
1664     case dw_val_class_const_double:
1665       return (a->v.val_double.high == b->v.val_double.high
1666               && a->v.val_double.low == b->v.val_double.low);
1667
1668     case dw_val_class_vec:
1669       {
1670         size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1671         size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1672
1673         return (a_len == b_len
1674                 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1675       }
1676
1677     case dw_val_class_data8:
1678       return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1679
1680     case dw_val_class_vms_delta:
1681       return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1682               && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1683     }
1684   gcc_unreachable ();
1685 }
1686
1687 /* Compare two location atoms for exact equality.  */
1688
1689 static bool
1690 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1691 {
1692   if (a->dw_loc_opc != b->dw_loc_opc)
1693     return false;
1694
1695   /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1696      address size, but since we always allocate cleared storage it
1697      should be zero for other types of locations.  */
1698   if (a->dtprel != b->dtprel)
1699     return false;
1700
1701   return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1702           && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1703 }
1704
1705 /* Compare two complete location expressions for exact equality.  */
1706
1707 bool
1708 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1709 {
1710   while (1)
1711     {
1712       if (a == b)
1713         return true;
1714       if (a == NULL || b == NULL)
1715         return false;
1716       if (!loc_descr_equal_p_1 (a, b))
1717         return false;
1718
1719       a = a->dw_loc_next;
1720       b = b->dw_loc_next;
1721     }
1722 }
1723
1724
1725 /* Add a constant OFFSET to a location expression.  */
1726
1727 static void
1728 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
1729 {
1730   dw_loc_descr_ref loc;
1731   HOST_WIDE_INT *p;
1732
1733   gcc_assert (*list_head != NULL);
1734
1735   if (!offset)
1736     return;
1737
1738   /* Find the end of the chain.  */
1739   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1740     ;
1741
1742   p = NULL;
1743   if (loc->dw_loc_opc == DW_OP_fbreg
1744       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1745     p = &loc->dw_loc_oprnd1.v.val_int;
1746   else if (loc->dw_loc_opc == DW_OP_bregx)
1747     p = &loc->dw_loc_oprnd2.v.val_int;
1748
1749   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1750      offset.  Don't optimize if an signed integer overflow would happen.  */
1751   if (p != NULL
1752       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1753           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1754     *p += offset;
1755
1756   else if (offset > 0)
1757     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1758
1759   else
1760     {
1761       loc->dw_loc_next = int_loc_descriptor (-offset);
1762       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1763     }
1764 }
1765
1766 /* Add a constant OFFSET to a location list.  */
1767
1768 static void
1769 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
1770 {
1771   dw_loc_list_ref d;
1772   for (d = list_head; d != NULL; d = d->dw_loc_next)
1773     loc_descr_plus_const (&d->expr, offset);
1774 }
1775
1776 #define DWARF_REF_SIZE  \
1777   (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1778
1779 static unsigned long int get_base_type_offset (dw_die_ref);
1780
1781 /* Return the size of a location descriptor.  */
1782
1783 static unsigned long
1784 size_of_loc_descr (dw_loc_descr_ref loc)
1785 {
1786   unsigned long size = 1;
1787
1788   switch (loc->dw_loc_opc)
1789     {
1790     case DW_OP_addr:
1791       size += DWARF2_ADDR_SIZE;
1792       break;
1793     case DW_OP_const1u:
1794     case DW_OP_const1s:
1795       size += 1;
1796       break;
1797     case DW_OP_const2u:
1798     case DW_OP_const2s:
1799       size += 2;
1800       break;
1801     case DW_OP_const4u:
1802     case DW_OP_const4s:
1803       size += 4;
1804       break;
1805     case DW_OP_const8u:
1806     case DW_OP_const8s:
1807       size += 8;
1808       break;
1809     case DW_OP_constu:
1810       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1811       break;
1812     case DW_OP_consts:
1813       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1814       break;
1815     case DW_OP_pick:
1816       size += 1;
1817       break;
1818     case DW_OP_plus_uconst:
1819       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1820       break;
1821     case DW_OP_skip:
1822     case DW_OP_bra:
1823       size += 2;
1824       break;
1825     case DW_OP_breg0:
1826     case DW_OP_breg1:
1827     case DW_OP_breg2:
1828     case DW_OP_breg3:
1829     case DW_OP_breg4:
1830     case DW_OP_breg5:
1831     case DW_OP_breg6:
1832     case DW_OP_breg7:
1833     case DW_OP_breg8:
1834     case DW_OP_breg9:
1835     case DW_OP_breg10:
1836     case DW_OP_breg11:
1837     case DW_OP_breg12:
1838     case DW_OP_breg13:
1839     case DW_OP_breg14:
1840     case DW_OP_breg15:
1841     case DW_OP_breg16:
1842     case DW_OP_breg17:
1843     case DW_OP_breg18:
1844     case DW_OP_breg19:
1845     case DW_OP_breg20:
1846     case DW_OP_breg21:
1847     case DW_OP_breg22:
1848     case DW_OP_breg23:
1849     case DW_OP_breg24:
1850     case DW_OP_breg25:
1851     case DW_OP_breg26:
1852     case DW_OP_breg27:
1853     case DW_OP_breg28:
1854     case DW_OP_breg29:
1855     case DW_OP_breg30:
1856     case DW_OP_breg31:
1857       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1858       break;
1859     case DW_OP_regx:
1860       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1861       break;
1862     case DW_OP_fbreg:
1863       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1864       break;
1865     case DW_OP_bregx:
1866       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1867       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1868       break;
1869     case DW_OP_piece:
1870       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1871       break;
1872     case DW_OP_bit_piece:
1873       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1874       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1875       break;
1876     case DW_OP_deref_size:
1877     case DW_OP_xderef_size:
1878       size += 1;
1879       break;
1880     case DW_OP_call2:
1881       size += 2;
1882       break;
1883     case DW_OP_call4:
1884       size += 4;
1885       break;
1886     case DW_OP_call_ref:
1887       size += DWARF_REF_SIZE;
1888       break;
1889     case DW_OP_implicit_value:
1890       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1891               + loc->dw_loc_oprnd1.v.val_unsigned;
1892       break;
1893     case DW_OP_GNU_implicit_pointer:
1894       size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1895       break;
1896     case DW_OP_GNU_entry_value:
1897       {
1898         unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1899         size += size_of_uleb128 (op_size) + op_size;
1900         break;
1901       }
1902     case DW_OP_GNU_const_type:
1903       {
1904         unsigned long o
1905           = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1906         size += size_of_uleb128 (o) + 1;
1907         switch (loc->dw_loc_oprnd2.val_class)
1908           {
1909           case dw_val_class_vec:
1910             size += loc->dw_loc_oprnd2.v.val_vec.length
1911                     * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1912             break;
1913           case dw_val_class_const:
1914             size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1915             break;
1916           case dw_val_class_const_double:
1917             size += 2 * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1918             break;
1919           default:
1920             gcc_unreachable ();
1921           }
1922         break;
1923       }
1924     case DW_OP_GNU_regval_type:
1925       {
1926         unsigned long o
1927           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1928         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1929                 + size_of_uleb128 (o);
1930       }
1931       break;
1932     case DW_OP_GNU_deref_type:
1933       {
1934         unsigned long o
1935           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1936         size += 1 + size_of_uleb128 (o);
1937       }
1938       break;
1939     case DW_OP_GNU_convert:
1940     case DW_OP_GNU_reinterpret:
1941       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1942         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1943       else
1944         {
1945           unsigned long o
1946             = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1947           size += size_of_uleb128 (o);
1948         }
1949       break;
1950     case DW_OP_GNU_parameter_ref:
1951       size += 4;
1952       break;
1953     default:
1954       break;
1955     }
1956
1957   return size;
1958 }
1959
1960 /* Return the size of a series of location descriptors.  */
1961
1962 unsigned long
1963 size_of_locs (dw_loc_descr_ref loc)
1964 {
1965   dw_loc_descr_ref l;
1966   unsigned long size;
1967
1968   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1969      field, to avoid writing to a PCH file.  */
1970   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1971     {
1972       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1973         break;
1974       size += size_of_loc_descr (l);
1975     }
1976   if (! l)
1977     return size;
1978
1979   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1980     {
1981       l->dw_loc_addr = size;
1982       size += size_of_loc_descr (l);
1983     }
1984
1985   return size;
1986 }
1987
1988 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1989 static void get_ref_die_offset_label (char *, dw_die_ref);
1990 static unsigned long int get_ref_die_offset (dw_die_ref);
1991
1992 /* Output location description stack opcode's operands (if any).
1993    The for_eh_or_skip parameter controls whether register numbers are
1994    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1995    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1996    info).  This should be suppressed for the cases that have not been converted
1997    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
1998
1999 static void
2000 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
2001 {
2002   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2003   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2004
2005   switch (loc->dw_loc_opc)
2006     {
2007 #ifdef DWARF2_DEBUGGING_INFO
2008     case DW_OP_const2u:
2009     case DW_OP_const2s:
2010       dw2_asm_output_data (2, val1->v.val_int, NULL);
2011       break;
2012     case DW_OP_const4u:
2013       if (loc->dtprel)
2014         {
2015           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2016           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
2017                                                val1->v.val_addr);
2018           fputc ('\n', asm_out_file);
2019           break;
2020         }
2021       /* FALLTHRU */
2022     case DW_OP_const4s:
2023       dw2_asm_output_data (4, val1->v.val_int, NULL);
2024       break;
2025     case DW_OP_const8u:
2026       if (loc->dtprel)
2027         {
2028           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2029           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
2030                                                val1->v.val_addr);
2031           fputc ('\n', asm_out_file);
2032           break;
2033         }
2034       /* FALLTHRU */
2035     case DW_OP_const8s:
2036       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2037       dw2_asm_output_data (8, val1->v.val_int, NULL);
2038       break;
2039     case DW_OP_skip:
2040     case DW_OP_bra:
2041       {
2042         int offset;
2043
2044         gcc_assert (val1->val_class == dw_val_class_loc);
2045         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2046
2047         dw2_asm_output_data (2, offset, NULL);
2048       }
2049       break;
2050     case DW_OP_implicit_value:
2051       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2052       switch (val2->val_class)
2053         {
2054         case dw_val_class_const:
2055           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
2056           break;
2057         case dw_val_class_vec:
2058           {
2059             unsigned int elt_size = val2->v.val_vec.elt_size;
2060             unsigned int len = val2->v.val_vec.length;
2061             unsigned int i;
2062             unsigned char *p;
2063
2064             if (elt_size > sizeof (HOST_WIDE_INT))
2065               {
2066                 elt_size /= 2;
2067                 len *= 2;
2068               }
2069             for (i = 0, p = val2->v.val_vec.array;
2070                  i < len;
2071                  i++, p += elt_size)
2072               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2073                                    "fp or vector constant word %u", i);
2074           }
2075           break;
2076         case dw_val_class_const_double:
2077           {
2078             unsigned HOST_WIDE_INT first, second;
2079
2080             if (WORDS_BIG_ENDIAN)
2081               {
2082                 first = val2->v.val_double.high;
2083                 second = val2->v.val_double.low;
2084               }
2085             else
2086               {
2087                 first = val2->v.val_double.low;
2088                 second = val2->v.val_double.high;
2089               }
2090             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2091                                  first, NULL);
2092             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2093                                  second, NULL);
2094           }
2095           break;
2096         case dw_val_class_addr:
2097           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
2098           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
2099           break;
2100         default:
2101           gcc_unreachable ();
2102         }
2103       break;
2104 #else
2105     case DW_OP_const2u:
2106     case DW_OP_const2s:
2107     case DW_OP_const4u:
2108     case DW_OP_const4s:
2109     case DW_OP_const8u:
2110     case DW_OP_const8s:
2111     case DW_OP_skip:
2112     case DW_OP_bra:
2113     case DW_OP_implicit_value:
2114       /* We currently don't make any attempt to make sure these are
2115          aligned properly like we do for the main unwind info, so
2116          don't support emitting things larger than a byte if we're
2117          only doing unwinding.  */
2118       gcc_unreachable ();
2119 #endif
2120     case DW_OP_const1u:
2121     case DW_OP_const1s:
2122       dw2_asm_output_data (1, val1->v.val_int, NULL);
2123       break;
2124     case DW_OP_constu:
2125       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2126       break;
2127     case DW_OP_consts:
2128       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2129       break;
2130     case DW_OP_pick:
2131       dw2_asm_output_data (1, val1->v.val_int, NULL);
2132       break;
2133     case DW_OP_plus_uconst:
2134       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2135       break;
2136     case DW_OP_breg0:
2137     case DW_OP_breg1:
2138     case DW_OP_breg2:
2139     case DW_OP_breg3:
2140     case DW_OP_breg4:
2141     case DW_OP_breg5:
2142     case DW_OP_breg6:
2143     case DW_OP_breg7:
2144     case DW_OP_breg8:
2145     case DW_OP_breg9:
2146     case DW_OP_breg10:
2147     case DW_OP_breg11:
2148     case DW_OP_breg12:
2149     case DW_OP_breg13:
2150     case DW_OP_breg14:
2151     case DW_OP_breg15:
2152     case DW_OP_breg16:
2153     case DW_OP_breg17:
2154     case DW_OP_breg18:
2155     case DW_OP_breg19:
2156     case DW_OP_breg20:
2157     case DW_OP_breg21:
2158     case DW_OP_breg22:
2159     case DW_OP_breg23:
2160     case DW_OP_breg24:
2161     case DW_OP_breg25:
2162     case DW_OP_breg26:
2163     case DW_OP_breg27:
2164     case DW_OP_breg28:
2165     case DW_OP_breg29:
2166     case DW_OP_breg30:
2167     case DW_OP_breg31:
2168       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2169       break;
2170     case DW_OP_regx:
2171       {
2172         unsigned r = val1->v.val_unsigned;
2173         if (for_eh_or_skip >= 0)
2174           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2175         gcc_assert (size_of_uleb128 (r) 
2176                     == size_of_uleb128 (val1->v.val_unsigned));
2177         dw2_asm_output_data_uleb128 (r, NULL);  
2178       }
2179       break;
2180     case DW_OP_fbreg:
2181       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2182       break;
2183     case DW_OP_bregx:
2184       {
2185         unsigned r = val1->v.val_unsigned;
2186         if (for_eh_or_skip >= 0)
2187           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2188         gcc_assert (size_of_uleb128 (r) 
2189                     == size_of_uleb128 (val1->v.val_unsigned));
2190         dw2_asm_output_data_uleb128 (r, NULL);  
2191         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2192       }
2193       break;
2194     case DW_OP_piece:
2195       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2196       break;
2197     case DW_OP_bit_piece:
2198       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2199       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
2200       break;
2201     case DW_OP_deref_size:
2202     case DW_OP_xderef_size:
2203       dw2_asm_output_data (1, val1->v.val_int, NULL);
2204       break;
2205
2206     case DW_OP_addr:
2207       if (loc->dtprel)
2208         {
2209           if (targetm.asm_out.output_dwarf_dtprel)
2210             {
2211               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
2212                                                    DWARF2_ADDR_SIZE,
2213                                                    val1->v.val_addr);
2214               fputc ('\n', asm_out_file);
2215             }
2216           else
2217             gcc_unreachable ();
2218         }
2219       else
2220         {
2221 #ifdef DWARF2_DEBUGGING_INFO
2222           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2223 #else
2224           gcc_unreachable ();
2225 #endif
2226         }
2227       break;
2228
2229     case DW_OP_GNU_implicit_pointer:
2230       {
2231         char label[MAX_ARTIFICIAL_LABEL_BYTES
2232                    + HOST_BITS_PER_WIDE_INT / 2 + 2];
2233         gcc_assert (val1->val_class == dw_val_class_die_ref);
2234         get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2235         dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2236         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2237       }
2238       break;
2239
2240     case DW_OP_GNU_entry_value:
2241       dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2242       output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2243       break;
2244
2245     case DW_OP_GNU_const_type:
2246       {
2247         unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2248         gcc_assert (o);
2249         dw2_asm_output_data_uleb128 (o, NULL);
2250         switch (val2->val_class)
2251           {
2252           case dw_val_class_const:
2253             l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2254             dw2_asm_output_data (1, l, NULL);
2255             dw2_asm_output_data (l, val2->v.val_int, NULL);
2256             break;
2257           case dw_val_class_vec:
2258             {
2259               unsigned int elt_size = val2->v.val_vec.elt_size;
2260               unsigned int len = val2->v.val_vec.length;
2261               unsigned int i;
2262               unsigned char *p;
2263
2264               l = len * elt_size;
2265               dw2_asm_output_data (1, l, NULL);
2266               if (elt_size > sizeof (HOST_WIDE_INT))
2267                 {
2268                   elt_size /= 2;
2269                   len *= 2;
2270                 }
2271               for (i = 0, p = val2->v.val_vec.array;
2272                    i < len;
2273                    i++, p += elt_size)
2274                 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2275                                      "fp or vector constant word %u", i);
2276             }
2277             break;
2278           case dw_val_class_const_double:
2279             {
2280               unsigned HOST_WIDE_INT first, second;
2281               l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2282
2283               dw2_asm_output_data (1, 2 * l, NULL);
2284               if (WORDS_BIG_ENDIAN)
2285                 {
2286                   first = val2->v.val_double.high;
2287                   second = val2->v.val_double.low;
2288                 }
2289               else
2290                 {
2291                   first = val2->v.val_double.low;
2292                   second = val2->v.val_double.high;
2293                 }
2294               dw2_asm_output_data (l, first, NULL);
2295               dw2_asm_output_data (l, second, NULL);
2296             }
2297             break;
2298           default:
2299             gcc_unreachable ();
2300           }
2301       }
2302       break;
2303     case DW_OP_GNU_regval_type:
2304       {
2305         unsigned r = val1->v.val_unsigned;
2306         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2307         gcc_assert (o);
2308         if (for_eh_or_skip >= 0)
2309           {
2310             r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2311             gcc_assert (size_of_uleb128 (r)
2312                         == size_of_uleb128 (val1->v.val_unsigned));
2313           }
2314         dw2_asm_output_data_uleb128 (r, NULL);
2315         dw2_asm_output_data_uleb128 (o, NULL);
2316       }
2317       break;
2318     case DW_OP_GNU_deref_type:
2319       {
2320         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2321         gcc_assert (o);
2322         dw2_asm_output_data (1, val1->v.val_int, NULL);
2323         dw2_asm_output_data_uleb128 (o, NULL);
2324       }
2325       break;
2326     case DW_OP_GNU_convert:
2327     case DW_OP_GNU_reinterpret:
2328       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2329         dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2330       else
2331         {
2332           unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2333           gcc_assert (o);
2334           dw2_asm_output_data_uleb128 (o, NULL);
2335         }
2336       break;
2337
2338     case DW_OP_GNU_parameter_ref:
2339       {
2340         unsigned long o;
2341         gcc_assert (val1->val_class == dw_val_class_die_ref);
2342         o = get_ref_die_offset (val1->v.val_die_ref.die);
2343         dw2_asm_output_data (4, o, NULL);
2344       }
2345       break;
2346
2347     default:
2348       /* Other codes have no operands.  */
2349       break;
2350     }
2351 }
2352
2353 /* Output a sequence of location operations.  
2354    The for_eh_or_skip parameter controls whether register numbers are
2355    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2356    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2357    info).  This should be suppressed for the cases that have not been converted
2358    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
2359
2360 void
2361 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2362 {
2363   for (; loc != NULL; loc = loc->dw_loc_next)
2364     {
2365       enum dwarf_location_atom opc = loc->dw_loc_opc;
2366       /* Output the opcode.  */
2367       if (for_eh_or_skip >= 0 
2368           && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2369         {
2370           unsigned r = (opc - DW_OP_breg0);
2371           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2372           gcc_assert (r <= 31);
2373           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2374         }
2375       else if (for_eh_or_skip >= 0 
2376                && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2377         {
2378           unsigned r = (opc - DW_OP_reg0);
2379           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2380           gcc_assert (r <= 31);
2381           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2382         }
2383
2384       dw2_asm_output_data (1, opc,
2385                              "%s", dwarf_stack_op_name (opc));
2386
2387       /* Output the operand(s) (if any).  */
2388       output_loc_operands (loc, for_eh_or_skip);
2389     }
2390 }
2391
2392 /* Output location description stack opcode's operands (if any).
2393    The output is single bytes on a line, suitable for .cfi_escape.  */
2394
2395 static void
2396 output_loc_operands_raw (dw_loc_descr_ref loc)
2397 {
2398   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2399   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2400
2401   switch (loc->dw_loc_opc)
2402     {
2403     case DW_OP_addr:
2404     case DW_OP_implicit_value:
2405       /* We cannot output addresses in .cfi_escape, only bytes.  */
2406       gcc_unreachable ();
2407
2408     case DW_OP_const1u:
2409     case DW_OP_const1s:
2410     case DW_OP_pick:
2411     case DW_OP_deref_size:
2412     case DW_OP_xderef_size:
2413       fputc (',', asm_out_file);
2414       dw2_asm_output_data_raw (1, val1->v.val_int);
2415       break;
2416
2417     case DW_OP_const2u:
2418     case DW_OP_const2s:
2419       fputc (',', asm_out_file);
2420       dw2_asm_output_data_raw (2, val1->v.val_int);
2421       break;
2422
2423     case DW_OP_const4u:
2424     case DW_OP_const4s:
2425       fputc (',', asm_out_file);
2426       dw2_asm_output_data_raw (4, val1->v.val_int);
2427       break;
2428
2429     case DW_OP_const8u:
2430     case DW_OP_const8s:
2431       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2432       fputc (',', asm_out_file);
2433       dw2_asm_output_data_raw (8, val1->v.val_int);
2434       break;
2435
2436     case DW_OP_skip:
2437     case DW_OP_bra:
2438       {
2439         int offset;
2440
2441         gcc_assert (val1->val_class == dw_val_class_loc);
2442         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2443
2444         fputc (',', asm_out_file);
2445         dw2_asm_output_data_raw (2, offset);
2446       }
2447       break;
2448
2449     case DW_OP_regx:
2450       {
2451         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2452         gcc_assert (size_of_uleb128 (r) 
2453                     == size_of_uleb128 (val1->v.val_unsigned));
2454         fputc (',', asm_out_file);
2455         dw2_asm_output_data_uleb128_raw (r);
2456       }
2457       break;
2458       
2459     case DW_OP_constu:
2460     case DW_OP_plus_uconst:
2461     case DW_OP_piece:
2462       fputc (',', asm_out_file);
2463       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2464       break;
2465
2466     case DW_OP_bit_piece:
2467       fputc (',', asm_out_file);
2468       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2469       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2470       break;
2471
2472     case DW_OP_consts:
2473     case DW_OP_breg0:
2474     case DW_OP_breg1:
2475     case DW_OP_breg2:
2476     case DW_OP_breg3:
2477     case DW_OP_breg4:
2478     case DW_OP_breg5:
2479     case DW_OP_breg6:
2480     case DW_OP_breg7:
2481     case DW_OP_breg8:
2482     case DW_OP_breg9:
2483     case DW_OP_breg10:
2484     case DW_OP_breg11:
2485     case DW_OP_breg12:
2486     case DW_OP_breg13:
2487     case DW_OP_breg14:
2488     case DW_OP_breg15:
2489     case DW_OP_breg16:
2490     case DW_OP_breg17:
2491     case DW_OP_breg18:
2492     case DW_OP_breg19:
2493     case DW_OP_breg20:
2494     case DW_OP_breg21:
2495     case DW_OP_breg22:
2496     case DW_OP_breg23:
2497     case DW_OP_breg24:
2498     case DW_OP_breg25:
2499     case DW_OP_breg26:
2500     case DW_OP_breg27:
2501     case DW_OP_breg28:
2502     case DW_OP_breg29:
2503     case DW_OP_breg30:
2504     case DW_OP_breg31:
2505     case DW_OP_fbreg:
2506       fputc (',', asm_out_file);
2507       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2508       break;
2509
2510     case DW_OP_bregx:
2511       {
2512         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2513         gcc_assert (size_of_uleb128 (r) 
2514                     == size_of_uleb128 (val1->v.val_unsigned));
2515         fputc (',', asm_out_file);
2516         dw2_asm_output_data_uleb128_raw (r);
2517         fputc (',', asm_out_file);
2518         dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2519       }
2520       break;
2521
2522     case DW_OP_GNU_implicit_pointer:
2523     case DW_OP_GNU_entry_value:
2524     case DW_OP_GNU_const_type:
2525     case DW_OP_GNU_regval_type:
2526     case DW_OP_GNU_deref_type:
2527     case DW_OP_GNU_convert:
2528     case DW_OP_GNU_reinterpret:
2529     case DW_OP_GNU_parameter_ref:
2530       gcc_unreachable ();
2531       break;
2532
2533     default:
2534       /* Other codes have no operands.  */
2535       break;
2536     }
2537 }
2538
2539 void
2540 output_loc_sequence_raw (dw_loc_descr_ref loc)
2541 {
2542   while (1)
2543     {
2544       enum dwarf_location_atom opc = loc->dw_loc_opc;
2545       /* Output the opcode.  */
2546       if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2547         {
2548           unsigned r = (opc - DW_OP_breg0);
2549           r = DWARF2_FRAME_REG_OUT (r, 1);
2550           gcc_assert (r <= 31);
2551           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2552         }
2553       else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2554         {
2555           unsigned r = (opc - DW_OP_reg0);
2556           r = DWARF2_FRAME_REG_OUT (r, 1);
2557           gcc_assert (r <= 31);
2558           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2559         }
2560       /* Output the opcode.  */
2561       fprintf (asm_out_file, "%#x", opc);
2562       output_loc_operands_raw (loc);
2563
2564       if (!loc->dw_loc_next)
2565         break;
2566       loc = loc->dw_loc_next;
2567
2568       fputc (',', asm_out_file);
2569     }
2570 }
2571
2572 /* This function builds a dwarf location descriptor sequence from a
2573    dw_cfa_location, adding the given OFFSET to the result of the
2574    expression.  */
2575
2576 struct dw_loc_descr_struct *
2577 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
2578 {
2579   struct dw_loc_descr_struct *head, *tmp;
2580
2581   offset += cfa->offset;
2582
2583   if (cfa->indirect)
2584     {
2585       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2586       head->dw_loc_oprnd1.val_class = dw_val_class_const;
2587       tmp = new_loc_descr (DW_OP_deref, 0, 0);
2588       add_loc_descr (&head, tmp);
2589       if (offset != 0)
2590         {
2591           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
2592           add_loc_descr (&head, tmp);
2593         }
2594     }
2595   else
2596     head = new_reg_loc_descr (cfa->reg, offset);
2597
2598   return head;
2599 }
2600
2601 /* This function builds a dwarf location descriptor sequence for
2602    the address at OFFSET from the CFA when stack is aligned to
2603    ALIGNMENT byte.  */
2604
2605 struct dw_loc_descr_struct *
2606 build_cfa_aligned_loc (dw_cfa_location *cfa,
2607                        HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
2608 {
2609   struct dw_loc_descr_struct *head;
2610   unsigned int dwarf_fp
2611     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2612
2613   /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
2614   if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2615     {
2616       head = new_reg_loc_descr (dwarf_fp, 0);
2617       add_loc_descr (&head, int_loc_descriptor (alignment));
2618       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2619       loc_descr_plus_const (&head, offset);
2620     }
2621   else
2622     head = new_reg_loc_descr (dwarf_fp, offset);
2623   return head;
2624 }
2625 \f
2626 /* And now, the support for symbolic debugging information.  */
2627
2628 /* .debug_str support.  */
2629 static int output_indirect_string (void **, void *);
2630
2631 static void dwarf2out_init (const char *);
2632 static void dwarf2out_finish (const char *);
2633 static void dwarf2out_assembly_start (void);
2634 static void dwarf2out_define (unsigned int, const char *);
2635 static void dwarf2out_undef (unsigned int, const char *);
2636 static void dwarf2out_start_source_file (unsigned, const char *);
2637 static void dwarf2out_end_source_file (unsigned);
2638 static void dwarf2out_function_decl (tree);
2639 static void dwarf2out_begin_block (unsigned, unsigned);
2640 static void dwarf2out_end_block (unsigned, unsigned);
2641 static bool dwarf2out_ignore_block (const_tree);
2642 static void dwarf2out_global_decl (tree);
2643 static void dwarf2out_type_decl (tree, int);
2644 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
2645 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2646                                                  dw_die_ref);
2647 static void dwarf2out_abstract_function (tree);
2648 static void dwarf2out_var_location (rtx);
2649 static void dwarf2out_begin_function (tree);
2650 static void dwarf2out_set_name (tree, tree);
2651
2652 /* The debug hooks structure.  */
2653
2654 const struct gcc_debug_hooks dwarf2_debug_hooks =
2655 {
2656   dwarf2out_init,
2657   dwarf2out_finish,
2658   dwarf2out_assembly_start,
2659   dwarf2out_define,
2660   dwarf2out_undef,
2661   dwarf2out_start_source_file,
2662   dwarf2out_end_source_file,
2663   dwarf2out_begin_block,
2664   dwarf2out_end_block,
2665   dwarf2out_ignore_block,
2666   dwarf2out_source_line,
2667   dwarf2out_begin_prologue,
2668 #if VMS_DEBUGGING_INFO
2669   dwarf2out_vms_end_prologue,
2670   dwarf2out_vms_begin_epilogue,
2671 #else
2672   debug_nothing_int_charstar,
2673   debug_nothing_int_charstar,
2674 #endif
2675   dwarf2out_end_epilogue,
2676   dwarf2out_begin_function,
2677   debug_nothing_int,            /* end_function */
2678   dwarf2out_function_decl,      /* function_decl */
2679   dwarf2out_global_decl,
2680   dwarf2out_type_decl,          /* type_decl */
2681   dwarf2out_imported_module_or_decl,
2682   debug_nothing_tree,           /* deferred_inline_function */
2683   /* The DWARF 2 backend tries to reduce debugging bloat by not
2684      emitting the abstract description of inline functions until
2685      something tries to reference them.  */
2686   dwarf2out_abstract_function,  /* outlining_inline_function */
2687   debug_nothing_rtx,            /* label */
2688   debug_nothing_int,            /* handle_pch */
2689   dwarf2out_var_location,
2690   dwarf2out_switch_text_section,
2691   dwarf2out_set_name,
2692   1,                            /* start_end_main_source_file */
2693   TYPE_SYMTAB_IS_DIE            /* tree_type_symtab_field */
2694 };
2695 \f
2696 /* NOTE: In the comments in this file, many references are made to
2697    "Debugging Information Entries".  This term is abbreviated as `DIE'
2698    throughout the remainder of this file.  */
2699
2700 /* An internal representation of the DWARF output is built, and then
2701    walked to generate the DWARF debugging info.  The walk of the internal
2702    representation is done after the entire program has been compiled.
2703    The types below are used to describe the internal representation.  */
2704
2705 /* Whether to put type DIEs into their own section .debug_types instead
2706    of making them part of the .debug_info section.  Only supported for
2707    Dwarf V4 or higher and the user didn't disable them through
2708    -fno-debug-types-section.  It is more efficient to put them in a
2709    separate comdat sections since the linker will then be able to
2710    remove duplicates.  But not all tools support .debug_types sections
2711    yet.  */
2712
2713 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2714
2715 /* Various DIE's use offsets relative to the beginning of the
2716    .debug_info section to refer to each other.  */
2717
2718 typedef long int dw_offset;
2719
2720 /* Define typedefs here to avoid circular dependencies.  */
2721
2722 typedef struct dw_attr_struct *dw_attr_ref;
2723 typedef struct dw_line_info_struct *dw_line_info_ref;
2724 typedef struct pubname_struct *pubname_ref;
2725 typedef struct dw_ranges_struct *dw_ranges_ref;
2726 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
2727 typedef struct comdat_type_struct *comdat_type_node_ref;
2728
2729 /* The entries in the line_info table more-or-less mirror the opcodes
2730    that are used in the real dwarf line table.  Arrays of these entries
2731    are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2732    supported.  */
2733
2734 enum dw_line_info_opcode {
2735   /* Emit DW_LNE_set_address; the operand is the label index.  */
2736   LI_set_address,
2737
2738   /* Emit a row to the matrix with the given line.  This may be done
2739      via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2740      special opcodes.  */
2741   LI_set_line,
2742
2743   /* Emit a DW_LNS_set_file.  */
2744   LI_set_file,
2745
2746   /* Emit a DW_LNS_set_column.  */
2747   LI_set_column,
2748
2749   /* Emit a DW_LNS_negate_stmt; the operand is ignored.  */
2750   LI_negate_stmt,
2751
2752   /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored.  */
2753   LI_set_prologue_end,
2754   LI_set_epilogue_begin,
2755
2756   /* Emit a DW_LNE_set_discriminator.  */
2757   LI_set_discriminator
2758 };
2759
2760 typedef struct GTY(()) dw_line_info_struct {
2761   enum dw_line_info_opcode opcode;
2762   unsigned int val;
2763 } dw_line_info_entry;
2764
2765 DEF_VEC_O(dw_line_info_entry);
2766 DEF_VEC_ALLOC_O(dw_line_info_entry, gc);
2767
2768 typedef struct GTY(()) dw_line_info_table_struct {
2769   /* The label that marks the end of this section.  */
2770   const char *end_label;
2771
2772   /* The values for the last row of the matrix, as collected in the table.
2773      These are used to minimize the changes to the next row.  */
2774   unsigned int file_num;
2775   unsigned int line_num;
2776   unsigned int column_num;
2777   int discrim_num;
2778   bool is_stmt;
2779   bool in_use;
2780
2781   VEC(dw_line_info_entry, gc) *entries;
2782 } dw_line_info_table;
2783
2784 typedef dw_line_info_table *dw_line_info_table_p;
2785
2786 DEF_VEC_P(dw_line_info_table_p);
2787 DEF_VEC_ALLOC_P(dw_line_info_table_p, gc);
2788
2789 /* Each DIE attribute has a field specifying the attribute kind,
2790    a link to the next attribute in the chain, and an attribute value.
2791    Attributes are typically linked below the DIE they modify.  */
2792
2793 typedef struct GTY(()) dw_attr_struct {
2794   enum dwarf_attribute dw_attr;
2795   dw_val_node dw_attr_val;
2796 }
2797 dw_attr_node;
2798
2799 DEF_VEC_O(dw_attr_node);
2800 DEF_VEC_ALLOC_O(dw_attr_node,gc);
2801
2802 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
2803    The children of each node form a circular list linked by
2804    die_sib.  die_child points to the node *before* the "first" child node.  */
2805
2806 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
2807   union die_symbol_or_type_node
2808     {
2809       char * GTY ((tag ("0"))) die_symbol;
2810       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
2811     }
2812   GTY ((desc ("use_debug_types"))) die_id;
2813   VEC(dw_attr_node,gc) * die_attr;
2814   dw_die_ref die_parent;
2815   dw_die_ref die_child;
2816   dw_die_ref die_sib;
2817   dw_die_ref die_definition; /* ref from a specification to its definition */
2818   dw_offset die_offset;
2819   unsigned long die_abbrev;
2820   int die_mark;
2821   /* Die is used and must not be pruned as unused.  */
2822   int die_perennial_p;
2823   unsigned int decl_id;
2824   enum dwarf_tag die_tag;
2825 }
2826 die_node;
2827
2828 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
2829 #define FOR_EACH_CHILD(die, c, expr) do {       \
2830   c = die->die_child;                           \
2831   if (c) do {                                   \
2832     c = c->die_sib;                             \
2833     expr;                                       \
2834   } while (c != die->die_child);                \
2835 } while (0)
2836
2837 /* The pubname structure */
2838
2839 typedef struct GTY(()) pubname_struct {
2840   dw_die_ref die;
2841   const char *name;
2842 }
2843 pubname_entry;
2844
2845 DEF_VEC_O(pubname_entry);
2846 DEF_VEC_ALLOC_O(pubname_entry, gc);
2847
2848 struct GTY(()) dw_ranges_struct {
2849   /* If this is positive, it's a block number, otherwise it's a
2850      bitwise-negated index into dw_ranges_by_label.  */
2851   int num;
2852 };
2853
2854 /* A structure to hold a macinfo entry.  */
2855
2856 typedef struct GTY(()) macinfo_struct {
2857   unsigned char code;
2858   unsigned HOST_WIDE_INT lineno;
2859   const char *info;
2860 }
2861 macinfo_entry;
2862
2863 DEF_VEC_O(macinfo_entry);
2864 DEF_VEC_ALLOC_O(macinfo_entry, gc);
2865
2866 struct GTY(()) dw_ranges_by_label_struct {
2867   const char *begin;
2868   const char *end;
2869 };
2870
2871 /* The comdat type node structure.  */
2872 typedef struct GTY(()) comdat_type_struct
2873 {
2874   dw_die_ref root_die;
2875   dw_die_ref type_die;
2876   char signature[DWARF_TYPE_SIGNATURE_SIZE];
2877   struct comdat_type_struct *next;
2878 }
2879 comdat_type_node;
2880
2881 /* The limbo die list structure.  */
2882 typedef struct GTY(()) limbo_die_struct {
2883   dw_die_ref die;
2884   tree created_for;
2885   struct limbo_die_struct *next;
2886 }
2887 limbo_die_node;
2888
2889 typedef struct skeleton_chain_struct
2890 {
2891   dw_die_ref old_die;
2892   dw_die_ref new_die;
2893   struct skeleton_chain_struct *parent;
2894 }
2895 skeleton_chain_node;
2896
2897 /* Define a macro which returns nonzero for a TYPE_DECL which was
2898    implicitly generated for a type.
2899
2900    Note that, unlike the C front-end (which generates a NULL named
2901    TYPE_DECL node for each complete tagged type, each array type,
2902    and each function type node created) the C++ front-end generates
2903    a _named_ TYPE_DECL node for each tagged type node created.
2904    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
2905    generate a DW_TAG_typedef DIE for them.  Likewise with the Ada
2906    front-end, but for each type, tagged or not.  */
2907
2908 #define TYPE_DECL_IS_STUB(decl)                         \
2909   (DECL_NAME (decl) == NULL_TREE                        \
2910    || (DECL_ARTIFICIAL (decl)                           \
2911        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
2912            /* This is necessary for stub decls that     \
2913               appear in nested inline functions.  */    \
2914            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
2915                && (decl_ultimate_origin (decl)          \
2916                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
2917
2918 /* Information concerning the compilation unit's programming
2919    language, and compiler version.  */
2920
2921 /* Fixed size portion of the DWARF compilation unit header.  */
2922 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
2923   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
2924
2925 /* Fixed size portion of the DWARF comdat type unit header.  */
2926 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
2927   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
2928    + DWARF_OFFSET_SIZE)
2929
2930 /* Fixed size portion of public names info.  */
2931 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
2932
2933 /* Fixed size portion of the address range info.  */
2934 #define DWARF_ARANGES_HEADER_SIZE                                       \
2935   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
2936                 DWARF2_ADDR_SIZE * 2)                                   \
2937    - DWARF_INITIAL_LENGTH_SIZE)
2938
2939 /* Size of padding portion in the address range info.  It must be
2940    aligned to twice the pointer size.  */
2941 #define DWARF_ARANGES_PAD_SIZE \
2942   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2943                 DWARF2_ADDR_SIZE * 2)                              \
2944    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
2945
2946 /* Use assembler line directives if available.  */
2947 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
2948 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
2949 #define DWARF2_ASM_LINE_DEBUG_INFO 1
2950 #else
2951 #define DWARF2_ASM_LINE_DEBUG_INFO 0
2952 #endif
2953 #endif
2954
2955 /* Minimum line offset in a special line info. opcode.
2956    This value was chosen to give a reasonable range of values.  */
2957 #define DWARF_LINE_BASE  -10
2958
2959 /* First special line opcode - leave room for the standard opcodes.  */
2960 #define DWARF_LINE_OPCODE_BASE  ((int)DW_LNS_set_isa + 1)
2961
2962 /* Range of line offsets in a special line info. opcode.  */
2963 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
2964
2965 /* Flag that indicates the initial value of the is_stmt_start flag.
2966    In the present implementation, we do not mark any lines as
2967    the beginning of a source statement, because that information
2968    is not made available by the GCC front-end.  */
2969 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
2970
2971 /* Maximum number of operations per instruction bundle.  */
2972 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
2973 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
2974 #endif
2975
2976 /* This location is used by calc_die_sizes() to keep track
2977    the offset of each DIE within the .debug_info section.  */
2978 static unsigned long next_die_offset;
2979
2980 /* Record the root of the DIE's built for the current compilation unit.  */
2981 static GTY(()) dw_die_ref single_comp_unit_die;
2982
2983 /* A list of type DIEs that have been separated into comdat sections.  */
2984 static GTY(()) comdat_type_node *comdat_type_list;
2985
2986 /* A list of DIEs with a NULL parent waiting to be relocated.  */
2987 static GTY(()) limbo_die_node *limbo_die_list;
2988
2989 /* A list of DIEs for which we may have to generate
2990    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
2991 static GTY(()) limbo_die_node *deferred_asm_name;
2992
2993 /* Filenames referenced by this compilation unit.  */
2994 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
2995
2996 /* A hash table of references to DIE's that describe declarations.
2997    The key is a DECL_UID() which is a unique number identifying each decl.  */
2998 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
2999
3000 /* A hash table of references to DIE's that describe COMMON blocks.
3001    The key is DECL_UID() ^ die_parent.  */
3002 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
3003
3004 typedef struct GTY(()) die_arg_entry_struct {
3005     dw_die_ref die;
3006     tree arg;
3007 } die_arg_entry;
3008
3009 DEF_VEC_O(die_arg_entry);
3010 DEF_VEC_ALLOC_O(die_arg_entry,gc);
3011
3012 /* Node of the variable location list.  */
3013 struct GTY ((chain_next ("%h.next"))) var_loc_node {
3014   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
3015      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
3016      in mode of the EXPR_LIST node and first EXPR_LIST operand
3017      is either NOTE_INSN_VAR_LOCATION for a piece with a known
3018      location or NULL for padding.  For larger bitsizes,
3019      mode is 0 and first operand is a CONCAT with bitsize
3020      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
3021      NULL as second operand.  */
3022   rtx GTY (()) loc;
3023   const char * GTY (()) label;
3024   struct var_loc_node * GTY (()) next;
3025 };
3026
3027 /* Variable location list.  */
3028 struct GTY (()) var_loc_list_def {
3029   struct var_loc_node * GTY (()) first;
3030
3031   /* Pointer to the last but one or last element of the
3032      chained list.  If the list is empty, both first and
3033      last are NULL, if the list contains just one node
3034      or the last node certainly is not redundant, it points
3035      to the last node, otherwise points to the last but one.
3036      Do not mark it for GC because it is marked through the chain.  */
3037   struct var_loc_node * GTY ((skip ("%h"))) last;
3038
3039   /* Pointer to the last element before section switch,
3040      if NULL, either sections weren't switched or first
3041      is after section switch.  */
3042   struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
3043
3044   /* DECL_UID of the variable decl.  */
3045   unsigned int decl_id;
3046 };
3047 typedef struct var_loc_list_def var_loc_list;
3048
3049 /* Call argument location list.  */
3050 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
3051   rtx GTY (()) call_arg_loc_note;
3052   const char * GTY (()) label;
3053   tree GTY (()) block;
3054   bool tail_call_p;
3055   rtx GTY (()) symbol_ref;
3056   struct call_arg_loc_node * GTY (()) next;
3057 };
3058
3059
3060 /* Table of decl location linked lists.  */
3061 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3062
3063 /* Head and tail of call_arg_loc chain.  */
3064 static GTY (()) struct call_arg_loc_node *call_arg_locations;
3065 static struct call_arg_loc_node *call_arg_loc_last;
3066
3067 /* Number of call sites in the current function.  */
3068 static int call_site_count = -1;
3069 /* Number of tail call sites in the current function.  */
3070 static int tail_call_site_count = -1;
3071
3072 /* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine}
3073    DIEs.  */
3074 static VEC (dw_die_ref, heap) *block_map;
3075
3076 /* A cached location list.  */
3077 struct GTY (()) cached_dw_loc_list_def {
3078   /* The DECL_UID of the decl that this entry describes.  */
3079   unsigned int decl_id;
3080
3081   /* The cached location list.  */
3082   dw_loc_list_ref loc_list;
3083 };
3084 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
3085
3086 /* Table of cached location lists.  */
3087 static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
3088
3089 /* A pointer to the base of a list of references to DIE's that
3090    are uniquely identified by their tag, presence/absence of
3091    children DIE's, and list of attribute/value pairs.  */
3092 static GTY((length ("abbrev_die_table_allocated")))
3093   dw_die_ref *abbrev_die_table;
3094
3095 /* Number of elements currently allocated for abbrev_die_table.  */
3096 static GTY(()) unsigned abbrev_die_table_allocated;
3097
3098 /* Number of elements in type_die_table currently in use.  */
3099 static GTY(()) unsigned abbrev_die_table_in_use;
3100
3101 /* Size (in elements) of increments by which we may expand the
3102    abbrev_die_table.  */
3103 #define ABBREV_DIE_TABLE_INCREMENT 256
3104
3105 /* A global counter for generating labels for line number data.  */
3106 static unsigned int line_info_label_num;
3107
3108 /* The current table to which we should emit line number information
3109    for the current function.  This will be set up at the beginning of
3110    assembly for the function.  */
3111 static dw_line_info_table *cur_line_info_table;
3112
3113 /* The two default tables of line number info.  */
3114 static GTY(()) dw_line_info_table *text_section_line_info;
3115 static GTY(()) dw_line_info_table *cold_text_section_line_info;
3116
3117 /* The set of all non-default tables of line number info.  */
3118 static GTY(()) VEC (dw_line_info_table_p, gc) *separate_line_info;
3119
3120 /* A flag to tell pubnames/types export if there is an info section to
3121    refer to.  */
3122 static bool info_section_emitted;
3123
3124 /* A pointer to the base of a table that contains a list of publicly
3125    accessible names.  */
3126 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
3127
3128 /* A pointer to the base of a table that contains a list of publicly
3129    accessible types.  */
3130 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
3131
3132 /* A pointer to the base of a table that contains a list of macro
3133    defines/undefines (and file start/end markers).  */
3134 static GTY (()) VEC (macinfo_entry, gc) * macinfo_table;
3135
3136 /* Array of dies for which we should generate .debug_ranges info.  */
3137 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3138
3139 /* Number of elements currently allocated for ranges_table.  */
3140 static GTY(()) unsigned ranges_table_allocated;
3141
3142 /* Number of elements in ranges_table currently in use.  */
3143 static GTY(()) unsigned ranges_table_in_use;
3144
3145 /* Array of pairs of labels referenced in ranges_table.  */
3146 static GTY ((length ("ranges_by_label_allocated")))
3147      dw_ranges_by_label_ref ranges_by_label;
3148
3149 /* Number of elements currently allocated for ranges_by_label.  */
3150 static GTY(()) unsigned ranges_by_label_allocated;
3151
3152 /* Number of elements in ranges_by_label currently in use.  */
3153 static GTY(()) unsigned ranges_by_label_in_use;
3154
3155 /* Size (in elements) of increments by which we may expand the
3156    ranges_table.  */
3157 #define RANGES_TABLE_INCREMENT 64
3158
3159 /* Whether we have location lists that need outputting */
3160 static GTY(()) bool have_location_lists;
3161
3162 /* Unique label counter.  */
3163 static GTY(()) unsigned int loclabel_num;
3164
3165 /* Unique label counter for point-of-call tables.  */
3166 static GTY(()) unsigned int poc_label_num;
3167
3168 /* Record whether the function being analyzed contains inlined functions.  */
3169 static int current_function_has_inlines;
3170
3171 /* The last file entry emitted by maybe_emit_file().  */
3172 static GTY(()) struct dwarf_file_data * last_emitted_file;
3173
3174 /* Number of internal labels generated by gen_internal_sym().  */
3175 static GTY(()) int label_num;
3176
3177 /* Cached result of previous call to lookup_filename.  */
3178 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
3179
3180 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
3181
3182 /* Instances of generic types for which we need to generate debug
3183    info that describe their generic parameters and arguments. That
3184    generation needs to happen once all types are properly laid out so
3185    we do it at the end of compilation.  */
3186 static GTY(()) VEC(tree,gc) *generic_type_instances;
3187
3188 /* Offset from the "steady-state frame pointer" to the frame base,
3189    within the current function.  */
3190 static HOST_WIDE_INT frame_pointer_fb_offset;
3191 static bool frame_pointer_fb_offset_valid;
3192
3193 static VEC (dw_die_ref, heap) *base_types;
3194
3195 /* Forward declarations for functions defined in this file.  */
3196
3197 static int is_pseudo_reg (const_rtx);
3198 static tree type_main_variant (tree);
3199 static int is_tagged_type (const_tree);
3200 static const char *dwarf_tag_name (unsigned);
3201 static const char *dwarf_attr_name (unsigned);
3202 static const char *dwarf_form_name (unsigned);
3203 static tree decl_ultimate_origin (const_tree);
3204 static tree decl_class_context (tree);
3205 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3206 static inline enum dw_val_class AT_class (dw_attr_ref);
3207 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3208 static inline unsigned AT_flag (dw_attr_ref);
3209 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3210 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3211 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3212 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3213 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3214                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3215 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3216                                unsigned int, unsigned char *);
3217 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3218 static hashval_t debug_str_do_hash (const void *);
3219 static int debug_str_eq (const void *, const void *);
3220 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3221 static inline const char *AT_string (dw_attr_ref);
3222 static enum dwarf_form AT_string_form (dw_attr_ref);
3223 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3224 static void add_AT_specification (dw_die_ref, dw_die_ref);
3225 static inline dw_die_ref AT_ref (dw_attr_ref);
3226 static inline int AT_ref_external (dw_attr_ref);
3227 static inline void set_AT_ref_external (dw_attr_ref, int);
3228 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3229 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3230 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3231 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3232                              dw_loc_list_ref);
3233 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3234 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3235 static inline rtx AT_addr (dw_attr_ref);
3236 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3237 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3238 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3239 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3240                            unsigned HOST_WIDE_INT);
3241 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3242                                unsigned long);
3243 static inline const char *AT_lbl (dw_attr_ref);
3244 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3245 static const char *get_AT_low_pc (dw_die_ref);
3246 static const char *get_AT_hi_pc (dw_die_ref);
3247 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3248 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3249 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3250 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3251 static bool is_cxx (void);
3252 static bool is_fortran (void);
3253 static bool is_ada (void);
3254 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3255 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3256 static void add_child_die (dw_die_ref, dw_die_ref);
3257 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3258 static dw_die_ref lookup_type_die (tree);
3259 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3260 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3261 static void equate_type_number_to_die (tree, dw_die_ref);
3262 static hashval_t decl_die_table_hash (const void *);
3263 static int decl_die_table_eq (const void *, const void *);
3264 static dw_die_ref lookup_decl_die (tree);
3265 static hashval_t common_block_die_table_hash (const void *);
3266 static int common_block_die_table_eq (const void *, const void *);
3267 static hashval_t decl_loc_table_hash (const void *);
3268 static int decl_loc_table_eq (const void *, const void *);
3269 static var_loc_list *lookup_decl_loc (const_tree);
3270 static void equate_decl_number_to_die (tree, dw_die_ref);
3271 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3272 static void print_spaces (FILE *);
3273 static void print_die (dw_die_ref, FILE *);
3274 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3275 static dw_die_ref pop_compile_unit (dw_die_ref);
3276 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3277 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3278 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3279 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3280 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3281 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3282 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
3283                                    struct md5_ctx *, int *);
3284 struct checksum_attributes;
3285 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3286 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3287 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3288 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3289 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3290 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3291 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3292 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3293 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3294 static void compute_section_prefix (dw_die_ref);
3295 static int is_type_die (dw_die_ref);
3296 static int is_comdat_die (dw_die_ref);
3297 static int is_symbol_die (dw_die_ref);
3298 static void assign_symbol_names (dw_die_ref);
3299 static void break_out_includes (dw_die_ref);
3300 static int is_declaration_die (dw_die_ref);
3301 static int should_move_die_to_comdat (dw_die_ref);
3302 static dw_die_ref clone_as_declaration (dw_die_ref);
3303 static dw_die_ref clone_die (dw_die_ref);
3304 static dw_die_ref clone_tree (dw_die_ref);
3305 static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref);
3306 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3307 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3308 static dw_die_ref generate_skeleton (dw_die_ref);
3309 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3310                                                          dw_die_ref,
3311                                                          dw_die_ref);
3312 static void break_out_comdat_types (dw_die_ref);
3313 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
3314 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
3315 static void copy_decls_for_unworthy_types (dw_die_ref);
3316
3317 static hashval_t htab_cu_hash (const void *);
3318 static int htab_cu_eq (const void *, const void *);
3319 static void htab_cu_del (void *);
3320 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
3321 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
3322 static void add_sibling_attributes (dw_die_ref);
3323 static void build_abbrev_table (dw_die_ref);
3324 static void output_location_lists (dw_die_ref);
3325 static int constant_size (unsigned HOST_WIDE_INT);
3326 static unsigned long size_of_die (dw_die_ref);
3327 static void calc_die_sizes (dw_die_ref);
3328 static void calc_base_type_die_sizes (void);
3329 static void mark_dies (dw_die_ref);
3330 static void unmark_dies (dw_die_ref);
3331 static void unmark_all_dies (dw_die_ref);
3332 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
3333 static unsigned long size_of_aranges (void);
3334 static enum dwarf_form value_format (dw_attr_ref);
3335 static void output_value_format (dw_attr_ref);
3336 static void output_abbrev_section (void);
3337 static void output_die_symbol (dw_die_ref);
3338 static void output_die (dw_die_ref);
3339 static void output_compilation_unit_header (void);
3340 static void output_comp_unit (dw_die_ref, int);
3341 static void output_comdat_type_unit (comdat_type_node *);
3342 static const char *dwarf2_name (tree, int);
3343 static void add_pubname (tree, dw_die_ref);
3344 static void add_pubname_string (const char *, dw_die_ref);
3345 static void add_pubtype (tree, dw_die_ref);
3346 static void output_pubnames (VEC (pubname_entry,gc) *);
3347 static void output_aranges (unsigned long);
3348 static unsigned int add_ranges_num (int);
3349 static unsigned int add_ranges (const_tree);
3350 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3351                                   bool *);
3352 static void output_ranges (void);
3353 static dw_line_info_table *new_line_info_table (void);
3354 static void output_line_info (void);
3355 static void output_file_names (void);
3356 static dw_die_ref base_type_die (tree);
3357 static int is_base_type (tree);
3358 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
3359 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
3360 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3361 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3362 static int type_is_enum (const_tree);
3363 static unsigned int dbx_reg_number (const_rtx);
3364 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3365 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3366 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3367                                                 enum var_init_status);
3368 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3369                                                      enum var_init_status);
3370 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3371                                          enum var_init_status);
3372 static int is_based_loc (const_rtx);
3373 static int resolve_one_addr (rtx *, void *);
3374 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3375                                                enum var_init_status);
3376 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
3377                                         enum var_init_status);
3378 static dw_loc_list_ref loc_list_from_tree (tree, int);
3379 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
3380 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3381 static tree field_type (const_tree);
3382 static unsigned int simple_type_align_in_bits (const_tree);
3383 static unsigned int simple_decl_align_in_bits (const_tree);
3384 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3385 static HOST_WIDE_INT field_byte_offset (const_tree);
3386 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3387                                          dw_loc_list_ref);
3388 static void add_data_member_location_attribute (dw_die_ref, tree);
3389 static bool add_const_value_attribute (dw_die_ref, rtx);
3390 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3391 static void insert_double (double_int, unsigned char *);
3392 static void insert_float (const_rtx, unsigned char *);
3393 static rtx rtl_for_decl_location (tree);
3394 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
3395                                                    enum dwarf_attribute);
3396 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3397 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3398 static void add_name_attribute (dw_die_ref, const char *);
3399 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3400 static void add_comp_dir_attribute (dw_die_ref);
3401 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
3402 static void add_subscript_info (dw_die_ref, tree, bool);
3403 static void add_byte_size_attribute (dw_die_ref, tree);
3404 static void add_bit_offset_attribute (dw_die_ref, tree);
3405 static void add_bit_size_attribute (dw_die_ref, tree);
3406 static void add_prototyped_attribute (dw_die_ref, tree);
3407 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3408 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3409 static void add_src_coords_attributes (dw_die_ref, tree);
3410 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3411 static void push_decl_scope (tree);
3412 static void pop_decl_scope (void);
3413 static dw_die_ref scope_die_for (tree, dw_die_ref);
3414 static inline int local_scope_p (dw_die_ref);
3415 static inline int class_scope_p (dw_die_ref);
3416 static inline int class_or_namespace_scope_p (dw_die_ref);
3417 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
3418 static void add_calling_convention_attribute (dw_die_ref, tree);
3419 static const char *type_tag (const_tree);
3420 static tree member_declared_type (const_tree);
3421 #if 0
3422 static const char *decl_start_label (tree);
3423 #endif
3424 static void gen_array_type_die (tree, dw_die_ref);
3425 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3426 #if 0
3427 static void gen_entry_point_die (tree, dw_die_ref);
3428 #endif
3429 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3430 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3431 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
3432 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3433 static void gen_formal_types_die (tree, dw_die_ref);
3434 static void gen_subprogram_die (tree, dw_die_ref);
3435 static void gen_variable_die (tree, tree, dw_die_ref);
3436 static void gen_const_die (tree, dw_die_ref);
3437 static void gen_label_die (tree, dw_die_ref);
3438 static void gen_lexical_block_die (tree, dw_die_ref, int);
3439 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
3440 static void gen_field_die (tree, dw_die_ref);
3441 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3442 static dw_die_ref gen_compile_unit_die (const char *);
3443 static void gen_inheritance_die (tree, tree, dw_die_ref);
3444 static void gen_member_die (tree, dw_die_ref);
3445 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3446                                                 enum debug_info_usage);
3447 static void gen_subroutine_type_die (tree, dw_die_ref);
3448 static void gen_typedef_die (tree, dw_die_ref);
3449 static void gen_type_die (tree, dw_die_ref);
3450 static void gen_block_die (tree, dw_die_ref, int);
3451 static void decls_for_scope (tree, dw_die_ref, int);
3452 static inline int is_redundant_typedef (const_tree);
3453 static bool is_naming_typedef_decl (const_tree);
3454 static inline dw_die_ref get_context_die (tree);
3455 static void gen_namespace_die (tree, dw_die_ref);
3456 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref);
3457 static dw_die_ref force_decl_die (tree);
3458 static dw_die_ref force_type_die (tree);
3459 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3460 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3461 static struct dwarf_file_data * lookup_filename (const char *);
3462 static void retry_incomplete_types (void);
3463 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3464 static void gen_generic_params_dies (tree);
3465 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3466 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3467 static void splice_child_die (dw_die_ref, dw_die_ref);
3468 static int file_info_cmp (const void *, const void *);
3469 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3470                                      const char *, const char *);
3471 static void output_loc_list (dw_loc_list_ref);
3472 static char *gen_internal_sym (const char *);
3473
3474 static void prune_unmark_dies (dw_die_ref);
3475 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3476 static void prune_unused_types_mark (dw_die_ref, int);
3477 static void prune_unused_types_walk (dw_die_ref);
3478 static void prune_unused_types_walk_attribs (dw_die_ref);
3479 static void prune_unused_types_prune (dw_die_ref);
3480 static void prune_unused_types (void);
3481 static int maybe_emit_file (struct dwarf_file_data *fd);
3482 static inline const char *AT_vms_delta1 (dw_attr_ref);
3483 static inline const char *AT_vms_delta2 (dw_attr_ref);
3484 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3485                                      const char *, const char *);
3486 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3487 static void gen_remaining_tmpl_value_param_die_attribute (void);
3488 static bool generic_type_p (tree);
3489 static void schedule_generic_params_dies_gen (tree t);
3490 static void gen_scheduled_generic_parms_dies (void);
3491
3492 /* Section names used to hold DWARF debugging information.  */
3493 #ifndef DEBUG_INFO_SECTION
3494 #define DEBUG_INFO_SECTION      ".debug_info"
3495 #endif
3496 #ifndef DEBUG_ABBREV_SECTION
3497 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
3498 #endif
3499 #ifndef DEBUG_ARANGES_SECTION
3500 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
3501 #endif
3502 #ifndef DEBUG_MACINFO_SECTION
3503 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
3504 #endif
3505 #ifndef DEBUG_MACRO_SECTION
3506 #define DEBUG_MACRO_SECTION     ".debug_macro"
3507 #endif
3508 #ifndef DEBUG_LINE_SECTION
3509 #define DEBUG_LINE_SECTION      ".debug_line"
3510 #endif
3511 #ifndef DEBUG_LOC_SECTION
3512 #define DEBUG_LOC_SECTION       ".debug_loc"
3513 #endif
3514 #ifndef DEBUG_PUBNAMES_SECTION
3515 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
3516 #endif
3517 #ifndef DEBUG_PUBTYPES_SECTION
3518 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
3519 #endif
3520 #ifndef DEBUG_STR_SECTION
3521 #define DEBUG_STR_SECTION       ".debug_str"
3522 #endif
3523 #ifndef DEBUG_RANGES_SECTION
3524 #define DEBUG_RANGES_SECTION    ".debug_ranges"
3525 #endif
3526
3527 /* Standard ELF section names for compiled code and data.  */
3528 #ifndef TEXT_SECTION_NAME
3529 #define TEXT_SECTION_NAME       ".text"
3530 #endif
3531
3532 /* Section flags for .debug_str section.  */
3533 #define DEBUG_STR_SECTION_FLAGS \
3534   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
3535    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
3536    : SECTION_DEBUG)
3537
3538 /* Labels we insert at beginning sections we can reference instead of
3539    the section names themselves.  */
3540
3541 #ifndef TEXT_SECTION_LABEL
3542 #define TEXT_SECTION_LABEL              "Ltext"
3543 #endif
3544 #ifndef COLD_TEXT_SECTION_LABEL
3545 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
3546 #endif
3547 #ifndef DEBUG_LINE_SECTION_LABEL
3548 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
3549 #endif
3550 #ifndef DEBUG_INFO_SECTION_LABEL
3551 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
3552 #endif
3553 #ifndef DEBUG_ABBREV_SECTION_LABEL
3554 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
3555 #endif
3556 #ifndef DEBUG_LOC_SECTION_LABEL
3557 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
3558 #endif
3559 #ifndef DEBUG_RANGES_SECTION_LABEL
3560 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
3561 #endif
3562 #ifndef DEBUG_MACINFO_SECTION_LABEL
3563 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
3564 #endif
3565 #ifndef DEBUG_MACRO_SECTION_LABEL
3566 #define DEBUG_MACRO_SECTION_LABEL       "Ldebug_macro"
3567 #endif
3568
3569
3570 /* Definitions of defaults for formats and names of various special
3571    (artificial) labels which may be generated within this file (when the -g
3572    options is used and DWARF2_DEBUGGING_INFO is in effect.
3573    If necessary, these may be overridden from within the tm.h file, but
3574    typically, overriding these defaults is unnecessary.  */
3575
3576 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3577 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3578 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3579 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3580 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3581 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3582 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3583 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3584 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3585 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3586
3587 #ifndef TEXT_END_LABEL
3588 #define TEXT_END_LABEL          "Letext"
3589 #endif
3590 #ifndef COLD_END_LABEL
3591 #define COLD_END_LABEL          "Letext_cold"
3592 #endif
3593 #ifndef BLOCK_BEGIN_LABEL
3594 #define BLOCK_BEGIN_LABEL       "LBB"
3595 #endif
3596 #ifndef BLOCK_END_LABEL
3597 #define BLOCK_END_LABEL         "LBE"
3598 #endif
3599 #ifndef LINE_CODE_LABEL
3600 #define LINE_CODE_LABEL         "LM"
3601 #endif
3602
3603 \f
3604 /* Return the root of the DIE's built for the current compilation unit.  */
3605 static dw_die_ref
3606 comp_unit_die (void)
3607 {
3608   if (!single_comp_unit_die)
3609     single_comp_unit_die = gen_compile_unit_die (NULL);
3610   return single_comp_unit_die;
3611 }
3612
3613 /* We allow a language front-end to designate a function that is to be
3614    called to "demangle" any name before it is put into a DIE.  */
3615
3616 static const char *(*demangle_name_func) (const char *);
3617
3618 void
3619 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3620 {
3621   demangle_name_func = func;
3622 }
3623
3624 /* Test if rtl node points to a pseudo register.  */
3625
3626 static inline int
3627 is_pseudo_reg (const_rtx rtl)
3628 {
3629   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3630           || (GET_CODE (rtl) == SUBREG
3631               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3632 }
3633
3634 /* Return a reference to a type, with its const and volatile qualifiers
3635    removed.  */
3636
3637 static inline tree
3638 type_main_variant (tree type)
3639 {
3640   type = TYPE_MAIN_VARIANT (type);
3641
3642   /* ??? There really should be only one main variant among any group of
3643      variants of a given type (and all of the MAIN_VARIANT values for all
3644      members of the group should point to that one type) but sometimes the C
3645      front-end messes this up for array types, so we work around that bug
3646      here.  */
3647   if (TREE_CODE (type) == ARRAY_TYPE)
3648     while (type != TYPE_MAIN_VARIANT (type))
3649       type = TYPE_MAIN_VARIANT (type);
3650
3651   return type;
3652 }
3653
3654 /* Return nonzero if the given type node represents a tagged type.  */
3655
3656 static inline int
3657 is_tagged_type (const_tree type)
3658 {
3659   enum tree_code code = TREE_CODE (type);
3660
3661   return (code == RECORD_TYPE || code == UNION_TYPE
3662           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3663 }
3664
3665 /* Set label to debug_info_section_label + die_offset of a DIE reference.  */
3666
3667 static void
3668 get_ref_die_offset_label (char *label, dw_die_ref ref)
3669 {
3670   sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3671 }
3672
3673 /* Return die_offset of a DIE reference to a base type.  */
3674
3675 static unsigned long int
3676 get_base_type_offset (dw_die_ref ref)
3677 {
3678   if (ref->die_offset)
3679     return ref->die_offset;
3680   if (comp_unit_die ()->die_abbrev)
3681     {
3682       calc_base_type_die_sizes ();
3683       gcc_assert (ref->die_offset);
3684     }
3685   return ref->die_offset;
3686 }
3687
3688 /* Return die_offset of a DIE reference other than base type.  */
3689
3690 static unsigned long int
3691 get_ref_die_offset (dw_die_ref ref)
3692 {
3693   gcc_assert (ref->die_offset);
3694   return ref->die_offset;
3695 }
3696
3697 /* Convert a DIE tag into its string name.  */
3698
3699 static const char *
3700 dwarf_tag_name (unsigned int tag)
3701 {
3702   switch (tag)
3703     {
3704     case DW_TAG_padding:
3705       return "DW_TAG_padding";
3706     case DW_TAG_array_type:
3707       return "DW_TAG_array_type";
3708     case DW_TAG_class_type:
3709       return "DW_TAG_class_type";
3710     case DW_TAG_entry_point:
3711       return "DW_TAG_entry_point";
3712     case DW_TAG_enumeration_type:
3713       return "DW_TAG_enumeration_type";
3714     case DW_TAG_formal_parameter:
3715       return "DW_TAG_formal_parameter";
3716     case DW_TAG_imported_declaration:
3717       return "DW_TAG_imported_declaration";
3718     case DW_TAG_label:
3719       return "DW_TAG_label";
3720     case DW_TAG_lexical_block:
3721       return "DW_TAG_lexical_block";
3722     case DW_TAG_member:
3723       return "DW_TAG_member";
3724     case DW_TAG_pointer_type:
3725       return "DW_TAG_pointer_type";
3726     case DW_TAG_reference_type:
3727       return "DW_TAG_reference_type";
3728     case DW_TAG_compile_unit:
3729       return "DW_TAG_compile_unit";
3730     case DW_TAG_string_type:
3731       return "DW_TAG_string_type";
3732     case DW_TAG_structure_type:
3733       return "DW_TAG_structure_type";
3734     case DW_TAG_subroutine_type:
3735       return "DW_TAG_subroutine_type";
3736     case DW_TAG_typedef:
3737       return "DW_TAG_typedef";
3738     case DW_TAG_union_type:
3739       return "DW_TAG_union_type";
3740     case DW_TAG_unspecified_parameters:
3741       return "DW_TAG_unspecified_parameters";
3742     case DW_TAG_variant:
3743       return "DW_TAG_variant";
3744     case DW_TAG_common_block:
3745       return "DW_TAG_common_block";
3746     case DW_TAG_common_inclusion:
3747       return "DW_TAG_common_inclusion";
3748     case DW_TAG_inheritance:
3749       return "DW_TAG_inheritance";
3750     case DW_TAG_inlined_subroutine:
3751       return "DW_TAG_inlined_subroutine";
3752     case DW_TAG_module:
3753       return "DW_TAG_module";
3754     case DW_TAG_ptr_to_member_type:
3755       return "DW_TAG_ptr_to_member_type";
3756     case DW_TAG_set_type:
3757       return "DW_TAG_set_type";
3758     case DW_TAG_subrange_type:
3759       return "DW_TAG_subrange_type";
3760     case DW_TAG_with_stmt:
3761       return "DW_TAG_with_stmt";
3762     case DW_TAG_access_declaration:
3763       return "DW_TAG_access_declaration";
3764     case DW_TAG_base_type:
3765       return "DW_TAG_base_type";
3766     case DW_TAG_catch_block:
3767       return "DW_TAG_catch_block";
3768     case DW_TAG_const_type:
3769       return "DW_TAG_const_type";
3770     case DW_TAG_constant:
3771       return "DW_TAG_constant";
3772     case DW_TAG_enumerator:
3773       return "DW_TAG_enumerator";
3774     case DW_TAG_file_type:
3775       return "DW_TAG_file_type";
3776     case DW_TAG_friend:
3777       return "DW_TAG_friend";
3778     case DW_TAG_namelist:
3779       return "DW_TAG_namelist";
3780     case DW_TAG_namelist_item:
3781       return "DW_TAG_namelist_item";
3782     case DW_TAG_packed_type:
3783       return "DW_TAG_packed_type";
3784     case DW_TAG_subprogram:
3785       return "DW_TAG_subprogram";
3786     case DW_TAG_template_type_param:
3787       return "DW_TAG_template_type_param";
3788     case DW_TAG_template_value_param:
3789       return "DW_TAG_template_value_param";
3790     case DW_TAG_thrown_type:
3791       return "DW_TAG_thrown_type";
3792     case DW_TAG_try_block:
3793       return "DW_TAG_try_block";
3794     case DW_TAG_variant_part:
3795       return "DW_TAG_variant_part";
3796     case DW_TAG_variable:
3797       return "DW_TAG_variable";
3798     case DW_TAG_volatile_type:
3799       return "DW_TAG_volatile_type";
3800     case DW_TAG_dwarf_procedure:
3801       return "DW_TAG_dwarf_procedure";
3802     case DW_TAG_restrict_type:
3803       return "DW_TAG_restrict_type";
3804     case DW_TAG_interface_type:
3805       return "DW_TAG_interface_type";
3806     case DW_TAG_namespace:
3807       return "DW_TAG_namespace";
3808     case DW_TAG_imported_module:
3809       return "DW_TAG_imported_module";
3810     case DW_TAG_unspecified_type:
3811       return "DW_TAG_unspecified_type";
3812     case DW_TAG_partial_unit:
3813       return "DW_TAG_partial_unit";
3814     case DW_TAG_imported_unit:
3815       return "DW_TAG_imported_unit";
3816     case DW_TAG_condition:
3817       return "DW_TAG_condition";
3818     case DW_TAG_shared_type:
3819       return "DW_TAG_shared_type";
3820     case DW_TAG_type_unit:
3821       return "DW_TAG_type_unit";
3822     case DW_TAG_rvalue_reference_type:
3823       return "DW_TAG_rvalue_reference_type";
3824     case DW_TAG_template_alias:
3825       return "DW_TAG_template_alias";
3826     case DW_TAG_GNU_template_parameter_pack:
3827       return "DW_TAG_GNU_template_parameter_pack";
3828     case DW_TAG_GNU_formal_parameter_pack:
3829       return "DW_TAG_GNU_formal_parameter_pack";
3830     case DW_TAG_MIPS_loop:
3831       return "DW_TAG_MIPS_loop";
3832     case DW_TAG_format_label:
3833       return "DW_TAG_format_label";
3834     case DW_TAG_function_template:
3835       return "DW_TAG_function_template";
3836     case DW_TAG_class_template:
3837       return "DW_TAG_class_template";
3838     case DW_TAG_GNU_BINCL:
3839       return "DW_TAG_GNU_BINCL";
3840     case DW_TAG_GNU_EINCL:
3841       return "DW_TAG_GNU_EINCL";
3842     case DW_TAG_GNU_template_template_param:
3843       return "DW_TAG_GNU_template_template_param";
3844     case DW_TAG_GNU_call_site:
3845       return "DW_TAG_GNU_call_site";
3846     case DW_TAG_GNU_call_site_parameter:
3847       return "DW_TAG_GNU_call_site_parameter";
3848     default:
3849       return "DW_TAG_<unknown>";
3850     }
3851 }
3852
3853 /* Convert a DWARF attribute code into its string name.  */
3854
3855 static const char *
3856 dwarf_attr_name (unsigned int attr)
3857 {
3858   switch (attr)
3859     {
3860     case DW_AT_sibling:
3861       return "DW_AT_sibling";
3862     case DW_AT_location:
3863       return "DW_AT_location";
3864     case DW_AT_name:
3865       return "DW_AT_name";
3866     case DW_AT_ordering:
3867       return "DW_AT_ordering";
3868     case DW_AT_subscr_data:
3869       return "DW_AT_subscr_data";
3870     case DW_AT_byte_size:
3871       return "DW_AT_byte_size";
3872     case DW_AT_bit_offset:
3873       return "DW_AT_bit_offset";
3874     case DW_AT_bit_size:
3875       return "DW_AT_bit_size";
3876     case DW_AT_element_list:
3877       return "DW_AT_element_list";
3878     case DW_AT_stmt_list:
3879       return "DW_AT_stmt_list";
3880     case DW_AT_low_pc:
3881       return "DW_AT_low_pc";
3882     case DW_AT_high_pc:
3883       return "DW_AT_high_pc";
3884     case DW_AT_language:
3885       return "DW_AT_language";
3886     case DW_AT_member:
3887       return "DW_AT_member";
3888     case DW_AT_discr:
3889       return "DW_AT_discr";
3890     case DW_AT_discr_value:
3891       return "DW_AT_discr_value";
3892     case DW_AT_visibility:
3893       return "DW_AT_visibility";
3894     case DW_AT_import:
3895       return "DW_AT_import";
3896     case DW_AT_string_length:
3897       return "DW_AT_string_length";
3898     case DW_AT_common_reference:
3899       return "DW_AT_common_reference";
3900     case DW_AT_comp_dir:
3901       return "DW_AT_comp_dir";
3902     case DW_AT_const_value:
3903       return "DW_AT_const_value";
3904     case DW_AT_containing_type:
3905       return "DW_AT_containing_type";
3906     case DW_AT_default_value:
3907       return "DW_AT_default_value";
3908     case DW_AT_inline:
3909       return "DW_AT_inline";
3910     case DW_AT_is_optional:
3911       return "DW_AT_is_optional";
3912     case DW_AT_lower_bound:
3913       return "DW_AT_lower_bound";
3914     case DW_AT_producer:
3915       return "DW_AT_producer";
3916     case DW_AT_prototyped:
3917       return "DW_AT_prototyped";
3918     case DW_AT_return_addr:
3919       return "DW_AT_return_addr";
3920     case DW_AT_start_scope:
3921       return "DW_AT_start_scope";
3922     case DW_AT_bit_stride:
3923       return "DW_AT_bit_stride";
3924     case DW_AT_upper_bound:
3925       return "DW_AT_upper_bound";
3926     case DW_AT_abstract_origin:
3927       return "DW_AT_abstract_origin";
3928     case DW_AT_accessibility:
3929       return "DW_AT_accessibility";
3930     case DW_AT_address_class:
3931       return "DW_AT_address_class";
3932     case DW_AT_artificial:
3933       return "DW_AT_artificial";
3934     case DW_AT_base_types:
3935       return "DW_AT_base_types";
3936     case DW_AT_calling_convention:
3937       return "DW_AT_calling_convention";
3938     case DW_AT_count:
3939       return "DW_AT_count";
3940     case DW_AT_data_member_location:
3941       return "DW_AT_data_member_location";
3942     case DW_AT_decl_column:
3943       return "DW_AT_decl_column";
3944     case DW_AT_decl_file:
3945       return "DW_AT_decl_file";
3946     case DW_AT_decl_line:
3947       return "DW_AT_decl_line";
3948     case DW_AT_declaration:
3949       return "DW_AT_declaration";
3950     case DW_AT_discr_list:
3951       return "DW_AT_discr_list";
3952     case DW_AT_encoding:
3953       return "DW_AT_encoding";
3954     case DW_AT_external:
3955       return "DW_AT_external";
3956     case DW_AT_explicit:
3957       return "DW_AT_explicit";
3958     case DW_AT_frame_base:
3959       return "DW_AT_frame_base";
3960     case DW_AT_friend:
3961       return "DW_AT_friend";
3962     case DW_AT_identifier_case:
3963       return "DW_AT_identifier_case";
3964     case DW_AT_macro_info:
3965       return "DW_AT_macro_info";
3966     case DW_AT_namelist_items:
3967       return "DW_AT_namelist_items";
3968     case DW_AT_priority:
3969       return "DW_AT_priority";
3970     case DW_AT_segment:
3971       return "DW_AT_segment";
3972     case DW_AT_specification:
3973       return "DW_AT_specification";
3974     case DW_AT_static_link:
3975       return "DW_AT_static_link";
3976     case DW_AT_type:
3977       return "DW_AT_type";
3978     case DW_AT_use_location:
3979       return "DW_AT_use_location";
3980     case DW_AT_variable_parameter:
3981       return "DW_AT_variable_parameter";
3982     case DW_AT_virtuality:
3983       return "DW_AT_virtuality";
3984     case DW_AT_vtable_elem_location:
3985       return "DW_AT_vtable_elem_location";
3986
3987     case DW_AT_allocated:
3988       return "DW_AT_allocated";
3989     case DW_AT_associated:
3990       return "DW_AT_associated";
3991     case DW_AT_data_location:
3992       return "DW_AT_data_location";
3993     case DW_AT_byte_stride:
3994       return "DW_AT_byte_stride";
3995     case DW_AT_entry_pc:
3996       return "DW_AT_entry_pc";
3997     case DW_AT_use_UTF8:
3998       return "DW_AT_use_UTF8";
3999     case DW_AT_extension:
4000       return "DW_AT_extension";
4001     case DW_AT_ranges:
4002       return "DW_AT_ranges";
4003     case DW_AT_trampoline:
4004       return "DW_AT_trampoline";
4005     case DW_AT_call_column:
4006       return "DW_AT_call_column";
4007     case DW_AT_call_file:
4008       return "DW_AT_call_file";
4009     case DW_AT_call_line:
4010       return "DW_AT_call_line";
4011     case DW_AT_object_pointer:
4012       return "DW_AT_object_pointer";
4013
4014     case DW_AT_signature:
4015       return "DW_AT_signature";
4016     case DW_AT_main_subprogram:
4017       return "DW_AT_main_subprogram";
4018     case DW_AT_data_bit_offset:
4019       return "DW_AT_data_bit_offset";
4020     case DW_AT_const_expr:
4021       return "DW_AT_const_expr";
4022     case DW_AT_enum_class:
4023       return "DW_AT_enum_class";
4024     case DW_AT_linkage_name:
4025       return "DW_AT_linkage_name";
4026
4027     case DW_AT_MIPS_fde:
4028       return "DW_AT_MIPS_fde";
4029     case DW_AT_MIPS_loop_begin:
4030       return "DW_AT_MIPS_loop_begin";
4031     case DW_AT_MIPS_tail_loop_begin:
4032       return "DW_AT_MIPS_tail_loop_begin";
4033     case DW_AT_MIPS_epilog_begin:
4034       return "DW_AT_MIPS_epilog_begin";
4035 #if VMS_DEBUGGING_INFO
4036     case DW_AT_HP_prologue:
4037       return "DW_AT_HP_prologue";
4038 #else
4039     case DW_AT_MIPS_loop_unroll_factor:
4040       return "DW_AT_MIPS_loop_unroll_factor";
4041 #endif
4042     case DW_AT_MIPS_software_pipeline_depth:
4043       return "DW_AT_MIPS_software_pipeline_depth";
4044     case DW_AT_MIPS_linkage_name:
4045       return "DW_AT_MIPS_linkage_name";
4046 #if VMS_DEBUGGING_INFO
4047     case DW_AT_HP_epilogue:
4048       return "DW_AT_HP_epilogue";
4049 #else
4050     case DW_AT_MIPS_stride:
4051       return "DW_AT_MIPS_stride";
4052 #endif
4053     case DW_AT_MIPS_abstract_name:
4054       return "DW_AT_MIPS_abstract_name";
4055     case DW_AT_MIPS_clone_origin:
4056       return "DW_AT_MIPS_clone_origin";
4057     case DW_AT_MIPS_has_inlines:
4058       return "DW_AT_MIPS_has_inlines";
4059
4060     case DW_AT_sf_names:
4061       return "DW_AT_sf_names";
4062     case DW_AT_src_info:
4063       return "DW_AT_src_info";
4064     case DW_AT_mac_info:
4065       return "DW_AT_mac_info";
4066     case DW_AT_src_coords:
4067       return "DW_AT_src_coords";
4068     case DW_AT_body_begin:
4069       return "DW_AT_body_begin";
4070     case DW_AT_body_end:
4071       return "DW_AT_body_end";
4072
4073     case DW_AT_GNU_vector:
4074       return "DW_AT_GNU_vector";
4075     case DW_AT_GNU_guarded_by:
4076       return "DW_AT_GNU_guarded_by";
4077     case DW_AT_GNU_pt_guarded_by:
4078       return "DW_AT_GNU_pt_guarded_by";
4079     case DW_AT_GNU_guarded:
4080       return "DW_AT_GNU_guarded";
4081     case DW_AT_GNU_pt_guarded:
4082       return "DW_AT_GNU_pt_guarded";
4083     case DW_AT_GNU_locks_excluded:
4084       return "DW_AT_GNU_locks_excluded";
4085     case DW_AT_GNU_exclusive_locks_required:
4086       return "DW_AT_GNU_exclusive_locks_required";
4087     case DW_AT_GNU_shared_locks_required:
4088       return "DW_AT_GNU_shared_locks_required";
4089     case DW_AT_GNU_odr_signature:
4090       return "DW_AT_GNU_odr_signature";
4091     case DW_AT_GNU_template_name:
4092       return "DW_AT_GNU_template_name";
4093     case DW_AT_GNU_call_site_value:
4094       return "DW_AT_GNU_call_site_value";
4095     case DW_AT_GNU_call_site_data_value:
4096       return "DW_AT_GNU_call_site_data_value";
4097     case DW_AT_GNU_call_site_target:
4098       return "DW_AT_GNU_call_site_target";
4099     case DW_AT_GNU_call_site_target_clobbered:
4100       return "DW_AT_GNU_call_site_target_clobbered";
4101     case DW_AT_GNU_tail_call:
4102       return "DW_AT_GNU_tail_call";
4103     case DW_AT_GNU_all_tail_call_sites:
4104       return "DW_AT_GNU_all_tail_call_sites";
4105     case DW_AT_GNU_all_call_sites:
4106       return "DW_AT_GNU_all_call_sites";
4107     case DW_AT_GNU_all_source_call_sites:
4108       return "DW_AT_GNU_all_source_call_sites";
4109     case DW_AT_GNU_macros:
4110       return "DW_AT_GNU_macros";
4111
4112     case DW_AT_GNAT_descriptive_type:
4113       return "DW_AT_GNAT_descriptive_type";
4114
4115     case DW_AT_VMS_rtnbeg_pd_address:
4116       return "DW_AT_VMS_rtnbeg_pd_address";
4117
4118     default:
4119       return "DW_AT_<unknown>";
4120     }
4121 }
4122
4123 /* Convert a DWARF value form code into its string name.  */
4124
4125 static const char *
4126 dwarf_form_name (unsigned int form)
4127 {
4128   switch (form)
4129     {
4130     case DW_FORM_addr:
4131       return "DW_FORM_addr";
4132     case DW_FORM_block2:
4133       return "DW_FORM_block2";
4134     case DW_FORM_block4:
4135       return "DW_FORM_block4";
4136     case DW_FORM_data2:
4137       return "DW_FORM_data2";
4138     case DW_FORM_data4:
4139       return "DW_FORM_data4";
4140     case DW_FORM_data8:
4141       return "DW_FORM_data8";
4142     case DW_FORM_string:
4143       return "DW_FORM_string";
4144     case DW_FORM_block:
4145       return "DW_FORM_block";
4146     case DW_FORM_block1:
4147       return "DW_FORM_block1";
4148     case DW_FORM_data1:
4149       return "DW_FORM_data1";
4150     case DW_FORM_flag:
4151       return "DW_FORM_flag";
4152     case DW_FORM_sdata:
4153       return "DW_FORM_sdata";
4154     case DW_FORM_strp:
4155       return "DW_FORM_strp";
4156     case DW_FORM_udata:
4157       return "DW_FORM_udata";
4158     case DW_FORM_ref_addr:
4159       return "DW_FORM_ref_addr";
4160     case DW_FORM_ref1:
4161       return "DW_FORM_ref1";
4162     case DW_FORM_ref2:
4163       return "DW_FORM_ref2";
4164     case DW_FORM_ref4:
4165       return "DW_FORM_ref4";
4166     case DW_FORM_ref8:
4167       return "DW_FORM_ref8";
4168     case DW_FORM_ref_udata:
4169       return "DW_FORM_ref_udata";
4170     case DW_FORM_indirect:
4171       return "DW_FORM_indirect";
4172     case DW_FORM_sec_offset:
4173       return "DW_FORM_sec_offset";
4174     case DW_FORM_exprloc:
4175       return "DW_FORM_exprloc";
4176     case DW_FORM_flag_present:
4177       return "DW_FORM_flag_present";
4178     case DW_FORM_ref_sig8:
4179       return "DW_FORM_ref_sig8";
4180     default:
4181       return "DW_FORM_<unknown>";
4182     }
4183 }
4184 \f
4185 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
4186    instance of an inlined instance of a decl which is local to an inline
4187    function, so we have to trace all of the way back through the origin chain
4188    to find out what sort of node actually served as the original seed for the
4189    given block.  */
4190
4191 static tree
4192 decl_ultimate_origin (const_tree decl)
4193 {
4194   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4195     return NULL_TREE;
4196
4197   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4198      nodes in the function to point to themselves; ignore that if
4199      we're trying to output the abstract instance of this function.  */
4200   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4201     return NULL_TREE;
4202
4203   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4204      most distant ancestor, this should never happen.  */
4205   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4206
4207   return DECL_ABSTRACT_ORIGIN (decl);
4208 }
4209
4210 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
4211    of a virtual function may refer to a base class, so we check the 'this'
4212    parameter.  */
4213
4214 static tree
4215 decl_class_context (tree decl)
4216 {
4217   tree context = NULL_TREE;
4218
4219   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4220     context = DECL_CONTEXT (decl);
4221   else
4222     context = TYPE_MAIN_VARIANT
4223       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4224
4225   if (context && !TYPE_P (context))
4226     context = NULL_TREE;
4227
4228   return context;
4229 }
4230 \f
4231 /* Add an attribute/value pair to a DIE.  */
4232
4233 static inline void
4234 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4235 {
4236   /* Maybe this should be an assert?  */
4237   if (die == NULL)
4238     return;
4239
4240   if (die->die_attr == NULL)
4241     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
4242   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
4243 }
4244
4245 static inline enum dw_val_class
4246 AT_class (dw_attr_ref a)
4247 {
4248   return a->dw_attr_val.val_class;
4249 }
4250
4251 /* Add a flag value attribute to a DIE.  */
4252
4253 static inline void
4254 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4255 {
4256   dw_attr_node attr;
4257
4258   attr.dw_attr = attr_kind;
4259   attr.dw_attr_val.val_class = dw_val_class_flag;
4260   attr.dw_attr_val.v.val_flag = flag;
4261   add_dwarf_attr (die, &attr);
4262 }
4263
4264 static inline unsigned
4265 AT_flag (dw_attr_ref a)
4266 {
4267   gcc_assert (a && AT_class (a) == dw_val_class_flag);
4268   return a->dw_attr_val.v.val_flag;
4269 }
4270
4271 /* Add a signed integer attribute value to a DIE.  */
4272
4273 static inline void
4274 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4275 {
4276   dw_attr_node attr;
4277
4278   attr.dw_attr = attr_kind;
4279   attr.dw_attr_val.val_class = dw_val_class_const;
4280   attr.dw_attr_val.v.val_int = int_val;
4281   add_dwarf_attr (die, &attr);
4282 }
4283
4284 static inline HOST_WIDE_INT
4285 AT_int (dw_attr_ref a)
4286 {
4287   gcc_assert (a && AT_class (a) == dw_val_class_const);
4288   return a->dw_attr_val.v.val_int;
4289 }
4290
4291 /* Add an unsigned integer attribute value to a DIE.  */
4292
4293 static inline void
4294 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4295                  unsigned HOST_WIDE_INT unsigned_val)
4296 {
4297   dw_attr_node attr;
4298
4299   attr.dw_attr = attr_kind;
4300   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
4301   attr.dw_attr_val.v.val_unsigned = unsigned_val;
4302   add_dwarf_attr (die, &attr);
4303 }
4304
4305 static inline unsigned HOST_WIDE_INT
4306 AT_unsigned (dw_attr_ref a)
4307 {
4308   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4309   return a->dw_attr_val.v.val_unsigned;
4310 }
4311
4312 /* Add an unsigned double integer attribute value to a DIE.  */
4313
4314 static inline void
4315 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
4316                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
4317 {
4318   dw_attr_node attr;
4319
4320   attr.dw_attr = attr_kind;
4321   attr.dw_attr_val.val_class = dw_val_class_const_double;
4322   attr.dw_attr_val.v.val_double.high = high;
4323   attr.dw_attr_val.v.val_double.low = low;
4324   add_dwarf_attr (die, &attr);
4325 }
4326
4327 /* Add a floating point attribute value to a DIE and return it.  */
4328
4329 static inline void
4330 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4331             unsigned int length, unsigned int elt_size, unsigned char *array)
4332 {
4333   dw_attr_node attr;
4334
4335   attr.dw_attr = attr_kind;
4336   attr.dw_attr_val.val_class = dw_val_class_vec;
4337   attr.dw_attr_val.v.val_vec.length = length;
4338   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
4339   attr.dw_attr_val.v.val_vec.array = array;
4340   add_dwarf_attr (die, &attr);
4341 }
4342
4343 /* Add an 8-byte data attribute value to a DIE.  */
4344
4345 static inline void
4346 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
4347               unsigned char data8[8])
4348 {
4349   dw_attr_node attr;
4350
4351   attr.dw_attr = attr_kind;
4352   attr.dw_attr_val.val_class = dw_val_class_data8;
4353   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
4354   add_dwarf_attr (die, &attr);
4355 }
4356
4357 /* Hash and equality functions for debug_str_hash.  */
4358
4359 static hashval_t
4360 debug_str_do_hash (const void *x)
4361 {
4362   return htab_hash_string (((const struct indirect_string_node *)x)->str);
4363 }
4364
4365 static int
4366 debug_str_eq (const void *x1, const void *x2)
4367 {
4368   return strcmp ((((const struct indirect_string_node *)x1)->str),
4369                  (const char *)x2) == 0;
4370 }
4371
4372 /* Add STR to the indirect string hash table.  */
4373
4374 static struct indirect_string_node *
4375 find_AT_string (const char *str)
4376 {
4377   struct indirect_string_node *node;
4378   void **slot;
4379
4380   if (! debug_str_hash)
4381     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4382                                       debug_str_eq, NULL);
4383
4384   slot = htab_find_slot_with_hash (debug_str_hash, str,
4385                                    htab_hash_string (str), INSERT);
4386   if (*slot == NULL)
4387     {
4388       node = ggc_alloc_cleared_indirect_string_node ();
4389       node->str = ggc_strdup (str);
4390       *slot = node;
4391     }
4392   else
4393     node = (struct indirect_string_node *) *slot;
4394
4395   node->refcount++;
4396   return node;
4397 }
4398
4399 /* Add a string attribute value to a DIE.  */
4400
4401 static inline void
4402 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4403 {
4404   dw_attr_node attr;
4405   struct indirect_string_node *node;
4406
4407   node = find_AT_string (str);
4408
4409   attr.dw_attr = attr_kind;
4410   attr.dw_attr_val.val_class = dw_val_class_str;
4411   attr.dw_attr_val.v.val_str = node;
4412   add_dwarf_attr (die, &attr);
4413 }
4414
4415 static inline const char *
4416 AT_string (dw_attr_ref a)
4417 {
4418   gcc_assert (a && AT_class (a) == dw_val_class_str);
4419   return a->dw_attr_val.v.val_str->str;
4420 }
4421
4422 /* Find out whether a string should be output inline in DIE
4423    or out-of-line in .debug_str section.  */
4424
4425 static enum dwarf_form
4426 AT_string_form (dw_attr_ref a)
4427 {
4428   struct indirect_string_node *node;
4429   unsigned int len;
4430   char label[32];
4431
4432   gcc_assert (a && AT_class (a) == dw_val_class_str);
4433
4434   node = a->dw_attr_val.v.val_str;
4435   if (node->form)
4436     return node->form;
4437
4438   len = strlen (node->str) + 1;
4439
4440   /* If the string is shorter or equal to the size of the reference, it is
4441      always better to put it inline.  */
4442   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4443     return node->form = DW_FORM_string;
4444
4445   /* If we cannot expect the linker to merge strings in .debug_str
4446      section, only put it into .debug_str if it is worth even in this
4447      single module.  */
4448   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4449       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4450       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4451     return node->form = DW_FORM_string;
4452
4453   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4454   ++dw2_string_counter;
4455   node->label = xstrdup (label);
4456
4457   return node->form = DW_FORM_strp;
4458 }
4459
4460 /* Add a DIE reference attribute value to a DIE.  */
4461
4462 static inline void
4463 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4464 {
4465   dw_attr_node attr;
4466
4467 #ifdef ENABLE_CHECKING
4468   gcc_assert (targ_die != NULL);
4469 #else
4470   /* With LTO we can end up trying to reference something we didn't create
4471      a DIE for.  Avoid crashing later on a NULL referenced DIE.  */
4472   if (targ_die == NULL)
4473     return;
4474 #endif
4475
4476   attr.dw_attr = attr_kind;
4477   attr.dw_attr_val.val_class = dw_val_class_die_ref;
4478   attr.dw_attr_val.v.val_die_ref.die = targ_die;
4479   attr.dw_attr_val.v.val_die_ref.external = 0;
4480   add_dwarf_attr (die, &attr);
4481 }
4482
4483 /* Add an AT_specification attribute to a DIE, and also make the back
4484    pointer from the specification to the definition.  */
4485
4486 static inline void
4487 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4488 {
4489   add_AT_die_ref (die, DW_AT_specification, targ_die);
4490   gcc_assert (!targ_die->die_definition);
4491   targ_die->die_definition = die;
4492 }
4493
4494 static inline dw_die_ref
4495 AT_ref (dw_attr_ref a)
4496 {
4497   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4498   return a->dw_attr_val.v.val_die_ref.die;
4499 }
4500
4501 static inline int
4502 AT_ref_external (dw_attr_ref a)
4503 {
4504   if (a && AT_class (a) == dw_val_class_die_ref)
4505     return a->dw_attr_val.v.val_die_ref.external;
4506
4507   return 0;
4508 }
4509
4510 static inline void
4511 set_AT_ref_external (dw_attr_ref a, int i)
4512 {
4513   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4514   a->dw_attr_val.v.val_die_ref.external = i;
4515 }
4516
4517 /* Add an FDE reference attribute value to a DIE.  */
4518
4519 static inline void
4520 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4521 {
4522   dw_attr_node attr;
4523
4524   attr.dw_attr = attr_kind;
4525   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4526   attr.dw_attr_val.v.val_fde_index = targ_fde;
4527   add_dwarf_attr (die, &attr);
4528 }
4529
4530 /* Add a location description attribute value to a DIE.  */
4531
4532 static inline void
4533 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4534 {
4535   dw_attr_node attr;
4536
4537   attr.dw_attr = attr_kind;
4538   attr.dw_attr_val.val_class = dw_val_class_loc;
4539   attr.dw_attr_val.v.val_loc = loc;
4540   add_dwarf_attr (die, &attr);
4541 }
4542
4543 static inline dw_loc_descr_ref
4544 AT_loc (dw_attr_ref a)
4545 {
4546   gcc_assert (a && AT_class (a) == dw_val_class_loc);
4547   return a->dw_attr_val.v.val_loc;
4548 }
4549
4550 static inline void
4551 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4552 {
4553   dw_attr_node attr;
4554
4555   attr.dw_attr = attr_kind;
4556   attr.dw_attr_val.val_class = dw_val_class_loc_list;
4557   attr.dw_attr_val.v.val_loc_list = loc_list;
4558   add_dwarf_attr (die, &attr);
4559   have_location_lists = true;
4560 }
4561
4562 static inline dw_loc_list_ref
4563 AT_loc_list (dw_attr_ref a)
4564 {
4565   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4566   return a->dw_attr_val.v.val_loc_list;
4567 }
4568
4569 static inline dw_loc_list_ref *
4570 AT_loc_list_ptr (dw_attr_ref a)
4571 {
4572   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4573   return &a->dw_attr_val.v.val_loc_list;
4574 }
4575
4576 /* Add an address constant attribute value to a DIE.  */
4577
4578 static inline void
4579 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
4580 {
4581   dw_attr_node attr;
4582
4583   attr.dw_attr = attr_kind;
4584   attr.dw_attr_val.val_class = dw_val_class_addr;
4585   attr.dw_attr_val.v.val_addr = addr;
4586   add_dwarf_attr (die, &attr);
4587 }
4588
4589 /* Get the RTX from to an address DIE attribute.  */
4590
4591 static inline rtx
4592 AT_addr (dw_attr_ref a)
4593 {
4594   gcc_assert (a && AT_class (a) == dw_val_class_addr);
4595   return a->dw_attr_val.v.val_addr;
4596 }
4597
4598 /* Add a file attribute value to a DIE.  */
4599
4600 static inline void
4601 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4602              struct dwarf_file_data *fd)
4603 {
4604   dw_attr_node attr;
4605
4606   attr.dw_attr = attr_kind;
4607   attr.dw_attr_val.val_class = dw_val_class_file;
4608   attr.dw_attr_val.v.val_file = fd;
4609   add_dwarf_attr (die, &attr);
4610 }
4611
4612 /* Get the dwarf_file_data from a file DIE attribute.  */
4613
4614 static inline struct dwarf_file_data *
4615 AT_file (dw_attr_ref a)
4616 {
4617   gcc_assert (a && AT_class (a) == dw_val_class_file);
4618   return a->dw_attr_val.v.val_file;
4619 }
4620
4621 /* Add a vms delta attribute value to a DIE.  */
4622
4623 static inline void
4624 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4625                   const char *lbl1, const char *lbl2)
4626 {
4627   dw_attr_node attr;
4628
4629   attr.dw_attr = attr_kind;
4630   attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4631   attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4632   attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4633   add_dwarf_attr (die, &attr);
4634 }
4635
4636 /* Add a label identifier attribute value to a DIE.  */
4637
4638 static inline void
4639 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
4640 {
4641   dw_attr_node attr;
4642
4643   attr.dw_attr = attr_kind;
4644   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4645   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4646   add_dwarf_attr (die, &attr);
4647 }
4648
4649 /* Add a section offset attribute value to a DIE, an offset into the
4650    debug_line section.  */
4651
4652 static inline void
4653 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4654                 const char *label)
4655 {
4656   dw_attr_node attr;
4657
4658   attr.dw_attr = attr_kind;
4659   attr.dw_attr_val.val_class = dw_val_class_lineptr;
4660   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4661   add_dwarf_attr (die, &attr);
4662 }
4663
4664 /* Add a section offset attribute value to a DIE, an offset into the
4665    debug_macinfo section.  */
4666
4667 static inline void
4668 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4669                const char *label)
4670 {
4671   dw_attr_node attr;
4672
4673   attr.dw_attr = attr_kind;
4674   attr.dw_attr_val.val_class = dw_val_class_macptr;
4675   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4676   add_dwarf_attr (die, &attr);
4677 }
4678
4679 /* Add an offset attribute value to a DIE.  */
4680
4681 static inline void
4682 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4683                unsigned HOST_WIDE_INT offset)
4684 {
4685   dw_attr_node attr;
4686
4687   attr.dw_attr = attr_kind;
4688   attr.dw_attr_val.val_class = dw_val_class_offset;
4689   attr.dw_attr_val.v.val_offset = offset;
4690   add_dwarf_attr (die, &attr);
4691 }
4692
4693 /* Add an range_list attribute value to a DIE.  */
4694
4695 static void
4696 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4697                    long unsigned int offset)
4698 {
4699   dw_attr_node attr;
4700
4701   attr.dw_attr = attr_kind;
4702   attr.dw_attr_val.val_class = dw_val_class_range_list;
4703   attr.dw_attr_val.v.val_offset = offset;
4704   add_dwarf_attr (die, &attr);
4705 }
4706
4707 /* Return the start label of a delta attribute.  */
4708
4709 static inline const char *
4710 AT_vms_delta1 (dw_attr_ref a)
4711 {
4712   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4713   return a->dw_attr_val.v.val_vms_delta.lbl1;
4714 }
4715
4716 /* Return the end label of a delta attribute.  */
4717
4718 static inline const char *
4719 AT_vms_delta2 (dw_attr_ref a)
4720 {
4721   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4722   return a->dw_attr_val.v.val_vms_delta.lbl2;
4723 }
4724
4725 static inline const char *
4726 AT_lbl (dw_attr_ref a)
4727 {
4728   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4729                     || AT_class (a) == dw_val_class_lineptr
4730                     || AT_class (a) == dw_val_class_macptr));
4731   return a->dw_attr_val.v.val_lbl_id;
4732 }
4733
4734 /* Get the attribute of type attr_kind.  */
4735
4736 static dw_attr_ref
4737 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4738 {
4739   dw_attr_ref a;
4740   unsigned ix;
4741   dw_die_ref spec = NULL;
4742
4743   if (! die)
4744     return NULL;
4745
4746   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4747     if (a->dw_attr == attr_kind)
4748       return a;
4749     else if (a->dw_attr == DW_AT_specification
4750              || a->dw_attr == DW_AT_abstract_origin)
4751       spec = AT_ref (a);
4752
4753   if (spec)
4754     return get_AT (spec, attr_kind);
4755
4756   return NULL;
4757 }
4758
4759 /* Return the "low pc" attribute value, typically associated with a subprogram
4760    DIE.  Return null if the "low pc" attribute is either not present, or if it
4761    cannot be represented as an assembler label identifier.  */
4762
4763 static inline const char *
4764 get_AT_low_pc (dw_die_ref die)
4765 {
4766   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4767
4768   return a ? AT_lbl (a) : NULL;
4769 }
4770
4771 /* Return the "high pc" attribute value, typically associated with a subprogram
4772    DIE.  Return null if the "high pc" attribute is either not present, or if it
4773    cannot be represented as an assembler label identifier.  */
4774
4775 static inline const char *
4776 get_AT_hi_pc (dw_die_ref die)
4777 {
4778   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4779
4780   return a ? AT_lbl (a) : NULL;
4781 }
4782
4783 /* Return the value of the string attribute designated by ATTR_KIND, or
4784    NULL if it is not present.  */
4785
4786 static inline const char *
4787 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4788 {
4789   dw_attr_ref a = get_AT (die, attr_kind);
4790
4791   return a ? AT_string (a) : NULL;
4792 }
4793
4794 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4795    if it is not present.  */
4796
4797 static inline int
4798 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4799 {
4800   dw_attr_ref a = get_AT (die, attr_kind);
4801
4802   return a ? AT_flag (a) : 0;
4803 }
4804
4805 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4806    if it is not present.  */
4807
4808 static inline unsigned
4809 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4810 {
4811   dw_attr_ref a = get_AT (die, attr_kind);
4812
4813   return a ? AT_unsigned (a) : 0;
4814 }
4815
4816 static inline dw_die_ref
4817 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4818 {
4819   dw_attr_ref a = get_AT (die, attr_kind);
4820
4821   return a ? AT_ref (a) : NULL;
4822 }
4823
4824 static inline struct dwarf_file_data *
4825 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4826 {
4827   dw_attr_ref a = get_AT (die, attr_kind);
4828
4829   return a ? AT_file (a) : NULL;
4830 }
4831
4832 /* Return TRUE if the language is C++.  */
4833
4834 static inline bool
4835 is_cxx (void)
4836 {
4837   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4838
4839   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
4840 }
4841
4842 /* Return TRUE if the language is Fortran.  */
4843
4844 static inline bool
4845 is_fortran (void)
4846 {
4847   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4848
4849   return (lang == DW_LANG_Fortran77
4850           || lang == DW_LANG_Fortran90
4851           || lang == DW_LANG_Fortran95);
4852 }
4853
4854 /* Return TRUE if the language is Ada.  */
4855
4856 static inline bool
4857 is_ada (void)
4858 {
4859   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4860
4861   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4862 }
4863
4864 /* Remove the specified attribute if present.  */
4865
4866 static void
4867 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4868 {
4869   dw_attr_ref a;
4870   unsigned ix;
4871
4872   if (! die)
4873     return;
4874
4875   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4876     if (a->dw_attr == attr_kind)
4877       {
4878         if (AT_class (a) == dw_val_class_str)
4879           if (a->dw_attr_val.v.val_str->refcount)
4880             a->dw_attr_val.v.val_str->refcount--;
4881
4882         /* VEC_ordered_remove should help reduce the number of abbrevs
4883            that are needed.  */
4884         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
4885         return;
4886       }
4887 }
4888
4889 /* Remove CHILD from its parent.  PREV must have the property that
4890    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
4891
4892 static void
4893 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4894 {
4895   gcc_assert (child->die_parent == prev->die_parent);
4896   gcc_assert (prev->die_sib == child);
4897   if (prev == child)
4898     {
4899       gcc_assert (child->die_parent->die_child == child);
4900       prev = NULL;
4901     }
4902   else
4903     prev->die_sib = child->die_sib;
4904   if (child->die_parent->die_child == child)
4905     child->die_parent->die_child = prev;
4906 }
4907
4908 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
4909    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
4910
4911 static void
4912 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4913 {
4914   dw_die_ref parent = old_child->die_parent;
4915
4916   gcc_assert (parent == prev->die_parent);
4917   gcc_assert (prev->die_sib == old_child);
4918
4919   new_child->die_parent = parent;
4920   if (prev == old_child)
4921     {
4922       gcc_assert (parent->die_child == old_child);
4923       new_child->die_sib = new_child;
4924     }
4925   else
4926     {
4927       prev->die_sib = new_child;
4928       new_child->die_sib = old_child->die_sib;
4929     }
4930   if (old_child->die_parent->die_child == old_child)
4931     old_child->die_parent->die_child = new_child;
4932 }
4933
4934 /* Move all children from OLD_PARENT to NEW_PARENT.  */
4935
4936 static void
4937 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4938 {
4939   dw_die_ref c;
4940   new_parent->die_child = old_parent->die_child;
4941   old_parent->die_child = NULL;
4942   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4943 }
4944
4945 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
4946    matches TAG.  */
4947
4948 static void
4949 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4950 {
4951   dw_die_ref c;
4952
4953   c = die->die_child;
4954   if (c) do {
4955     dw_die_ref prev = c;
4956     c = c->die_sib;
4957     while (c->die_tag == tag)
4958       {
4959         remove_child_with_prev (c, prev);
4960         /* Might have removed every child.  */
4961         if (c == c->die_sib)
4962           return;
4963         c = c->die_sib;
4964       }
4965   } while (c != die->die_child);
4966 }
4967
4968 /* Add a CHILD_DIE as the last child of DIE.  */
4969
4970 static void
4971 add_child_die (dw_die_ref die, dw_die_ref child_die)
4972 {
4973   /* FIXME this should probably be an assert.  */
4974   if (! die || ! child_die)
4975     return;
4976   gcc_assert (die != child_die);
4977
4978   child_die->die_parent = die;
4979   if (die->die_child)
4980     {
4981       child_die->die_sib = die->die_child->die_sib;
4982       die->die_child->die_sib = child_die;
4983     }
4984   else
4985     child_die->die_sib = child_die;
4986   die->die_child = child_die;
4987 }
4988
4989 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4990    is the specification, to the end of PARENT's list of children.
4991    This is done by removing and re-adding it.  */
4992
4993 static void
4994 splice_child_die (dw_die_ref parent, dw_die_ref child)
4995 {
4996   dw_die_ref p;
4997
4998   /* We want the declaration DIE from inside the class, not the
4999      specification DIE at toplevel.  */
5000   if (child->die_parent != parent)
5001     {
5002       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5003
5004       if (tmp)
5005         child = tmp;
5006     }
5007
5008   gcc_assert (child->die_parent == parent
5009               || (child->die_parent
5010                   == get_AT_ref (parent, DW_AT_specification)));
5011
5012   for (p = child->die_parent->die_child; ; p = p->die_sib)
5013     if (p->die_sib == child)
5014       {
5015         remove_child_with_prev (child, p);
5016         break;
5017       }
5018
5019   add_child_die (parent, child);
5020 }
5021
5022 /* Return a pointer to a newly created DIE node.  */
5023
5024 static inline dw_die_ref
5025 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5026 {
5027   dw_die_ref die = ggc_alloc_cleared_die_node ();
5028
5029   die->die_tag = tag_value;
5030
5031   if (parent_die != NULL)
5032     add_child_die (parent_die, die);
5033   else
5034     {
5035       limbo_die_node *limbo_node;
5036
5037       limbo_node = ggc_alloc_cleared_limbo_die_node ();
5038       limbo_node->die = die;
5039       limbo_node->created_for = t;
5040       limbo_node->next = limbo_die_list;
5041       limbo_die_list = limbo_node;
5042     }
5043
5044   return die;
5045 }
5046
5047 /* Return the DIE associated with the given type specifier.  */
5048
5049 static inline dw_die_ref
5050 lookup_type_die (tree type)
5051 {
5052   return TYPE_SYMTAB_DIE (type);
5053 }
5054
5055 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
5056    anonymous type named by the typedef TYPE_DIE, return the DIE of the
5057    anonymous type instead the one of the naming typedef.  */
5058
5059 static inline dw_die_ref
5060 strip_naming_typedef (tree type, dw_die_ref type_die)
5061 {
5062   if (type
5063       && TREE_CODE (type) == RECORD_TYPE
5064       && type_die
5065       && type_die->die_tag == DW_TAG_typedef
5066       && is_naming_typedef_decl (TYPE_NAME (type)))
5067     type_die = get_AT_ref (type_die, DW_AT_type);
5068   return type_die;
5069 }
5070
5071 /* Like lookup_type_die, but if type is an anonymous type named by a
5072    typedef[1], return the DIE of the anonymous type instead the one of
5073    the naming typedef.  This is because in gen_typedef_die, we did
5074    equate the anonymous struct named by the typedef with the DIE of
5075    the naming typedef. So by default, lookup_type_die on an anonymous
5076    struct yields the DIE of the naming typedef.
5077
5078    [1]: Read the comment of is_naming_typedef_decl to learn about what
5079    a naming typedef is.  */
5080
5081 static inline dw_die_ref
5082 lookup_type_die_strip_naming_typedef (tree type)
5083 {
5084   dw_die_ref die = lookup_type_die (type);
5085   return strip_naming_typedef (type, die);
5086 }
5087
5088 /* Equate a DIE to a given type specifier.  */
5089
5090 static inline void
5091 equate_type_number_to_die (tree type, dw_die_ref type_die)
5092 {
5093   TYPE_SYMTAB_DIE (type) = type_die;
5094 }
5095
5096 /* Returns a hash value for X (which really is a die_struct).  */
5097
5098 static hashval_t
5099 decl_die_table_hash (const void *x)
5100 {
5101   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
5102 }
5103
5104 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5105
5106 static int
5107 decl_die_table_eq (const void *x, const void *y)
5108 {
5109   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
5110 }
5111
5112 /* Return the DIE associated with a given declaration.  */
5113
5114 static inline dw_die_ref
5115 lookup_decl_die (tree decl)
5116 {
5117   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5118 }
5119
5120 /* Returns a hash value for X (which really is a var_loc_list).  */
5121
5122 static hashval_t
5123 decl_loc_table_hash (const void *x)
5124 {
5125   return (hashval_t) ((const var_loc_list *) x)->decl_id;
5126 }
5127
5128 /* Return nonzero if decl_id of var_loc_list X is the same as
5129    UID of decl *Y.  */
5130
5131 static int
5132 decl_loc_table_eq (const void *x, const void *y)
5133 {
5134   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
5135 }
5136
5137 /* Return the var_loc list associated with a given declaration.  */
5138
5139 static inline var_loc_list *
5140 lookup_decl_loc (const_tree decl)
5141 {
5142   if (!decl_loc_table)
5143     return NULL;
5144   return (var_loc_list *)
5145     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5146 }
5147
5148 /* Returns a hash value for X (which really is a cached_dw_loc_list_list).  */
5149
5150 static hashval_t
5151 cached_dw_loc_list_table_hash (const void *x)
5152 {
5153   return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
5154 }
5155
5156 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5157    UID of decl *Y.  */
5158
5159 static int
5160 cached_dw_loc_list_table_eq (const void *x, const void *y)
5161 {
5162   return (((const cached_dw_loc_list *) x)->decl_id
5163           == DECL_UID ((const_tree) y));
5164 }
5165
5166 /* Equate a DIE to a particular declaration.  */
5167
5168 static void
5169 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5170 {
5171   unsigned int decl_id = DECL_UID (decl);
5172   void **slot;
5173
5174   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5175   *slot = decl_die;
5176   decl_die->decl_id = decl_id;
5177 }
5178
5179 /* Return how many bits covers PIECE EXPR_LIST.  */
5180
5181 static int
5182 decl_piece_bitsize (rtx piece)
5183 {
5184   int ret = (int) GET_MODE (piece);
5185   if (ret)
5186     return ret;
5187   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5188               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5189   return INTVAL (XEXP (XEXP (piece, 0), 0));
5190 }
5191
5192 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
5193
5194 static rtx *
5195 decl_piece_varloc_ptr (rtx piece)
5196 {
5197   if ((int) GET_MODE (piece))
5198     return &XEXP (piece, 0);
5199   else
5200     return &XEXP (XEXP (piece, 0), 1);
5201 }
5202
5203 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5204    Next is the chain of following piece nodes.  */
5205
5206 static rtx
5207 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5208 {
5209   if (bitsize <= (int) MAX_MACHINE_MODE)
5210     return alloc_EXPR_LIST (bitsize, loc_note, next);
5211   else
5212     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5213                                                GEN_INT (bitsize),
5214                                                loc_note), next);
5215 }
5216
5217 /* Return rtx that should be stored into loc field for
5218    LOC_NOTE and BITPOS/BITSIZE.  */
5219
5220 static rtx
5221 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5222                       HOST_WIDE_INT bitsize)
5223 {
5224   if (bitsize != -1)
5225     {
5226       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5227       if (bitpos != 0)
5228         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5229     }
5230   return loc_note;
5231 }
5232
5233 /* This function either modifies location piece list *DEST in
5234    place (if SRC and INNER is NULL), or copies location piece list
5235    *SRC to *DEST while modifying it.  Location BITPOS is modified
5236    to contain LOC_NOTE, any pieces overlapping it are removed resp.
5237    not copied and if needed some padding around it is added.
5238    When modifying in place, DEST should point to EXPR_LIST where
5239    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5240    to the start of the whole list and INNER points to the EXPR_LIST
5241    where earlier pieces cover PIECE_BITPOS bits.  */
5242
5243 static void
5244 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5245                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5246                    HOST_WIDE_INT bitsize, rtx loc_note)
5247 {
5248   int diff;
5249   bool copy = inner != NULL;
5250
5251   if (copy)
5252     {
5253       /* First copy all nodes preceeding the current bitpos.  */
5254       while (src != inner)
5255         {
5256           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5257                                    decl_piece_bitsize (*src), NULL_RTX);
5258           dest = &XEXP (*dest, 1);
5259           src = &XEXP (*src, 1);
5260         }
5261     }
5262   /* Add padding if needed.  */
5263   if (bitpos != piece_bitpos)
5264     {
5265       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5266                                copy ? NULL_RTX : *dest);
5267       dest = &XEXP (*dest, 1);
5268     }
5269   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5270     {
5271       gcc_assert (!copy);
5272       /* A piece with correct bitpos and bitsize already exist,
5273          just update the location for it and return.  */
5274       *decl_piece_varloc_ptr (*dest) = loc_note;
5275       return;
5276     }
5277   /* Add the piece that changed.  */
5278   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5279   dest = &XEXP (*dest, 1);
5280   /* Skip over pieces that overlap it.  */
5281   diff = bitpos - piece_bitpos + bitsize;
5282   if (!copy)
5283     src = dest;
5284   while (diff > 0 && *src)
5285     {
5286       rtx piece = *src;
5287       diff -= decl_piece_bitsize (piece);
5288       if (copy)
5289         src = &XEXP (piece, 1);
5290       else
5291         {
5292           *src = XEXP (piece, 1);
5293           free_EXPR_LIST_node (piece);
5294         }
5295     }
5296   /* Add padding if needed.  */
5297   if (diff < 0 && *src)
5298     {
5299       if (!copy)
5300         dest = src;
5301       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5302       dest = &XEXP (*dest, 1);
5303     }
5304   if (!copy)
5305     return;
5306   /* Finally copy all nodes following it.  */
5307   while (*src)
5308     {
5309       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5310                                decl_piece_bitsize (*src), NULL_RTX);
5311       dest = &XEXP (*dest, 1);
5312       src = &XEXP (*src, 1);
5313     }
5314 }
5315
5316 /* Add a variable location node to the linked list for DECL.  */
5317
5318 static struct var_loc_node *
5319 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5320 {
5321   unsigned int decl_id;
5322   var_loc_list *temp;
5323   void **slot;
5324   struct var_loc_node *loc = NULL;
5325   HOST_WIDE_INT bitsize = -1, bitpos = -1;
5326
5327   if (DECL_DEBUG_EXPR_IS_FROM (decl))
5328     {
5329       tree realdecl = DECL_DEBUG_EXPR (decl);
5330       if (realdecl && handled_component_p (realdecl))
5331         {
5332           HOST_WIDE_INT maxsize;
5333           tree innerdecl;
5334           innerdecl
5335             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
5336           if (!DECL_P (innerdecl)
5337               || DECL_IGNORED_P (innerdecl)
5338               || TREE_STATIC (innerdecl)
5339               || bitsize <= 0
5340               || bitpos + bitsize > 256
5341               || bitsize != maxsize)
5342             return NULL;
5343           decl = innerdecl;
5344         }
5345     }
5346
5347   decl_id = DECL_UID (decl);
5348   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5349   if (*slot == NULL)
5350     {
5351       temp = ggc_alloc_cleared_var_loc_list ();
5352       temp->decl_id = decl_id;
5353       *slot = temp;
5354     }
5355   else
5356     temp = (var_loc_list *) *slot;
5357
5358   /* For PARM_DECLs try to keep around the original incoming value,
5359      even if that means we'll emit a zero-range .debug_loc entry.  */
5360   if (temp->last
5361       && temp->first == temp->last
5362       && TREE_CODE (decl) == PARM_DECL
5363       && GET_CODE (temp->first->loc) == NOTE
5364       && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5365       && DECL_INCOMING_RTL (decl)
5366       && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5367       && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5368          == GET_CODE (DECL_INCOMING_RTL (decl))
5369       && prev_real_insn (temp->first->loc) == NULL_RTX
5370       && (bitsize != -1
5371           || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5372                            NOTE_VAR_LOCATION_LOC (loc_note))
5373           || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5374               != NOTE_VAR_LOCATION_STATUS (loc_note))))
5375     {
5376       loc = ggc_alloc_cleared_var_loc_node ();
5377       temp->first->next = loc;
5378       temp->last = loc;
5379       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5380     }
5381   else if (temp->last)
5382     {
5383       struct var_loc_node *last = temp->last, *unused = NULL;
5384       rtx *piece_loc = NULL, last_loc_note;
5385       int piece_bitpos = 0;
5386       if (last->next)
5387         {
5388           last = last->next;
5389           gcc_assert (last->next == NULL);
5390         }
5391       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5392         {
5393           piece_loc = &last->loc;
5394           do
5395             {
5396               int cur_bitsize = decl_piece_bitsize (*piece_loc);
5397               if (piece_bitpos + cur_bitsize > bitpos)
5398                 break;
5399               piece_bitpos += cur_bitsize;
5400               piece_loc = &XEXP (*piece_loc, 1);
5401             }
5402           while (*piece_loc);
5403         }
5404       /* TEMP->LAST here is either pointer to the last but one or
5405          last element in the chained list, LAST is pointer to the
5406          last element.  */
5407       if (label && strcmp (last->label, label) == 0)
5408         {
5409           /* For SRA optimized variables if there weren't any real
5410              insns since last note, just modify the last node.  */
5411           if (piece_loc != NULL)
5412             {
5413               adjust_piece_list (piece_loc, NULL, NULL,
5414                                  bitpos, piece_bitpos, bitsize, loc_note);
5415               return NULL;
5416             }
5417           /* If the last note doesn't cover any instructions, remove it.  */
5418           if (temp->last != last)
5419             {
5420               temp->last->next = NULL;
5421               unused = last;
5422               last = temp->last;
5423               gcc_assert (strcmp (last->label, label) != 0);
5424             }
5425           else
5426             {
5427               gcc_assert (temp->first == temp->last
5428                           || (temp->first->next == temp->last
5429                               && TREE_CODE (decl) == PARM_DECL));
5430               memset (temp->last, '\0', sizeof (*temp->last));
5431               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5432               return temp->last;
5433             }
5434         }
5435       if (bitsize == -1 && NOTE_P (last->loc))
5436         last_loc_note = last->loc;
5437       else if (piece_loc != NULL
5438                && *piece_loc != NULL_RTX
5439                && piece_bitpos == bitpos
5440                && decl_piece_bitsize (*piece_loc) == bitsize)
5441         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5442       else
5443         last_loc_note = NULL_RTX;
5444       /* If the current location is the same as the end of the list,
5445          and either both or neither of the locations is uninitialized,
5446          we have nothing to do.  */
5447       if (last_loc_note == NULL_RTX
5448           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5449                             NOTE_VAR_LOCATION_LOC (loc_note)))
5450           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5451                != NOTE_VAR_LOCATION_STATUS (loc_note))
5452               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5453                    == VAR_INIT_STATUS_UNINITIALIZED)
5454                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
5455                       == VAR_INIT_STATUS_UNINITIALIZED))))
5456         {
5457           /* Add LOC to the end of list and update LAST.  If the last
5458              element of the list has been removed above, reuse its
5459              memory for the new node, otherwise allocate a new one.  */
5460           if (unused)
5461             {
5462               loc = unused;
5463               memset (loc, '\0', sizeof (*loc));
5464             }
5465           else
5466             loc = ggc_alloc_cleared_var_loc_node ();
5467           if (bitsize == -1 || piece_loc == NULL)
5468             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5469           else
5470             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5471                                bitpos, piece_bitpos, bitsize, loc_note);
5472           last->next = loc;
5473           /* Ensure TEMP->LAST will point either to the new last but one
5474              element of the chain, or to the last element in it.  */
5475           if (last != temp->last)
5476             temp->last = last;
5477         }
5478       else if (unused)
5479         ggc_free (unused);
5480     }
5481   else
5482     {
5483       loc = ggc_alloc_cleared_var_loc_node ();
5484       temp->first = loc;
5485       temp->last = loc;
5486       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5487     }
5488   return loc;
5489 }
5490 \f
5491 /* Keep track of the number of spaces used to indent the
5492    output of the debugging routines that print the structure of
5493    the DIE internal representation.  */
5494 static int print_indent;
5495
5496 /* Indent the line the number of spaces given by print_indent.  */
5497
5498 static inline void
5499 print_spaces (FILE *outfile)
5500 {
5501   fprintf (outfile, "%*s", print_indent, "");
5502 }
5503
5504 /* Print a type signature in hex.  */
5505
5506 static inline void
5507 print_signature (FILE *outfile, char *sig)
5508 {
5509   int i;
5510
5511   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5512     fprintf (outfile, "%02x", sig[i] & 0xff);
5513 }
5514
5515 /* Print the information associated with a given DIE, and its children.
5516    This routine is a debugging aid only.  */
5517
5518 static void
5519 print_die (dw_die_ref die, FILE *outfile)
5520 {
5521   dw_attr_ref a;
5522   dw_die_ref c;
5523   unsigned ix;
5524
5525   print_spaces (outfile);
5526   fprintf (outfile, "DIE %4ld: %s (%p)\n",
5527            die->die_offset, dwarf_tag_name (die->die_tag),
5528            (void*) die);
5529   print_spaces (outfile);
5530   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5531   fprintf (outfile, " offset: %ld", die->die_offset);
5532   fprintf (outfile, " mark: %d\n", die->die_mark);
5533
5534   if (use_debug_types && die->die_id.die_type_node)
5535     {
5536       print_spaces (outfile);
5537       fprintf (outfile, "  signature: ");
5538       print_signature (outfile, die->die_id.die_type_node->signature);
5539       fprintf (outfile, "\n");
5540     }
5541
5542   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5543     {
5544       print_spaces (outfile);
5545       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5546
5547       switch (AT_class (a))
5548         {
5549         case dw_val_class_addr:
5550           fprintf (outfile, "address");
5551           break;
5552         case dw_val_class_offset:
5553           fprintf (outfile, "offset");
5554           break;
5555         case dw_val_class_loc:
5556           fprintf (outfile, "location descriptor");
5557           break;
5558         case dw_val_class_loc_list:
5559           fprintf (outfile, "location list -> label:%s",
5560                    AT_loc_list (a)->ll_symbol);
5561           break;
5562         case dw_val_class_range_list:
5563           fprintf (outfile, "range list");
5564           break;
5565         case dw_val_class_const:
5566           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5567           break;
5568         case dw_val_class_unsigned_const:
5569           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5570           break;
5571         case dw_val_class_const_double:
5572           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
5573                             HOST_WIDE_INT_PRINT_UNSIGNED")",
5574                    a->dw_attr_val.v.val_double.high,
5575                    a->dw_attr_val.v.val_double.low);
5576           break;
5577         case dw_val_class_vec:
5578           fprintf (outfile, "floating-point or vector constant");
5579           break;
5580         case dw_val_class_flag:
5581           fprintf (outfile, "%u", AT_flag (a));
5582           break;
5583         case dw_val_class_die_ref:
5584           if (AT_ref (a) != NULL)
5585             {
5586               if (use_debug_types && AT_ref (a)->die_id.die_type_node)
5587                 {
5588                   fprintf (outfile, "die -> signature: ");
5589                   print_signature (outfile,
5590                                    AT_ref (a)->die_id.die_type_node->signature);
5591                 }
5592               else if (! use_debug_types && AT_ref (a)->die_id.die_symbol)
5593                 fprintf (outfile, "die -> label: %s",
5594                          AT_ref (a)->die_id.die_symbol);
5595               else
5596                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
5597               fprintf (outfile, " (%p)", (void *) AT_ref (a));
5598             }
5599           else
5600             fprintf (outfile, "die -> <null>");
5601           break;
5602         case dw_val_class_vms_delta:
5603           fprintf (outfile, "delta: @slotcount(%s-%s)",
5604                    AT_vms_delta2 (a), AT_vms_delta1 (a));
5605           break;
5606         case dw_val_class_lbl_id:
5607         case dw_val_class_lineptr:
5608         case dw_val_class_macptr:
5609           fprintf (outfile, "label: %s", AT_lbl (a));
5610           break;
5611         case dw_val_class_str:
5612           if (AT_string (a) != NULL)
5613             fprintf (outfile, "\"%s\"", AT_string (a));
5614           else
5615             fprintf (outfile, "<null>");
5616           break;
5617         case dw_val_class_file:
5618           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
5619                    AT_file (a)->emitted_number);
5620           break;
5621         case dw_val_class_data8:
5622           {
5623             int i;
5624
5625             for (i = 0; i < 8; i++)
5626               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
5627             break;
5628           }
5629         default:
5630           break;
5631         }
5632
5633       fprintf (outfile, "\n");
5634     }
5635
5636   if (die->die_child != NULL)
5637     {
5638       print_indent += 4;
5639       FOR_EACH_CHILD (die, c, print_die (c, outfile));
5640       print_indent -= 4;
5641     }
5642   if (print_indent == 0)
5643     fprintf (outfile, "\n");
5644 }
5645
5646 /* Print the information collected for a given DIE.  */
5647
5648 DEBUG_FUNCTION void
5649 debug_dwarf_die (dw_die_ref die)
5650 {
5651   print_die (die, stderr);
5652 }
5653
5654 /* Print all DWARF information collected for the compilation unit.
5655    This routine is a debugging aid only.  */
5656
5657 DEBUG_FUNCTION void
5658 debug_dwarf (void)
5659 {
5660   print_indent = 0;
5661   print_die (comp_unit_die (), stderr);
5662 }
5663 \f
5664 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5665    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5666    DIE that marks the start of the DIEs for this include file.  */
5667
5668 static dw_die_ref
5669 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5670 {
5671   const char *filename = get_AT_string (bincl_die, DW_AT_name);
5672   dw_die_ref new_unit = gen_compile_unit_die (filename);
5673
5674   new_unit->die_sib = old_unit;
5675   return new_unit;
5676 }
5677
5678 /* Close an include-file CU and reopen the enclosing one.  */
5679
5680 static dw_die_ref
5681 pop_compile_unit (dw_die_ref old_unit)
5682 {
5683   dw_die_ref new_unit = old_unit->die_sib;
5684
5685   old_unit->die_sib = NULL;
5686   return new_unit;
5687 }
5688
5689 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5690 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5691
5692 /* Calculate the checksum of a location expression.  */
5693
5694 static inline void
5695 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5696 {
5697   int tem;
5698
5699   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5700   CHECKSUM (tem);
5701   CHECKSUM (loc->dw_loc_oprnd1);
5702   CHECKSUM (loc->dw_loc_oprnd2);
5703 }
5704
5705 /* Calculate the checksum of an attribute.  */
5706
5707 static void
5708 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5709 {
5710   dw_loc_descr_ref loc;
5711   rtx r;
5712
5713   CHECKSUM (at->dw_attr);
5714
5715   /* We don't care that this was compiled with a different compiler
5716      snapshot; if the output is the same, that's what matters.  */
5717   if (at->dw_attr == DW_AT_producer)
5718     return;
5719
5720   switch (AT_class (at))
5721     {
5722     case dw_val_class_const:
5723       CHECKSUM (at->dw_attr_val.v.val_int);
5724       break;
5725     case dw_val_class_unsigned_const:
5726       CHECKSUM (at->dw_attr_val.v.val_unsigned);
5727       break;
5728     case dw_val_class_const_double:
5729       CHECKSUM (at->dw_attr_val.v.val_double);
5730       break;
5731     case dw_val_class_vec:
5732       CHECKSUM (at->dw_attr_val.v.val_vec);
5733       break;
5734     case dw_val_class_flag:
5735       CHECKSUM (at->dw_attr_val.v.val_flag);
5736       break;
5737     case dw_val_class_str:
5738       CHECKSUM_STRING (AT_string (at));
5739       break;
5740
5741     case dw_val_class_addr:
5742       r = AT_addr (at);
5743       gcc_assert (GET_CODE (r) == SYMBOL_REF);
5744       CHECKSUM_STRING (XSTR (r, 0));
5745       break;
5746
5747     case dw_val_class_offset:
5748       CHECKSUM (at->dw_attr_val.v.val_offset);
5749       break;
5750
5751     case dw_val_class_loc:
5752       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5753         loc_checksum (loc, ctx);
5754       break;
5755
5756     case dw_val_class_die_ref:
5757       die_checksum (AT_ref (at), ctx, mark);
5758       break;
5759
5760     case dw_val_class_fde_ref:
5761     case dw_val_class_vms_delta:
5762     case dw_val_class_lbl_id:
5763     case dw_val_class_lineptr:
5764     case dw_val_class_macptr:
5765       break;
5766
5767     case dw_val_class_file:
5768       CHECKSUM_STRING (AT_file (at)->filename);
5769       break;
5770
5771     case dw_val_class_data8:
5772       CHECKSUM (at->dw_attr_val.v.val_data8);
5773       break;
5774
5775     default:
5776       break;
5777     }
5778 }
5779
5780 /* Calculate the checksum of a DIE.  */
5781
5782 static void
5783 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5784 {
5785   dw_die_ref c;
5786   dw_attr_ref a;
5787   unsigned ix;
5788
5789   /* To avoid infinite recursion.  */
5790   if (die->die_mark)
5791     {
5792       CHECKSUM (die->die_mark);
5793       return;
5794     }
5795   die->die_mark = ++(*mark);
5796
5797   CHECKSUM (die->die_tag);
5798
5799   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5800     attr_checksum (a, ctx, mark);
5801
5802   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
5803 }
5804
5805 #undef CHECKSUM
5806 #undef CHECKSUM_STRING
5807
5808 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
5809 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5810 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
5811 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
5812 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
5813 #define CHECKSUM_ATTR(FOO) \
5814   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
5815
5816 /* Calculate the checksum of a number in signed LEB128 format.  */
5817
5818 static void
5819 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
5820 {
5821   unsigned char byte;
5822   bool more;
5823
5824   while (1)
5825     {
5826       byte = (value & 0x7f);
5827       value >>= 7;
5828       more = !((value == 0 && (byte & 0x40) == 0)
5829                 || (value == -1 && (byte & 0x40) != 0));
5830       if (more)
5831         byte |= 0x80;
5832       CHECKSUM (byte);
5833       if (!more)
5834         break;
5835     }
5836 }
5837
5838 /* Calculate the checksum of a number in unsigned LEB128 format.  */
5839
5840 static void
5841 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
5842 {
5843   while (1)
5844     {
5845       unsigned char byte = (value & 0x7f);
5846       value >>= 7;
5847       if (value != 0)
5848         /* More bytes to follow.  */
5849         byte |= 0x80;
5850       CHECKSUM (byte);
5851       if (value == 0)
5852         break;
5853     }
5854 }
5855
5856 /* Checksum the context of the DIE.  This adds the names of any
5857    surrounding namespaces or structures to the checksum.  */
5858
5859 static void
5860 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
5861 {
5862   const char *name;
5863   dw_die_ref spec;
5864   int tag = die->die_tag;
5865
5866   if (tag != DW_TAG_namespace
5867       && tag != DW_TAG_structure_type
5868       && tag != DW_TAG_class_type)
5869     return;
5870
5871   name = get_AT_string (die, DW_AT_name);
5872
5873   spec = get_AT_ref (die, DW_AT_specification);
5874   if (spec != NULL)
5875     die = spec;
5876
5877   if (die->die_parent != NULL)
5878     checksum_die_context (die->die_parent, ctx);
5879
5880   CHECKSUM_ULEB128 ('C');
5881   CHECKSUM_ULEB128 (tag);
5882   if (name != NULL)
5883     CHECKSUM_STRING (name);
5884 }
5885
5886 /* Calculate the checksum of a location expression.  */
5887
5888 static inline void
5889 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5890 {
5891   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
5892      were emitted as a DW_FORM_sdata instead of a location expression.  */
5893   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
5894     {
5895       CHECKSUM_ULEB128 (DW_FORM_sdata);
5896       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
5897       return;
5898     }
5899
5900   /* Otherwise, just checksum the raw location expression.  */
5901   while (loc != NULL)
5902     {
5903       CHECKSUM_ULEB128 (loc->dw_loc_opc);
5904       CHECKSUM (loc->dw_loc_oprnd1);
5905       CHECKSUM (loc->dw_loc_oprnd2);
5906       loc = loc->dw_loc_next;
5907     }
5908 }
5909
5910 /* Calculate the checksum of an attribute.  */
5911
5912 static void
5913 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
5914                        struct md5_ctx *ctx, int *mark)
5915 {
5916   dw_loc_descr_ref loc;
5917   rtx r;
5918
5919   if (AT_class (at) == dw_val_class_die_ref)
5920     {
5921       dw_die_ref target_die = AT_ref (at);
5922
5923       /* For pointer and reference types, we checksum only the (qualified)
5924          name of the target type (if there is a name).  For friend entries,
5925          we checksum only the (qualified) name of the target type or function.
5926          This allows the checksum to remain the same whether the target type
5927          is complete or not.  */
5928       if ((at->dw_attr == DW_AT_type
5929            && (tag == DW_TAG_pointer_type
5930                || tag == DW_TAG_reference_type
5931                || tag == DW_TAG_rvalue_reference_type
5932                || tag == DW_TAG_ptr_to_member_type))
5933           || (at->dw_attr == DW_AT_friend
5934               && tag == DW_TAG_friend))
5935         {
5936           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
5937
5938           if (name_attr != NULL)
5939             {
5940               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5941
5942               if (decl == NULL)
5943                 decl = target_die;
5944               CHECKSUM_ULEB128 ('N');
5945               CHECKSUM_ULEB128 (at->dw_attr);
5946               if (decl->die_parent != NULL)
5947                 checksum_die_context (decl->die_parent, ctx);
5948               CHECKSUM_ULEB128 ('E');
5949               CHECKSUM_STRING (AT_string (name_attr));
5950               return;
5951             }
5952         }
5953
5954       /* For all other references to another DIE, we check to see if the
5955          target DIE has already been visited.  If it has, we emit a
5956          backward reference; if not, we descend recursively.  */
5957       if (target_die->die_mark > 0)
5958         {
5959           CHECKSUM_ULEB128 ('R');
5960           CHECKSUM_ULEB128 (at->dw_attr);
5961           CHECKSUM_ULEB128 (target_die->die_mark);
5962         }
5963       else
5964         {
5965           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5966
5967           if (decl == NULL)
5968             decl = target_die;
5969           target_die->die_mark = ++(*mark);
5970           CHECKSUM_ULEB128 ('T');
5971           CHECKSUM_ULEB128 (at->dw_attr);
5972           if (decl->die_parent != NULL)
5973             checksum_die_context (decl->die_parent, ctx);
5974           die_checksum_ordered (target_die, ctx, mark);
5975         }
5976       return;
5977     }
5978
5979   CHECKSUM_ULEB128 ('A');
5980   CHECKSUM_ULEB128 (at->dw_attr);
5981
5982   switch (AT_class (at))
5983     {
5984     case dw_val_class_const:
5985       CHECKSUM_ULEB128 (DW_FORM_sdata);
5986       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
5987       break;
5988
5989     case dw_val_class_unsigned_const:
5990       CHECKSUM_ULEB128 (DW_FORM_sdata);
5991       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
5992       break;
5993
5994     case dw_val_class_const_double:
5995       CHECKSUM_ULEB128 (DW_FORM_block);
5996       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
5997       CHECKSUM (at->dw_attr_val.v.val_double);
5998       break;
5999
6000     case dw_val_class_vec:
6001       CHECKSUM_ULEB128 (DW_FORM_block);
6002       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
6003       CHECKSUM (at->dw_attr_val.v.val_vec);
6004       break;
6005
6006     case dw_val_class_flag:
6007       CHECKSUM_ULEB128 (DW_FORM_flag);
6008       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6009       break;
6010
6011     case dw_val_class_str:
6012       CHECKSUM_ULEB128 (DW_FORM_string);
6013       CHECKSUM_STRING (AT_string (at));
6014       break;
6015
6016     case dw_val_class_addr:
6017       r = AT_addr (at);
6018       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6019       CHECKSUM_ULEB128 (DW_FORM_string);
6020       CHECKSUM_STRING (XSTR (r, 0));
6021       break;
6022
6023     case dw_val_class_offset:
6024       CHECKSUM_ULEB128 (DW_FORM_sdata);
6025       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6026       break;
6027
6028     case dw_val_class_loc:
6029       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6030         loc_checksum_ordered (loc, ctx);
6031       break;
6032
6033     case dw_val_class_fde_ref:
6034     case dw_val_class_lbl_id:
6035     case dw_val_class_lineptr:
6036     case dw_val_class_macptr:
6037       break;
6038
6039     case dw_val_class_file:
6040       CHECKSUM_ULEB128 (DW_FORM_string);
6041       CHECKSUM_STRING (AT_file (at)->filename);
6042       break;
6043
6044     case dw_val_class_data8:
6045       CHECKSUM (at->dw_attr_val.v.val_data8);
6046       break;
6047
6048     default:
6049       break;
6050     }
6051 }
6052
6053 struct checksum_attributes
6054 {
6055   dw_attr_ref at_name;
6056   dw_attr_ref at_type;
6057   dw_attr_ref at_friend;
6058   dw_attr_ref at_accessibility;
6059   dw_attr_ref at_address_class;
6060   dw_attr_ref at_allocated;
6061   dw_attr_ref at_artificial;
6062   dw_attr_ref at_associated;
6063   dw_attr_ref at_binary_scale;
6064   dw_attr_ref at_bit_offset;
6065   dw_attr_ref at_bit_size;
6066   dw_attr_ref at_bit_stride;
6067   dw_attr_ref at_byte_size;
6068   dw_attr_ref at_byte_stride;
6069   dw_attr_ref at_const_value;
6070   dw_attr_ref at_containing_type;
6071   dw_attr_ref at_count;
6072   dw_attr_ref at_data_location;
6073   dw_attr_ref at_data_member_location;
6074   dw_attr_ref at_decimal_scale;
6075   dw_attr_ref at_decimal_sign;
6076   dw_attr_ref at_default_value;
6077   dw_attr_ref at_digit_count;
6078   dw_attr_ref at_discr;
6079   dw_attr_ref at_discr_list;
6080   dw_attr_ref at_discr_value;
6081   dw_attr_ref at_encoding;
6082   dw_attr_ref at_endianity;
6083   dw_attr_ref at_explicit;
6084   dw_attr_ref at_is_optional;
6085   dw_attr_ref at_location;
6086   dw_attr_ref at_lower_bound;
6087   dw_attr_ref at_mutable;
6088   dw_attr_ref at_ordering;
6089   dw_attr_ref at_picture_string;
6090   dw_attr_ref at_prototyped;
6091   dw_attr_ref at_small;
6092   dw_attr_ref at_segment;
6093   dw_attr_ref at_string_length;
6094   dw_attr_ref at_threads_scaled;
6095   dw_attr_ref at_upper_bound;
6096   dw_attr_ref at_use_location;
6097   dw_attr_ref at_use_UTF8;
6098   dw_attr_ref at_variable_parameter;
6099   dw_attr_ref at_virtuality;
6100   dw_attr_ref at_visibility;
6101   dw_attr_ref at_vtable_elem_location;
6102 };
6103
6104 /* Collect the attributes that we will want to use for the checksum.  */
6105
6106 static void
6107 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6108 {
6109   dw_attr_ref a;
6110   unsigned ix;
6111
6112   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6113     {
6114       switch (a->dw_attr)
6115         {
6116         case DW_AT_name:
6117           attrs->at_name = a;
6118           break;
6119         case DW_AT_type:
6120           attrs->at_type = a;
6121           break;
6122         case DW_AT_friend:
6123           attrs->at_friend = a;
6124           break;
6125         case DW_AT_accessibility:
6126           attrs->at_accessibility = a;
6127           break;
6128         case DW_AT_address_class:
6129           attrs->at_address_class = a;
6130           break;
6131         case DW_AT_allocated:
6132           attrs->at_allocated = a;
6133           break;
6134         case DW_AT_artificial:
6135           attrs->at_artificial = a;
6136           break;
6137         case DW_AT_associated:
6138           attrs->at_associated = a;
6139           break;
6140         case DW_AT_binary_scale:
6141           attrs->at_binary_scale = a;
6142           break;
6143         case DW_AT_bit_offset:
6144           attrs->at_bit_offset = a;
6145           break;
6146         case DW_AT_bit_size:
6147           attrs->at_bit_size = a;
6148           break;
6149         case DW_AT_bit_stride:
6150           attrs->at_bit_stride = a;
6151           break;
6152         case DW_AT_byte_size:
6153           attrs->at_byte_size = a;
6154           break;
6155         case DW_AT_byte_stride:
6156           attrs->at_byte_stride = a;
6157           break;
6158         case DW_AT_const_value:
6159           attrs->at_const_value = a;
6160           break;
6161         case DW_AT_containing_type:
6162           attrs->at_containing_type = a;
6163           break;
6164         case DW_AT_count:
6165           attrs->at_count = a;
6166           break;
6167         case DW_AT_data_location:
6168           attrs->at_data_location = a;
6169           break;
6170         case DW_AT_data_member_location:
6171           attrs->at_data_member_location = a;
6172           break;
6173         case DW_AT_decimal_scale:
6174           attrs->at_decimal_scale = a;
6175           break;
6176         case DW_AT_decimal_sign:
6177           attrs->at_decimal_sign = a;
6178           break;
6179         case DW_AT_default_value:
6180           attrs->at_default_value = a;
6181           break;
6182         case DW_AT_digit_count:
6183           attrs->at_digit_count = a;
6184           break;
6185         case DW_AT_discr:
6186           attrs->at_discr = a;
6187           break;
6188         case DW_AT_discr_list:
6189           attrs->at_discr_list = a;
6190           break;
6191         case DW_AT_discr_value:
6192           attrs->at_discr_value = a;
6193           break;
6194         case DW_AT_encoding:
6195           attrs->at_encoding = a;
6196           break;
6197         case DW_AT_endianity:
6198           attrs->at_endianity = a;
6199           break;
6200         case DW_AT_explicit:
6201           attrs->at_explicit = a;
6202           break;
6203         case DW_AT_is_optional:
6204           attrs->at_is_optional = a;
6205           break;
6206         case DW_AT_location:
6207           attrs->at_location = a;
6208           break;
6209         case DW_AT_lower_bound:
6210           attrs->at_lower_bound = a;
6211           break;
6212         case DW_AT_mutable:
6213           attrs->at_mutable = a;
6214           break;
6215         case DW_AT_ordering:
6216           attrs->at_ordering = a;
6217           break;
6218         case DW_AT_picture_string:
6219           attrs->at_picture_string = a;
6220           break;
6221         case DW_AT_prototyped:
6222           attrs->at_prototyped = a;
6223           break;
6224         case DW_AT_small:
6225           attrs->at_small = a;
6226           break;
6227         case DW_AT_segment:
6228           attrs->at_segment = a;
6229           break;
6230         case DW_AT_string_length:
6231           attrs->at_string_length = a;
6232           break;
6233         case DW_AT_threads_scaled:
6234           attrs->at_threads_scaled = a;
6235           break;
6236         case DW_AT_upper_bound:
6237           attrs->at_upper_bound = a;
6238           break;
6239         case DW_AT_use_location:
6240           attrs->at_use_location = a;
6241           break;
6242         case DW_AT_use_UTF8:
6243           attrs->at_use_UTF8 = a;
6244           break;
6245         case DW_AT_variable_parameter:
6246           attrs->at_variable_parameter = a;
6247           break;
6248         case DW_AT_virtuality:
6249           attrs->at_virtuality = a;
6250           break;
6251         case DW_AT_visibility:
6252           attrs->at_visibility = a;
6253           break;
6254         case DW_AT_vtable_elem_location:
6255           attrs->at_vtable_elem_location = a;
6256           break;
6257         default:
6258           break;
6259         }
6260     }
6261 }
6262
6263 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
6264
6265 static void
6266 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6267 {
6268   dw_die_ref c;
6269   dw_die_ref decl;
6270   struct checksum_attributes attrs;
6271
6272   CHECKSUM_ULEB128 ('D');
6273   CHECKSUM_ULEB128 (die->die_tag);
6274
6275   memset (&attrs, 0, sizeof (attrs));
6276
6277   decl = get_AT_ref (die, DW_AT_specification);
6278   if (decl != NULL)
6279     collect_checksum_attributes (&attrs, decl);
6280   collect_checksum_attributes (&attrs, die);
6281
6282   CHECKSUM_ATTR (attrs.at_name);
6283   CHECKSUM_ATTR (attrs.at_accessibility);
6284   CHECKSUM_ATTR (attrs.at_address_class);
6285   CHECKSUM_ATTR (attrs.at_allocated);
6286   CHECKSUM_ATTR (attrs.at_artificial);
6287   CHECKSUM_ATTR (attrs.at_associated);
6288   CHECKSUM_ATTR (attrs.at_binary_scale);
6289   CHECKSUM_ATTR (attrs.at_bit_offset);
6290   CHECKSUM_ATTR (attrs.at_bit_size);
6291   CHECKSUM_ATTR (attrs.at_bit_stride);
6292   CHECKSUM_ATTR (attrs.at_byte_size);
6293   CHECKSUM_ATTR (attrs.at_byte_stride);
6294   CHECKSUM_ATTR (attrs.at_const_value);
6295   CHECKSUM_ATTR (attrs.at_containing_type);
6296   CHECKSUM_ATTR (attrs.at_count);
6297   CHECKSUM_ATTR (attrs.at_data_location);
6298   CHECKSUM_ATTR (attrs.at_data_member_location);
6299   CHECKSUM_ATTR (attrs.at_decimal_scale);
6300   CHECKSUM_ATTR (attrs.at_decimal_sign);
6301   CHECKSUM_ATTR (attrs.at_default_value);
6302   CHECKSUM_ATTR (attrs.at_digit_count);
6303   CHECKSUM_ATTR (attrs.at_discr);
6304   CHECKSUM_ATTR (attrs.at_discr_list);
6305   CHECKSUM_ATTR (attrs.at_discr_value);
6306   CHECKSUM_ATTR (attrs.at_encoding);
6307   CHECKSUM_ATTR (attrs.at_endianity);
6308   CHECKSUM_ATTR (attrs.at_explicit);
6309   CHECKSUM_ATTR (attrs.at_is_optional);
6310   CHECKSUM_ATTR (attrs.at_location);
6311   CHECKSUM_ATTR (attrs.at_lower_bound);
6312   CHECKSUM_ATTR (attrs.at_mutable);
6313   CHECKSUM_ATTR (attrs.at_ordering);
6314   CHECKSUM_ATTR (attrs.at_picture_string);
6315   CHECKSUM_ATTR (attrs.at_prototyped);
6316   CHECKSUM_ATTR (attrs.at_small);
6317   CHECKSUM_ATTR (attrs.at_segment);
6318   CHECKSUM_ATTR (attrs.at_string_length);
6319   CHECKSUM_ATTR (attrs.at_threads_scaled);
6320   CHECKSUM_ATTR (attrs.at_upper_bound);
6321   CHECKSUM_ATTR (attrs.at_use_location);
6322   CHECKSUM_ATTR (attrs.at_use_UTF8);
6323   CHECKSUM_ATTR (attrs.at_variable_parameter);
6324   CHECKSUM_ATTR (attrs.at_virtuality);
6325   CHECKSUM_ATTR (attrs.at_visibility);
6326   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6327   CHECKSUM_ATTR (attrs.at_type);
6328   CHECKSUM_ATTR (attrs.at_friend);
6329
6330   /* Checksum the child DIEs, except for nested types and member functions.  */
6331   c = die->die_child;
6332   if (c) do {
6333     dw_attr_ref name_attr;
6334
6335     c = c->die_sib;
6336     name_attr = get_AT (c, DW_AT_name);
6337     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
6338         && name_attr != NULL)
6339       {
6340         CHECKSUM_ULEB128 ('S');
6341         CHECKSUM_ULEB128 (c->die_tag);
6342         CHECKSUM_STRING (AT_string (name_attr));
6343       }
6344     else
6345       {
6346         /* Mark this DIE so it gets processed when unmarking.  */
6347         if (c->die_mark == 0)
6348           c->die_mark = -1;
6349         die_checksum_ordered (c, ctx, mark);
6350       }
6351   } while (c != die->die_child);
6352
6353   CHECKSUM_ULEB128 (0);
6354 }
6355
6356 #undef CHECKSUM
6357 #undef CHECKSUM_STRING
6358 #undef CHECKSUM_ATTR
6359 #undef CHECKSUM_LEB128
6360 #undef CHECKSUM_ULEB128
6361
6362 /* Generate the type signature for DIE.  This is computed by generating an
6363    MD5 checksum over the DIE's tag, its relevant attributes, and its
6364    children.  Attributes that are references to other DIEs are processed
6365    by recursion, using the MARK field to prevent infinite recursion.
6366    If the DIE is nested inside a namespace or another type, we also
6367    need to include that context in the signature.  The lower 64 bits
6368    of the resulting MD5 checksum comprise the signature.  */
6369
6370 static void
6371 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6372 {
6373   int mark;
6374   const char *name;
6375   unsigned char checksum[16];
6376   struct md5_ctx ctx;
6377   dw_die_ref decl;
6378
6379   name = get_AT_string (die, DW_AT_name);
6380   decl = get_AT_ref (die, DW_AT_specification);
6381
6382   /* First, compute a signature for just the type name (and its surrounding
6383      context, if any.  This is stored in the type unit DIE for link-time
6384      ODR (one-definition rule) checking.  */
6385
6386   if (is_cxx() && name != NULL)
6387     {
6388       md5_init_ctx (&ctx);
6389
6390       /* Checksum the names of surrounding namespaces and structures.  */
6391       if (decl != NULL && decl->die_parent != NULL)
6392         checksum_die_context (decl->die_parent, &ctx);
6393
6394       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
6395       md5_process_bytes (name, strlen (name) + 1, &ctx);
6396       md5_finish_ctx (&ctx, checksum);
6397
6398       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6399     }
6400
6401   /* Next, compute the complete type signature.  */
6402
6403   md5_init_ctx (&ctx);
6404   mark = 1;
6405   die->die_mark = mark;
6406
6407   /* Checksum the names of surrounding namespaces and structures.  */
6408   if (decl != NULL && decl->die_parent != NULL)
6409     checksum_die_context (decl->die_parent, &ctx);
6410
6411   /* Checksum the DIE and its children.  */
6412   die_checksum_ordered (die, &ctx, &mark);
6413   unmark_all_dies (die);
6414   md5_finish_ctx (&ctx, checksum);
6415
6416   /* Store the signature in the type node and link the type DIE and the
6417      type node together.  */
6418   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6419           DWARF_TYPE_SIGNATURE_SIZE);
6420   die->die_id.die_type_node = type_node;
6421   type_node->type_die = die;
6422
6423   /* If the DIE is a specification, link its declaration to the type node
6424      as well.  */
6425   if (decl != NULL)
6426     decl->die_id.die_type_node = type_node;
6427 }
6428
6429 /* Do the location expressions look same?  */
6430 static inline int
6431 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6432 {
6433   return loc1->dw_loc_opc == loc2->dw_loc_opc
6434          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6435          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6436 }
6437
6438 /* Do the values look the same?  */
6439 static int
6440 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6441 {
6442   dw_loc_descr_ref loc1, loc2;
6443   rtx r1, r2;
6444
6445   if (v1->val_class != v2->val_class)
6446     return 0;
6447
6448   switch (v1->val_class)
6449     {
6450     case dw_val_class_const:
6451       return v1->v.val_int == v2->v.val_int;
6452     case dw_val_class_unsigned_const:
6453       return v1->v.val_unsigned == v2->v.val_unsigned;
6454     case dw_val_class_const_double:
6455       return v1->v.val_double.high == v2->v.val_double.high
6456              && v1->v.val_double.low == v2->v.val_double.low;
6457     case dw_val_class_vec:
6458       if (v1->v.val_vec.length != v2->v.val_vec.length
6459           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6460         return 0;
6461       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6462                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
6463         return 0;
6464       return 1;
6465     case dw_val_class_flag:
6466       return v1->v.val_flag == v2->v.val_flag;
6467     case dw_val_class_str:
6468       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6469
6470     case dw_val_class_addr:
6471       r1 = v1->v.val_addr;
6472       r2 = v2->v.val_addr;
6473       if (GET_CODE (r1) != GET_CODE (r2))
6474         return 0;
6475       return !rtx_equal_p (r1, r2);
6476
6477     case dw_val_class_offset:
6478       return v1->v.val_offset == v2->v.val_offset;
6479
6480     case dw_val_class_loc:
6481       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6482            loc1 && loc2;
6483            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6484         if (!same_loc_p (loc1, loc2, mark))
6485           return 0;
6486       return !loc1 && !loc2;
6487
6488     case dw_val_class_die_ref:
6489       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6490
6491     case dw_val_class_fde_ref:
6492     case dw_val_class_vms_delta:
6493     case dw_val_class_lbl_id:
6494     case dw_val_class_lineptr:
6495     case dw_val_class_macptr:
6496       return 1;
6497
6498     case dw_val_class_file:
6499       return v1->v.val_file == v2->v.val_file;
6500
6501     case dw_val_class_data8:
6502       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6503
6504     default:
6505       return 1;
6506     }
6507 }
6508
6509 /* Do the attributes look the same?  */
6510
6511 static int
6512 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6513 {
6514   if (at1->dw_attr != at2->dw_attr)
6515     return 0;
6516
6517   /* We don't care that this was compiled with a different compiler
6518      snapshot; if the output is the same, that's what matters. */
6519   if (at1->dw_attr == DW_AT_producer)
6520     return 1;
6521
6522   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6523 }
6524
6525 /* Do the dies look the same?  */
6526
6527 static int
6528 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6529 {
6530   dw_die_ref c1, c2;
6531   dw_attr_ref a1;
6532   unsigned ix;
6533
6534   /* To avoid infinite recursion.  */
6535   if (die1->die_mark)
6536     return die1->die_mark == die2->die_mark;
6537   die1->die_mark = die2->die_mark = ++(*mark);
6538
6539   if (die1->die_tag != die2->die_tag)
6540     return 0;
6541
6542   if (VEC_length (dw_attr_node, die1->die_attr)
6543       != VEC_length (dw_attr_node, die2->die_attr))
6544     return 0;
6545
6546   FOR_EACH_VEC_ELT (dw_attr_node, die1->die_attr, ix, a1)
6547     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
6548       return 0;
6549
6550   c1 = die1->die_child;
6551   c2 = die2->die_child;
6552   if (! c1)
6553     {
6554       if (c2)
6555         return 0;
6556     }
6557   else
6558     for (;;)
6559       {
6560         if (!same_die_p (c1, c2, mark))
6561           return 0;
6562         c1 = c1->die_sib;
6563         c2 = c2->die_sib;
6564         if (c1 == die1->die_child)
6565           {
6566             if (c2 == die2->die_child)
6567               break;
6568             else
6569               return 0;
6570           }
6571     }
6572
6573   return 1;
6574 }
6575
6576 /* Do the dies look the same?  Wrapper around same_die_p.  */
6577
6578 static int
6579 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6580 {
6581   int mark = 0;
6582   int ret = same_die_p (die1, die2, &mark);
6583
6584   unmark_all_dies (die1);
6585   unmark_all_dies (die2);
6586
6587   return ret;
6588 }
6589
6590 /* The prefix to attach to symbols on DIEs in the current comdat debug
6591    info section.  */
6592 static char *comdat_symbol_id;
6593
6594 /* The index of the current symbol within the current comdat CU.  */
6595 static unsigned int comdat_symbol_number;
6596
6597 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6598    children, and set comdat_symbol_id accordingly.  */
6599
6600 static void
6601 compute_section_prefix (dw_die_ref unit_die)
6602 {
6603   const char *die_name = get_AT_string (unit_die, DW_AT_name);
6604   const char *base = die_name ? lbasename (die_name) : "anonymous";
6605   char *name = XALLOCAVEC (char, strlen (base) + 64);
6606   char *p;
6607   int i, mark;
6608   unsigned char checksum[16];
6609   struct md5_ctx ctx;
6610
6611   /* Compute the checksum of the DIE, then append part of it as hex digits to
6612      the name filename of the unit.  */
6613
6614   md5_init_ctx (&ctx);
6615   mark = 0;
6616   die_checksum (unit_die, &ctx, &mark);
6617   unmark_all_dies (unit_die);
6618   md5_finish_ctx (&ctx, checksum);
6619
6620   sprintf (name, "%s.", base);
6621   clean_symbol_name (name);
6622
6623   p = name + strlen (name);
6624   for (i = 0; i < 4; i++)
6625     {
6626       sprintf (p, "%.2x", checksum[i]);
6627       p += 2;
6628     }
6629
6630   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6631   comdat_symbol_number = 0;
6632 }
6633
6634 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6635
6636 static int
6637 is_type_die (dw_die_ref die)
6638 {
6639   switch (die->die_tag)
6640     {
6641     case DW_TAG_array_type:
6642     case DW_TAG_class_type:
6643     case DW_TAG_interface_type:
6644     case DW_TAG_enumeration_type:
6645     case DW_TAG_pointer_type:
6646     case DW_TAG_reference_type:
6647     case DW_TAG_rvalue_reference_type:
6648     case DW_TAG_string_type:
6649     case DW_TAG_structure_type:
6650     case DW_TAG_subroutine_type:
6651     case DW_TAG_union_type:
6652     case DW_TAG_ptr_to_member_type:
6653     case DW_TAG_set_type:
6654     case DW_TAG_subrange_type:
6655     case DW_TAG_base_type:
6656     case DW_TAG_const_type:
6657     case DW_TAG_file_type:
6658     case DW_TAG_packed_type:
6659     case DW_TAG_volatile_type:
6660     case DW_TAG_typedef:
6661       return 1;
6662     default:
6663       return 0;
6664     }
6665 }
6666
6667 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6668    Basically, we want to choose the bits that are likely to be shared between
6669    compilations (types) and leave out the bits that are specific to individual
6670    compilations (functions).  */
6671
6672 static int
6673 is_comdat_die (dw_die_ref c)
6674 {
6675   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6676      we do for stabs.  The advantage is a greater likelihood of sharing between
6677      objects that don't include headers in the same order (and therefore would
6678      put the base types in a different comdat).  jason 8/28/00 */
6679
6680   if (c->die_tag == DW_TAG_base_type)
6681     return 0;
6682
6683   if (c->die_tag == DW_TAG_pointer_type
6684       || c->die_tag == DW_TAG_reference_type
6685       || c->die_tag == DW_TAG_rvalue_reference_type
6686       || c->die_tag == DW_TAG_const_type
6687       || c->die_tag == DW_TAG_volatile_type)
6688     {
6689       dw_die_ref t = get_AT_ref (c, DW_AT_type);
6690
6691       return t ? is_comdat_die (t) : 0;
6692     }
6693
6694   return is_type_die (c);
6695 }
6696
6697 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6698    compilation unit.  */
6699
6700 static int
6701 is_symbol_die (dw_die_ref c)
6702 {
6703   return (is_type_die (c)
6704           || is_declaration_die (c)
6705           || c->die_tag == DW_TAG_namespace
6706           || c->die_tag == DW_TAG_module);
6707 }
6708
6709 /* Returns true iff C is a compile-unit DIE.  */
6710
6711 static inline bool
6712 is_cu_die (dw_die_ref c)
6713 {
6714   return c && c->die_tag == DW_TAG_compile_unit;
6715 }
6716
6717 static char *
6718 gen_internal_sym (const char *prefix)
6719 {
6720   char buf[256];
6721
6722   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6723   return xstrdup (buf);
6724 }
6725
6726 /* Assign symbols to all worthy DIEs under DIE.  */
6727
6728 static void
6729 assign_symbol_names (dw_die_ref die)
6730 {
6731   dw_die_ref c;
6732
6733   if (is_symbol_die (die))
6734     {
6735       if (comdat_symbol_id)
6736         {
6737           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
6738
6739           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6740                    comdat_symbol_id, comdat_symbol_number++);
6741           die->die_id.die_symbol = xstrdup (p);
6742         }
6743       else
6744         die->die_id.die_symbol = gen_internal_sym ("LDIE");
6745     }
6746
6747   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6748 }
6749
6750 struct cu_hash_table_entry
6751 {
6752   dw_die_ref cu;
6753   unsigned min_comdat_num, max_comdat_num;
6754   struct cu_hash_table_entry *next;
6755 };
6756
6757 /* Routines to manipulate hash table of CUs.  */
6758 static hashval_t
6759 htab_cu_hash (const void *of)
6760 {
6761   const struct cu_hash_table_entry *const entry =
6762     (const struct cu_hash_table_entry *) of;
6763
6764   return htab_hash_string (entry->cu->die_id.die_symbol);
6765 }
6766
6767 static int
6768 htab_cu_eq (const void *of1, const void *of2)
6769 {
6770   const struct cu_hash_table_entry *const entry1 =
6771     (const struct cu_hash_table_entry *) of1;
6772   const struct die_struct *const entry2 = (const struct die_struct *) of2;
6773
6774   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
6775 }
6776
6777 static void
6778 htab_cu_del (void *what)
6779 {
6780   struct cu_hash_table_entry *next,
6781     *entry = (struct cu_hash_table_entry *) what;
6782
6783   while (entry)
6784     {
6785       next = entry->next;
6786       free (entry);
6787       entry = next;
6788     }
6789 }
6790
6791 /* Check whether we have already seen this CU and set up SYM_NUM
6792    accordingly.  */
6793 static int
6794 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6795 {
6796   struct cu_hash_table_entry dummy;
6797   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6798
6799   dummy.max_comdat_num = 0;
6800
6801   slot = (struct cu_hash_table_entry **)
6802     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6803         INSERT);
6804   entry = *slot;
6805
6806   for (; entry; last = entry, entry = entry->next)
6807     {
6808       if (same_die_p_wrap (cu, entry->cu))
6809         break;
6810     }
6811
6812   if (entry)
6813     {
6814       *sym_num = entry->min_comdat_num;
6815       return 1;
6816     }
6817
6818   entry = XCNEW (struct cu_hash_table_entry);
6819   entry->cu = cu;
6820   entry->min_comdat_num = *sym_num = last->max_comdat_num;
6821   entry->next = *slot;
6822   *slot = entry;
6823
6824   return 0;
6825 }
6826
6827 /* Record SYM_NUM to record of CU in HTABLE.  */
6828 static void
6829 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6830 {
6831   struct cu_hash_table_entry **slot, *entry;
6832
6833   slot = (struct cu_hash_table_entry **)
6834     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6835         NO_INSERT);
6836   entry = *slot;
6837
6838   entry->max_comdat_num = sym_num;
6839 }
6840
6841 /* Traverse the DIE (which is always comp_unit_die), and set up
6842    additional compilation units for each of the include files we see
6843    bracketed by BINCL/EINCL.  */
6844
6845 static void
6846 break_out_includes (dw_die_ref die)
6847 {
6848   dw_die_ref c;
6849   dw_die_ref unit = NULL;
6850   limbo_die_node *node, **pnode;
6851   htab_t cu_hash_table;
6852
6853   c = die->die_child;
6854   if (c) do {
6855     dw_die_ref prev = c;
6856     c = c->die_sib;
6857     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6858            || (unit && is_comdat_die (c)))
6859       {
6860         dw_die_ref next = c->die_sib;
6861
6862         /* This DIE is for a secondary CU; remove it from the main one.  */
6863         remove_child_with_prev (c, prev);
6864
6865         if (c->die_tag == DW_TAG_GNU_BINCL)
6866           unit = push_new_compile_unit (unit, c);
6867         else if (c->die_tag == DW_TAG_GNU_EINCL)
6868           unit = pop_compile_unit (unit);
6869         else
6870           add_child_die (unit, c);
6871         c = next;
6872         if (c == die->die_child)
6873           break;
6874       }
6875   } while (c != die->die_child);
6876
6877 #if 0
6878   /* We can only use this in debugging, since the frontend doesn't check
6879      to make sure that we leave every include file we enter.  */
6880   gcc_assert (!unit);
6881 #endif
6882
6883   assign_symbol_names (die);
6884   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6885   for (node = limbo_die_list, pnode = &limbo_die_list;
6886        node;
6887        node = node->next)
6888     {
6889       int is_dupl;
6890
6891       compute_section_prefix (node->die);
6892       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6893                         &comdat_symbol_number);
6894       assign_symbol_names (node->die);
6895       if (is_dupl)
6896         *pnode = node->next;
6897       else
6898         {
6899           pnode = &node->next;
6900           record_comdat_symbol_number (node->die, cu_hash_table,
6901                 comdat_symbol_number);
6902         }
6903     }
6904   htab_delete (cu_hash_table);
6905 }
6906
6907 /* Return non-zero if this DIE is a declaration.  */
6908
6909 static int
6910 is_declaration_die (dw_die_ref die)
6911 {
6912   dw_attr_ref a;
6913   unsigned ix;
6914
6915   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6916     if (a->dw_attr == DW_AT_declaration)
6917       return 1;
6918
6919   return 0;
6920 }
6921
6922 /* Return non-zero if this DIE is nested inside a subprogram.  */
6923
6924 static int
6925 is_nested_in_subprogram (dw_die_ref die)
6926 {
6927   dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
6928
6929   if (decl == NULL)
6930     decl = die;
6931   return local_scope_p (decl);
6932 }
6933
6934 /* Return non-zero if this DIE contains a defining declaration of a
6935    subprogram.  */
6936
6937 static int
6938 contains_subprogram_definition (dw_die_ref die)
6939 {
6940   dw_die_ref c;
6941
6942   if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
6943     return 1;
6944   FOR_EACH_CHILD (die, c, if (contains_subprogram_definition(c)) return 1);
6945   return 0;
6946 }
6947
6948 /* Return non-zero if this is a type DIE that should be moved to a
6949    COMDAT .debug_types section.  */
6950
6951 static int
6952 should_move_die_to_comdat (dw_die_ref die)
6953 {
6954   switch (die->die_tag)
6955     {
6956     case DW_TAG_class_type:
6957     case DW_TAG_structure_type:
6958     case DW_TAG_enumeration_type:
6959     case DW_TAG_union_type:
6960       /* Don't move declarations, inlined instances, or types nested in a
6961          subprogram.  */
6962       if (is_declaration_die (die)
6963           || get_AT (die, DW_AT_abstract_origin)
6964           || is_nested_in_subprogram (die))
6965         return 0;
6966       /* A type definition should never contain a subprogram definition.  */
6967       gcc_assert (!contains_subprogram_definition (die));
6968       return 1;
6969     case DW_TAG_array_type:
6970     case DW_TAG_interface_type:
6971     case DW_TAG_pointer_type:
6972     case DW_TAG_reference_type:
6973     case DW_TAG_rvalue_reference_type:
6974     case DW_TAG_string_type:
6975     case DW_TAG_subroutine_type:
6976     case DW_TAG_ptr_to_member_type:
6977     case DW_TAG_set_type:
6978     case DW_TAG_subrange_type:
6979     case DW_TAG_base_type:
6980     case DW_TAG_const_type:
6981     case DW_TAG_file_type:
6982     case DW_TAG_packed_type:
6983     case DW_TAG_volatile_type:
6984     case DW_TAG_typedef:
6985     default:
6986       return 0;
6987     }
6988 }
6989
6990 /* Make a clone of DIE.  */
6991
6992 static dw_die_ref
6993 clone_die (dw_die_ref die)
6994 {
6995   dw_die_ref clone;
6996   dw_attr_ref a;
6997   unsigned ix;
6998
6999   clone = ggc_alloc_cleared_die_node ();
7000   clone->die_tag = die->die_tag;
7001
7002   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7003     add_dwarf_attr (clone, a);
7004
7005   return clone;
7006 }
7007
7008 /* Make a clone of the tree rooted at DIE.  */
7009
7010 static dw_die_ref
7011 clone_tree (dw_die_ref die)
7012 {
7013   dw_die_ref c;
7014   dw_die_ref clone = clone_die (die);
7015
7016   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
7017
7018   return clone;
7019 }
7020
7021 /* Make a clone of DIE as a declaration.  */
7022
7023 static dw_die_ref
7024 clone_as_declaration (dw_die_ref die)
7025 {
7026   dw_die_ref clone;
7027   dw_die_ref decl;
7028   dw_attr_ref a;
7029   unsigned ix;
7030
7031   /* If the DIE is already a declaration, just clone it.  */
7032   if (is_declaration_die (die))
7033     return clone_die (die);
7034
7035   /* If the DIE is a specification, just clone its declaration DIE.  */
7036   decl = get_AT_ref (die, DW_AT_specification);
7037   if (decl != NULL)
7038     return clone_die (decl);
7039
7040   clone = ggc_alloc_cleared_die_node ();
7041   clone->die_tag = die->die_tag;
7042
7043   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7044     {
7045       /* We don't want to copy over all attributes.
7046          For example we don't want DW_AT_byte_size because otherwise we will no
7047          longer have a declaration and GDB will treat it as a definition.  */
7048
7049       switch (a->dw_attr)
7050         {
7051         case DW_AT_artificial:
7052         case DW_AT_containing_type:
7053         case DW_AT_external:
7054         case DW_AT_name:
7055         case DW_AT_type:
7056         case DW_AT_virtuality:
7057         case DW_AT_linkage_name:
7058         case DW_AT_MIPS_linkage_name:
7059           add_dwarf_attr (clone, a);
7060           break;
7061         case DW_AT_byte_size:
7062         default:
7063           break;
7064         }
7065     }
7066
7067   if (die->die_id.die_type_node)
7068     add_AT_die_ref (clone, DW_AT_signature, die);
7069
7070   add_AT_flag (clone, DW_AT_declaration, 1);
7071   return clone;
7072 }
7073
7074 /* Copy the declaration context to the new type unit DIE.  This includes
7075    any surrounding namespace or type declarations.  If the DIE has an
7076    AT_specification attribute, it also includes attributes and children
7077    attached to the specification, and returns a pointer to the original
7078    parent of the declaration DIE.  Returns NULL otherwise.  */
7079
7080 static dw_die_ref
7081 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7082 {
7083   dw_die_ref decl;
7084   dw_die_ref new_decl;
7085   dw_die_ref orig_parent = NULL;
7086
7087   decl = get_AT_ref (die, DW_AT_specification);
7088   if (decl == NULL)
7089     decl = die;
7090   else
7091     {
7092       unsigned ix;
7093       dw_die_ref c;
7094       dw_attr_ref a;
7095
7096       /* The original DIE will be changed to a declaration, and must
7097          be moved to be a child of the original declaration DIE.  */
7098       orig_parent = decl->die_parent;
7099
7100       /* Copy the type node pointer from the new DIE to the original
7101          declaration DIE so we can forward references later.  */
7102       decl->die_id.die_type_node = die->die_id.die_type_node;
7103
7104       remove_AT (die, DW_AT_specification);
7105
7106       FOR_EACH_VEC_ELT (dw_attr_node, decl->die_attr, ix, a)
7107         {
7108           if (a->dw_attr != DW_AT_name
7109               && a->dw_attr != DW_AT_declaration
7110               && a->dw_attr != DW_AT_external)
7111             add_dwarf_attr (die, a);
7112         }
7113
7114       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
7115     }
7116
7117   if (decl->die_parent != NULL
7118       && decl->die_parent->die_tag != DW_TAG_compile_unit
7119       && decl->die_parent->die_tag != DW_TAG_type_unit)
7120     {
7121       new_decl = copy_ancestor_tree (unit, decl, NULL);
7122       if (new_decl != NULL)
7123         {
7124           remove_AT (new_decl, DW_AT_signature);
7125           add_AT_specification (die, new_decl);
7126         }
7127     }
7128
7129   return orig_parent;
7130 }
7131
7132 /* Generate the skeleton ancestor tree for the given NODE, then clone
7133    the DIE and add the clone into the tree.  */
7134
7135 static void
7136 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7137 {
7138   if (node->new_die != NULL)
7139     return;
7140
7141   node->new_die = clone_as_declaration (node->old_die);
7142
7143   if (node->parent != NULL)
7144     {
7145       generate_skeleton_ancestor_tree (node->parent);
7146       add_child_die (node->parent->new_die, node->new_die);
7147     }
7148 }
7149
7150 /* Generate a skeleton tree of DIEs containing any declarations that are
7151    found in the original tree.  We traverse the tree looking for declaration
7152    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
7153
7154 static void
7155 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7156 {
7157   skeleton_chain_node node;
7158   dw_die_ref c;
7159   dw_die_ref first;
7160   dw_die_ref prev = NULL;
7161   dw_die_ref next = NULL;
7162
7163   node.parent = parent;
7164
7165   first = c = parent->old_die->die_child;
7166   if (c)
7167     next = c->die_sib;
7168   if (c) do {
7169     if (prev == NULL || prev->die_sib == c)
7170       prev = c;
7171     c = next;
7172     next = (c == first ? NULL : c->die_sib);
7173     node.old_die = c;
7174     node.new_die = NULL;
7175     if (is_declaration_die (c))
7176       {
7177         /* Clone the existing DIE, move the original to the skeleton
7178            tree (which is in the main CU), and put the clone, with
7179            all the original's children, where the original came from.  */
7180         dw_die_ref clone = clone_die (c);
7181         move_all_children (c, clone);
7182
7183         replace_child (c, clone, prev);
7184         generate_skeleton_ancestor_tree (parent);
7185         add_child_die (parent->new_die, c);
7186         node.new_die = c;
7187         c = clone;
7188       }
7189     generate_skeleton_bottom_up (&node);
7190   } while (next != NULL);
7191 }
7192
7193 /* Wrapper function for generate_skeleton_bottom_up.  */
7194
7195 static dw_die_ref
7196 generate_skeleton (dw_die_ref die)
7197 {
7198   skeleton_chain_node node;
7199
7200   node.old_die = die;
7201   node.new_die = NULL;
7202   node.parent = NULL;
7203
7204   /* If this type definition is nested inside another type,
7205      always leave at least a declaration in its place.  */
7206   if (die->die_parent != NULL && is_type_die (die->die_parent))
7207     node.new_die = clone_as_declaration (die);
7208
7209   generate_skeleton_bottom_up (&node);
7210   return node.new_die;
7211 }
7212
7213 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned
7214    declaration.  The original DIE is moved to a new compile unit so that
7215    existing references to it follow it to the new location.  If any of the
7216    original DIE's descendants is a declaration, we need to replace the
7217    original DIE with a skeleton tree and move the declarations back into the
7218    skeleton tree.  */
7219
7220 static dw_die_ref
7221 remove_child_or_replace_with_skeleton (dw_die_ref unit, dw_die_ref child,
7222                                        dw_die_ref prev)
7223 {
7224   dw_die_ref skeleton, orig_parent;
7225
7226   /* Copy the declaration context to the type unit DIE.  If the returned
7227      ORIG_PARENT is not NULL, the skeleton needs to be added as a child of
7228      that DIE.  */
7229   orig_parent = copy_declaration_context (unit, child);
7230
7231   skeleton = generate_skeleton (child);
7232   if (skeleton == NULL)
7233     remove_child_with_prev (child, prev);
7234   else
7235     {
7236       skeleton->die_id.die_type_node = child->die_id.die_type_node;
7237
7238       /* If the original DIE was a specification, we need to put
7239          the skeleton under the parent DIE of the declaration.
7240          This leaves the original declaration in the tree, but
7241          it will be pruned later since there are no longer any
7242          references to it.  */
7243       if (orig_parent != NULL)
7244         {
7245           remove_child_with_prev (child, prev);
7246           add_child_die (orig_parent, skeleton);
7247         }
7248       else
7249         replace_child (child, skeleton, prev);
7250     }
7251
7252   return skeleton;
7253 }
7254
7255 /* Traverse the DIE and set up additional .debug_types sections for each
7256    type worthy of being placed in a COMDAT section.  */
7257
7258 static void
7259 break_out_comdat_types (dw_die_ref die)
7260 {
7261   dw_die_ref c;
7262   dw_die_ref first;
7263   dw_die_ref prev = NULL;
7264   dw_die_ref next = NULL;
7265   dw_die_ref unit = NULL;
7266
7267   first = c = die->die_child;
7268   if (c)
7269     next = c->die_sib;
7270   if (c) do {
7271     if (prev == NULL || prev->die_sib == c)
7272       prev = c;
7273     c = next;
7274     next = (c == first ? NULL : c->die_sib);
7275     if (should_move_die_to_comdat (c))
7276       {
7277         dw_die_ref replacement;
7278         comdat_type_node_ref type_node;
7279
7280         /* Create a new type unit DIE as the root for the new tree, and
7281            add it to the list of comdat types.  */
7282         unit = new_die (DW_TAG_type_unit, NULL, NULL);
7283         add_AT_unsigned (unit, DW_AT_language,
7284                          get_AT_unsigned (comp_unit_die (), DW_AT_language));
7285         type_node = ggc_alloc_cleared_comdat_type_node ();
7286         type_node->root_die = unit;
7287         type_node->next = comdat_type_list;
7288         comdat_type_list = type_node;
7289
7290         /* Generate the type signature.  */
7291         generate_type_signature (c, type_node);
7292
7293         /* Copy the declaration context, attributes, and children of the
7294            declaration into the new type unit DIE, then remove this DIE
7295            from the main CU (or replace it with a skeleton if necessary).  */
7296         replacement = remove_child_or_replace_with_skeleton (unit, c, prev);
7297
7298         /* Break out nested types into their own type units.  */
7299         break_out_comdat_types (c);
7300
7301         /* Add the DIE to the new compunit.  */
7302         add_child_die (unit, c);
7303
7304         if (replacement != NULL)
7305           c = replacement;
7306       }
7307     else if (c->die_tag == DW_TAG_namespace
7308              || c->die_tag == DW_TAG_class_type
7309              || c->die_tag == DW_TAG_structure_type
7310              || c->die_tag == DW_TAG_union_type)
7311       {
7312         /* Look for nested types that can be broken out.  */
7313         break_out_comdat_types (c);
7314       }
7315   } while (next != NULL);
7316 }
7317
7318 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
7319
7320 struct decl_table_entry
7321 {
7322   dw_die_ref orig;
7323   dw_die_ref copy;
7324 };
7325
7326 /* Routines to manipulate hash table of copied declarations.  */
7327
7328 static hashval_t
7329 htab_decl_hash (const void *of)
7330 {
7331   const struct decl_table_entry *const entry =
7332     (const struct decl_table_entry *) of;
7333
7334   return htab_hash_pointer (entry->orig);
7335 }
7336
7337 static int
7338 htab_decl_eq (const void *of1, const void *of2)
7339 {
7340   const struct decl_table_entry *const entry1 =
7341     (const struct decl_table_entry *) of1;
7342   const struct die_struct *const entry2 = (const struct die_struct *) of2;
7343
7344   return entry1->orig == entry2;
7345 }
7346
7347 static void
7348 htab_decl_del (void *what)
7349 {
7350   struct decl_table_entry *entry = (struct decl_table_entry *) what;
7351
7352   free (entry);
7353 }
7354
7355 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7356    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
7357    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
7358    to check if the ancestor has already been copied into UNIT.  */
7359
7360 static dw_die_ref
7361 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7362 {
7363   dw_die_ref parent = die->die_parent;
7364   dw_die_ref new_parent = unit;
7365   dw_die_ref copy;
7366   void **slot = NULL;
7367   struct decl_table_entry *entry = NULL;
7368
7369   if (decl_table)
7370     {
7371       /* Check if the entry has already been copied to UNIT.  */
7372       slot = htab_find_slot_with_hash (decl_table, die,
7373                                        htab_hash_pointer (die), INSERT);
7374       if (*slot != HTAB_EMPTY_ENTRY)
7375         {
7376           entry = (struct decl_table_entry *) *slot;
7377           return entry->copy;
7378         }
7379
7380       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
7381       entry = XCNEW (struct decl_table_entry);
7382       entry->orig = die;
7383       entry->copy = NULL;
7384       *slot = entry;
7385     }
7386
7387   if (parent != NULL)
7388     {
7389       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7390       if (spec != NULL)
7391         parent = spec;
7392       if (parent->die_tag != DW_TAG_compile_unit
7393           && parent->die_tag != DW_TAG_type_unit)
7394         new_parent = copy_ancestor_tree (unit, parent, decl_table);
7395     }
7396
7397   copy = clone_as_declaration (die);
7398   add_child_die (new_parent, copy);
7399
7400   if (decl_table != NULL)
7401     {
7402       /* Record the pointer to the copy.  */
7403       entry->copy = copy;
7404     }
7405
7406   return copy;
7407 }
7408
7409 /* Walk the DIE and its children, looking for references to incomplete
7410    or trivial types that are unmarked (i.e., that are not in the current
7411    type_unit).  */
7412
7413 static void
7414 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7415 {
7416   dw_die_ref c;
7417   dw_attr_ref a;
7418   unsigned ix;
7419
7420   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7421     {
7422       if (AT_class (a) == dw_val_class_die_ref)
7423         {
7424           dw_die_ref targ = AT_ref (a);
7425           comdat_type_node_ref type_node = targ->die_id.die_type_node;
7426           void **slot;
7427           struct decl_table_entry *entry;
7428
7429           if (targ->die_mark != 0 || type_node != NULL)
7430             continue;
7431
7432           slot = htab_find_slot_with_hash (decl_table, targ,
7433                                            htab_hash_pointer (targ), INSERT);
7434
7435           if (*slot != HTAB_EMPTY_ENTRY)
7436             {
7437               /* TARG has already been copied, so we just need to
7438                  modify the reference to point to the copy.  */
7439               entry = (struct decl_table_entry *) *slot;
7440               a->dw_attr_val.v.val_die_ref.die = entry->copy;
7441             }
7442           else
7443             {
7444               dw_die_ref parent = unit;
7445               dw_die_ref copy = clone_tree (targ);
7446
7447               /* Make sure the cloned tree is marked as part of the
7448                  type unit.  */
7449               mark_dies (copy);
7450
7451               /* Record in DECL_TABLE that TARG has been copied.
7452                  Need to do this now, before the recursive call,
7453                  because DECL_TABLE may be expanded and SLOT
7454                  would no longer be a valid pointer.  */
7455               entry = XCNEW (struct decl_table_entry);
7456               entry->orig = targ;
7457               entry->copy = copy;
7458               *slot = entry;
7459
7460               /* If TARG has surrounding context, copy its ancestor tree
7461                  into the new type unit.  */
7462               if (targ->die_parent != NULL
7463                   && targ->die_parent->die_tag != DW_TAG_compile_unit
7464                   && targ->die_parent->die_tag != DW_TAG_type_unit)
7465                 parent = copy_ancestor_tree (unit, targ->die_parent,
7466                                              decl_table);
7467
7468               add_child_die (parent, copy);
7469               a->dw_attr_val.v.val_die_ref.die = copy;
7470
7471               /* Make sure the newly-copied DIE is walked.  If it was
7472                  installed in a previously-added context, it won't
7473                  get visited otherwise.  */
7474               if (parent != unit)
7475                 {
7476                   /* Find the highest point of the newly-added tree,
7477                      mark each node along the way, and walk from there.  */
7478                   parent->die_mark = 1;
7479                   while (parent->die_parent
7480                          && parent->die_parent->die_mark == 0)
7481                     {
7482                       parent = parent->die_parent;
7483                       parent->die_mark = 1;
7484                     }
7485                   copy_decls_walk (unit, parent, decl_table);
7486                 }
7487             }
7488         }
7489     }
7490
7491   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
7492 }
7493
7494 /* Copy declarations for "unworthy" types into the new comdat section.
7495    Incomplete types, modified types, and certain other types aren't broken
7496    out into comdat sections of their own, so they don't have a signature,
7497    and we need to copy the declaration into the same section so that we
7498    don't have an external reference.  */
7499
7500 static void
7501 copy_decls_for_unworthy_types (dw_die_ref unit)
7502 {
7503   htab_t decl_table;
7504
7505   mark_dies (unit);
7506   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
7507   copy_decls_walk (unit, unit, decl_table);
7508   htab_delete (decl_table);
7509   unmark_dies (unit);
7510 }
7511
7512 /* Traverse the DIE and add a sibling attribute if it may have the
7513    effect of speeding up access to siblings.  To save some space,
7514    avoid generating sibling attributes for DIE's without children.  */
7515
7516 static void
7517 add_sibling_attributes (dw_die_ref die)
7518 {
7519   dw_die_ref c;
7520
7521   if (! die->die_child)
7522     return;
7523
7524   if (die->die_parent && die != die->die_parent->die_child)
7525     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7526
7527   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7528 }
7529
7530 /* Output all location lists for the DIE and its children.  */
7531
7532 static void
7533 output_location_lists (dw_die_ref die)
7534 {
7535   dw_die_ref c;
7536   dw_attr_ref a;
7537   unsigned ix;
7538
7539   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7540     if (AT_class (a) == dw_val_class_loc_list)
7541       output_loc_list (AT_loc_list (a));
7542
7543   FOR_EACH_CHILD (die, c, output_location_lists (c));
7544 }
7545
7546 /* The format of each DIE (and its attribute value pairs) is encoded in an
7547    abbreviation table.  This routine builds the abbreviation table and assigns
7548    a unique abbreviation id for each abbreviation entry.  The children of each
7549    die are visited recursively.  */
7550
7551 static void
7552 build_abbrev_table (dw_die_ref die)
7553 {
7554   unsigned long abbrev_id;
7555   unsigned int n_alloc;
7556   dw_die_ref c;
7557   dw_attr_ref a;
7558   unsigned ix;
7559
7560   /* Scan the DIE references, and mark as external any that refer to
7561      DIEs from other CUs (i.e. those which are not marked).  */
7562   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7563     if (AT_class (a) == dw_val_class_die_ref
7564         && AT_ref (a)->die_mark == 0)
7565       {
7566         gcc_assert (use_debug_types || AT_ref (a)->die_id.die_symbol);
7567         set_AT_ref_external (a, 1);
7568       }
7569
7570   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7571     {
7572       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7573       dw_attr_ref die_a, abbrev_a;
7574       unsigned ix;
7575       bool ok = true;
7576
7577       if (abbrev->die_tag != die->die_tag)
7578         continue;
7579       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7580         continue;
7581
7582       if (VEC_length (dw_attr_node, abbrev->die_attr)
7583           != VEC_length (dw_attr_node, die->die_attr))
7584         continue;
7585
7586       FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, die_a)
7587         {
7588           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
7589           if ((abbrev_a->dw_attr != die_a->dw_attr)
7590               || (value_format (abbrev_a) != value_format (die_a)))
7591             {
7592               ok = false;
7593               break;
7594             }
7595         }
7596       if (ok)
7597         break;
7598     }
7599
7600   if (abbrev_id >= abbrev_die_table_in_use)
7601     {
7602       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7603         {
7604           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7605           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7606                                             n_alloc);
7607
7608           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7609                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7610           abbrev_die_table_allocated = n_alloc;
7611         }
7612
7613       ++abbrev_die_table_in_use;
7614       abbrev_die_table[abbrev_id] = die;
7615     }
7616
7617   die->die_abbrev = abbrev_id;
7618   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
7619 }
7620 \f
7621 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
7622
7623 static int
7624 constant_size (unsigned HOST_WIDE_INT value)
7625 {
7626   int log;
7627
7628   if (value == 0)
7629     log = 0;
7630   else
7631     log = floor_log2 (value);
7632
7633   log = log / 8;
7634   log = 1 << (floor_log2 (log) + 1);
7635
7636   return log;
7637 }
7638
7639 /* Return the size of a DIE as it is represented in the
7640    .debug_info section.  */
7641
7642 static unsigned long
7643 size_of_die (dw_die_ref die)
7644 {
7645   unsigned long size = 0;
7646   dw_attr_ref a;
7647   unsigned ix;
7648
7649   size += size_of_uleb128 (die->die_abbrev);
7650   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7651     {
7652       switch (AT_class (a))
7653         {
7654         case dw_val_class_addr:
7655           size += DWARF2_ADDR_SIZE;
7656           break;
7657         case dw_val_class_offset:
7658           size += DWARF_OFFSET_SIZE;
7659           break;
7660         case dw_val_class_loc:
7661           {
7662             unsigned long lsize = size_of_locs (AT_loc (a));
7663
7664             /* Block length.  */
7665             if (dwarf_version >= 4)
7666               size += size_of_uleb128 (lsize);
7667             else
7668               size += constant_size (lsize);
7669             size += lsize;
7670           }
7671           break;
7672         case dw_val_class_loc_list:
7673           size += DWARF_OFFSET_SIZE;
7674           break;
7675         case dw_val_class_range_list:
7676           size += DWARF_OFFSET_SIZE;
7677           break;
7678         case dw_val_class_const:
7679           size += size_of_sleb128 (AT_int (a));
7680           break;
7681         case dw_val_class_unsigned_const:
7682           {
7683             int csize = constant_size (AT_unsigned (a));
7684             if (dwarf_version == 3
7685                 && a->dw_attr == DW_AT_data_member_location
7686                 && csize >= 4)
7687               size += size_of_uleb128 (AT_unsigned (a));
7688             else
7689               size += csize;
7690           }
7691           break;
7692         case dw_val_class_const_double:
7693           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
7694           if (HOST_BITS_PER_WIDE_INT >= 64)
7695             size++; /* block */
7696           break;
7697         case dw_val_class_vec:
7698           size += constant_size (a->dw_attr_val.v.val_vec.length
7699                                  * a->dw_attr_val.v.val_vec.elt_size)
7700                   + a->dw_attr_val.v.val_vec.length
7701                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
7702           break;
7703         case dw_val_class_flag:
7704           if (dwarf_version >= 4)
7705             /* Currently all add_AT_flag calls pass in 1 as last argument,
7706                so DW_FORM_flag_present can be used.  If that ever changes,
7707                we'll need to use DW_FORM_flag and have some optimization
7708                in build_abbrev_table that will change those to
7709                DW_FORM_flag_present if it is set to 1 in all DIEs using
7710                the same abbrev entry.  */
7711             gcc_assert (a->dw_attr_val.v.val_flag == 1);
7712           else
7713             size += 1;
7714           break;
7715         case dw_val_class_die_ref:
7716           if (AT_ref_external (a))
7717             {
7718               /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
7719                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
7720                  is sized by target address length, whereas in DWARF3
7721                  it's always sized as an offset.  */
7722               if (use_debug_types)
7723                 size += DWARF_TYPE_SIGNATURE_SIZE;
7724               else if (dwarf_version == 2)
7725                 size += DWARF2_ADDR_SIZE;
7726               else
7727                 size += DWARF_OFFSET_SIZE;
7728             }
7729           else
7730             size += DWARF_OFFSET_SIZE;
7731           break;
7732         case dw_val_class_fde_ref:
7733           size += DWARF_OFFSET_SIZE;
7734           break;
7735         case dw_val_class_lbl_id:
7736           size += DWARF2_ADDR_SIZE;
7737           break;
7738         case dw_val_class_lineptr:
7739         case dw_val_class_macptr:
7740           size += DWARF_OFFSET_SIZE;
7741           break;
7742         case dw_val_class_str:
7743           if (AT_string_form (a) == DW_FORM_strp)
7744             size += DWARF_OFFSET_SIZE;
7745           else
7746             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
7747           break;
7748         case dw_val_class_file:
7749           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
7750           break;
7751         case dw_val_class_data8:
7752           size += 8;
7753           break;
7754         case dw_val_class_vms_delta:
7755           size += DWARF_OFFSET_SIZE;
7756           break;
7757         default:
7758           gcc_unreachable ();
7759         }
7760     }
7761
7762   return size;
7763 }
7764
7765 /* Size the debugging information associated with a given DIE.  Visits the
7766    DIE's children recursively.  Updates the global variable next_die_offset, on
7767    each time through.  Uses the current value of next_die_offset to update the
7768    die_offset field in each DIE.  */
7769
7770 static void
7771 calc_die_sizes (dw_die_ref die)
7772 {
7773   dw_die_ref c;
7774
7775   gcc_assert (die->die_offset == 0
7776               || (unsigned long int) die->die_offset == next_die_offset);
7777   die->die_offset = next_die_offset;
7778   next_die_offset += size_of_die (die);
7779
7780   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
7781
7782   if (die->die_child != NULL)
7783     /* Count the null byte used to terminate sibling lists.  */
7784     next_die_offset += 1;
7785 }
7786
7787 /* Size just the base type children at the start of the CU.
7788    This is needed because build_abbrev needs to size locs
7789    and sizing of type based stack ops needs to know die_offset
7790    values for the base types.  */
7791
7792 static void
7793 calc_base_type_die_sizes (void)
7794 {
7795   unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7796   unsigned int i;
7797   dw_die_ref base_type;
7798 #if ENABLE_ASSERT_CHECKING
7799   dw_die_ref prev = comp_unit_die ()->die_child;
7800 #endif
7801
7802   die_offset += size_of_die (comp_unit_die ());
7803   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
7804     {
7805 #if ENABLE_ASSERT_CHECKING
7806       gcc_assert (base_type->die_offset == 0
7807                   && prev->die_sib == base_type
7808                   && base_type->die_child == NULL
7809                   && base_type->die_abbrev);
7810       prev = base_type;
7811 #endif
7812       base_type->die_offset = die_offset;
7813       die_offset += size_of_die (base_type);
7814     }
7815 }
7816
7817 /* Set the marks for a die and its children.  We do this so
7818    that we know whether or not a reference needs to use FORM_ref_addr; only
7819    DIEs in the same CU will be marked.  We used to clear out the offset
7820    and use that as the flag, but ran into ordering problems.  */
7821
7822 static void
7823 mark_dies (dw_die_ref die)
7824 {
7825   dw_die_ref c;
7826
7827   gcc_assert (!die->die_mark);
7828
7829   die->die_mark = 1;
7830   FOR_EACH_CHILD (die, c, mark_dies (c));
7831 }
7832
7833 /* Clear the marks for a die and its children.  */
7834
7835 static void
7836 unmark_dies (dw_die_ref die)
7837 {
7838   dw_die_ref c;
7839
7840   if (! use_debug_types)
7841     gcc_assert (die->die_mark);
7842
7843   die->die_mark = 0;
7844   FOR_EACH_CHILD (die, c, unmark_dies (c));
7845 }
7846
7847 /* Clear the marks for a die, its children and referred dies.  */
7848
7849 static void
7850 unmark_all_dies (dw_die_ref die)
7851 {
7852   dw_die_ref c;
7853   dw_attr_ref a;
7854   unsigned ix;
7855
7856   if (!die->die_mark)
7857     return;
7858   die->die_mark = 0;
7859
7860   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
7861
7862   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7863     if (AT_class (a) == dw_val_class_die_ref)
7864       unmark_all_dies (AT_ref (a));
7865 }
7866
7867 /* Return the size of the .debug_pubnames or .debug_pubtypes table
7868    generated for the compilation unit.  */
7869
7870 static unsigned long
7871 size_of_pubnames (VEC (pubname_entry, gc) * names)
7872 {
7873   unsigned long size;
7874   unsigned i;
7875   pubname_ref p;
7876
7877   size = DWARF_PUBNAMES_HEADER_SIZE;
7878   FOR_EACH_VEC_ELT (pubname_entry, names, i, p)
7879     if (names != pubtype_table
7880         || p->die->die_offset != 0
7881         || !flag_eliminate_unused_debug_types)
7882       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
7883
7884   size += DWARF_OFFSET_SIZE;
7885   return size;
7886 }
7887
7888 /* Return the size of the information in the .debug_aranges section.  */
7889
7890 static unsigned long
7891 size_of_aranges (void)
7892 {
7893   unsigned long size;
7894
7895   size = DWARF_ARANGES_HEADER_SIZE;
7896
7897   /* Count the address/length pair for this compilation unit.  */
7898   if (text_section_used)
7899     size += 2 * DWARF2_ADDR_SIZE;
7900   if (cold_text_section_used)
7901     size += 2 * DWARF2_ADDR_SIZE;
7902   if (have_multiple_function_sections)
7903     {
7904       unsigned fde_idx;
7905       dw_fde_ref fde;
7906
7907       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
7908         {
7909           if (!fde->in_std_section)
7910             size += 2 * DWARF2_ADDR_SIZE;
7911           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
7912             size += 2 * DWARF2_ADDR_SIZE;
7913         }
7914     }
7915
7916   /* Count the two zero words used to terminated the address range table.  */
7917   size += 2 * DWARF2_ADDR_SIZE;
7918   return size;
7919 }
7920 \f
7921 /* Select the encoding of an attribute value.  */
7922
7923 static enum dwarf_form
7924 value_format (dw_attr_ref a)
7925 {
7926   switch (a->dw_attr_val.val_class)
7927     {
7928     case dw_val_class_addr:
7929       /* Only very few attributes allow DW_FORM_addr.  */
7930       switch (a->dw_attr)
7931         {
7932         case DW_AT_low_pc:
7933         case DW_AT_high_pc:
7934         case DW_AT_entry_pc:
7935         case DW_AT_trampoline:
7936           return DW_FORM_addr;
7937         default:
7938           break;
7939         }
7940       switch (DWARF2_ADDR_SIZE)
7941         {
7942         case 1:
7943           return DW_FORM_data1;
7944         case 2:
7945           return DW_FORM_data2;
7946         case 4:
7947           return DW_FORM_data4;
7948         case 8:
7949           return DW_FORM_data8;
7950         default:
7951           gcc_unreachable ();
7952         }
7953     case dw_val_class_range_list:
7954     case dw_val_class_loc_list:
7955       if (dwarf_version >= 4)
7956         return DW_FORM_sec_offset;
7957       /* FALLTHRU */
7958     case dw_val_class_vms_delta:
7959     case dw_val_class_offset:
7960       switch (DWARF_OFFSET_SIZE)
7961         {
7962         case 4:
7963           return DW_FORM_data4;
7964         case 8:
7965           return DW_FORM_data8;
7966         default:
7967           gcc_unreachable ();
7968         }
7969     case dw_val_class_loc:
7970       if (dwarf_version >= 4)
7971         return DW_FORM_exprloc;
7972       switch (constant_size (size_of_locs (AT_loc (a))))
7973         {
7974         case 1:
7975           return DW_FORM_block1;
7976         case 2:
7977           return DW_FORM_block2;
7978         default:
7979           gcc_unreachable ();
7980         }
7981     case dw_val_class_const:
7982       return DW_FORM_sdata;
7983     case dw_val_class_unsigned_const:
7984       switch (constant_size (AT_unsigned (a)))
7985         {
7986         case 1:
7987           return DW_FORM_data1;
7988         case 2:
7989           return DW_FORM_data2;
7990         case 4:
7991           /* In DWARF3 DW_AT_data_member_location with
7992              DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
7993              constant, so we need to use DW_FORM_udata if we need
7994              a large constant.  */
7995           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
7996             return DW_FORM_udata;
7997           return DW_FORM_data4;
7998         case 8:
7999           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8000             return DW_FORM_udata;
8001           return DW_FORM_data8;
8002         default:
8003           gcc_unreachable ();
8004         }
8005     case dw_val_class_const_double:
8006       switch (HOST_BITS_PER_WIDE_INT)
8007         {
8008         case 8:
8009           return DW_FORM_data2;
8010         case 16:
8011           return DW_FORM_data4;
8012         case 32:
8013           return DW_FORM_data8;
8014         case 64:
8015         default:
8016           return DW_FORM_block1;
8017         }
8018     case dw_val_class_vec:
8019       switch (constant_size (a->dw_attr_val.v.val_vec.length
8020                              * a->dw_attr_val.v.val_vec.elt_size))
8021         {
8022         case 1:
8023           return DW_FORM_block1;
8024         case 2:
8025           return DW_FORM_block2;
8026         case 4:
8027           return DW_FORM_block4;
8028         default:
8029           gcc_unreachable ();
8030         }
8031     case dw_val_class_flag:
8032       if (dwarf_version >= 4)
8033         {
8034           /* Currently all add_AT_flag calls pass in 1 as last argument,
8035              so DW_FORM_flag_present can be used.  If that ever changes,
8036              we'll need to use DW_FORM_flag and have some optimization
8037              in build_abbrev_table that will change those to
8038              DW_FORM_flag_present if it is set to 1 in all DIEs using
8039              the same abbrev entry.  */
8040           gcc_assert (a->dw_attr_val.v.val_flag == 1);
8041           return DW_FORM_flag_present;
8042         }
8043       return DW_FORM_flag;
8044     case dw_val_class_die_ref:
8045       if (AT_ref_external (a))
8046         return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8047       else
8048         return DW_FORM_ref;
8049     case dw_val_class_fde_ref:
8050       return DW_FORM_data;
8051     case dw_val_class_lbl_id:
8052       return DW_FORM_addr;
8053     case dw_val_class_lineptr:
8054     case dw_val_class_macptr:
8055       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8056     case dw_val_class_str:
8057       return AT_string_form (a);
8058     case dw_val_class_file:
8059       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8060         {
8061         case 1:
8062           return DW_FORM_data1;
8063         case 2:
8064           return DW_FORM_data2;
8065         case 4:
8066           return DW_FORM_data4;
8067         default:
8068           gcc_unreachable ();
8069         }
8070
8071     case dw_val_class_data8:
8072       return DW_FORM_data8;
8073
8074     default:
8075       gcc_unreachable ();
8076     }
8077 }
8078
8079 /* Output the encoding of an attribute value.  */
8080
8081 static void
8082 output_value_format (dw_attr_ref a)
8083 {
8084   enum dwarf_form form = value_format (a);
8085
8086   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8087 }
8088
8089 /* Output the .debug_abbrev section which defines the DIE abbreviation
8090    table.  */
8091
8092 static void
8093 output_abbrev_section (void)
8094 {
8095   unsigned long abbrev_id;
8096
8097   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8098     {
8099       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
8100       unsigned ix;
8101       dw_attr_ref a_attr;
8102
8103       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8104       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8105                                    dwarf_tag_name (abbrev->die_tag));
8106
8107       if (abbrev->die_child != NULL)
8108         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8109       else
8110         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8111
8112       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
8113            ix++)
8114         {
8115           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8116                                        dwarf_attr_name (a_attr->dw_attr));
8117           output_value_format (a_attr);
8118         }
8119
8120       dw2_asm_output_data (1, 0, NULL);
8121       dw2_asm_output_data (1, 0, NULL);
8122     }
8123
8124   /* Terminate the table.  */
8125   dw2_asm_output_data (1, 0, NULL);
8126 }
8127
8128 /* Output a symbol we can use to refer to this DIE from another CU.  */
8129
8130 static inline void
8131 output_die_symbol (dw_die_ref die)
8132 {
8133   char *sym = die->die_id.die_symbol;
8134
8135   if (sym == 0)
8136     return;
8137
8138   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8139     /* We make these global, not weak; if the target doesn't support
8140        .linkonce, it doesn't support combining the sections, so debugging
8141        will break.  */
8142     targetm.asm_out.globalize_label (asm_out_file, sym);
8143
8144   ASM_OUTPUT_LABEL (asm_out_file, sym);
8145 }
8146
8147 /* Return a new location list, given the begin and end range, and the
8148    expression.  */
8149
8150 static inline dw_loc_list_ref
8151 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8152               const char *section)
8153 {
8154   dw_loc_list_ref retlist = ggc_alloc_cleared_dw_loc_list_node ();
8155
8156   retlist->begin = begin;
8157   retlist->end = end;
8158   retlist->expr = expr;
8159   retlist->section = section;
8160
8161   return retlist;
8162 }
8163
8164 /* Generate a new internal symbol for this location list node, if it
8165    hasn't got one yet.  */
8166
8167 static inline void
8168 gen_llsym (dw_loc_list_ref list)
8169 {
8170   gcc_assert (!list->ll_symbol);
8171   list->ll_symbol = gen_internal_sym ("LLST");
8172 }
8173
8174 /* Output the location list given to us.  */
8175
8176 static void
8177 output_loc_list (dw_loc_list_ref list_head)
8178 {
8179   dw_loc_list_ref curr = list_head;
8180
8181   if (list_head->emitted)
8182     return;
8183   list_head->emitted = true;
8184
8185   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8186
8187   /* Walk the location list, and output each range + expression.  */
8188   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8189     {
8190       unsigned long size;
8191       /* Don't output an entry that starts and ends at the same address.  */
8192       if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
8193         continue;
8194       size = size_of_locs (curr->expr);
8195       /* If the expression is too large, drop it on the floor.  We could
8196          perhaps put it into DW_TAG_dwarf_procedure and refer to that
8197          in the expression, but >= 64KB expressions for a single value
8198          in a single range are unlikely very useful.  */
8199       if (size > 0xffff)
8200         continue;
8201       if (!have_multiple_function_sections)
8202         {
8203           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8204                                 "Location list begin address (%s)",
8205                                 list_head->ll_symbol);
8206           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8207                                 "Location list end address (%s)",
8208                                 list_head->ll_symbol);
8209         }
8210       else
8211         {
8212           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8213                                "Location list begin address (%s)",
8214                                list_head->ll_symbol);
8215           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8216                                "Location list end address (%s)",
8217                                list_head->ll_symbol);
8218         }
8219
8220       /* Output the block length for this list of location operations.  */
8221       gcc_assert (size <= 0xffff);
8222       dw2_asm_output_data (2, size, "%s", "Location expression size");
8223
8224       output_loc_sequence (curr->expr, -1);
8225     }
8226
8227   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8228                        "Location list terminator begin (%s)",
8229                        list_head->ll_symbol);
8230   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8231                        "Location list terminator end (%s)",
8232                        list_head->ll_symbol);
8233 }
8234
8235 /* Output a type signature.  */
8236
8237 static inline void
8238 output_signature (const char *sig, const char *name)
8239 {
8240   int i;
8241
8242   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8243     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
8244 }
8245
8246 /* Output the DIE and its attributes.  Called recursively to generate
8247    the definitions of each child DIE.  */
8248
8249 static void
8250 output_die (dw_die_ref die)
8251 {
8252   dw_attr_ref a;
8253   dw_die_ref c;
8254   unsigned long size;
8255   unsigned ix;
8256
8257   /* If someone in another CU might refer to us, set up a symbol for
8258      them to point to.  */
8259   if (! use_debug_types && die->die_id.die_symbol)
8260     output_die_symbol (die);
8261
8262   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
8263                                (unsigned long)die->die_offset,
8264                                dwarf_tag_name (die->die_tag));
8265
8266   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
8267     {
8268       const char *name = dwarf_attr_name (a->dw_attr);
8269
8270       switch (AT_class (a))
8271         {
8272         case dw_val_class_addr:
8273           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8274           break;
8275
8276         case dw_val_class_offset:
8277           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8278                                "%s", name);
8279           break;
8280
8281         case dw_val_class_range_list:
8282           {
8283             char *p = strchr (ranges_section_label, '\0');
8284
8285             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
8286                      a->dw_attr_val.v.val_offset);
8287             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8288                                    debug_ranges_section, "%s", name);
8289             *p = '\0';
8290           }
8291           break;
8292
8293         case dw_val_class_loc:
8294           size = size_of_locs (AT_loc (a));
8295
8296           /* Output the block length for this list of location operations.  */
8297           if (dwarf_version >= 4)
8298             dw2_asm_output_data_uleb128 (size, "%s", name);
8299           else
8300             dw2_asm_output_data (constant_size (size), size, "%s", name);
8301
8302           output_loc_sequence (AT_loc (a), -1);
8303           break;
8304
8305         case dw_val_class_const:
8306           /* ??? It would be slightly more efficient to use a scheme like is
8307              used for unsigned constants below, but gdb 4.x does not sign
8308              extend.  Gdb 5.x does sign extend.  */
8309           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8310           break;
8311
8312         case dw_val_class_unsigned_const:
8313           {
8314             int csize = constant_size (AT_unsigned (a));
8315             if (dwarf_version == 3
8316                 && a->dw_attr == DW_AT_data_member_location
8317                 && csize >= 4)
8318               dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
8319             else
8320               dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
8321           }
8322           break;
8323
8324         case dw_val_class_const_double:
8325           {
8326             unsigned HOST_WIDE_INT first, second;
8327
8328             if (HOST_BITS_PER_WIDE_INT >= 64)
8329               dw2_asm_output_data (1,
8330                                    2 * HOST_BITS_PER_WIDE_INT
8331                                    / HOST_BITS_PER_CHAR,
8332                                    NULL);
8333
8334             if (WORDS_BIG_ENDIAN)
8335               {
8336                 first = a->dw_attr_val.v.val_double.high;
8337                 second = a->dw_attr_val.v.val_double.low;
8338               }
8339             else
8340               {
8341                 first = a->dw_attr_val.v.val_double.low;
8342                 second = a->dw_attr_val.v.val_double.high;
8343               }
8344
8345             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8346                                  first, name);
8347             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8348                                  second, NULL);
8349           }
8350           break;
8351
8352         case dw_val_class_vec:
8353           {
8354             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8355             unsigned int len = a->dw_attr_val.v.val_vec.length;
8356             unsigned int i;
8357             unsigned char *p;
8358
8359             dw2_asm_output_data (constant_size (len * elt_size),
8360                                  len * elt_size, "%s", name);
8361             if (elt_size > sizeof (HOST_WIDE_INT))
8362               {
8363                 elt_size /= 2;
8364                 len *= 2;
8365               }
8366             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8367                  i < len;
8368                  i++, p += elt_size)
8369               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8370                                    "fp or vector constant word %u", i);
8371             break;
8372           }
8373
8374         case dw_val_class_flag:
8375           if (dwarf_version >= 4)
8376             {
8377               /* Currently all add_AT_flag calls pass in 1 as last argument,
8378                  so DW_FORM_flag_present can be used.  If that ever changes,
8379                  we'll need to use DW_FORM_flag and have some optimization
8380                  in build_abbrev_table that will change those to
8381                  DW_FORM_flag_present if it is set to 1 in all DIEs using
8382                  the same abbrev entry.  */
8383               gcc_assert (AT_flag (a) == 1);
8384               if (flag_debug_asm)
8385                 fprintf (asm_out_file, "\t\t\t%s %s\n",
8386                          ASM_COMMENT_START, name);
8387               break;
8388             }
8389           dw2_asm_output_data (1, AT_flag (a), "%s", name);
8390           break;
8391
8392         case dw_val_class_loc_list:
8393           {
8394             char *sym = AT_loc_list (a)->ll_symbol;
8395
8396             gcc_assert (sym);
8397             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8398                                    "%s", name);
8399           }
8400           break;
8401
8402         case dw_val_class_die_ref:
8403           if (AT_ref_external (a))
8404             {
8405               if (use_debug_types)
8406                 {
8407                   comdat_type_node_ref type_node =
8408                     AT_ref (a)->die_id.die_type_node;
8409
8410                   gcc_assert (type_node);
8411                   output_signature (type_node->signature, name);
8412                 }
8413               else
8414                 {
8415                   char *sym = AT_ref (a)->die_id.die_symbol;
8416                   int size;
8417
8418                   gcc_assert (sym);
8419                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
8420                      length, whereas in DWARF3 it's always sized as an
8421                      offset.  */
8422                   if (dwarf_version == 2)
8423                     size = DWARF2_ADDR_SIZE;
8424                   else
8425                     size = DWARF_OFFSET_SIZE;
8426                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
8427                                          name);
8428                 }
8429             }
8430           else
8431             {
8432               gcc_assert (AT_ref (a)->die_offset);
8433               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8434                                    "%s", name);
8435             }
8436           break;
8437
8438         case dw_val_class_fde_ref:
8439           {
8440             char l1[20];
8441
8442             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8443                                          a->dw_attr_val.v.val_fde_index * 2);
8444             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
8445                                    "%s", name);
8446           }
8447           break;
8448
8449         case dw_val_class_vms_delta:
8450           dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
8451                                     AT_vms_delta2 (a), AT_vms_delta1 (a),
8452                                     "%s", name);
8453           break;
8454
8455         case dw_val_class_lbl_id:
8456           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8457           break;
8458
8459         case dw_val_class_lineptr:
8460           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8461                                  debug_line_section, "%s", name);
8462           break;
8463
8464         case dw_val_class_macptr:
8465           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8466                                  debug_macinfo_section, "%s", name);
8467           break;
8468
8469         case dw_val_class_str:
8470           if (AT_string_form (a) == DW_FORM_strp)
8471             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
8472                                    a->dw_attr_val.v.val_str->label,
8473                                    debug_str_section,
8474                                    "%s: \"%s\"", name, AT_string (a));
8475           else
8476             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
8477           break;
8478
8479         case dw_val_class_file:
8480           {
8481             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
8482
8483             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
8484                                  a->dw_attr_val.v.val_file->filename);
8485             break;
8486           }
8487
8488         case dw_val_class_data8:
8489           {
8490             int i;
8491
8492             for (i = 0; i < 8; i++)
8493               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
8494                                    i == 0 ? "%s" : NULL, name);
8495             break;
8496           }
8497
8498         default:
8499           gcc_unreachable ();
8500         }
8501     }
8502
8503   FOR_EACH_CHILD (die, c, output_die (c));
8504
8505   /* Add null byte to terminate sibling list.  */
8506   if (die->die_child != NULL)
8507     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
8508                          (unsigned long) die->die_offset);
8509 }
8510
8511 /* Output the compilation unit that appears at the beginning of the
8512    .debug_info section, and precedes the DIE descriptions.  */
8513
8514 static void
8515 output_compilation_unit_header (void)
8516 {
8517   int ver = dwarf_version;
8518
8519   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8520     dw2_asm_output_data (4, 0xffffffff,
8521       "Initial length escape value indicating 64-bit DWARF extension");
8522   dw2_asm_output_data (DWARF_OFFSET_SIZE,
8523                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
8524                        "Length of Compilation Unit Info");
8525   dw2_asm_output_data (2, ver, "DWARF version number");
8526   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
8527                          debug_abbrev_section,
8528                          "Offset Into Abbrev. Section");
8529   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
8530 }
8531
8532 /* Output the compilation unit DIE and its children.  */
8533
8534 static void
8535 output_comp_unit (dw_die_ref die, int output_if_empty)
8536 {
8537   const char *secname;
8538   char *oldsym, *tmp;
8539
8540   /* Unless we are outputting main CU, we may throw away empty ones.  */
8541   if (!output_if_empty && die->die_child == NULL)
8542     return;
8543
8544   /* Even if there are no children of this DIE, we must output the information
8545      about the compilation unit.  Otherwise, on an empty translation unit, we
8546      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
8547      will then complain when examining the file.  First mark all the DIEs in
8548      this CU so we know which get local refs.  */
8549   mark_dies (die);
8550
8551   build_abbrev_table (die);
8552
8553   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8554   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8555   calc_die_sizes (die);
8556
8557   oldsym = die->die_id.die_symbol;
8558   if (oldsym)
8559     {
8560       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
8561
8562       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
8563       secname = tmp;
8564       die->die_id.die_symbol = NULL;
8565       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8566     }
8567   else
8568     {
8569       switch_to_section (debug_info_section);
8570       ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
8571       info_section_emitted = true;
8572     }
8573
8574   /* Output debugging information.  */
8575   output_compilation_unit_header ();
8576   output_die (die);
8577
8578   /* Leave the marks on the main CU, so we can check them in
8579      output_pubnames.  */
8580   if (oldsym)
8581     {
8582       unmark_dies (die);
8583       die->die_id.die_symbol = oldsym;
8584     }
8585 }
8586
8587 /* Output a comdat type unit DIE and its children.  */
8588
8589 static void
8590 output_comdat_type_unit (comdat_type_node *node)
8591 {
8592   const char *secname;
8593   char *tmp;
8594   int i;
8595 #if defined (OBJECT_FORMAT_ELF)
8596   tree comdat_key;
8597 #endif
8598
8599   /* First mark all the DIEs in this CU so we know which get local refs.  */
8600   mark_dies (node->root_die);
8601
8602   build_abbrev_table (node->root_die);
8603
8604   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8605   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
8606   calc_die_sizes (node->root_die);
8607
8608 #if defined (OBJECT_FORMAT_ELF)
8609   secname = ".debug_types";
8610   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8611   sprintf (tmp, "wt.");
8612   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8613     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
8614   comdat_key = get_identifier (tmp);
8615   targetm.asm_out.named_section (secname,
8616                                  SECTION_DEBUG | SECTION_LINKONCE,
8617                                  comdat_key);
8618 #else
8619   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8620   sprintf (tmp, ".gnu.linkonce.wt.");
8621   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8622     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
8623   secname = tmp;
8624   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8625 #endif
8626
8627   /* Output debugging information.  */
8628   output_compilation_unit_header ();
8629   output_signature (node->signature, "Type Signature");
8630   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
8631                        "Offset to Type DIE");
8632   output_die (node->root_die);
8633
8634   unmark_dies (node->root_die);
8635 }
8636
8637 /* Return the DWARF2/3 pubname associated with a decl.  */
8638
8639 static const char *
8640 dwarf2_name (tree decl, int scope)
8641 {
8642   if (DECL_NAMELESS (decl))
8643     return NULL;
8644   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
8645 }
8646
8647 /* Add a new entry to .debug_pubnames if appropriate.  */
8648
8649 static void
8650 add_pubname_string (const char *str, dw_die_ref die)
8651 {
8652   if (targetm.want_debug_pub_sections)
8653     {
8654       pubname_entry e;
8655
8656       e.die = die;
8657       e.name = xstrdup (str);
8658       VEC_safe_push (pubname_entry, gc, pubname_table, &e);
8659     }
8660 }
8661
8662 static void
8663 add_pubname (tree decl, dw_die_ref die)
8664 {
8665   if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl))
8666     {
8667       const char *name = dwarf2_name (decl, 1);
8668       if (name)
8669         add_pubname_string (name, die);
8670     }
8671 }
8672
8673 /* Add a new entry to .debug_pubtypes if appropriate.  */
8674
8675 static void
8676 add_pubtype (tree decl, dw_die_ref die)
8677 {
8678   pubname_entry e;
8679
8680   if (!targetm.want_debug_pub_sections)
8681     return;
8682
8683   e.name = NULL;
8684   if ((TREE_PUBLIC (decl)
8685        || is_cu_die (die->die_parent))
8686       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
8687     {
8688       e.die = die;
8689       if (TYPE_P (decl))
8690         {
8691           if (TYPE_NAME (decl))
8692             {
8693               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
8694                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
8695               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
8696                        && DECL_NAME (TYPE_NAME (decl)))
8697                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
8698               else
8699                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
8700             }
8701         }
8702       else
8703         {
8704           e.name = dwarf2_name (decl, 1);
8705           if (e.name)
8706             e.name = xstrdup (e.name);
8707         }
8708
8709       /* If we don't have a name for the type, there's no point in adding
8710          it to the table.  */
8711       if (e.name && e.name[0] != '\0')
8712         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
8713     }
8714 }
8715
8716 /* Output the public names table used to speed up access to externally
8717    visible names; or the public types table used to find type definitions.  */
8718
8719 static void
8720 output_pubnames (VEC (pubname_entry, gc) * names)
8721 {
8722   unsigned i;
8723   unsigned long pubnames_length = size_of_pubnames (names);
8724   pubname_ref pub;
8725
8726   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8727     dw2_asm_output_data (4, 0xffffffff,
8728       "Initial length escape value indicating 64-bit DWARF extension");
8729   if (names == pubname_table)
8730     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8731                          "Length of Public Names Info");
8732   else
8733     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8734                          "Length of Public Type Names Info");
8735   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
8736   dw2_asm_output_data (2, 2, "DWARF Version");
8737   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8738                          debug_info_section,
8739                          "Offset of Compilation Unit Info");
8740   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
8741                        "Compilation Unit Length");
8742
8743   FOR_EACH_VEC_ELT (pubname_entry, names, i, pub)
8744     {
8745       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
8746       if (names == pubname_table)
8747         gcc_assert (pub->die->die_mark);
8748
8749       if (names != pubtype_table
8750           || pub->die->die_offset != 0
8751           || !flag_eliminate_unused_debug_types)
8752         {
8753           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
8754                                "DIE offset");
8755
8756           dw2_asm_output_nstring (pub->name, -1, "external name");
8757         }
8758     }
8759
8760   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
8761 }
8762
8763 /* Output the information that goes into the .debug_aranges table.
8764    Namely, define the beginning and ending address range of the
8765    text section generated for this compilation unit.  */
8766
8767 static void
8768 output_aranges (unsigned long aranges_length)
8769 {
8770   unsigned i;
8771
8772   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8773     dw2_asm_output_data (4, 0xffffffff,
8774       "Initial length escape value indicating 64-bit DWARF extension");
8775   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
8776                        "Length of Address Ranges Info");
8777   /* Version number for aranges is still 2, even in DWARF3.  */
8778   dw2_asm_output_data (2, 2, "DWARF Version");
8779   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8780                          debug_info_section,
8781                          "Offset of Compilation Unit Info");
8782   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
8783   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
8784
8785   /* We need to align to twice the pointer size here.  */
8786   if (DWARF_ARANGES_PAD_SIZE)
8787     {
8788       /* Pad using a 2 byte words so that padding is correct for any
8789          pointer size.  */
8790       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
8791                            2 * DWARF2_ADDR_SIZE);
8792       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
8793         dw2_asm_output_data (2, 0, NULL);
8794     }
8795
8796   /* It is necessary not to output these entries if the sections were
8797      not used; if the sections were not used, the length will be 0 and
8798      the address may end up as 0 if the section is discarded by ld
8799      --gc-sections, leaving an invalid (0, 0) entry that can be
8800      confused with the terminator.  */
8801   if (text_section_used)
8802     {
8803       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
8804       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
8805                             text_section_label, "Length");
8806     }
8807   if (cold_text_section_used)
8808     {
8809       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
8810                            "Address");
8811       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
8812                             cold_text_section_label, "Length");
8813     }
8814
8815   if (have_multiple_function_sections)
8816     {
8817       unsigned fde_idx;
8818       dw_fde_ref fde;
8819
8820       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
8821         {
8822           if (!fde->in_std_section)
8823             {
8824               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
8825                                    "Address");
8826               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
8827                                     fde->dw_fde_begin, "Length");
8828             }
8829           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8830             {
8831               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
8832                                    "Address");
8833               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
8834                                     fde->dw_fde_second_begin, "Length");
8835             }
8836         }
8837     }
8838
8839   /* Output the terminator words.  */
8840   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8841   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8842 }
8843
8844 /* Add a new entry to .debug_ranges.  Return the offset at which it
8845    was placed.  */
8846
8847 static unsigned int
8848 add_ranges_num (int num)
8849 {
8850   unsigned int in_use = ranges_table_in_use;
8851
8852   if (in_use == ranges_table_allocated)
8853     {
8854       ranges_table_allocated += RANGES_TABLE_INCREMENT;
8855       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
8856                                     ranges_table_allocated);
8857       memset (ranges_table + ranges_table_in_use, 0,
8858               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
8859     }
8860
8861   ranges_table[in_use].num = num;
8862   ranges_table_in_use = in_use + 1;
8863
8864   return in_use * 2 * DWARF2_ADDR_SIZE;
8865 }
8866
8867 /* Add a new entry to .debug_ranges corresponding to a block, or a
8868    range terminator if BLOCK is NULL.  */
8869
8870 static unsigned int
8871 add_ranges (const_tree block)
8872 {
8873   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
8874 }
8875
8876 /* Add a new entry to .debug_ranges corresponding to a pair of
8877    labels.  */
8878
8879 static void
8880 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
8881                       bool *added)
8882 {
8883   unsigned int in_use = ranges_by_label_in_use;
8884   unsigned int offset;
8885
8886   if (in_use == ranges_by_label_allocated)
8887     {
8888       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
8889       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
8890                                        ranges_by_label,
8891                                        ranges_by_label_allocated);
8892       memset (ranges_by_label + ranges_by_label_in_use, 0,
8893               RANGES_TABLE_INCREMENT
8894               * sizeof (struct dw_ranges_by_label_struct));
8895     }
8896
8897   ranges_by_label[in_use].begin = begin;
8898   ranges_by_label[in_use].end = end;
8899   ranges_by_label_in_use = in_use + 1;
8900
8901   offset = add_ranges_num (-(int)in_use - 1);
8902   if (!*added)
8903     {
8904       add_AT_range_list (die, DW_AT_ranges, offset);
8905       *added = true;
8906     }
8907 }
8908
8909 static void
8910 output_ranges (void)
8911 {
8912   unsigned i;
8913   static const char *const start_fmt = "Offset %#x";
8914   const char *fmt = start_fmt;
8915
8916   for (i = 0; i < ranges_table_in_use; i++)
8917     {
8918       int block_num = ranges_table[i].num;
8919
8920       if (block_num > 0)
8921         {
8922           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
8923           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
8924
8925           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
8926           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
8927
8928           /* If all code is in the text section, then the compilation
8929              unit base address defaults to DW_AT_low_pc, which is the
8930              base of the text section.  */
8931           if (!have_multiple_function_sections)
8932             {
8933               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
8934                                     text_section_label,
8935                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
8936               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
8937                                     text_section_label, NULL);
8938             }
8939
8940           /* Otherwise, the compilation unit base address is zero,
8941              which allows us to use absolute addresses, and not worry
8942              about whether the target supports cross-section
8943              arithmetic.  */
8944           else
8945             {
8946               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
8947                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
8948               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
8949             }
8950
8951           fmt = NULL;
8952         }
8953
8954       /* Negative block_num stands for an index into ranges_by_label.  */
8955       else if (block_num < 0)
8956         {
8957           int lab_idx = - block_num - 1;
8958
8959           if (!have_multiple_function_sections)
8960             {
8961               gcc_unreachable ();
8962 #if 0
8963               /* If we ever use add_ranges_by_labels () for a single
8964                  function section, all we have to do is to take out
8965                  the #if 0 above.  */
8966               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8967                                     ranges_by_label[lab_idx].begin,
8968                                     text_section_label,
8969                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
8970               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8971                                     ranges_by_label[lab_idx].end,
8972                                     text_section_label, NULL);
8973 #endif
8974             }
8975           else
8976             {
8977               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8978                                    ranges_by_label[lab_idx].begin,
8979                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
8980               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8981                                    ranges_by_label[lab_idx].end,
8982                                    NULL);
8983             }
8984         }
8985       else
8986         {
8987           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8988           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8989           fmt = start_fmt;
8990         }
8991     }
8992 }
8993
8994 /* Data structure containing information about input files.  */
8995 struct file_info
8996 {
8997   const char *path;     /* Complete file name.  */
8998   const char *fname;    /* File name part.  */
8999   int length;           /* Length of entire string.  */
9000   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
9001   int dir_idx;          /* Index in directory table.  */
9002 };
9003
9004 /* Data structure containing information about directories with source
9005    files.  */
9006 struct dir_info
9007 {
9008   const char *path;     /* Path including directory name.  */
9009   int length;           /* Path length.  */
9010   int prefix;           /* Index of directory entry which is a prefix.  */
9011   int count;            /* Number of files in this directory.  */
9012   int dir_idx;          /* Index of directory used as base.  */
9013 };
9014
9015 /* Callback function for file_info comparison.  We sort by looking at
9016    the directories in the path.  */
9017
9018 static int
9019 file_info_cmp (const void *p1, const void *p2)
9020 {
9021   const struct file_info *const s1 = (const struct file_info *) p1;
9022   const struct file_info *const s2 = (const struct file_info *) p2;
9023   const unsigned char *cp1;
9024   const unsigned char *cp2;
9025
9026   /* Take care of file names without directories.  We need to make sure that
9027      we return consistent values to qsort since some will get confused if
9028      we return the same value when identical operands are passed in opposite
9029      orders.  So if neither has a directory, return 0 and otherwise return
9030      1 or -1 depending on which one has the directory.  */
9031   if ((s1->path == s1->fname || s2->path == s2->fname))
9032     return (s2->path == s2->fname) - (s1->path == s1->fname);
9033
9034   cp1 = (const unsigned char *) s1->path;
9035   cp2 = (const unsigned char *) s2->path;
9036
9037   while (1)
9038     {
9039       ++cp1;
9040       ++cp2;
9041       /* Reached the end of the first path?  If so, handle like above.  */
9042       if ((cp1 == (const unsigned char *) s1->fname)
9043           || (cp2 == (const unsigned char *) s2->fname))
9044         return ((cp2 == (const unsigned char *) s2->fname)
9045                 - (cp1 == (const unsigned char *) s1->fname));
9046
9047       /* Character of current path component the same?  */
9048       else if (*cp1 != *cp2)
9049         return *cp1 - *cp2;
9050     }
9051 }
9052
9053 struct file_name_acquire_data
9054 {
9055   struct file_info *files;
9056   int used_files;
9057   int max_files;
9058 };
9059
9060 /* Traversal function for the hash table.  */
9061
9062 static int
9063 file_name_acquire (void ** slot, void *data)
9064 {
9065   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
9066   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
9067   struct file_info *fi;
9068   const char *f;
9069
9070   gcc_assert (fnad->max_files >= d->emitted_number);
9071
9072   if (! d->emitted_number)
9073     return 1;
9074
9075   gcc_assert (fnad->max_files != fnad->used_files);
9076
9077   fi = fnad->files + fnad->used_files++;
9078
9079   /* Skip all leading "./".  */
9080   f = d->filename;
9081   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9082     f += 2;
9083
9084   /* Create a new array entry.  */
9085   fi->path = f;
9086   fi->length = strlen (f);
9087   fi->file_idx = d;
9088
9089   /* Search for the file name part.  */
9090   f = strrchr (f, DIR_SEPARATOR);
9091 #if defined (DIR_SEPARATOR_2)
9092   {
9093     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9094
9095     if (g != NULL)
9096       {
9097         if (f == NULL || f < g)
9098           f = g;
9099       }
9100   }
9101 #endif
9102
9103   fi->fname = f == NULL ? fi->path : f + 1;
9104   return 1;
9105 }
9106
9107 /* Output the directory table and the file name table.  We try to minimize
9108    the total amount of memory needed.  A heuristic is used to avoid large
9109    slowdowns with many input files.  */
9110
9111 static void
9112 output_file_names (void)
9113 {
9114   struct file_name_acquire_data fnad;
9115   int numfiles;
9116   struct file_info *files;
9117   struct dir_info *dirs;
9118   int *saved;
9119   int *savehere;
9120   int *backmap;
9121   int ndirs;
9122   int idx_offset;
9123   int i;
9124
9125   if (!last_emitted_file)
9126     {
9127       dw2_asm_output_data (1, 0, "End directory table");
9128       dw2_asm_output_data (1, 0, "End file name table");
9129       return;
9130     }
9131
9132   numfiles = last_emitted_file->emitted_number;
9133
9134   /* Allocate the various arrays we need.  */
9135   files = XALLOCAVEC (struct file_info, numfiles);
9136   dirs = XALLOCAVEC (struct dir_info, numfiles);
9137
9138   fnad.files = files;
9139   fnad.used_files = 0;
9140   fnad.max_files = numfiles;
9141   htab_traverse (file_table, file_name_acquire, &fnad);
9142   gcc_assert (fnad.used_files == fnad.max_files);
9143
9144   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9145
9146   /* Find all the different directories used.  */
9147   dirs[0].path = files[0].path;
9148   dirs[0].length = files[0].fname - files[0].path;
9149   dirs[0].prefix = -1;
9150   dirs[0].count = 1;
9151   dirs[0].dir_idx = 0;
9152   files[0].dir_idx = 0;
9153   ndirs = 1;
9154
9155   for (i = 1; i < numfiles; i++)
9156     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
9157         && memcmp (dirs[ndirs - 1].path, files[i].path,
9158                    dirs[ndirs - 1].length) == 0)
9159       {
9160         /* Same directory as last entry.  */
9161         files[i].dir_idx = ndirs - 1;
9162         ++dirs[ndirs - 1].count;
9163       }
9164     else
9165       {
9166         int j;
9167
9168         /* This is a new directory.  */
9169         dirs[ndirs].path = files[i].path;
9170         dirs[ndirs].length = files[i].fname - files[i].path;
9171         dirs[ndirs].count = 1;
9172         dirs[ndirs].dir_idx = ndirs;
9173         files[i].dir_idx = ndirs;
9174
9175         /* Search for a prefix.  */
9176         dirs[ndirs].prefix = -1;
9177         for (j = 0; j < ndirs; j++)
9178           if (dirs[j].length < dirs[ndirs].length
9179               && dirs[j].length > 1
9180               && (dirs[ndirs].prefix == -1
9181                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
9182               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
9183             dirs[ndirs].prefix = j;
9184
9185         ++ndirs;
9186       }
9187
9188   /* Now to the actual work.  We have to find a subset of the directories which
9189      allow expressing the file name using references to the directory table
9190      with the least amount of characters.  We do not do an exhaustive search
9191      where we would have to check out every combination of every single
9192      possible prefix.  Instead we use a heuristic which provides nearly optimal
9193      results in most cases and never is much off.  */
9194   saved = XALLOCAVEC (int, ndirs);
9195   savehere = XALLOCAVEC (int, ndirs);
9196
9197   memset (saved, '\0', ndirs * sizeof (saved[0]));
9198   for (i = 0; i < ndirs; i++)
9199     {
9200       int j;
9201       int total;
9202
9203       /* We can always save some space for the current directory.  But this
9204          does not mean it will be enough to justify adding the directory.  */
9205       savehere[i] = dirs[i].length;
9206       total = (savehere[i] - saved[i]) * dirs[i].count;
9207
9208       for (j = i + 1; j < ndirs; j++)
9209         {
9210           savehere[j] = 0;
9211           if (saved[j] < dirs[i].length)
9212             {
9213               /* Determine whether the dirs[i] path is a prefix of the
9214                  dirs[j] path.  */
9215               int k;
9216
9217               k = dirs[j].prefix;
9218               while (k != -1 && k != (int) i)
9219                 k = dirs[k].prefix;
9220
9221               if (k == (int) i)
9222                 {
9223                   /* Yes it is.  We can possibly save some memory by
9224                      writing the filenames in dirs[j] relative to
9225                      dirs[i].  */
9226                   savehere[j] = dirs[i].length;
9227                   total += (savehere[j] - saved[j]) * dirs[j].count;
9228                 }
9229             }
9230         }
9231
9232       /* Check whether we can save enough to justify adding the dirs[i]
9233          directory.  */
9234       if (total > dirs[i].length + 1)
9235         {
9236           /* It's worthwhile adding.  */
9237           for (j = i; j < ndirs; j++)
9238             if (savehere[j] > 0)
9239               {
9240                 /* Remember how much we saved for this directory so far.  */
9241                 saved[j] = savehere[j];
9242
9243                 /* Remember the prefix directory.  */
9244                 dirs[j].dir_idx = i;
9245               }
9246         }
9247     }
9248
9249   /* Emit the directory name table.  */
9250   idx_offset = dirs[0].length > 0 ? 1 : 0;
9251   for (i = 1 - idx_offset; i < ndirs; i++)
9252     dw2_asm_output_nstring (dirs[i].path,
9253                             dirs[i].length
9254                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
9255                             "Directory Entry: %#x", i + idx_offset);
9256
9257   dw2_asm_output_data (1, 0, "End directory table");
9258
9259   /* We have to emit them in the order of emitted_number since that's
9260      used in the debug info generation.  To do this efficiently we
9261      generate a back-mapping of the indices first.  */
9262   backmap = XALLOCAVEC (int, numfiles);
9263   for (i = 0; i < numfiles; i++)
9264     backmap[files[i].file_idx->emitted_number - 1] = i;
9265
9266   /* Now write all the file names.  */
9267   for (i = 0; i < numfiles; i++)
9268     {
9269       int file_idx = backmap[i];
9270       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
9271
9272 #ifdef VMS_DEBUGGING_INFO
9273 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
9274
9275       /* Setting these fields can lead to debugger miscomparisons,
9276          but VMS Debug requires them to be set correctly.  */
9277
9278       int ver;
9279       long long cdt;
9280       long siz;
9281       int maxfilelen = strlen (files[file_idx].path)
9282                                + dirs[dir_idx].length
9283                                + MAX_VMS_VERSION_LEN + 1;
9284       char *filebuf = XALLOCAVEC (char, maxfilelen);
9285
9286       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
9287       snprintf (filebuf, maxfilelen, "%s;%d",
9288                 files[file_idx].path + dirs[dir_idx].length, ver);
9289
9290       dw2_asm_output_nstring
9291         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
9292
9293       /* Include directory index.  */
9294       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9295
9296       /* Modification time.  */
9297       dw2_asm_output_data_uleb128
9298         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
9299           ? cdt : 0,
9300          NULL);
9301
9302       /* File length in bytes.  */
9303       dw2_asm_output_data_uleb128
9304         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
9305           ? siz : 0,
9306          NULL);
9307 #else
9308       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
9309                               "File Entry: %#x", (unsigned) i + 1);
9310
9311       /* Include directory index.  */
9312       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9313
9314       /* Modification time.  */
9315       dw2_asm_output_data_uleb128 (0, NULL);
9316
9317       /* File length in bytes.  */
9318       dw2_asm_output_data_uleb128 (0, NULL);
9319 #endif /* VMS_DEBUGGING_INFO */
9320     }
9321
9322   dw2_asm_output_data (1, 0, "End file name table");
9323 }
9324
9325
9326 /* Output one line number table into the .debug_line section.  */
9327
9328 static void
9329 output_one_line_info_table (dw_line_info_table *table)
9330 {
9331   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
9332   unsigned int current_line = 1;
9333   bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
9334   dw_line_info_entry *ent;
9335   size_t i;
9336
9337   FOR_EACH_VEC_ELT (dw_line_info_entry, table->entries, i, ent)
9338     {
9339       switch (ent->opcode)
9340         {
9341         case LI_set_address:
9342           /* ??? Unfortunately, we have little choice here currently, and
9343              must always use the most general form.  GCC does not know the
9344              address delta itself, so we can't use DW_LNS_advance_pc.  Many
9345              ports do have length attributes which will give an upper bound
9346              on the address range.  We could perhaps use length attributes
9347              to determine when it is safe to use DW_LNS_fixed_advance_pc.  */
9348           ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
9349
9350           /* This can handle any delta.  This takes
9351              4+DWARF2_ADDR_SIZE bytes.  */
9352           dw2_asm_output_data (1, 0, "set address %s", line_label);
9353           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9354           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9355           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9356           break;
9357
9358         case LI_set_line:
9359           if (ent->val == current_line)
9360             {
9361               /* We still need to start a new row, so output a copy insn.  */
9362               dw2_asm_output_data (1, DW_LNS_copy,
9363                                    "copy line %u", current_line);
9364             }
9365           else
9366             {
9367               int line_offset = ent->val - current_line;
9368               int line_delta = line_offset - DWARF_LINE_BASE;
9369
9370               current_line = ent->val;
9371               if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9372                 {
9373                   /* This can handle deltas from -10 to 234, using the current
9374                      definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
9375                      This takes 1 byte.  */
9376                   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9377                                        "line %u", current_line);
9378                 }
9379               else
9380                 {
9381                   /* This can handle any delta.  This takes at least 4 bytes,
9382                      depending on the value being encoded.  */
9383                   dw2_asm_output_data (1, DW_LNS_advance_line,
9384                                        "advance to line %u", current_line);
9385                   dw2_asm_output_data_sleb128 (line_offset, NULL);
9386                   dw2_asm_output_data (1, DW_LNS_copy, NULL);
9387                 }
9388             }
9389           break;
9390
9391         case LI_set_file:
9392           dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
9393           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9394           break;
9395
9396         case LI_set_column:
9397           dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
9398           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9399           break;
9400
9401         case LI_negate_stmt:
9402           current_is_stmt = !current_is_stmt;
9403           dw2_asm_output_data (1, DW_LNS_negate_stmt,
9404                                "is_stmt %d", current_is_stmt);
9405           break;
9406
9407         case LI_set_prologue_end:
9408           dw2_asm_output_data (1, DW_LNS_set_prologue_end,
9409                                "set prologue end");
9410           break;
9411           
9412         case LI_set_epilogue_begin:
9413           dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
9414                                "set epilogue begin");
9415           break;
9416
9417         case LI_set_discriminator:
9418           dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
9419           dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
9420           dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
9421           dw2_asm_output_data_uleb128 (ent->val, NULL);
9422           break;
9423         }
9424     }
9425
9426   /* Emit debug info for the address of the end of the table.  */
9427   dw2_asm_output_data (1, 0, "set address %s", table->end_label);
9428   dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9429   dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9430   dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
9431
9432   dw2_asm_output_data (1, 0, "end sequence");
9433   dw2_asm_output_data_uleb128 (1, NULL);
9434   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
9435 }
9436
9437 /* Output the source line number correspondence information.  This
9438    information goes into the .debug_line section.  */
9439
9440 static void
9441 output_line_info (void)
9442 {
9443   char l1[20], l2[20], p1[20], p2[20];
9444   int ver = dwarf_version;
9445   bool saw_one = false;
9446   int opc;
9447
9448   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
9449   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
9450   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
9451   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
9452
9453   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9454     dw2_asm_output_data (4, 0xffffffff,
9455       "Initial length escape value indicating 64-bit DWARF extension");
9456   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
9457                         "Length of Source Line Info");
9458   ASM_OUTPUT_LABEL (asm_out_file, l1);
9459
9460   dw2_asm_output_data (2, ver, "DWARF Version");
9461   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
9462   ASM_OUTPUT_LABEL (asm_out_file, p1);
9463
9464   /* Define the architecture-dependent minimum instruction length (in bytes).
9465      In this implementation of DWARF, this field is used for information
9466      purposes only.  Since GCC generates assembly language, we have no
9467      a priori knowledge of how many instruction bytes are generated for each
9468      source line, and therefore can use only the DW_LNE_set_address and
9469      DW_LNS_fixed_advance_pc line information commands.  Accordingly, we fix
9470      this as '1', which is "correct enough" for all architectures,
9471      and don't let the target override.  */
9472   dw2_asm_output_data (1, 1, "Minimum Instruction Length");
9473
9474   if (ver >= 4)
9475     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
9476                          "Maximum Operations Per Instruction");
9477   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
9478                        "Default is_stmt_start flag");
9479   dw2_asm_output_data (1, DWARF_LINE_BASE,
9480                        "Line Base Value (Special Opcodes)");
9481   dw2_asm_output_data (1, DWARF_LINE_RANGE,
9482                        "Line Range Value (Special Opcodes)");
9483   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
9484                        "Special Opcode Base");
9485
9486   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
9487     {
9488       int n_op_args;
9489       switch (opc)
9490         {
9491         case DW_LNS_advance_pc:
9492         case DW_LNS_advance_line:
9493         case DW_LNS_set_file:
9494         case DW_LNS_set_column:
9495         case DW_LNS_fixed_advance_pc:
9496         case DW_LNS_set_isa:
9497           n_op_args = 1;
9498           break;
9499         default:
9500           n_op_args = 0;
9501           break;
9502         }
9503
9504       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
9505                            opc, n_op_args);
9506     }
9507
9508   /* Write out the information about the files we use.  */
9509   output_file_names ();
9510   ASM_OUTPUT_LABEL (asm_out_file, p2);
9511
9512   if (separate_line_info)
9513     {
9514       dw_line_info_table *table;
9515       size_t i;
9516
9517       FOR_EACH_VEC_ELT (dw_line_info_table_p, separate_line_info, i, table)
9518         if (table->in_use)
9519           {
9520             output_one_line_info_table (table);
9521             saw_one = true;
9522           }
9523     }
9524   if (cold_text_section_line_info && cold_text_section_line_info->in_use)
9525     {
9526       output_one_line_info_table (cold_text_section_line_info);
9527       saw_one = true;
9528     }
9529
9530   /* ??? Some Darwin linkers crash on a .debug_line section with no
9531      sequences.  Further, merely a DW_LNE_end_sequence entry is not
9532      sufficient -- the address column must also be initialized.
9533      Make sure to output at least one set_address/end_sequence pair,
9534      choosing .text since that section is always present.  */
9535   if (text_section_line_info->in_use || !saw_one)
9536     output_one_line_info_table (text_section_line_info);
9537
9538   /* Output the marker for the end of the line number info.  */
9539   ASM_OUTPUT_LABEL (asm_out_file, l2);
9540 }
9541 \f
9542 /* Given a pointer to a tree node for some base type, return a pointer to
9543    a DIE that describes the given type.
9544
9545    This routine must only be called for GCC type nodes that correspond to
9546    Dwarf base (fundamental) types.  */
9547
9548 static dw_die_ref
9549 base_type_die (tree type)
9550 {
9551   dw_die_ref base_type_result;
9552   enum dwarf_type encoding;
9553
9554   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
9555     return 0;
9556
9557   /* If this is a subtype that should not be emitted as a subrange type,
9558      use the base type.  See subrange_type_for_debug_p.  */
9559   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
9560     type = TREE_TYPE (type);
9561
9562   switch (TREE_CODE (type))
9563     {
9564     case INTEGER_TYPE:
9565       if ((dwarf_version >= 4 || !dwarf_strict)
9566           && TYPE_NAME (type)
9567           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9568           && DECL_IS_BUILTIN (TYPE_NAME (type))
9569           && DECL_NAME (TYPE_NAME (type)))
9570         {
9571           const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
9572           if (strcmp (name, "char16_t") == 0
9573               || strcmp (name, "char32_t") == 0)
9574             {
9575               encoding = DW_ATE_UTF;
9576               break;
9577             }
9578         }
9579       if (TYPE_STRING_FLAG (type))
9580         {
9581           if (TYPE_UNSIGNED (type))
9582             encoding = DW_ATE_unsigned_char;
9583           else
9584             encoding = DW_ATE_signed_char;
9585         }
9586       else if (TYPE_UNSIGNED (type))
9587         encoding = DW_ATE_unsigned;
9588       else
9589         encoding = DW_ATE_signed;
9590       break;
9591
9592     case REAL_TYPE:
9593       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
9594         {
9595           if (dwarf_version >= 3 || !dwarf_strict)
9596             encoding = DW_ATE_decimal_float;
9597           else
9598             encoding = DW_ATE_lo_user;
9599         }
9600       else
9601         encoding = DW_ATE_float;
9602       break;
9603
9604     case FIXED_POINT_TYPE:
9605       if (!(dwarf_version >= 3 || !dwarf_strict))
9606         encoding = DW_ATE_lo_user;
9607       else if (TYPE_UNSIGNED (type))
9608         encoding = DW_ATE_unsigned_fixed;
9609       else
9610         encoding = DW_ATE_signed_fixed;
9611       break;
9612
9613       /* Dwarf2 doesn't know anything about complex ints, so use
9614          a user defined type for it.  */
9615     case COMPLEX_TYPE:
9616       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
9617         encoding = DW_ATE_complex_float;
9618       else
9619         encoding = DW_ATE_lo_user;
9620       break;
9621
9622     case BOOLEAN_TYPE:
9623       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
9624       encoding = DW_ATE_boolean;
9625       break;
9626
9627     default:
9628       /* No other TREE_CODEs are Dwarf fundamental types.  */
9629       gcc_unreachable ();
9630     }
9631
9632   base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
9633
9634   add_AT_unsigned (base_type_result, DW_AT_byte_size,
9635                    int_size_in_bytes (type));
9636   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
9637
9638   return base_type_result;
9639 }
9640
9641 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
9642    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
9643
9644 static inline int
9645 is_base_type (tree type)
9646 {
9647   switch (TREE_CODE (type))
9648     {
9649     case ERROR_MARK:
9650     case VOID_TYPE:
9651     case INTEGER_TYPE:
9652     case REAL_TYPE:
9653     case FIXED_POINT_TYPE:
9654     case COMPLEX_TYPE:
9655     case BOOLEAN_TYPE:
9656       return 1;
9657
9658     case ARRAY_TYPE:
9659     case RECORD_TYPE:
9660     case UNION_TYPE:
9661     case QUAL_UNION_TYPE:
9662     case ENUMERAL_TYPE:
9663     case FUNCTION_TYPE:
9664     case METHOD_TYPE:
9665     case POINTER_TYPE:
9666     case REFERENCE_TYPE:
9667     case NULLPTR_TYPE:
9668     case OFFSET_TYPE:
9669     case LANG_TYPE:
9670     case VECTOR_TYPE:
9671       return 0;
9672
9673     default:
9674       gcc_unreachable ();
9675     }
9676
9677   return 0;
9678 }
9679
9680 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
9681    node, return the size in bits for the type if it is a constant, or else
9682    return the alignment for the type if the type's size is not constant, or
9683    else return BITS_PER_WORD if the type actually turns out to be an
9684    ERROR_MARK node.  */
9685
9686 static inline unsigned HOST_WIDE_INT
9687 simple_type_size_in_bits (const_tree type)
9688 {
9689   if (TREE_CODE (type) == ERROR_MARK)
9690     return BITS_PER_WORD;
9691   else if (TYPE_SIZE (type) == NULL_TREE)
9692     return 0;
9693   else if (host_integerp (TYPE_SIZE (type), 1))
9694     return tree_low_cst (TYPE_SIZE (type), 1);
9695   else
9696     return TYPE_ALIGN (type);
9697 }
9698
9699 /* Similarly, but return a double_int instead of UHWI.  */
9700
9701 static inline double_int
9702 double_int_type_size_in_bits (const_tree type)
9703 {
9704   if (TREE_CODE (type) == ERROR_MARK)
9705     return uhwi_to_double_int (BITS_PER_WORD);
9706   else if (TYPE_SIZE (type) == NULL_TREE)
9707     return double_int_zero;
9708   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
9709     return tree_to_double_int (TYPE_SIZE (type));
9710   else
9711     return uhwi_to_double_int (TYPE_ALIGN (type));
9712 }
9713
9714 /*  Given a pointer to a tree node for a subrange type, return a pointer
9715     to a DIE that describes the given type.  */
9716
9717 static dw_die_ref
9718 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
9719 {
9720   dw_die_ref subrange_die;
9721   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
9722
9723   if (context_die == NULL)
9724     context_die = comp_unit_die ();
9725
9726   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
9727
9728   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
9729     {
9730       /* The size of the subrange type and its base type do not match,
9731          so we need to generate a size attribute for the subrange type.  */
9732       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
9733     }
9734
9735   if (low)
9736     add_bound_info (subrange_die, DW_AT_lower_bound, low);
9737   if (high)
9738     add_bound_info (subrange_die, DW_AT_upper_bound, high);
9739
9740   return subrange_die;
9741 }
9742
9743 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
9744    entry that chains various modifiers in front of the given type.  */
9745
9746 static dw_die_ref
9747 modified_type_die (tree type, int is_const_type, int is_volatile_type,
9748                    dw_die_ref context_die)
9749 {
9750   enum tree_code code = TREE_CODE (type);
9751   dw_die_ref mod_type_die;
9752   dw_die_ref sub_die = NULL;
9753   tree item_type = NULL;
9754   tree qualified_type;
9755   tree name, low, high;
9756
9757   if (code == ERROR_MARK)
9758     return NULL;
9759
9760   /* See if we already have the appropriately qualified variant of
9761      this type.  */
9762   qualified_type
9763     = get_qualified_type (type,
9764                           ((is_const_type ? TYPE_QUAL_CONST : 0)
9765                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
9766
9767   if (qualified_type == sizetype
9768       && TYPE_NAME (qualified_type)
9769       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
9770     {
9771       tree t = TREE_TYPE (TYPE_NAME (qualified_type));
9772
9773       gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
9774                            && TYPE_PRECISION (t)
9775                            == TYPE_PRECISION (qualified_type)
9776                            && TYPE_UNSIGNED (t)
9777                            == TYPE_UNSIGNED (qualified_type));
9778       qualified_type = t;
9779     }
9780
9781   /* If we do, then we can just use its DIE, if it exists.  */
9782   if (qualified_type)
9783     {
9784       mod_type_die = lookup_type_die (qualified_type);
9785       if (mod_type_die)
9786         return mod_type_die;
9787     }
9788
9789   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
9790
9791   /* Handle C typedef types.  */
9792   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
9793       && !DECL_ARTIFICIAL (name))
9794     {
9795       tree dtype = TREE_TYPE (name);
9796
9797       if (qualified_type == dtype)
9798         {
9799           /* For a named type, use the typedef.  */
9800           gen_type_die (qualified_type, context_die);
9801           return lookup_type_die (qualified_type);
9802         }
9803       else if (is_const_type < TYPE_READONLY (dtype)
9804                || is_volatile_type < TYPE_VOLATILE (dtype)
9805                || (is_const_type <= TYPE_READONLY (dtype)
9806                    && is_volatile_type <= TYPE_VOLATILE (dtype)
9807                    && DECL_ORIGINAL_TYPE (name) != type))
9808         /* cv-unqualified version of named type.  Just use the unnamed
9809            type to which it refers.  */
9810         return modified_type_die (DECL_ORIGINAL_TYPE (name),
9811                                   is_const_type, is_volatile_type,
9812                                   context_die);
9813       /* Else cv-qualified version of named type; fall through.  */
9814     }
9815
9816   if (is_const_type
9817       /* If both is_const_type and is_volatile_type, prefer the path
9818          which leads to a qualified type.  */
9819       && (!is_volatile_type
9820           || get_qualified_type (type, TYPE_QUAL_CONST) == NULL_TREE
9821           || get_qualified_type (type, TYPE_QUAL_VOLATILE) != NULL_TREE))
9822     {
9823       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die (), type);
9824       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
9825     }
9826   else if (is_volatile_type)
9827     {
9828       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die (), type);
9829       sub_die = modified_type_die (type, is_const_type, 0, context_die);
9830     }
9831   else if (code == POINTER_TYPE)
9832     {
9833       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die (), type);
9834       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9835                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
9836       item_type = TREE_TYPE (type);
9837       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9838         add_AT_unsigned (mod_type_die, DW_AT_address_class,
9839                          TYPE_ADDR_SPACE (item_type));
9840     }
9841   else if (code == REFERENCE_TYPE)
9842     {
9843       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
9844         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die (),
9845                                 type);
9846       else
9847         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die (), type);
9848       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9849                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
9850       item_type = TREE_TYPE (type);
9851       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9852         add_AT_unsigned (mod_type_die, DW_AT_address_class,
9853                          TYPE_ADDR_SPACE (item_type));
9854     }
9855   else if (code == INTEGER_TYPE
9856            && TREE_TYPE (type) != NULL_TREE
9857            && subrange_type_for_debug_p (type, &low, &high))
9858     {
9859       mod_type_die = subrange_type_die (type, low, high, context_die);
9860       item_type = TREE_TYPE (type);
9861     }
9862   else if (is_base_type (type))
9863     mod_type_die = base_type_die (type);
9864   else
9865     {
9866       gen_type_die (type, context_die);
9867
9868       /* We have to get the type_main_variant here (and pass that to the
9869          `lookup_type_die' routine) because the ..._TYPE node we have
9870          might simply be a *copy* of some original type node (where the
9871          copy was created to help us keep track of typedef names) and
9872          that copy might have a different TYPE_UID from the original
9873          ..._TYPE node.  */
9874       if (TREE_CODE (type) != VECTOR_TYPE)
9875         return lookup_type_die (type_main_variant (type));
9876       else
9877         /* Vectors have the debugging information in the type,
9878            not the main variant.  */
9879         return lookup_type_die (type);
9880     }
9881
9882   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
9883      don't output a DW_TAG_typedef, since there isn't one in the
9884      user's program; just attach a DW_AT_name to the type.
9885      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
9886      if the base type already has the same name.  */
9887   if (name
9888       && ((TREE_CODE (name) != TYPE_DECL
9889            && (qualified_type == TYPE_MAIN_VARIANT (type)
9890                || (!is_const_type && !is_volatile_type)))
9891           || (TREE_CODE (name) == TYPE_DECL
9892               && TREE_TYPE (name) == qualified_type
9893               && DECL_NAME (name))))
9894     {
9895       if (TREE_CODE (name) == TYPE_DECL)
9896         /* Could just call add_name_and_src_coords_attributes here,
9897            but since this is a builtin type it doesn't have any
9898            useful source coordinates anyway.  */
9899         name = DECL_NAME (name);
9900       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
9901       add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
9902       if (TYPE_ARTIFICIAL (type))
9903         add_AT_flag (mod_type_die, DW_AT_artificial, 1);
9904     }
9905   /* This probably indicates a bug.  */
9906   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
9907     {
9908       name = TYPE_NAME (type);
9909       if (name
9910           && TREE_CODE (name) == TYPE_DECL)
9911         name = DECL_NAME (name);
9912       add_name_attribute (mod_type_die,
9913                           name ? IDENTIFIER_POINTER (name) : "__unknown__");
9914     }
9915
9916   if (qualified_type)
9917     equate_type_number_to_die (qualified_type, mod_type_die);
9918
9919   if (item_type)
9920     /* We must do this after the equate_type_number_to_die call, in case
9921        this is a recursive type.  This ensures that the modified_type_die
9922        recursion will terminate even if the type is recursive.  Recursive
9923        types are possible in Ada.  */
9924     sub_die = modified_type_die (item_type,
9925                                  TYPE_READONLY (item_type),
9926                                  TYPE_VOLATILE (item_type),
9927                                  context_die);
9928
9929   if (sub_die != NULL)
9930     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
9931
9932   return mod_type_die;
9933 }
9934
9935 /* Generate DIEs for the generic parameters of T.
9936    T must be either a generic type or a generic function.
9937    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
9938
9939 static void
9940 gen_generic_params_dies (tree t)
9941 {
9942   tree parms, args;
9943   int parms_num, i;
9944   dw_die_ref die = NULL;
9945
9946   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
9947     return;
9948
9949   if (TYPE_P (t))
9950     die = lookup_type_die (t);
9951   else if (DECL_P (t))
9952     die = lookup_decl_die (t);
9953
9954   gcc_assert (die);
9955
9956   parms = lang_hooks.get_innermost_generic_parms (t);
9957   if (!parms)
9958     /* T has no generic parameter. It means T is neither a generic type
9959        or function. End of story.  */
9960     return;
9961
9962   parms_num = TREE_VEC_LENGTH (parms);
9963   args = lang_hooks.get_innermost_generic_args (t);
9964   for (i = 0; i < parms_num; i++)
9965     {
9966       tree parm, arg, arg_pack_elems;
9967
9968       parm = TREE_VEC_ELT (parms, i);
9969       arg = TREE_VEC_ELT (args, i);
9970       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
9971       gcc_assert (parm && TREE_VALUE (parm) && arg);
9972
9973       if (parm && TREE_VALUE (parm) && arg)
9974         {
9975           /* If PARM represents a template parameter pack,
9976              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
9977              by DW_TAG_template_*_parameter DIEs for the argument
9978              pack elements of ARG. Note that ARG would then be
9979              an argument pack.  */
9980           if (arg_pack_elems)
9981             template_parameter_pack_die (TREE_VALUE (parm),
9982                                          arg_pack_elems,
9983                                          die);
9984           else
9985             generic_parameter_die (TREE_VALUE (parm), arg,
9986                                    true /* Emit DW_AT_name */, die);
9987         }
9988     }
9989 }
9990
9991 /* Create and return a DIE for PARM which should be
9992    the representation of a generic type parameter.
9993    For instance, in the C++ front end, PARM would be a template parameter.
9994    ARG is the argument to PARM.
9995    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
9996    name of the PARM.
9997    PARENT_DIE is the parent DIE which the new created DIE should be added to,
9998    as a child node.  */
9999
10000 static dw_die_ref
10001 generic_parameter_die (tree parm, tree arg,
10002                        bool emit_name_p,
10003                        dw_die_ref parent_die)
10004 {
10005   dw_die_ref tmpl_die = NULL;
10006   const char *name = NULL;
10007
10008   if (!parm || !DECL_NAME (parm) || !arg)
10009     return NULL;
10010
10011   /* We support non-type generic parameters and arguments,
10012      type generic parameters and arguments, as well as
10013      generic generic parameters (a.k.a. template template parameters in C++)
10014      and arguments.  */
10015   if (TREE_CODE (parm) == PARM_DECL)
10016     /* PARM is a nontype generic parameter  */
10017     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
10018   else if (TREE_CODE (parm) == TYPE_DECL)
10019     /* PARM is a type generic parameter.  */
10020     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
10021   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10022     /* PARM is a generic generic parameter.
10023        Its DIE is a GNU extension. It shall have a
10024        DW_AT_name attribute to represent the name of the template template
10025        parameter, and a DW_AT_GNU_template_name attribute to represent the
10026        name of the template template argument.  */
10027     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
10028                         parent_die, parm);
10029   else
10030     gcc_unreachable ();
10031
10032   if (tmpl_die)
10033     {
10034       tree tmpl_type;
10035
10036       /* If PARM is a generic parameter pack, it means we are
10037          emitting debug info for a template argument pack element.
10038          In other terms, ARG is a template argument pack element.
10039          In that case, we don't emit any DW_AT_name attribute for
10040          the die.  */
10041       if (emit_name_p)
10042         {
10043           name = IDENTIFIER_POINTER (DECL_NAME (parm));
10044           gcc_assert (name);
10045           add_AT_string (tmpl_die, DW_AT_name, name);
10046         }
10047
10048       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10049         {
10050           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
10051              TMPL_DIE should have a child DW_AT_type attribute that is set
10052              to the type of the argument to PARM, which is ARG.
10053              If PARM is a type generic parameter, TMPL_DIE should have a
10054              child DW_AT_type that is set to ARG.  */
10055           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
10056           add_type_attribute (tmpl_die, tmpl_type, 0,
10057                               TREE_THIS_VOLATILE (tmpl_type),
10058                               parent_die);
10059         }
10060       else
10061         {
10062           /* So TMPL_DIE is a DIE representing a
10063              a generic generic template parameter, a.k.a template template
10064              parameter in C++ and arg is a template.  */
10065
10066           /* The DW_AT_GNU_template_name attribute of the DIE must be set
10067              to the name of the argument.  */
10068           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
10069           if (name)
10070             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
10071         }
10072
10073       if (TREE_CODE (parm) == PARM_DECL)
10074         /* So PARM is a non-type generic parameter.
10075            DWARF3 5.6.8 says we must set a DW_AT_const_value child
10076            attribute of TMPL_DIE which value represents the value
10077            of ARG.
10078            We must be careful here:
10079            The value of ARG might reference some function decls.
10080            We might currently be emitting debug info for a generic
10081            type and types are emitted before function decls, we don't
10082            know if the function decls referenced by ARG will actually be
10083            emitted after cgraph computations.
10084            So must defer the generation of the DW_AT_const_value to
10085            after cgraph is ready.  */
10086         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
10087     }
10088
10089   return tmpl_die;
10090 }
10091
10092 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
10093    PARM_PACK must be a template parameter pack. The returned DIE
10094    will be child DIE of PARENT_DIE.  */
10095
10096 static dw_die_ref
10097 template_parameter_pack_die (tree parm_pack,
10098                              tree parm_pack_args,
10099                              dw_die_ref parent_die)
10100 {
10101   dw_die_ref die;
10102   int j;
10103
10104   gcc_assert (parent_die && parm_pack);
10105
10106   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
10107   add_name_and_src_coords_attributes (die, parm_pack);
10108   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
10109     generic_parameter_die (parm_pack,
10110                            TREE_VEC_ELT (parm_pack_args, j),
10111                            false /* Don't emit DW_AT_name */,
10112                            die);
10113   return die;
10114 }
10115
10116 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
10117    an enumerated type.  */
10118
10119 static inline int
10120 type_is_enum (const_tree type)
10121 {
10122   return TREE_CODE (type) == ENUMERAL_TYPE;
10123 }
10124
10125 /* Return the DBX register number described by a given RTL node.  */
10126
10127 static unsigned int
10128 dbx_reg_number (const_rtx rtl)
10129 {
10130   unsigned regno = REGNO (rtl);
10131
10132   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
10133
10134 #ifdef LEAF_REG_REMAP
10135   if (current_function_uses_only_leaf_regs)
10136     {
10137       int leaf_reg = LEAF_REG_REMAP (regno);
10138       if (leaf_reg != -1)
10139         regno = (unsigned) leaf_reg;
10140     }
10141 #endif
10142
10143   return DBX_REGISTER_NUMBER (regno);
10144 }
10145
10146 /* Optionally add a DW_OP_piece term to a location description expression.
10147    DW_OP_piece is only added if the location description expression already
10148    doesn't end with DW_OP_piece.  */
10149
10150 static void
10151 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
10152 {
10153   dw_loc_descr_ref loc;
10154
10155   if (*list_head != NULL)
10156     {
10157       /* Find the end of the chain.  */
10158       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
10159         ;
10160
10161       if (loc->dw_loc_opc != DW_OP_piece)
10162         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
10163     }
10164 }
10165
10166 /* Return a location descriptor that designates a machine register or
10167    zero if there is none.  */
10168
10169 static dw_loc_descr_ref
10170 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
10171 {
10172   rtx regs;
10173
10174   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
10175     return 0;
10176
10177   /* We only use "frame base" when we're sure we're talking about the
10178      post-prologue local stack frame.  We do this by *not* running
10179      register elimination until this point, and recognizing the special
10180      argument pointer and soft frame pointer rtx's.
10181      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
10182   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
10183       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
10184     {
10185       dw_loc_descr_ref result = NULL;
10186
10187       if (dwarf_version >= 4 || !dwarf_strict)
10188         {
10189           result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
10190                                        initialized);
10191           if (result)
10192             add_loc_descr (&result,
10193                            new_loc_descr (DW_OP_stack_value, 0, 0));
10194         }
10195       return result;
10196     }
10197
10198   regs = targetm.dwarf_register_span (rtl);
10199
10200   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
10201     return multiple_reg_loc_descriptor (rtl, regs, initialized);
10202   else
10203     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
10204 }
10205
10206 /* Return a location descriptor that designates a machine register for
10207    a given hard register number.  */
10208
10209 static dw_loc_descr_ref
10210 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
10211 {
10212   dw_loc_descr_ref reg_loc_descr;
10213
10214   if (regno <= 31)
10215     reg_loc_descr
10216       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
10217   else
10218     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
10219
10220   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10221     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10222
10223   return reg_loc_descr;
10224 }
10225
10226 /* Given an RTL of a register, return a location descriptor that
10227    designates a value that spans more than one register.  */
10228
10229 static dw_loc_descr_ref
10230 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
10231                              enum var_init_status initialized)
10232 {
10233   int nregs, size, i;
10234   unsigned reg;
10235   dw_loc_descr_ref loc_result = NULL;
10236
10237   reg = REGNO (rtl);
10238 #ifdef LEAF_REG_REMAP
10239   if (current_function_uses_only_leaf_regs)
10240     {
10241       int leaf_reg = LEAF_REG_REMAP (reg);
10242       if (leaf_reg != -1)
10243         reg = (unsigned) leaf_reg;
10244     }
10245 #endif
10246   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
10247   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
10248
10249   /* Simple, contiguous registers.  */
10250   if (regs == NULL_RTX)
10251     {
10252       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
10253
10254       loc_result = NULL;
10255       while (nregs--)
10256         {
10257           dw_loc_descr_ref t;
10258
10259           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
10260                                       VAR_INIT_STATUS_INITIALIZED);
10261           add_loc_descr (&loc_result, t);
10262           add_loc_descr_op_piece (&loc_result, size);
10263           ++reg;
10264         }
10265       return loc_result;
10266     }
10267
10268   /* Now onto stupid register sets in non contiguous locations.  */
10269
10270   gcc_assert (GET_CODE (regs) == PARALLEL);
10271
10272   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10273   loc_result = NULL;
10274
10275   for (i = 0; i < XVECLEN (regs, 0); ++i)
10276     {
10277       dw_loc_descr_ref t;
10278
10279       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
10280                                   VAR_INIT_STATUS_INITIALIZED);
10281       add_loc_descr (&loc_result, t);
10282       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10283       add_loc_descr_op_piece (&loc_result, size);
10284     }
10285
10286   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10287     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10288   return loc_result;
10289 }
10290
10291 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
10292
10293 /* Return a location descriptor that designates a constant i,
10294    as a compound operation from constant (i >> shift), constant shift
10295    and DW_OP_shl.  */
10296
10297 static dw_loc_descr_ref
10298 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10299 {
10300   dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
10301   add_loc_descr (&ret, int_loc_descriptor (shift));
10302   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
10303   return ret;
10304 }
10305
10306 /* Return a location descriptor that designates a constant.  */
10307
10308 static dw_loc_descr_ref
10309 int_loc_descriptor (HOST_WIDE_INT i)
10310 {
10311   enum dwarf_location_atom op;
10312
10313   /* Pick the smallest representation of a constant, rather than just
10314      defaulting to the LEB encoding.  */
10315   if (i >= 0)
10316     {
10317       int clz = clz_hwi (i);
10318       int ctz = ctz_hwi (i);
10319       if (i <= 31)
10320         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
10321       else if (i <= 0xff)
10322         op = DW_OP_const1u;
10323       else if (i <= 0xffff)
10324         op = DW_OP_const2u;
10325       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10326                && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10327         /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
10328            DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
10329            while DW_OP_const4u is 5 bytes.  */
10330         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
10331       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10332                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10333         /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
10334            while DW_OP_const4u is 5 bytes.  */
10335         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10336       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10337         op = DW_OP_const4u;
10338       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10339                && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10340         /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
10341            while DW_OP_constu of constant >= 0x100000000 takes at least
10342            6 bytes.  */
10343         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10344       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10345                && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
10346                   >= HOST_BITS_PER_WIDE_INT)
10347         /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
10348            DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
10349            while DW_OP_constu takes in this case at least 6 bytes.  */
10350         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
10351       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10352                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10353                && size_of_uleb128 (i) > 6)
10354         /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes.  */
10355         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
10356       else
10357         op = DW_OP_constu;
10358     }
10359   else
10360     {
10361       if (i >= -0x80)
10362         op = DW_OP_const1s;
10363       else if (i >= -0x8000)
10364         op = DW_OP_const2s;
10365       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10366         {
10367           if (size_of_int_loc_descriptor (i) < 5)
10368             {
10369               dw_loc_descr_ref ret = int_loc_descriptor (-i);
10370               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10371               return ret;
10372             }
10373           op = DW_OP_const4s;
10374         }
10375       else
10376         {
10377           if (size_of_int_loc_descriptor (i)
10378               < (unsigned long) 1 + size_of_sleb128 (i))
10379             {
10380               dw_loc_descr_ref ret = int_loc_descriptor (-i);
10381               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10382               return ret;
10383             }
10384           op = DW_OP_consts;
10385         }
10386     }
10387
10388   return new_loc_descr (op, i, 0);
10389 }
10390
10391 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
10392    without actually allocating it.  */
10393
10394 static unsigned long
10395 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10396 {
10397   return size_of_int_loc_descriptor (i >> shift)
10398          + size_of_int_loc_descriptor (shift)
10399          + 1;
10400 }
10401
10402 /* Return size_of_locs (int_loc_descriptor (i)) without
10403    actually allocating it.  */
10404
10405 static unsigned long
10406 size_of_int_loc_descriptor (HOST_WIDE_INT i)
10407 {
10408   unsigned long s;
10409
10410   if (i >= 0)
10411     {
10412       int clz, ctz;
10413       if (i <= 31)
10414         return 1;
10415       else if (i <= 0xff)
10416         return 2;
10417       else if (i <= 0xffff)
10418         return 3;
10419       clz = clz_hwi (i);
10420       ctz = ctz_hwi (i);
10421       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10422           && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10423         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10424                                                     - clz - 5);
10425       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10426                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10427         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10428                                                     - clz - 8);
10429       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10430         return 5;
10431       s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
10432       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10433           && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10434         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10435                                                     - clz - 8);
10436       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10437                && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
10438         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10439                                                     - clz - 16);
10440       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10441                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10442                && s > 6)
10443         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10444                                                     - clz - 32);
10445       else
10446         return 1 + s;
10447     }
10448   else
10449     {
10450       if (i >= -0x80)
10451         return 2;
10452       else if (i >= -0x8000)
10453         return 3;
10454       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10455         {
10456           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10457             {
10458               s = size_of_int_loc_descriptor (-i) + 1;
10459               if (s < 5)
10460                 return s;
10461             }
10462           return 5;
10463         }
10464       else
10465         {
10466           unsigned long r = 1 + size_of_sleb128 (i);
10467           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10468             {
10469               s = size_of_int_loc_descriptor (-i) + 1;
10470               if (s < r)
10471                 return s;
10472             }
10473           return r;
10474         }
10475     }
10476 }
10477
10478 /* Return loc description representing "address" of integer value.
10479    This can appear only as toplevel expression.  */
10480
10481 static dw_loc_descr_ref
10482 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
10483 {
10484   int litsize;
10485   dw_loc_descr_ref loc_result = NULL;
10486
10487   if (!(dwarf_version >= 4 || !dwarf_strict))
10488     return NULL;
10489
10490   litsize = size_of_int_loc_descriptor (i);
10491   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
10492      is more compact.  For DW_OP_stack_value we need:
10493      litsize + 1 (DW_OP_stack_value)
10494      and for DW_OP_implicit_value:
10495      1 (DW_OP_implicit_value) + 1 (length) + size.  */
10496   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
10497     {
10498       loc_result = int_loc_descriptor (i);
10499       add_loc_descr (&loc_result,
10500                      new_loc_descr (DW_OP_stack_value, 0, 0));
10501       return loc_result;
10502     }
10503
10504   loc_result = new_loc_descr (DW_OP_implicit_value,
10505                               size, 0);
10506   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
10507   loc_result->dw_loc_oprnd2.v.val_int = i;
10508   return loc_result;
10509 }
10510
10511 /* Return a location descriptor that designates a base+offset location.  */
10512
10513 static dw_loc_descr_ref
10514 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
10515                  enum var_init_status initialized)
10516 {
10517   unsigned int regno;
10518   dw_loc_descr_ref result;
10519   dw_fde_ref fde = cfun->fde;
10520
10521   /* We only use "frame base" when we're sure we're talking about the
10522      post-prologue local stack frame.  We do this by *not* running
10523      register elimination until this point, and recognizing the special
10524      argument pointer and soft frame pointer rtx's.  */
10525   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
10526     {
10527       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10528
10529       if (elim != reg)
10530         {
10531           if (GET_CODE (elim) == PLUS)
10532             {
10533               offset += INTVAL (XEXP (elim, 1));
10534               elim = XEXP (elim, 0);
10535             }
10536           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
10537                        && (elim == hard_frame_pointer_rtx
10538                            || elim == stack_pointer_rtx))
10539                       || elim == (frame_pointer_needed
10540                                   ? hard_frame_pointer_rtx
10541                                   : stack_pointer_rtx));
10542
10543           /* If drap register is used to align stack, use frame
10544              pointer + offset to access stack variables.  If stack
10545              is aligned without drap, use stack pointer + offset to
10546              access stack variables.  */
10547           if (crtl->stack_realign_tried
10548               && reg == frame_pointer_rtx)
10549             {
10550               int base_reg
10551                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
10552                                       ? HARD_FRAME_POINTER_REGNUM
10553                                       : REGNO (elim));
10554               return new_reg_loc_descr (base_reg, offset);
10555             }
10556
10557           gcc_assert (frame_pointer_fb_offset_valid);
10558           offset += frame_pointer_fb_offset;
10559           return new_loc_descr (DW_OP_fbreg, offset, 0);
10560         }
10561     }
10562
10563   regno = DWARF_FRAME_REGNUM (REGNO (reg));
10564
10565   if (!optimize && fde
10566       && (fde->drap_reg == regno || fde->vdrap_reg == regno))
10567     {
10568       /* Use cfa+offset to represent the location of arguments passed
10569          on the stack when drap is used to align stack.
10570          Only do this when not optimizing, for optimized code var-tracking
10571          is supposed to track where the arguments live and the register
10572          used as vdrap or drap in some spot might be used for something
10573          else in other part of the routine.  */
10574       return new_loc_descr (DW_OP_fbreg, offset, 0);
10575     }
10576
10577   if (regno <= 31)
10578     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
10579                             offset, 0);
10580   else
10581     result = new_loc_descr (DW_OP_bregx, regno, offset);
10582
10583   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10584     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10585
10586   return result;
10587 }
10588
10589 /* Return true if this RTL expression describes a base+offset calculation.  */
10590
10591 static inline int
10592 is_based_loc (const_rtx rtl)
10593 {
10594   return (GET_CODE (rtl) == PLUS
10595           && ((REG_P (XEXP (rtl, 0))
10596                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
10597                && CONST_INT_P (XEXP (rtl, 1)))));
10598 }
10599
10600 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
10601    failed.  */
10602
10603 static dw_loc_descr_ref
10604 tls_mem_loc_descriptor (rtx mem)
10605 {
10606   tree base;
10607   dw_loc_descr_ref loc_result;
10608
10609   if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
10610     return NULL;
10611
10612   base = get_base_address (MEM_EXPR (mem));
10613   if (base == NULL
10614       || TREE_CODE (base) != VAR_DECL
10615       || !DECL_THREAD_LOCAL_P (base))
10616     return NULL;
10617
10618   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
10619   if (loc_result == NULL)
10620     return NULL;
10621
10622   if (MEM_OFFSET (mem))
10623     loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
10624
10625   return loc_result;
10626 }
10627
10628 /* Output debug info about reason why we failed to expand expression as dwarf
10629    expression.  */
10630
10631 static void
10632 expansion_failed (tree expr, rtx rtl, char const *reason)
10633 {
10634   if (dump_file && (dump_flags & TDF_DETAILS))
10635     {
10636       fprintf (dump_file, "Failed to expand as dwarf: ");
10637       if (expr)
10638         print_generic_expr (dump_file, expr, dump_flags);
10639       if (rtl)
10640         {
10641           fprintf (dump_file, "\n");
10642           print_rtl (dump_file, rtl);
10643         }
10644       fprintf (dump_file, "\nReason: %s\n", reason);
10645     }
10646 }
10647
10648 /* Helper function for const_ok_for_output, called either directly
10649    or via for_each_rtx.  */
10650
10651 static int
10652 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
10653 {
10654   rtx rtl = *rtlp;
10655
10656   if (GET_CODE (rtl) == UNSPEC)
10657     {
10658       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
10659          we can't express it in the debug info.  */
10660 #ifdef ENABLE_CHECKING
10661       /* Don't complain about TLS UNSPECs, those are just too hard to
10662          delegitimize.  */
10663       if (XVECLEN (rtl, 0) != 1
10664           || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
10665           || SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0)) == NULL
10666           || TREE_CODE (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))) != VAR_DECL
10667           || !DECL_THREAD_LOCAL_P (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))))
10668         inform (current_function_decl
10669                 ? DECL_SOURCE_LOCATION (current_function_decl)
10670                 : UNKNOWN_LOCATION,
10671 #if NUM_UNSPEC_VALUES > 0
10672                 "non-delegitimized UNSPEC %s (%d) found in variable location",
10673                 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
10674                  ? unspec_strings[XINT (rtl, 1)] : "unknown"),
10675                 XINT (rtl, 1));
10676 #else
10677                 "non-delegitimized UNSPEC %d found in variable location",
10678                 XINT (rtl, 1));
10679 #endif
10680 #endif
10681       expansion_failed (NULL_TREE, rtl,
10682                         "UNSPEC hasn't been delegitimized.\n");
10683       return 1;
10684     }
10685
10686   if (GET_CODE (rtl) != SYMBOL_REF)
10687     return 0;
10688
10689   if (CONSTANT_POOL_ADDRESS_P (rtl))
10690     {
10691       bool marked;
10692       get_pool_constant_mark (rtl, &marked);
10693       /* If all references to this pool constant were optimized away,
10694          it was not output and thus we can't represent it.  */
10695       if (!marked)
10696         {
10697           expansion_failed (NULL_TREE, rtl,
10698                             "Constant was removed from constant pool.\n");
10699           return 1;
10700         }
10701     }
10702
10703   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
10704     return 1;
10705
10706   /* Avoid references to external symbols in debug info, on several targets
10707      the linker might even refuse to link when linking a shared library,
10708      and in many other cases the relocations for .debug_info/.debug_loc are
10709      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
10710      to be defined within the same shared library or executable are fine.  */
10711   if (SYMBOL_REF_EXTERNAL_P (rtl))
10712     {
10713       tree decl = SYMBOL_REF_DECL (rtl);
10714
10715       if (decl == NULL || !targetm.binds_local_p (decl))
10716         {
10717           expansion_failed (NULL_TREE, rtl,
10718                             "Symbol not defined in current TU.\n");
10719           return 1;
10720         }
10721     }
10722
10723   return 0;
10724 }
10725
10726 /* Return true if constant RTL can be emitted in DW_OP_addr or
10727    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
10728    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
10729
10730 static bool
10731 const_ok_for_output (rtx rtl)
10732 {
10733   if (GET_CODE (rtl) == SYMBOL_REF)
10734     return const_ok_for_output_1 (&rtl, NULL) == 0;
10735
10736   if (GET_CODE (rtl) == CONST)
10737     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
10738
10739   return true;
10740 }
10741
10742 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
10743    if possible, NULL otherwise.  */
10744
10745 static dw_die_ref
10746 base_type_for_mode (enum machine_mode mode, bool unsignedp)
10747 {
10748   dw_die_ref type_die;
10749   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
10750
10751   if (type == NULL)
10752     return NULL;
10753   switch (TREE_CODE (type))
10754     {
10755     case INTEGER_TYPE:
10756     case REAL_TYPE:
10757       break;
10758     default:
10759       return NULL;
10760     }
10761   type_die = lookup_type_die (type);
10762   if (!type_die)
10763     type_die = modified_type_die (type, false, false, comp_unit_die ());
10764   if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
10765     return NULL;
10766   return type_die;
10767 }
10768
10769 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
10770    type matching MODE, or, if MODE is narrower than or as wide as
10771    DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
10772    possible.  */
10773
10774 static dw_loc_descr_ref
10775 convert_descriptor_to_mode (enum machine_mode mode, dw_loc_descr_ref op)
10776 {
10777   enum machine_mode outer_mode = mode;
10778   dw_die_ref type_die;
10779   dw_loc_descr_ref cvt;
10780
10781   if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
10782     {
10783       add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
10784       return op;
10785     }
10786   type_die = base_type_for_mode (outer_mode, 1);
10787   if (type_die == NULL)
10788     return NULL;
10789   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10790   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10791   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10792   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10793   add_loc_descr (&op, cvt);
10794   return op;
10795 }
10796
10797 /* Return location descriptor for comparison OP with operands OP0 and OP1.  */
10798
10799 static dw_loc_descr_ref
10800 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
10801                         dw_loc_descr_ref op1)
10802 {
10803   dw_loc_descr_ref ret = op0;
10804   add_loc_descr (&ret, op1);
10805   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
10806   if (STORE_FLAG_VALUE != 1)
10807     {
10808       add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
10809       add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
10810     }
10811   return ret;
10812 }
10813
10814 /* Return location descriptor for signed comparison OP RTL.  */
10815
10816 static dw_loc_descr_ref
10817 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10818                          enum machine_mode mem_mode)
10819 {
10820   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10821   dw_loc_descr_ref op0, op1;
10822   int shift;
10823
10824   if (op_mode == VOIDmode)
10825     op_mode = GET_MODE (XEXP (rtl, 1));
10826   if (op_mode == VOIDmode)
10827     return NULL;
10828
10829   if (dwarf_strict
10830       && (GET_MODE_CLASS (op_mode) != MODE_INT
10831           || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
10832     return NULL;
10833
10834   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10835                             VAR_INIT_STATUS_INITIALIZED);
10836   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10837                             VAR_INIT_STATUS_INITIALIZED);
10838
10839   if (op0 == NULL || op1 == NULL)
10840     return NULL;
10841
10842   if (GET_MODE_CLASS (op_mode) != MODE_INT
10843       || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10844     return compare_loc_descriptor (op, op0, op1);
10845
10846   if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10847     {
10848       dw_die_ref type_die = base_type_for_mode (op_mode, 0);
10849       dw_loc_descr_ref cvt;
10850
10851       if (type_die == NULL)
10852         return NULL;
10853       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10854       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10855       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10856       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10857       add_loc_descr (&op0, cvt);
10858       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10859       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10860       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10861       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10862       add_loc_descr (&op1, cvt);
10863       return compare_loc_descriptor (op, op0, op1);
10864     }
10865
10866   shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
10867   /* For eq/ne, if the operands are known to be zero-extended,
10868      there is no need to do the fancy shifting up.  */
10869   if (op == DW_OP_eq || op == DW_OP_ne)
10870     {
10871       dw_loc_descr_ref last0, last1;
10872       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10873         ;
10874       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10875         ;
10876       /* deref_size zero extends, and for constants we can check
10877          whether they are zero extended or not.  */
10878       if (((last0->dw_loc_opc == DW_OP_deref_size
10879             && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10880            || (CONST_INT_P (XEXP (rtl, 0))
10881                && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
10882                   == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
10883           && ((last1->dw_loc_opc == DW_OP_deref_size
10884                && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10885               || (CONST_INT_P (XEXP (rtl, 1))
10886                   && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
10887                      == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
10888         return compare_loc_descriptor (op, op0, op1);
10889
10890       /* EQ/NE comparison against constant in narrower type than
10891          DWARF2_ADDR_SIZE can be performed either as
10892          DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
10893          DW_OP_{eq,ne}
10894          or
10895          DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
10896          DW_OP_{eq,ne}.  Pick whatever is shorter.  */
10897       if (CONST_INT_P (XEXP (rtl, 1))
10898           && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
10899           && (size_of_int_loc_descriptor (shift) + 1
10900               + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
10901               >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
10902                  + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10903                                                & GET_MODE_MASK (op_mode))))
10904         {
10905           add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
10906           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10907           op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10908                                     & GET_MODE_MASK (op_mode));
10909           return compare_loc_descriptor (op, op0, op1);
10910         }
10911     }
10912   add_loc_descr (&op0, int_loc_descriptor (shift));
10913   add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
10914   if (CONST_INT_P (XEXP (rtl, 1)))
10915     op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
10916   else
10917     {
10918       add_loc_descr (&op1, int_loc_descriptor (shift));
10919       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
10920     }
10921   return compare_loc_descriptor (op, op0, op1);
10922 }
10923
10924 /* Return location descriptor for unsigned comparison OP RTL.  */
10925
10926 static dw_loc_descr_ref
10927 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10928                          enum machine_mode mem_mode)
10929 {
10930   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10931   dw_loc_descr_ref op0, op1;
10932
10933   if (op_mode == VOIDmode)
10934     op_mode = GET_MODE (XEXP (rtl, 1));
10935   if (op_mode == VOIDmode)
10936     return NULL;
10937   if (GET_MODE_CLASS (op_mode) != MODE_INT)
10938     return NULL;
10939
10940   if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10941     return NULL;
10942
10943   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10944                             VAR_INIT_STATUS_INITIALIZED);
10945   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10946                             VAR_INIT_STATUS_INITIALIZED);
10947
10948   if (op0 == NULL || op1 == NULL)
10949     return NULL;
10950
10951   if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
10952     {
10953       HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
10954       dw_loc_descr_ref last0, last1;
10955       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10956         ;
10957       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10958         ;
10959       if (CONST_INT_P (XEXP (rtl, 0)))
10960         op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
10961       /* deref_size zero extends, so no need to mask it again.  */
10962       else if (last0->dw_loc_opc != DW_OP_deref_size
10963                || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10964         {
10965           add_loc_descr (&op0, int_loc_descriptor (mask));
10966           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10967         }
10968       if (CONST_INT_P (XEXP (rtl, 1)))
10969         op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
10970       /* deref_size zero extends, so no need to mask it again.  */
10971       else if (last1->dw_loc_opc != DW_OP_deref_size
10972                || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10973         {
10974           add_loc_descr (&op1, int_loc_descriptor (mask));
10975           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10976         }
10977     }
10978   else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10979     {
10980       HOST_WIDE_INT bias = 1;
10981       bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
10982       add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10983       if (CONST_INT_P (XEXP (rtl, 1)))
10984         op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
10985                                   + INTVAL (XEXP (rtl, 1)));
10986       else
10987         add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
10988                                             bias, 0));
10989     }
10990   return compare_loc_descriptor (op, op0, op1);
10991 }
10992
10993 /* Return location descriptor for {U,S}{MIN,MAX}.  */
10994
10995 static dw_loc_descr_ref
10996 minmax_loc_descriptor (rtx rtl, enum machine_mode mode,
10997                        enum machine_mode mem_mode)
10998 {
10999   enum dwarf_location_atom op;
11000   dw_loc_descr_ref op0, op1, ret;
11001   dw_loc_descr_ref bra_node, drop_node;
11002
11003   if (dwarf_strict
11004       && (GET_MODE_CLASS (mode) != MODE_INT
11005           || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
11006     return NULL;
11007
11008   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11009                             VAR_INIT_STATUS_INITIALIZED);
11010   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11011                             VAR_INIT_STATUS_INITIALIZED);
11012
11013   if (op0 == NULL || op1 == NULL)
11014     return NULL;
11015
11016   add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
11017   add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
11018   add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
11019   if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
11020     {
11021       if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11022         {
11023           HOST_WIDE_INT mask = GET_MODE_MASK (mode);
11024           add_loc_descr (&op0, int_loc_descriptor (mask));
11025           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11026           add_loc_descr (&op1, int_loc_descriptor (mask));
11027           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
11028         }
11029       else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11030         {
11031           HOST_WIDE_INT bias = 1;
11032           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
11033           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11034           add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11035         }
11036     }
11037   else if (GET_MODE_CLASS (mode) == MODE_INT
11038            && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11039     {
11040       int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
11041       add_loc_descr (&op0, int_loc_descriptor (shift));
11042       add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11043       add_loc_descr (&op1, int_loc_descriptor (shift));
11044       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11045     }
11046   else if (GET_MODE_CLASS (mode) == MODE_INT
11047            && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11048     {
11049       dw_die_ref type_die = base_type_for_mode (mode, 0);
11050       dw_loc_descr_ref cvt;
11051       if (type_die == NULL)
11052         return NULL;
11053       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11054       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11055       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11056       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11057       add_loc_descr (&op0, cvt);
11058       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11059       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11060       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11061       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11062       add_loc_descr (&op1, cvt);
11063     }
11064
11065   if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
11066     op = DW_OP_lt;
11067   else
11068     op = DW_OP_gt;
11069   ret = op0;
11070   add_loc_descr (&ret, op1);
11071   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11072   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11073   add_loc_descr (&ret, bra_node);
11074   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11075   drop_node = new_loc_descr (DW_OP_drop, 0, 0);
11076   add_loc_descr (&ret, drop_node);
11077   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11078   bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
11079   if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
11080       && GET_MODE_CLASS (mode) == MODE_INT
11081       && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11082     ret = convert_descriptor_to_mode (mode, ret);
11083   return ret;
11084 }
11085
11086 /* Helper function for mem_loc_descriptor.  Perform OP binary op,
11087    but after converting arguments to type_die, afterwards
11088    convert back to unsigned.  */
11089
11090 static dw_loc_descr_ref
11091 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
11092              enum machine_mode mode, enum machine_mode mem_mode)
11093 {
11094   dw_loc_descr_ref cvt, op0, op1;
11095
11096   if (type_die == NULL)
11097     return NULL;
11098   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11099                             VAR_INIT_STATUS_INITIALIZED);
11100   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11101                             VAR_INIT_STATUS_INITIALIZED);
11102   if (op0 == NULL || op1 == NULL)
11103     return NULL;
11104   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11105   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11106   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11107   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11108   add_loc_descr (&op0, cvt);
11109   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11110   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11111   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11112   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11113   add_loc_descr (&op1, cvt);
11114   add_loc_descr (&op0, op1);
11115   add_loc_descr (&op0, new_loc_descr (op, 0, 0));
11116   return convert_descriptor_to_mode (mode, op0);
11117 }
11118
11119 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
11120    const0 is DW_OP_lit0 or corresponding typed constant,
11121    const1 is DW_OP_lit1 or corresponding typed constant
11122    and constMSB is constant with just the MSB bit set
11123    for the mode):
11124        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11125    L1: const0 DW_OP_swap
11126    L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
11127        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11128    L3: DW_OP_drop
11129    L4: DW_OP_nop
11130
11131    CTZ is similar:
11132        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11133    L1: const0 DW_OP_swap
11134    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11135        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11136    L3: DW_OP_drop
11137    L4: DW_OP_nop
11138
11139    FFS is similar:
11140        DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
11141    L1: const1 DW_OP_swap
11142    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11143        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11144    L3: DW_OP_drop
11145    L4: DW_OP_nop  */
11146
11147 static dw_loc_descr_ref
11148 clz_loc_descriptor (rtx rtl, enum machine_mode mode,
11149                     enum machine_mode mem_mode)
11150 {
11151   dw_loc_descr_ref op0, ret, tmp;
11152   HOST_WIDE_INT valv;
11153   dw_loc_descr_ref l1jump, l1label;
11154   dw_loc_descr_ref l2jump, l2label;
11155   dw_loc_descr_ref l3jump, l3label;
11156   dw_loc_descr_ref l4jump, l4label;
11157   rtx msb;
11158
11159   if (GET_MODE_CLASS (mode) != MODE_INT
11160       || GET_MODE (XEXP (rtl, 0)) != mode
11161       || (GET_CODE (rtl) == CLZ
11162           && GET_MODE_BITSIZE (mode) > 2 * HOST_BITS_PER_WIDE_INT))
11163     return NULL;
11164
11165   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11166                             VAR_INIT_STATUS_INITIALIZED);
11167   if (op0 == NULL)
11168     return NULL;
11169   ret = op0;
11170   if (GET_CODE (rtl) == CLZ)
11171     {
11172       if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11173         valv = GET_MODE_BITSIZE (mode);
11174     }
11175   else if (GET_CODE (rtl) == FFS)
11176     valv = 0;
11177   else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11178     valv = GET_MODE_BITSIZE (mode);
11179   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11180   l1jump = new_loc_descr (DW_OP_bra, 0, 0);
11181   add_loc_descr (&ret, l1jump);
11182   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11183   tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
11184                             VAR_INIT_STATUS_INITIALIZED);
11185   if (tmp == NULL)
11186     return NULL;
11187   add_loc_descr (&ret, tmp);
11188   l4jump = new_loc_descr (DW_OP_skip, 0, 0);
11189   add_loc_descr (&ret, l4jump);
11190   l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
11191                                 ? const1_rtx : const0_rtx,
11192                                 mode, mem_mode,
11193                                 VAR_INIT_STATUS_INITIALIZED);
11194   if (l1label == NULL)
11195     return NULL;
11196   add_loc_descr (&ret, l1label);
11197   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11198   l2label = new_loc_descr (DW_OP_dup, 0, 0);
11199   add_loc_descr (&ret, l2label);
11200   if (GET_CODE (rtl) != CLZ)
11201     msb = const1_rtx;
11202   else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
11203     msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
11204                    << (GET_MODE_BITSIZE (mode) - 1));
11205   else
11206     msb = immed_double_const (0, (unsigned HOST_WIDE_INT) 1
11207                                   << (GET_MODE_BITSIZE (mode)
11208                                       - HOST_BITS_PER_WIDE_INT - 1), mode);
11209   if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
11210     tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11211                          ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
11212                          ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
11213   else
11214     tmp = mem_loc_descriptor (msb, mode, mem_mode,
11215                               VAR_INIT_STATUS_INITIALIZED);
11216   if (tmp == NULL)
11217     return NULL;
11218   add_loc_descr (&ret, tmp);
11219   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11220   l3jump = new_loc_descr (DW_OP_bra, 0, 0);
11221   add_loc_descr (&ret, l3jump);
11222   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11223                             VAR_INIT_STATUS_INITIALIZED);
11224   if (tmp == NULL)
11225     return NULL;
11226   add_loc_descr (&ret, tmp);
11227   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
11228                                       ? DW_OP_shl : DW_OP_shr, 0, 0));
11229   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11230   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
11231   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11232   l2jump = new_loc_descr (DW_OP_skip, 0, 0);
11233   add_loc_descr (&ret, l2jump);
11234   l3label = new_loc_descr (DW_OP_drop, 0, 0);
11235   add_loc_descr (&ret, l3label);
11236   l4label = new_loc_descr (DW_OP_nop, 0, 0);
11237   add_loc_descr (&ret, l4label);
11238   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11239   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11240   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11241   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11242   l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11243   l3jump->dw_loc_oprnd1.v.val_loc = l3label;
11244   l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11245   l4jump->dw_loc_oprnd1.v.val_loc = l4label;
11246   return ret;
11247 }
11248
11249 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
11250    const1 is DW_OP_lit1 or corresponding typed constant):
11251        const0 DW_OP_swap
11252    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11253        DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11254    L2: DW_OP_drop
11255
11256    PARITY is similar:
11257    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11258        DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11259    L2: DW_OP_drop  */
11260
11261 static dw_loc_descr_ref
11262 popcount_loc_descriptor (rtx rtl, enum machine_mode mode,
11263                          enum machine_mode mem_mode)
11264 {
11265   dw_loc_descr_ref op0, ret, tmp;
11266   dw_loc_descr_ref l1jump, l1label;
11267   dw_loc_descr_ref l2jump, l2label;
11268
11269   if (GET_MODE_CLASS (mode) != MODE_INT
11270       || GET_MODE (XEXP (rtl, 0)) != mode)
11271     return NULL;
11272
11273   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11274                             VAR_INIT_STATUS_INITIALIZED);
11275   if (op0 == NULL)
11276     return NULL;
11277   ret = op0;
11278   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11279                             VAR_INIT_STATUS_INITIALIZED);
11280   if (tmp == NULL)
11281     return NULL;
11282   add_loc_descr (&ret, tmp);
11283   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11284   l1label = new_loc_descr (DW_OP_dup, 0, 0);
11285   add_loc_descr (&ret, l1label);
11286   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11287   add_loc_descr (&ret, l2jump);
11288   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11289   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11290   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11291                             VAR_INIT_STATUS_INITIALIZED);
11292   if (tmp == NULL)
11293     return NULL;
11294   add_loc_descr (&ret, tmp);
11295   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11296   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
11297                                       ? DW_OP_plus : DW_OP_xor, 0, 0));
11298   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11299   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11300                             VAR_INIT_STATUS_INITIALIZED);
11301   add_loc_descr (&ret, tmp);
11302   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11303   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11304   add_loc_descr (&ret, l1jump);
11305   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11306   add_loc_descr (&ret, l2label);
11307   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11308   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11309   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11310   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11311   return ret;
11312 }
11313
11314 /* BSWAP (constS is initial shift count, either 56 or 24):
11315        constS const0
11316    L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
11317        const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
11318        DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
11319        DW_OP_minus DW_OP_swap DW_OP_skip <L1>
11320    L2: DW_OP_drop DW_OP_swap DW_OP_drop  */
11321
11322 static dw_loc_descr_ref
11323 bswap_loc_descriptor (rtx rtl, enum machine_mode mode,
11324                       enum machine_mode mem_mode)
11325 {
11326   dw_loc_descr_ref op0, ret, tmp;
11327   dw_loc_descr_ref l1jump, l1label;
11328   dw_loc_descr_ref l2jump, l2label;
11329
11330   if (GET_MODE_CLASS (mode) != MODE_INT
11331       || BITS_PER_UNIT != 8
11332       || (GET_MODE_BITSIZE (mode) != 32
11333           &&  GET_MODE_BITSIZE (mode) != 64))
11334     return NULL;
11335
11336   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11337                             VAR_INIT_STATUS_INITIALIZED);
11338   if (op0 == NULL)
11339     return NULL;
11340
11341   ret = op0;
11342   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11343                             mode, mem_mode,
11344                             VAR_INIT_STATUS_INITIALIZED);
11345   if (tmp == NULL)
11346     return NULL;
11347   add_loc_descr (&ret, tmp);
11348   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11349                             VAR_INIT_STATUS_INITIALIZED);
11350   if (tmp == NULL)
11351     return NULL;
11352   add_loc_descr (&ret, tmp);
11353   l1label = new_loc_descr (DW_OP_pick, 2, 0);
11354   add_loc_descr (&ret, l1label);
11355   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11356                             mode, mem_mode,
11357                             VAR_INIT_STATUS_INITIALIZED);
11358   add_loc_descr (&ret, tmp);
11359   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
11360   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11361   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11362   tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
11363                             VAR_INIT_STATUS_INITIALIZED);
11364   if (tmp == NULL)
11365     return NULL;
11366   add_loc_descr (&ret, tmp);
11367   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11368   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
11369   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11370   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11371   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11372   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11373   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11374                             VAR_INIT_STATUS_INITIALIZED);
11375   add_loc_descr (&ret, tmp);
11376   add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
11377   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11378   add_loc_descr (&ret, l2jump);
11379   tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
11380                             VAR_INIT_STATUS_INITIALIZED);
11381   add_loc_descr (&ret, tmp);
11382   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11383   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11384   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11385   add_loc_descr (&ret, l1jump);
11386   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11387   add_loc_descr (&ret, l2label);
11388   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11389   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11390   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11391   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11392   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11393   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11394   return ret;
11395 }
11396
11397 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
11398    DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11399    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
11400    DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
11401
11402    ROTATERT is similar:
11403    DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
11404    DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11405    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or  */
11406
11407 static dw_loc_descr_ref
11408 rotate_loc_descriptor (rtx rtl, enum machine_mode mode,
11409                        enum machine_mode mem_mode)
11410 {
11411   rtx rtlop1 = XEXP (rtl, 1);
11412   dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
11413   int i;
11414
11415   if (GET_MODE_CLASS (mode) != MODE_INT)
11416     return NULL;
11417
11418   if (GET_MODE (rtlop1) != VOIDmode
11419       && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
11420     rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11421   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11422                             VAR_INIT_STATUS_INITIALIZED);
11423   op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11424                             VAR_INIT_STATUS_INITIALIZED);
11425   if (op0 == NULL || op1 == NULL)
11426     return NULL;
11427   if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11428     for (i = 0; i < 2; i++)
11429       {
11430         if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
11431           mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
11432                                         mode, mem_mode,
11433                                         VAR_INIT_STATUS_INITIALIZED);
11434         else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
11435           mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11436                                    ? DW_OP_const4u
11437                                    : HOST_BITS_PER_WIDE_INT == 64
11438                                    ? DW_OP_const8u : DW_OP_constu,
11439                                    GET_MODE_MASK (mode), 0);
11440         else
11441           mask[i] = NULL;
11442         if (mask[i] == NULL)
11443           return NULL;
11444         add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
11445       }
11446   ret = op0;
11447   add_loc_descr (&ret, op1);
11448   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11449   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11450   if (GET_CODE (rtl) == ROTATERT)
11451     {
11452       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11453       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11454                                           GET_MODE_BITSIZE (mode), 0));
11455     }
11456   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11457   if (mask[0] != NULL)
11458     add_loc_descr (&ret, mask[0]);
11459   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11460   if (mask[1] != NULL)
11461     {
11462       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11463       add_loc_descr (&ret, mask[1]);
11464       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11465     }
11466   if (GET_CODE (rtl) == ROTATE)
11467     {
11468       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11469       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11470                                           GET_MODE_BITSIZE (mode), 0));
11471     }
11472   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11473   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11474   return ret;
11475 }
11476
11477 /* Helper function for mem_loc_descriptor.  Return DW_OP_GNU_parameter_ref
11478    for DEBUG_PARAMETER_REF RTL.  */
11479
11480 static dw_loc_descr_ref
11481 parameter_ref_descriptor (rtx rtl)
11482 {
11483   dw_loc_descr_ref ret;
11484   dw_die_ref ref;
11485
11486   if (dwarf_strict)
11487     return NULL;
11488   gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
11489   ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
11490   ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
11491   if (ref)
11492     {
11493       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11494       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
11495       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
11496     }
11497   else
11498     {
11499       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
11500       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
11501     }
11502   return ret;
11503 }
11504
11505 /* Helper function to get mode of MEM's address.  */
11506
11507 enum machine_mode
11508 get_address_mode (rtx mem)
11509 {
11510   enum machine_mode mode = GET_MODE (XEXP (mem, 0));
11511   if (mode != VOIDmode)
11512     return mode;
11513   return targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
11514 }
11515
11516 /* The following routine converts the RTL for a variable or parameter
11517    (resident in memory) into an equivalent Dwarf representation of a
11518    mechanism for getting the address of that same variable onto the top of a
11519    hypothetical "address evaluation" stack.
11520
11521    When creating memory location descriptors, we are effectively transforming
11522    the RTL for a memory-resident object into its Dwarf postfix expression
11523    equivalent.  This routine recursively descends an RTL tree, turning
11524    it into Dwarf postfix code as it goes.
11525
11526    MODE is the mode that should be assumed for the rtl if it is VOIDmode.
11527
11528    MEM_MODE is the mode of the memory reference, needed to handle some
11529    autoincrement addressing modes.
11530
11531    Return 0 if we can't represent the location.  */
11532
11533 dw_loc_descr_ref
11534 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
11535                     enum machine_mode mem_mode,
11536                     enum var_init_status initialized)
11537 {
11538   dw_loc_descr_ref mem_loc_result = NULL;
11539   enum dwarf_location_atom op;
11540   dw_loc_descr_ref op0, op1;
11541
11542   if (mode == VOIDmode)
11543     mode = GET_MODE (rtl);
11544
11545   /* Note that for a dynamically sized array, the location we will generate a
11546      description of here will be the lowest numbered location which is
11547      actually within the array.  That's *not* necessarily the same as the
11548      zeroth element of the array.  */
11549
11550   rtl = targetm.delegitimize_address (rtl);
11551
11552   if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
11553     return NULL;
11554
11555   switch (GET_CODE (rtl))
11556     {
11557     case POST_INC:
11558     case POST_DEC:
11559     case POST_MODIFY:
11560       return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
11561
11562     case SUBREG:
11563       /* The case of a subreg may arise when we have a local (register)
11564          variable or a formal (register) parameter which doesn't quite fill
11565          up an entire register.  For now, just assume that it is
11566          legitimate to make the Dwarf info refer to the whole register which
11567          contains the given subreg.  */
11568       if (!subreg_lowpart_p (rtl))
11569         break;
11570       if (GET_MODE_CLASS (mode) == MODE_INT
11571           && GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) == MODE_INT
11572           && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11573 #ifdef POINTERS_EXTEND_UNSIGNED
11574               || (mode == Pmode && mem_mode != VOIDmode)
11575 #endif
11576              )
11577           && GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) <= DWARF2_ADDR_SIZE)
11578         {
11579           mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11580                                                GET_MODE (SUBREG_REG (rtl)),
11581                                                mem_mode, initialized);
11582           break;
11583         }
11584       if (dwarf_strict)
11585         break;
11586       if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11587         break;
11588       if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl)))
11589           && (GET_MODE_CLASS (mode) != MODE_INT
11590               || GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) != MODE_INT))
11591         break;
11592       else
11593         {
11594           dw_die_ref type_die;
11595           dw_loc_descr_ref cvt;
11596
11597           mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11598                                                GET_MODE (SUBREG_REG (rtl)),
11599                                                mem_mode, initialized);
11600           if (mem_loc_result == NULL)
11601             break;
11602           type_die = base_type_for_mode (mode,
11603                                          GET_MODE_CLASS (mode) == MODE_INT);
11604           if (type_die == NULL)
11605             {
11606               mem_loc_result = NULL;
11607               break;
11608             }
11609           if (GET_MODE_SIZE (mode)
11610               != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11611             cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11612           else
11613             cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
11614           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11615           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11616           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11617           add_loc_descr (&mem_loc_result, cvt);
11618         }
11619       break;
11620
11621     case REG:
11622       if (GET_MODE_CLASS (mode) != MODE_INT
11623           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11624 #ifdef POINTERS_EXTEND_UNSIGNED
11625               && (mode != Pmode || mem_mode == VOIDmode)
11626 #endif
11627               ))
11628         {
11629           dw_die_ref type_die;
11630
11631           if (dwarf_strict)
11632             break;
11633           if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
11634             break;
11635           type_die = base_type_for_mode (mode,
11636                                          GET_MODE_CLASS (mode) == MODE_INT);
11637           if (type_die == NULL)
11638             break;
11639           mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
11640                                           dbx_reg_number (rtl), 0);
11641           mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11642           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11643           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
11644           break;
11645         }
11646       /* Whenever a register number forms a part of the description of the
11647          method for calculating the (dynamic) address of a memory resident
11648          object, DWARF rules require the register number be referred to as
11649          a "base register".  This distinction is not based in any way upon
11650          what category of register the hardware believes the given register
11651          belongs to.  This is strictly DWARF terminology we're dealing with
11652          here. Note that in cases where the location of a memory-resident
11653          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
11654          OP_CONST (0)) the actual DWARF location descriptor that we generate
11655          may just be OP_BASEREG (basereg).  This may look deceptively like
11656          the object in question was allocated to a register (rather than in
11657          memory) so DWARF consumers need to be aware of the subtle
11658          distinction between OP_REG and OP_BASEREG.  */
11659       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
11660         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
11661       else if (stack_realign_drap
11662                && crtl->drap_reg
11663                && crtl->args.internal_arg_pointer == rtl
11664                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
11665         {
11666           /* If RTL is internal_arg_pointer, which has been optimized
11667              out, use DRAP instead.  */
11668           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
11669                                             VAR_INIT_STATUS_INITIALIZED);
11670         }
11671       break;
11672
11673     case SIGN_EXTEND:
11674     case ZERO_EXTEND:
11675       if (GET_MODE_CLASS (mode) != MODE_INT)
11676         break;
11677       op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
11678                                 mem_mode, VAR_INIT_STATUS_INITIALIZED);
11679       if (op0 == 0)
11680         break;
11681       else if (GET_CODE (rtl) == ZERO_EXTEND
11682                && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11683                && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
11684                   < HOST_BITS_PER_WIDE_INT
11685                /* If DW_OP_const{1,2,4}u won't be used, it is shorter
11686                   to expand zero extend as two shifts instead of
11687                   masking.  */
11688                && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
11689         {
11690           enum machine_mode imode = GET_MODE (XEXP (rtl, 0));
11691           mem_loc_result = op0;
11692           add_loc_descr (&mem_loc_result,
11693                          int_loc_descriptor (GET_MODE_MASK (imode)));
11694           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
11695         }
11696       else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11697         {
11698           int shift = DWARF2_ADDR_SIZE
11699                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
11700           shift *= BITS_PER_UNIT;
11701           if (GET_CODE (rtl) == SIGN_EXTEND)
11702             op = DW_OP_shra;
11703           else
11704             op = DW_OP_shr;
11705           mem_loc_result = op0;
11706           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11707           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
11708           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11709           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11710         }
11711       else if (!dwarf_strict)
11712         {
11713           dw_die_ref type_die1, type_die2;
11714           dw_loc_descr_ref cvt;
11715
11716           type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
11717                                           GET_CODE (rtl) == ZERO_EXTEND);
11718           if (type_die1 == NULL)
11719             break;
11720           type_die2 = base_type_for_mode (mode, 1);
11721           if (type_die2 == NULL)
11722             break;
11723           mem_loc_result = op0;
11724           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11725           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11726           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
11727           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11728           add_loc_descr (&mem_loc_result, cvt);
11729           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11730           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11731           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
11732           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11733           add_loc_descr (&mem_loc_result, cvt);
11734         }
11735       break;
11736
11737     case MEM:
11738       {
11739         rtx new_rtl = avoid_constant_pool_reference (rtl);
11740         if (new_rtl != rtl)
11741           {
11742             mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
11743                                                  initialized);
11744             if (mem_loc_result != NULL)
11745               return mem_loc_result;
11746           }
11747       }
11748       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
11749                                            get_address_mode (rtl), mode,
11750                                            VAR_INIT_STATUS_INITIALIZED);
11751       if (mem_loc_result == NULL)
11752         mem_loc_result = tls_mem_loc_descriptor (rtl);
11753       if (mem_loc_result != NULL)
11754         {
11755           if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11756               || GET_MODE_CLASS (mode) != MODE_INT)
11757             {
11758               dw_die_ref type_die;
11759               dw_loc_descr_ref deref;
11760
11761               if (dwarf_strict)
11762                 return NULL;
11763               type_die
11764                 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
11765               if (type_die == NULL)
11766                 return NULL;
11767               deref = new_loc_descr (DW_OP_GNU_deref_type,
11768                                      GET_MODE_SIZE (mode), 0);
11769               deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11770               deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11771               deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
11772               add_loc_descr (&mem_loc_result, deref);
11773             }
11774           else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11775             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
11776           else
11777             add_loc_descr (&mem_loc_result,
11778                            new_loc_descr (DW_OP_deref_size,
11779                                           GET_MODE_SIZE (mode), 0));
11780         }
11781       break;
11782
11783     case LO_SUM:
11784       return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
11785
11786     case LABEL_REF:
11787       /* Some ports can transform a symbol ref into a label ref, because
11788          the symbol ref is too far away and has to be dumped into a constant
11789          pool.  */
11790     case CONST:
11791     case SYMBOL_REF:
11792       if (GET_MODE_CLASS (mode) != MODE_INT
11793           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11794 #ifdef POINTERS_EXTEND_UNSIGNED
11795               && (mode != Pmode || mem_mode == VOIDmode)
11796 #endif
11797               ))
11798         break;
11799       if (GET_CODE (rtl) == SYMBOL_REF
11800           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11801         {
11802           dw_loc_descr_ref temp;
11803
11804           /* If this is not defined, we have no way to emit the data.  */
11805           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
11806             break;
11807
11808           /* We used to emit DW_OP_addr here, but that's wrong, since
11809              DW_OP_addr should be relocated by the debug info consumer,
11810              while DW_OP_GNU_push_tls_address operand should not.  */
11811           temp = new_loc_descr (DWARF2_ADDR_SIZE == 4
11812                                 ? DW_OP_const4u : DW_OP_const8u, 0, 0);
11813           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
11814           temp->dw_loc_oprnd1.v.val_addr = rtl;
11815           temp->dtprel = true;
11816
11817           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
11818           add_loc_descr (&mem_loc_result, temp);
11819
11820           break;
11821         }
11822
11823       if (!const_ok_for_output (rtl))
11824         break;
11825
11826     symref:
11827       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
11828       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
11829       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
11830       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
11831       break;
11832
11833     case CONCAT:
11834     case CONCATN:
11835     case VAR_LOCATION:
11836     case DEBUG_IMPLICIT_PTR:
11837       expansion_failed (NULL_TREE, rtl,
11838                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
11839       return 0;
11840
11841     case ENTRY_VALUE:
11842       if (dwarf_strict)
11843         return NULL;
11844       if (REG_P (ENTRY_VALUE_EXP (rtl)))
11845         {
11846           if (GET_MODE_CLASS (mode) != MODE_INT
11847               || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11848             op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11849                                       VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11850           else
11851             op0
11852               = one_reg_loc_descriptor (dbx_reg_number (ENTRY_VALUE_EXP (rtl)),
11853                                         VAR_INIT_STATUS_INITIALIZED);
11854         }
11855       else if (MEM_P (ENTRY_VALUE_EXP (rtl))
11856                && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
11857         {
11858           op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11859                                     VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11860           if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
11861             return NULL;
11862         }
11863       else
11864         gcc_unreachable ();
11865       if (op0 == NULL)
11866         return NULL;
11867       mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
11868       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
11869       mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
11870       break;
11871
11872     case DEBUG_PARAMETER_REF:
11873       mem_loc_result = parameter_ref_descriptor (rtl);
11874       break;
11875
11876     case PRE_MODIFY:
11877       /* Extract the PLUS expression nested inside and fall into
11878          PLUS code below.  */
11879       rtl = XEXP (rtl, 1);
11880       goto plus;
11881
11882     case PRE_INC:
11883     case PRE_DEC:
11884       /* Turn these into a PLUS expression and fall into the PLUS code
11885          below.  */
11886       rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
11887                           GEN_INT (GET_CODE (rtl) == PRE_INC
11888                                    ? GET_MODE_UNIT_SIZE (mem_mode)
11889                                    : -GET_MODE_UNIT_SIZE (mem_mode)));
11890
11891       /* ... fall through ...  */
11892
11893     case PLUS:
11894     plus:
11895       if (is_based_loc (rtl)
11896           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11897           && GET_MODE_CLASS (mode) == MODE_INT)
11898         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
11899                                           INTVAL (XEXP (rtl, 1)),
11900                                           VAR_INIT_STATUS_INITIALIZED);
11901       else
11902         {
11903           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11904                                                VAR_INIT_STATUS_INITIALIZED);
11905           if (mem_loc_result == 0)
11906             break;
11907
11908           if (CONST_INT_P (XEXP (rtl, 1))
11909               && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11910             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
11911           else
11912             {
11913               op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11914                                         VAR_INIT_STATUS_INITIALIZED);
11915               if (op1 == 0)
11916                 break;
11917               add_loc_descr (&mem_loc_result, op1);
11918               add_loc_descr (&mem_loc_result,
11919                              new_loc_descr (DW_OP_plus, 0, 0));
11920             }
11921         }
11922       break;
11923
11924     /* If a pseudo-reg is optimized away, it is possible for it to
11925        be replaced with a MEM containing a multiply or shift.  */
11926     case MINUS:
11927       op = DW_OP_minus;
11928       goto do_binop;
11929
11930     case MULT:
11931       op = DW_OP_mul;
11932       goto do_binop;
11933
11934     case DIV:
11935       if (!dwarf_strict
11936           && GET_MODE_CLASS (mode) == MODE_INT
11937           && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11938         {
11939           mem_loc_result = typed_binop (DW_OP_div, rtl,
11940                                         base_type_for_mode (mode, 0),
11941                                         mode, mem_mode);
11942           break;
11943         }
11944       op = DW_OP_div;
11945       goto do_binop;
11946
11947     case UMOD:
11948       op = DW_OP_mod;
11949       goto do_binop;
11950
11951     case ASHIFT:
11952       op = DW_OP_shl;
11953       goto do_shift;
11954
11955     case ASHIFTRT:
11956       op = DW_OP_shra;
11957       goto do_shift;
11958
11959     case LSHIFTRT:
11960       op = DW_OP_shr;
11961       goto do_shift;
11962
11963     do_shift:
11964       if (GET_MODE_CLASS (mode) != MODE_INT)
11965         break;
11966       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11967                                 VAR_INIT_STATUS_INITIALIZED);
11968       {
11969         rtx rtlop1 = XEXP (rtl, 1);
11970         if (GET_MODE (rtlop1) != VOIDmode
11971             && GET_MODE_BITSIZE (GET_MODE (rtlop1))
11972                < GET_MODE_BITSIZE (mode))
11973           rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11974         op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11975                                   VAR_INIT_STATUS_INITIALIZED);
11976       }
11977
11978       if (op0 == 0 || op1 == 0)
11979         break;
11980
11981       mem_loc_result = op0;
11982       add_loc_descr (&mem_loc_result, op1);
11983       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11984       break;
11985
11986     case AND:
11987       op = DW_OP_and;
11988       goto do_binop;
11989
11990     case IOR:
11991       op = DW_OP_or;
11992       goto do_binop;
11993
11994     case XOR:
11995       op = DW_OP_xor;
11996       goto do_binop;
11997
11998     do_binop:
11999       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12000                                 VAR_INIT_STATUS_INITIALIZED);
12001       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12002                                 VAR_INIT_STATUS_INITIALIZED);
12003
12004       if (op0 == 0 || op1 == 0)
12005         break;
12006
12007       mem_loc_result = op0;
12008       add_loc_descr (&mem_loc_result, op1);
12009       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12010       break;
12011
12012     case MOD:
12013       if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
12014         {
12015           mem_loc_result = typed_binop (DW_OP_mod, rtl,
12016                                         base_type_for_mode (mode, 0),
12017                                         mode, mem_mode);
12018           break;
12019         }
12020
12021       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12022                                 VAR_INIT_STATUS_INITIALIZED);
12023       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12024                                 VAR_INIT_STATUS_INITIALIZED);
12025
12026       if (op0 == 0 || op1 == 0)
12027         break;
12028
12029       mem_loc_result = op0;
12030       add_loc_descr (&mem_loc_result, op1);
12031       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
12032       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
12033       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
12034       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
12035       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
12036       break;
12037
12038     case UDIV:
12039       if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
12040         {
12041           if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
12042             {
12043               op = DW_OP_div;
12044               goto do_binop;
12045             }
12046           mem_loc_result = typed_binop (DW_OP_div, rtl,
12047                                         base_type_for_mode (mode, 1),
12048                                         mode, mem_mode);
12049         }
12050       break;
12051
12052     case NOT:
12053       op = DW_OP_not;
12054       goto do_unop;
12055
12056     case ABS:
12057       op = DW_OP_abs;
12058       goto do_unop;
12059
12060     case NEG:
12061       op = DW_OP_neg;
12062       goto do_unop;
12063
12064     do_unop:
12065       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12066                                 VAR_INIT_STATUS_INITIALIZED);
12067
12068       if (op0 == 0)
12069         break;
12070
12071       mem_loc_result = op0;
12072       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12073       break;
12074
12075     case CONST_INT:
12076       if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12077 #ifdef POINTERS_EXTEND_UNSIGNED
12078           || (mode == Pmode
12079               && mem_mode != VOIDmode
12080               && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
12081 #endif
12082           )
12083         {
12084           mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12085           break;
12086         }
12087       if (!dwarf_strict
12088           && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
12089               || GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_WIDE_INT))
12090         {
12091           dw_die_ref type_die = base_type_for_mode (mode, 1);
12092           enum machine_mode amode;
12093           if (type_die == NULL)
12094             return NULL;
12095           amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
12096                                  MODE_INT, 0);
12097           if (INTVAL (rtl) >= 0
12098               && amode != BLKmode
12099               && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
12100               /* const DW_OP_GNU_convert <XXX> vs.
12101                  DW_OP_GNU_const_type <XXX, 1, const>.  */
12102               && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
12103                  < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
12104             {
12105               mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12106               op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12107               op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12108               op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12109               op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
12110               add_loc_descr (&mem_loc_result, op0);
12111               return mem_loc_result;
12112             }
12113           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
12114                                           INTVAL (rtl));
12115           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12116           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12117           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12118           if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12119             mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12120           else
12121             {
12122               mem_loc_result->dw_loc_oprnd2.val_class
12123                 = dw_val_class_const_double;
12124               mem_loc_result->dw_loc_oprnd2.v.val_double
12125                 = shwi_to_double_int (INTVAL (rtl));
12126             }
12127         }
12128       break;
12129
12130     case CONST_DOUBLE:
12131       if (!dwarf_strict)
12132         {
12133           dw_die_ref type_die;
12134
12135           /* Note that a CONST_DOUBLE rtx could represent either an integer
12136              or a floating-point constant.  A CONST_DOUBLE is used whenever
12137              the constant requires more than one word in order to be
12138              adequately represented.  We output CONST_DOUBLEs as blocks.  */
12139           if (mode == VOIDmode
12140               || (GET_MODE (rtl) == VOIDmode
12141                   && GET_MODE_BITSIZE (mode) != 2 * HOST_BITS_PER_WIDE_INT))
12142             break;
12143           type_die = base_type_for_mode (mode,
12144                                          GET_MODE_CLASS (mode) == MODE_INT);
12145           if (type_die == NULL)
12146             return NULL;
12147           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
12148           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12149           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12150           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12151           if (SCALAR_FLOAT_MODE_P (mode))
12152             {
12153               unsigned int length = GET_MODE_SIZE (mode);
12154               unsigned char *array
12155                   = (unsigned char*) ggc_alloc_atomic (length);
12156
12157               insert_float (rtl, array);
12158               mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12159               mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12160               mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12161               mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12162             }
12163           else
12164             {
12165               mem_loc_result->dw_loc_oprnd2.val_class
12166                 = dw_val_class_const_double;
12167               mem_loc_result->dw_loc_oprnd2.v.val_double
12168                 = rtx_to_double_int (rtl);
12169             }
12170         }
12171       break;
12172
12173     case EQ:
12174       mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
12175       break;
12176
12177     case GE:
12178       mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12179       break;
12180
12181     case GT:
12182       mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12183       break;
12184
12185     case LE:
12186       mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12187       break;
12188
12189     case LT:
12190       mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12191       break;
12192
12193     case NE:
12194       mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
12195       break;
12196
12197     case GEU:
12198       mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12199       break;
12200
12201     case GTU:
12202       mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12203       break;
12204
12205     case LEU:
12206       mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12207       break;
12208
12209     case LTU:
12210       mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12211       break;
12212
12213     case UMIN:
12214     case UMAX:
12215       if (GET_MODE_CLASS (mode) != MODE_INT)
12216         break;
12217       /* FALLTHRU */
12218     case SMIN:
12219     case SMAX:
12220       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
12221       break;
12222
12223     case ZERO_EXTRACT:
12224     case SIGN_EXTRACT:
12225       if (CONST_INT_P (XEXP (rtl, 1))
12226           && CONST_INT_P (XEXP (rtl, 2))
12227           && ((unsigned) INTVAL (XEXP (rtl, 1))
12228               + (unsigned) INTVAL (XEXP (rtl, 2))
12229               <= GET_MODE_BITSIZE (mode))
12230           && GET_MODE_CLASS (mode) == MODE_INT
12231           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12232           && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
12233         {
12234           int shift, size;
12235           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12236                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
12237           if (op0 == 0)
12238             break;
12239           if (GET_CODE (rtl) == SIGN_EXTRACT)
12240             op = DW_OP_shra;
12241           else
12242             op = DW_OP_shr;
12243           mem_loc_result = op0;
12244           size = INTVAL (XEXP (rtl, 1));
12245           shift = INTVAL (XEXP (rtl, 2));
12246           if (BITS_BIG_ENDIAN)
12247             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12248                     - shift - size;
12249           if (shift + size != (int) DWARF2_ADDR_SIZE)
12250             {
12251               add_loc_descr (&mem_loc_result,
12252                              int_loc_descriptor (DWARF2_ADDR_SIZE
12253                                                  - shift - size));
12254               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12255             }
12256           if (size != (int) DWARF2_ADDR_SIZE)
12257             {
12258               add_loc_descr (&mem_loc_result,
12259                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
12260               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12261             }
12262         }
12263       break;
12264
12265     case IF_THEN_ELSE:
12266       {
12267         dw_loc_descr_ref op2, bra_node, drop_node;
12268         op0 = mem_loc_descriptor (XEXP (rtl, 0),
12269                                   GET_MODE (XEXP (rtl, 0)) == VOIDmode
12270                                   ? word_mode : GET_MODE (XEXP (rtl, 0)),
12271                                   mem_mode, VAR_INIT_STATUS_INITIALIZED);
12272         op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12273                                   VAR_INIT_STATUS_INITIALIZED);
12274         op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
12275                                   VAR_INIT_STATUS_INITIALIZED);
12276         if (op0 == NULL || op1 == NULL || op2 == NULL)
12277           break;
12278
12279         mem_loc_result = op1;
12280         add_loc_descr (&mem_loc_result, op2);
12281         add_loc_descr (&mem_loc_result, op0);
12282         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12283         add_loc_descr (&mem_loc_result, bra_node);
12284         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
12285         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12286         add_loc_descr (&mem_loc_result, drop_node);
12287         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12288         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12289       }
12290       break;
12291
12292     case FLOAT_EXTEND:
12293     case FLOAT_TRUNCATE:
12294     case FLOAT:
12295     case UNSIGNED_FLOAT:
12296     case FIX:
12297     case UNSIGNED_FIX:
12298       if (!dwarf_strict)
12299         {
12300           dw_die_ref type_die;
12301           dw_loc_descr_ref cvt;
12302
12303           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12304                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
12305           if (op0 == NULL)
12306             break;
12307           if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
12308               && (GET_CODE (rtl) == FLOAT
12309                   || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
12310                      <= DWARF2_ADDR_SIZE))
12311             {
12312               type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12313                                              GET_CODE (rtl) == UNSIGNED_FLOAT);
12314               if (type_die == NULL)
12315                 break;
12316               cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12317               cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12318               cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12319               cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12320               add_loc_descr (&op0, cvt);
12321             }
12322           type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
12323           if (type_die == NULL)
12324             break;
12325           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12326           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12327           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12328           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12329           add_loc_descr (&op0, cvt);
12330           if (GET_MODE_CLASS (mode) == MODE_INT
12331               && (GET_CODE (rtl) == FIX
12332                   || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
12333             {
12334               op0 = convert_descriptor_to_mode (mode, op0);
12335               if (op0 == NULL)
12336                 break;
12337             }
12338           mem_loc_result = op0;
12339         }
12340       break;
12341
12342     case CLZ:
12343     case CTZ:
12344     case FFS:
12345       mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
12346       break;
12347
12348     case POPCOUNT:
12349     case PARITY:
12350       mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
12351       break;
12352
12353     case BSWAP:
12354       mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
12355       break;
12356
12357     case ROTATE:
12358     case ROTATERT:
12359       mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
12360       break;
12361
12362     case COMPARE:
12363     case TRUNCATE:
12364       /* In theory, we could implement the above.  */
12365       /* DWARF cannot represent the unsigned compare operations
12366          natively.  */
12367     case SS_MULT:
12368     case US_MULT:
12369     case SS_DIV:
12370     case US_DIV:
12371     case SS_PLUS:
12372     case US_PLUS:
12373     case SS_MINUS:
12374     case US_MINUS:
12375     case SS_NEG:
12376     case US_NEG:
12377     case SS_ABS:
12378     case SS_ASHIFT:
12379     case US_ASHIFT:
12380     case SS_TRUNCATE:
12381     case US_TRUNCATE:
12382     case UNORDERED:
12383     case ORDERED:
12384     case UNEQ:
12385     case UNGE:
12386     case UNGT:
12387     case UNLE:
12388     case UNLT:
12389     case LTGT:
12390     case FRACT_CONVERT:
12391     case UNSIGNED_FRACT_CONVERT:
12392     case SAT_FRACT:
12393     case UNSIGNED_SAT_FRACT:
12394     case SQRT:
12395     case ASM_OPERANDS:
12396     case VEC_MERGE:
12397     case VEC_SELECT:
12398     case VEC_CONCAT:
12399     case VEC_DUPLICATE:
12400     case UNSPEC:
12401     case HIGH:
12402     case FMA:
12403     case STRICT_LOW_PART:
12404     case CONST_VECTOR:
12405     case CONST_FIXED:
12406     case CLRSB:
12407       /* If delegitimize_address couldn't do anything with the UNSPEC, we
12408          can't express it in the debug info.  This can happen e.g. with some
12409          TLS UNSPECs.  */
12410       break;
12411
12412     case CONST_STRING:
12413       resolve_one_addr (&rtl, NULL);
12414       goto symref;
12415
12416     default:
12417 #ifdef ENABLE_CHECKING
12418       print_rtl (stderr, rtl);
12419       gcc_unreachable ();
12420 #else
12421       break;
12422 #endif
12423     }
12424
12425   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12426     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12427
12428   return mem_loc_result;
12429 }
12430
12431 /* Return a descriptor that describes the concatenation of two locations.
12432    This is typically a complex variable.  */
12433
12434 static dw_loc_descr_ref
12435 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
12436 {
12437   dw_loc_descr_ref cc_loc_result = NULL;
12438   dw_loc_descr_ref x0_ref
12439     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12440   dw_loc_descr_ref x1_ref
12441     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12442
12443   if (x0_ref == 0 || x1_ref == 0)
12444     return 0;
12445
12446   cc_loc_result = x0_ref;
12447   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
12448
12449   add_loc_descr (&cc_loc_result, x1_ref);
12450   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
12451
12452   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12453     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12454
12455   return cc_loc_result;
12456 }
12457
12458 /* Return a descriptor that describes the concatenation of N
12459    locations.  */
12460
12461 static dw_loc_descr_ref
12462 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
12463 {
12464   unsigned int i;
12465   dw_loc_descr_ref cc_loc_result = NULL;
12466   unsigned int n = XVECLEN (concatn, 0);
12467
12468   for (i = 0; i < n; ++i)
12469     {
12470       dw_loc_descr_ref ref;
12471       rtx x = XVECEXP (concatn, 0, i);
12472
12473       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12474       if (ref == NULL)
12475         return NULL;
12476
12477       add_loc_descr (&cc_loc_result, ref);
12478       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
12479     }
12480
12481   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12482     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12483
12484   return cc_loc_result;
12485 }
12486
12487 /* Helper function for loc_descriptor.  Return DW_OP_GNU_implicit_pointer
12488    for DEBUG_IMPLICIT_PTR RTL.  */
12489
12490 static dw_loc_descr_ref
12491 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
12492 {
12493   dw_loc_descr_ref ret;
12494   dw_die_ref ref;
12495
12496   if (dwarf_strict)
12497     return NULL;
12498   gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
12499               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
12500               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
12501   ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
12502   ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
12503   ret->dw_loc_oprnd2.val_class = dw_val_class_const;
12504   if (ref)
12505     {
12506       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12507       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12508       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12509     }
12510   else
12511     {
12512       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12513       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
12514     }
12515   return ret;
12516 }
12517
12518 /* Output a proper Dwarf location descriptor for a variable or parameter
12519    which is either allocated in a register or in a memory location.  For a
12520    register, we just generate an OP_REG and the register number.  For a
12521    memory location we provide a Dwarf postfix expression describing how to
12522    generate the (dynamic) address of the object onto the address stack.
12523
12524    MODE is mode of the decl if this loc_descriptor is going to be used in
12525    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
12526    allowed, VOIDmode otherwise.
12527
12528    If we don't know how to describe it, return 0.  */
12529
12530 static dw_loc_descr_ref
12531 loc_descriptor (rtx rtl, enum machine_mode mode,
12532                 enum var_init_status initialized)
12533 {
12534   dw_loc_descr_ref loc_result = NULL;
12535
12536   switch (GET_CODE (rtl))
12537     {
12538     case SUBREG:
12539       /* The case of a subreg may arise when we have a local (register)
12540          variable or a formal (register) parameter which doesn't quite fill
12541          up an entire register.  For now, just assume that it is
12542          legitimate to make the Dwarf info refer to the whole register which
12543          contains the given subreg.  */
12544       if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
12545         loc_result = loc_descriptor (SUBREG_REG (rtl),
12546                                      GET_MODE (SUBREG_REG (rtl)), initialized);
12547       else
12548         goto do_default;
12549       break;
12550
12551     case REG:
12552       loc_result = reg_loc_descriptor (rtl, initialized);
12553       break;
12554
12555     case MEM:
12556       loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
12557                                        GET_MODE (rtl), initialized);
12558       if (loc_result == NULL)
12559         loc_result = tls_mem_loc_descriptor (rtl);
12560       if (loc_result == NULL)
12561         {
12562           rtx new_rtl = avoid_constant_pool_reference (rtl);
12563           if (new_rtl != rtl)
12564             loc_result = loc_descriptor (new_rtl, mode, initialized);
12565         }
12566       break;
12567
12568     case CONCAT:
12569       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
12570                                           initialized);
12571       break;
12572
12573     case CONCATN:
12574       loc_result = concatn_loc_descriptor (rtl, initialized);
12575       break;
12576
12577     case VAR_LOCATION:
12578       /* Single part.  */
12579       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
12580         {
12581           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
12582           if (GET_CODE (loc) == EXPR_LIST)
12583             loc = XEXP (loc, 0);
12584           loc_result = loc_descriptor (loc, mode, initialized);
12585           break;
12586         }
12587
12588       rtl = XEXP (rtl, 1);
12589       /* FALLTHRU */
12590
12591     case PARALLEL:
12592       {
12593         rtvec par_elems = XVEC (rtl, 0);
12594         int num_elem = GET_NUM_ELEM (par_elems);
12595         enum machine_mode mode;
12596         int i;
12597
12598         /* Create the first one, so we have something to add to.  */
12599         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
12600                                      VOIDmode, initialized);
12601         if (loc_result == NULL)
12602           return NULL;
12603         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
12604         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12605         for (i = 1; i < num_elem; i++)
12606           {
12607             dw_loc_descr_ref temp;
12608
12609             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
12610                                    VOIDmode, initialized);
12611             if (temp == NULL)
12612               return NULL;
12613             add_loc_descr (&loc_result, temp);
12614             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
12615             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12616           }
12617       }
12618       break;
12619
12620     case CONST_INT:
12621       if (mode != VOIDmode && mode != BLKmode)
12622         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
12623                                                     INTVAL (rtl));
12624       break;
12625
12626     case CONST_DOUBLE:
12627       if (mode == VOIDmode)
12628         mode = GET_MODE (rtl);
12629
12630       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12631         {
12632           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12633
12634           /* Note that a CONST_DOUBLE rtx could represent either an integer
12635              or a floating-point constant.  A CONST_DOUBLE is used whenever
12636              the constant requires more than one word in order to be
12637              adequately represented.  We output CONST_DOUBLEs as blocks.  */
12638           loc_result = new_loc_descr (DW_OP_implicit_value,
12639                                       GET_MODE_SIZE (mode), 0);
12640           if (SCALAR_FLOAT_MODE_P (mode))
12641             {
12642               unsigned int length = GET_MODE_SIZE (mode);
12643               unsigned char *array
12644                   = (unsigned char*) ggc_alloc_atomic (length);
12645
12646               insert_float (rtl, array);
12647               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12648               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12649               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12650               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12651             }
12652           else
12653             {
12654               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
12655               loc_result->dw_loc_oprnd2.v.val_double
12656                 = rtx_to_double_int (rtl);
12657             }
12658         }
12659       break;
12660
12661     case CONST_VECTOR:
12662       if (mode == VOIDmode)
12663         mode = GET_MODE (rtl);
12664
12665       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12666         {
12667           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
12668           unsigned int length = CONST_VECTOR_NUNITS (rtl);
12669           unsigned char *array = (unsigned char *)
12670             ggc_alloc_atomic (length * elt_size);
12671           unsigned int i;
12672           unsigned char *p;
12673
12674           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12675           switch (GET_MODE_CLASS (mode))
12676             {
12677             case MODE_VECTOR_INT:
12678               for (i = 0, p = array; i < length; i++, p += elt_size)
12679                 {
12680                   rtx elt = CONST_VECTOR_ELT (rtl, i);
12681                   double_int val = rtx_to_double_int (elt);
12682
12683                   if (elt_size <= sizeof (HOST_WIDE_INT))
12684                     insert_int (double_int_to_shwi (val), elt_size, p);
12685                   else
12686                     {
12687                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
12688                       insert_double (val, p);
12689                     }
12690                 }
12691               break;
12692
12693             case MODE_VECTOR_FLOAT:
12694               for (i = 0, p = array; i < length; i++, p += elt_size)
12695                 {
12696                   rtx elt = CONST_VECTOR_ELT (rtl, i);
12697                   insert_float (elt, p);
12698                 }
12699               break;
12700
12701             default:
12702               gcc_unreachable ();
12703             }
12704
12705           loc_result = new_loc_descr (DW_OP_implicit_value,
12706                                       length * elt_size, 0);
12707           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12708           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
12709           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
12710           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12711         }
12712       break;
12713
12714     case CONST:
12715       if (mode == VOIDmode
12716           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
12717           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
12718           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
12719         {
12720           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
12721           break;
12722         }
12723       /* FALLTHROUGH */
12724     case SYMBOL_REF:
12725       if (!const_ok_for_output (rtl))
12726         break;
12727     case LABEL_REF:
12728       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
12729           && (dwarf_version >= 4 || !dwarf_strict))
12730         {
12731           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
12732           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
12733           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
12734           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
12735           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
12736         }
12737       break;
12738
12739     case DEBUG_IMPLICIT_PTR:
12740       loc_result = implicit_ptr_descriptor (rtl, 0);
12741       break;
12742
12743     case PLUS:
12744       if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
12745           && CONST_INT_P (XEXP (rtl, 1)))
12746         {
12747           loc_result
12748             = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
12749           break;
12750         }
12751       /* FALLTHRU */
12752     do_default:
12753     default:
12754       if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
12755            && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
12756            && dwarf_version >= 4)
12757           || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
12758         {
12759           /* Value expression.  */
12760           loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
12761           if (loc_result)
12762             add_loc_descr (&loc_result,
12763                            new_loc_descr (DW_OP_stack_value, 0, 0));
12764         }
12765       break;
12766     }
12767
12768   return loc_result;
12769 }
12770
12771 /* We need to figure out what section we should use as the base for the
12772    address ranges where a given location is valid.
12773    1. If this particular DECL has a section associated with it, use that.
12774    2. If this function has a section associated with it, use that.
12775    3. Otherwise, use the text section.
12776    XXX: If you split a variable across multiple sections, we won't notice.  */
12777
12778 static const char *
12779 secname_for_decl (const_tree decl)
12780 {
12781   const char *secname;
12782
12783   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
12784     {
12785       tree sectree = DECL_SECTION_NAME (decl);
12786       secname = TREE_STRING_POINTER (sectree);
12787     }
12788   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
12789     {
12790       tree sectree = DECL_SECTION_NAME (current_function_decl);
12791       secname = TREE_STRING_POINTER (sectree);
12792     }
12793   else if (cfun && in_cold_section_p)
12794     secname = crtl->subsections.cold_section_label;
12795   else
12796     secname = text_section_label;
12797
12798   return secname;
12799 }
12800
12801 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
12802
12803 static bool
12804 decl_by_reference_p (tree decl)
12805 {
12806   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
12807            || TREE_CODE (decl) == VAR_DECL)
12808           && DECL_BY_REFERENCE (decl));
12809 }
12810
12811 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12812    for VARLOC.  */
12813
12814 static dw_loc_descr_ref
12815 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
12816                enum var_init_status initialized)
12817 {
12818   int have_address = 0;
12819   dw_loc_descr_ref descr;
12820   enum machine_mode mode;
12821
12822   if (want_address != 2)
12823     {
12824       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
12825       /* Single part.  */
12826       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12827         {
12828           varloc = PAT_VAR_LOCATION_LOC (varloc);
12829           if (GET_CODE (varloc) == EXPR_LIST)
12830             varloc = XEXP (varloc, 0);
12831           mode = GET_MODE (varloc);
12832           if (MEM_P (varloc))
12833             {
12834               rtx addr = XEXP (varloc, 0);
12835               descr = mem_loc_descriptor (addr, get_address_mode (varloc),
12836                                           mode, initialized);
12837               if (descr)
12838                 have_address = 1;
12839               else
12840                 {
12841                   rtx x = avoid_constant_pool_reference (varloc);
12842                   if (x != varloc)
12843                     descr = mem_loc_descriptor (x, mode, VOIDmode,
12844                                                 initialized);
12845                 }
12846             }
12847           else
12848             descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
12849         }
12850       else
12851         return 0;
12852     }
12853   else
12854     {
12855       if (GET_CODE (varloc) == VAR_LOCATION)
12856         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
12857       else
12858         mode = DECL_MODE (loc);
12859       descr = loc_descriptor (varloc, mode, initialized);
12860       have_address = 1;
12861     }
12862
12863   if (!descr)
12864     return 0;
12865
12866   if (want_address == 2 && !have_address
12867       && (dwarf_version >= 4 || !dwarf_strict))
12868     {
12869       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
12870         {
12871           expansion_failed (loc, NULL_RTX,
12872                             "DWARF address size mismatch");
12873           return 0;
12874         }
12875       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
12876       have_address = 1;
12877     }
12878   /* Show if we can't fill the request for an address.  */
12879   if (want_address && !have_address)
12880     {
12881       expansion_failed (loc, NULL_RTX,
12882                         "Want address and only have value");
12883       return 0;
12884     }
12885
12886   /* If we've got an address and don't want one, dereference.  */
12887   if (!want_address && have_address)
12888     {
12889       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
12890       enum dwarf_location_atom op;
12891
12892       if (size > DWARF2_ADDR_SIZE || size == -1)
12893         {
12894           expansion_failed (loc, NULL_RTX,
12895                             "DWARF address size mismatch");
12896           return 0;
12897         }
12898       else if (size == DWARF2_ADDR_SIZE)
12899         op = DW_OP_deref;
12900       else
12901         op = DW_OP_deref_size;
12902
12903       add_loc_descr (&descr, new_loc_descr (op, size, 0));
12904     }
12905
12906   return descr;
12907 }
12908
12909 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
12910    if it is not possible.  */
12911
12912 static dw_loc_descr_ref
12913 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
12914 {
12915   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
12916     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
12917   else if (dwarf_version >= 3 || !dwarf_strict)
12918     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
12919   else
12920     return NULL;
12921 }
12922
12923 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12924    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
12925
12926 static dw_loc_descr_ref
12927 dw_sra_loc_expr (tree decl, rtx loc)
12928 {
12929   rtx p;
12930   unsigned int padsize = 0;
12931   dw_loc_descr_ref descr, *descr_tail;
12932   unsigned HOST_WIDE_INT decl_size;
12933   rtx varloc;
12934   enum var_init_status initialized;
12935
12936   if (DECL_SIZE (decl) == NULL
12937       || !host_integerp (DECL_SIZE (decl), 1))
12938     return NULL;
12939
12940   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
12941   descr = NULL;
12942   descr_tail = &descr;
12943
12944   for (p = loc; p; p = XEXP (p, 1))
12945     {
12946       unsigned int bitsize = decl_piece_bitsize (p);
12947       rtx loc_note = *decl_piece_varloc_ptr (p);
12948       dw_loc_descr_ref cur_descr;
12949       dw_loc_descr_ref *tail, last = NULL;
12950       unsigned int opsize = 0;
12951
12952       if (loc_note == NULL_RTX
12953           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
12954         {
12955           padsize += bitsize;
12956           continue;
12957         }
12958       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
12959       varloc = NOTE_VAR_LOCATION (loc_note);
12960       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
12961       if (cur_descr == NULL)
12962         {
12963           padsize += bitsize;
12964           continue;
12965         }
12966
12967       /* Check that cur_descr either doesn't use
12968          DW_OP_*piece operations, or their sum is equal
12969          to bitsize.  Otherwise we can't embed it.  */
12970       for (tail = &cur_descr; *tail != NULL;
12971            tail = &(*tail)->dw_loc_next)
12972         if ((*tail)->dw_loc_opc == DW_OP_piece)
12973           {
12974             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
12975                       * BITS_PER_UNIT;
12976             last = *tail;
12977           }
12978         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
12979           {
12980             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
12981             last = *tail;
12982           }
12983
12984       if (last != NULL && opsize != bitsize)
12985         {
12986           padsize += bitsize;
12987           continue;
12988         }
12989
12990       /* If there is a hole, add DW_OP_*piece after empty DWARF
12991          expression, which means that those bits are optimized out.  */
12992       if (padsize)
12993         {
12994           if (padsize > decl_size)
12995             return NULL;
12996           decl_size -= padsize;
12997           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
12998           if (*descr_tail == NULL)
12999             return NULL;
13000           descr_tail = &(*descr_tail)->dw_loc_next;
13001           padsize = 0;
13002         }
13003       *descr_tail = cur_descr;
13004       descr_tail = tail;
13005       if (bitsize > decl_size)
13006         return NULL;
13007       decl_size -= bitsize;
13008       if (last == NULL)
13009         {
13010           HOST_WIDE_INT offset = 0;
13011           if (GET_CODE (varloc) == VAR_LOCATION
13012               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
13013             {
13014               varloc = PAT_VAR_LOCATION_LOC (varloc);
13015               if (GET_CODE (varloc) == EXPR_LIST)
13016                 varloc = XEXP (varloc, 0);
13017             }
13018           do 
13019             {
13020               if (GET_CODE (varloc) == CONST
13021                   || GET_CODE (varloc) == SIGN_EXTEND
13022                   || GET_CODE (varloc) == ZERO_EXTEND)
13023                 varloc = XEXP (varloc, 0);
13024               else if (GET_CODE (varloc) == SUBREG)
13025                 varloc = SUBREG_REG (varloc);
13026               else
13027                 break;
13028             }
13029           while (1);
13030           /* DW_OP_bit_size offset should be zero for register
13031              or implicit location descriptions and empty location
13032              descriptions, but for memory addresses needs big endian
13033              adjustment.  */
13034           if (MEM_P (varloc))
13035             {
13036               unsigned HOST_WIDE_INT memsize
13037                 = MEM_SIZE (varloc) * BITS_PER_UNIT;
13038               if (memsize != bitsize)
13039                 {
13040                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
13041                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
13042                     return NULL;
13043                   if (memsize < bitsize)
13044                     return NULL;
13045                   if (BITS_BIG_ENDIAN)
13046                     offset = memsize - bitsize;
13047                 }
13048             }
13049
13050           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
13051           if (*descr_tail == NULL)
13052             return NULL;
13053           descr_tail = &(*descr_tail)->dw_loc_next;
13054         }
13055     }
13056
13057   /* If there were any non-empty expressions, add padding till the end of
13058      the decl.  */
13059   if (descr != NULL && decl_size != 0)
13060     {
13061       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
13062       if (*descr_tail == NULL)
13063         return NULL;
13064     }
13065   return descr;
13066 }
13067
13068 /* Return the dwarf representation of the location list LOC_LIST of
13069    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
13070    function.  */
13071
13072 static dw_loc_list_ref
13073 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
13074 {
13075   const char *endname, *secname;
13076   rtx varloc;
13077   enum var_init_status initialized;
13078   struct var_loc_node *node;
13079   dw_loc_descr_ref descr;
13080   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13081   dw_loc_list_ref list = NULL;
13082   dw_loc_list_ref *listp = &list;
13083
13084   /* Now that we know what section we are using for a base,
13085      actually construct the list of locations.
13086      The first location information is what is passed to the
13087      function that creates the location list, and the remaining
13088      locations just get added on to that list.
13089      Note that we only know the start address for a location
13090      (IE location changes), so to build the range, we use
13091      the range [current location start, next location start].
13092      This means we have to special case the last node, and generate
13093      a range of [last location start, end of function label].  */
13094
13095   secname = secname_for_decl (decl);
13096
13097   for (node = loc_list->first; node; node = node->next)
13098     if (GET_CODE (node->loc) == EXPR_LIST
13099         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
13100       {
13101         if (GET_CODE (node->loc) == EXPR_LIST)
13102           {
13103             /* This requires DW_OP_{,bit_}piece, which is not usable
13104                inside DWARF expressions.  */
13105             if (want_address != 2)
13106               continue;
13107             descr = dw_sra_loc_expr (decl, node->loc);
13108             if (descr == NULL)
13109               continue;
13110           }
13111         else
13112           {
13113             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13114             varloc = NOTE_VAR_LOCATION (node->loc);
13115             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13116           }
13117         if (descr)
13118           {
13119             bool range_across_switch = false;
13120             /* If section switch happens in between node->label
13121                and node->next->label (or end of function) and
13122                we can't emit it as a single entry list,
13123                emit two ranges, first one ending at the end
13124                of first partition and second one starting at the
13125                beginning of second partition.  */
13126             if (node == loc_list->last_before_switch
13127                 && (node != loc_list->first || loc_list->first->next)
13128                 && current_function_decl)
13129               {
13130                 endname = cfun->fde->dw_fde_end;
13131                 range_across_switch = true;
13132               }
13133             /* The variable has a location between NODE->LABEL and
13134                NODE->NEXT->LABEL.  */
13135             else if (node->next)
13136               endname = node->next->label;
13137             /* If the variable has a location at the last label
13138                it keeps its location until the end of function.  */
13139             else if (!current_function_decl)
13140               endname = text_end_label;
13141             else
13142               {
13143                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
13144                                              current_function_funcdef_no);
13145                 endname = ggc_strdup (label_id);
13146               }
13147
13148             *listp = new_loc_list (descr, node->label, endname, secname);
13149             if (TREE_CODE (decl) == PARM_DECL
13150                 && node == loc_list->first
13151                 && GET_CODE (node->loc) == NOTE
13152                 && strcmp (node->label, endname) == 0)
13153               (*listp)->force = true;
13154             listp = &(*listp)->dw_loc_next;
13155
13156             if (range_across_switch)
13157               {
13158                 if (GET_CODE (node->loc) == EXPR_LIST)
13159                   descr = dw_sra_loc_expr (decl, node->loc);
13160                 else
13161                   {
13162                     initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13163                     varloc = NOTE_VAR_LOCATION (node->loc);
13164                     descr = dw_loc_list_1 (decl, varloc, want_address,
13165                                            initialized);
13166                   }
13167                 gcc_assert (descr);
13168                 /* The variable has a location between NODE->LABEL and
13169                    NODE->NEXT->LABEL.  */
13170                 if (node->next)
13171                   endname = node->next->label;
13172                 else
13173                   endname = cfun->fde->dw_fde_second_end;
13174                 *listp = new_loc_list (descr,
13175                                        cfun->fde->dw_fde_second_begin,
13176                                        endname, secname);
13177                 listp = &(*listp)->dw_loc_next;
13178               }
13179           }
13180       }
13181
13182   /* Try to avoid the overhead of a location list emitting a location
13183      expression instead, but only if we didn't have more than one
13184      location entry in the first place.  If some entries were not
13185      representable, we don't want to pretend a single entry that was
13186      applies to the entire scope in which the variable is
13187      available.  */
13188   if (list && loc_list->first->next)
13189     gen_llsym (list);
13190
13191   return list;
13192 }
13193
13194 /* Return if the loc_list has only single element and thus can be represented
13195    as location description.   */
13196
13197 static bool
13198 single_element_loc_list_p (dw_loc_list_ref list)
13199 {
13200   gcc_assert (!list->dw_loc_next || list->ll_symbol);
13201   return !list->ll_symbol;
13202 }
13203
13204 /* To each location in list LIST add loc descr REF.  */
13205
13206 static void
13207 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
13208 {
13209   dw_loc_descr_ref copy;
13210   add_loc_descr (&list->expr, ref);
13211   list = list->dw_loc_next;
13212   while (list)
13213     {
13214       copy = ggc_alloc_dw_loc_descr_node ();
13215       memcpy (copy, ref, sizeof (dw_loc_descr_node));
13216       add_loc_descr (&list->expr, copy);
13217       while (copy->dw_loc_next)
13218         {
13219           dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node ();
13220           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
13221           copy->dw_loc_next = new_copy;
13222           copy = new_copy;
13223         }
13224       list = list->dw_loc_next;
13225     }
13226 }
13227
13228 /* Given two lists RET and LIST
13229    produce location list that is result of adding expression in LIST
13230    to expression in RET on each possition in program.
13231    Might be destructive on both RET and LIST.
13232
13233    TODO: We handle only simple cases of RET or LIST having at most one
13234    element. General case would inolve sorting the lists in program order
13235    and merging them that will need some additional work.
13236    Adding that will improve quality of debug info especially for SRA-ed
13237    structures.  */
13238
13239 static void
13240 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
13241 {
13242   if (!list)
13243     return;
13244   if (!*ret)
13245     {
13246       *ret = list;
13247       return;
13248     }
13249   if (!list->dw_loc_next)
13250     {
13251       add_loc_descr_to_each (*ret, list->expr);
13252       return;
13253     }
13254   if (!(*ret)->dw_loc_next)
13255     {
13256       add_loc_descr_to_each (list, (*ret)->expr);
13257       *ret = list;
13258       return;
13259     }
13260   expansion_failed (NULL_TREE, NULL_RTX,
13261                     "Don't know how to merge two non-trivial"
13262                     " location lists.\n");
13263   *ret = NULL;
13264   return;
13265 }
13266
13267 /* LOC is constant expression.  Try a luck, look it up in constant
13268    pool and return its loc_descr of its address.  */
13269
13270 static dw_loc_descr_ref
13271 cst_pool_loc_descr (tree loc)
13272 {
13273   /* Get an RTL for this, if something has been emitted.  */
13274   rtx rtl = lookup_constant_def (loc);
13275
13276   if (!rtl || !MEM_P (rtl))
13277     {
13278       gcc_assert (!rtl);
13279       return 0;
13280     }
13281   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
13282
13283   /* TODO: We might get more coverage if we was actually delaying expansion
13284      of all expressions till end of compilation when constant pools are fully
13285      populated.  */
13286   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
13287     {
13288       expansion_failed (loc, NULL_RTX,
13289                         "CST value in contant pool but not marked.");
13290       return 0;
13291     }
13292   return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13293                              GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
13294 }
13295
13296 /* Return dw_loc_list representing address of addr_expr LOC
13297    by looking for innder INDIRECT_REF expression and turing it
13298    into simple arithmetics.  */
13299
13300 static dw_loc_list_ref
13301 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
13302 {
13303   tree obj, offset;
13304   HOST_WIDE_INT bitsize, bitpos, bytepos;
13305   enum machine_mode mode;
13306   int volatilep;
13307   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13308   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13309
13310   obj = get_inner_reference (TREE_OPERAND (loc, 0),
13311                              &bitsize, &bitpos, &offset, &mode,
13312                              &unsignedp, &volatilep, false);
13313   STRIP_NOPS (obj);
13314   if (bitpos % BITS_PER_UNIT)
13315     {
13316       expansion_failed (loc, NULL_RTX, "bitfield access");
13317       return 0;
13318     }
13319   if (!INDIRECT_REF_P (obj))
13320     {
13321       expansion_failed (obj,
13322                         NULL_RTX, "no indirect ref in inner refrence");
13323       return 0;
13324     }
13325   if (!offset && !bitpos)
13326     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
13327   else if (toplev
13328            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
13329            && (dwarf_version >= 4 || !dwarf_strict))
13330     {
13331       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
13332       if (!list_ret)
13333         return 0;
13334       if (offset)
13335         {
13336           /* Variable offset.  */
13337           list_ret1 = loc_list_from_tree (offset, 0);
13338           if (list_ret1 == 0)
13339             return 0;
13340           add_loc_list (&list_ret, list_ret1);
13341           if (!list_ret)
13342             return 0;
13343           add_loc_descr_to_each (list_ret,
13344                                  new_loc_descr (DW_OP_plus, 0, 0));
13345         }
13346       bytepos = bitpos / BITS_PER_UNIT;
13347       if (bytepos > 0)
13348         add_loc_descr_to_each (list_ret,
13349                                new_loc_descr (DW_OP_plus_uconst,
13350                                               bytepos, 0));
13351       else if (bytepos < 0)
13352         loc_list_plus_const (list_ret, bytepos);
13353       add_loc_descr_to_each (list_ret,
13354                              new_loc_descr (DW_OP_stack_value, 0, 0));
13355     }
13356   return list_ret;
13357 }
13358
13359
13360 /* Generate Dwarf location list representing LOC.
13361    If WANT_ADDRESS is false, expression computing LOC will be computed
13362    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
13363    if WANT_ADDRESS is 2, expression computing address useable in location
13364      will be returned (i.e. DW_OP_reg can be used
13365      to refer to register values).  */
13366
13367 static dw_loc_list_ref
13368 loc_list_from_tree (tree loc, int want_address)
13369 {
13370   dw_loc_descr_ref ret = NULL, ret1 = NULL;
13371   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13372   int have_address = 0;
13373   enum dwarf_location_atom op;
13374
13375   /* ??? Most of the time we do not take proper care for sign/zero
13376      extending the values properly.  Hopefully this won't be a real
13377      problem...  */
13378
13379   switch (TREE_CODE (loc))
13380     {
13381     case ERROR_MARK:
13382       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
13383       return 0;
13384
13385     case PLACEHOLDER_EXPR:
13386       /* This case involves extracting fields from an object to determine the
13387          position of other fields.  We don't try to encode this here.  The
13388          only user of this is Ada, which encodes the needed information using
13389          the names of types.  */
13390       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
13391       return 0;
13392
13393     case CALL_EXPR:
13394       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
13395       /* There are no opcodes for these operations.  */
13396       return 0;
13397
13398     case PREINCREMENT_EXPR:
13399     case PREDECREMENT_EXPR:
13400     case POSTINCREMENT_EXPR:
13401     case POSTDECREMENT_EXPR:
13402       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
13403       /* There are no opcodes for these operations.  */
13404       return 0;
13405
13406     case ADDR_EXPR:
13407       /* If we already want an address, see if there is INDIRECT_REF inside
13408          e.g. for &this->field.  */
13409       if (want_address)
13410         {
13411           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
13412                        (loc, want_address == 2);
13413           if (list_ret)
13414             have_address = 1;
13415           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
13416                    && (ret = cst_pool_loc_descr (loc)))
13417             have_address = 1;
13418         }
13419         /* Otherwise, process the argument and look for the address.  */
13420       if (!list_ret && !ret)
13421         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
13422       else
13423         {
13424           if (want_address)
13425             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
13426           return NULL;
13427         }
13428       break;
13429
13430     case VAR_DECL:
13431       if (DECL_THREAD_LOCAL_P (loc))
13432         {
13433           rtx rtl;
13434           enum dwarf_location_atom first_op;
13435           enum dwarf_location_atom second_op;
13436           bool dtprel = false;
13437
13438           if (targetm.have_tls)
13439             {
13440               /* If this is not defined, we have no way to emit the
13441                  data.  */
13442               if (!targetm.asm_out.output_dwarf_dtprel)
13443                 return 0;
13444
13445                /* The way DW_OP_GNU_push_tls_address is specified, we
13446                   can only look up addresses of objects in the current
13447                   module.  We used DW_OP_addr as first op, but that's
13448                   wrong, because DW_OP_addr is relocated by the debug
13449                   info consumer, while DW_OP_GNU_push_tls_address
13450                   operand shouldn't be.  */
13451               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
13452                 return 0;
13453               first_op = DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u;
13454               dtprel = true;
13455               second_op = DW_OP_GNU_push_tls_address;
13456             }
13457           else
13458             {
13459               if (!targetm.emutls.debug_form_tls_address
13460                   || !(dwarf_version >= 3 || !dwarf_strict))
13461                 return 0;
13462               /* We stuffed the control variable into the DECL_VALUE_EXPR
13463                  to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
13464                  no longer appear in gimple code.  We used the control
13465                  variable in specific so that we could pick it up here.  */
13466               loc = DECL_VALUE_EXPR (loc);
13467               first_op = DW_OP_addr;
13468               second_op = DW_OP_form_tls_address;
13469             }
13470
13471           rtl = rtl_for_decl_location (loc);
13472           if (rtl == NULL_RTX)
13473             return 0;
13474
13475           if (!MEM_P (rtl))
13476             return 0;
13477           rtl = XEXP (rtl, 0);
13478           if (! CONSTANT_P (rtl))
13479             return 0;
13480
13481           ret = new_loc_descr (first_op, 0, 0);
13482           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13483           ret->dw_loc_oprnd1.v.val_addr = rtl;
13484           ret->dtprel = dtprel;
13485
13486           ret1 = new_loc_descr (second_op, 0, 0);
13487           add_loc_descr (&ret, ret1);
13488
13489           have_address = 1;
13490           break;
13491         }
13492       /* FALLTHRU */
13493
13494     case PARM_DECL:
13495     case RESULT_DECL:
13496       if (DECL_HAS_VALUE_EXPR_P (loc))
13497         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
13498                                    want_address);
13499       /* FALLTHRU */
13500
13501     case FUNCTION_DECL:
13502       {
13503         rtx rtl;
13504         var_loc_list *loc_list = lookup_decl_loc (loc);
13505
13506         if (loc_list && loc_list->first)
13507           {
13508             list_ret = dw_loc_list (loc_list, loc, want_address);
13509             have_address = want_address != 0;
13510             break;
13511           }
13512         rtl = rtl_for_decl_location (loc);
13513         if (rtl == NULL_RTX)
13514           {
13515             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
13516             return 0;
13517           }
13518         else if (CONST_INT_P (rtl))
13519           {
13520             HOST_WIDE_INT val = INTVAL (rtl);
13521             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13522               val &= GET_MODE_MASK (DECL_MODE (loc));
13523             ret = int_loc_descriptor (val);
13524           }
13525         else if (GET_CODE (rtl) == CONST_STRING)
13526           {
13527             expansion_failed (loc, NULL_RTX, "CONST_STRING");
13528             return 0;
13529           }
13530         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
13531           {
13532             ret = new_loc_descr (DW_OP_addr, 0, 0);
13533             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13534             ret->dw_loc_oprnd1.v.val_addr = rtl;
13535           }
13536         else
13537           {
13538             enum machine_mode mode, mem_mode;
13539
13540             /* Certain constructs can only be represented at top-level.  */
13541             if (want_address == 2)
13542               {
13543                 ret = loc_descriptor (rtl, VOIDmode,
13544                                       VAR_INIT_STATUS_INITIALIZED);
13545                 have_address = 1;
13546               }
13547             else
13548               {
13549                 mode = GET_MODE (rtl);
13550                 mem_mode = VOIDmode;
13551                 if (MEM_P (rtl))
13552                   {
13553                     mem_mode = mode;
13554                     mode = get_address_mode (rtl);
13555                     rtl = XEXP (rtl, 0);
13556                     have_address = 1;
13557                   }
13558                 ret = mem_loc_descriptor (rtl, mode, mem_mode,
13559                                           VAR_INIT_STATUS_INITIALIZED);
13560               }
13561             if (!ret)
13562               expansion_failed (loc, rtl,
13563                                 "failed to produce loc descriptor for rtl");
13564           }
13565       }
13566       break;
13567
13568     case MEM_REF:
13569       /* ??? FIXME.  */
13570       if (!integer_zerop (TREE_OPERAND (loc, 1)))
13571         return 0;
13572       /* Fallthru.  */
13573     case INDIRECT_REF:
13574       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13575       have_address = 1;
13576       break;
13577
13578     case COMPOUND_EXPR:
13579       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
13580
13581     CASE_CONVERT:
13582     case VIEW_CONVERT_EXPR:
13583     case SAVE_EXPR:
13584     case MODIFY_EXPR:
13585       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
13586
13587     case COMPONENT_REF:
13588     case BIT_FIELD_REF:
13589     case ARRAY_REF:
13590     case ARRAY_RANGE_REF:
13591     case REALPART_EXPR:
13592     case IMAGPART_EXPR:
13593       {
13594         tree obj, offset;
13595         HOST_WIDE_INT bitsize, bitpos, bytepos;
13596         enum machine_mode mode;
13597         int volatilep;
13598         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13599
13600         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
13601                                    &unsignedp, &volatilep, false);
13602
13603         gcc_assert (obj != loc);
13604
13605         list_ret = loc_list_from_tree (obj,
13606                                        want_address == 2
13607                                        && !bitpos && !offset ? 2 : 1);
13608         /* TODO: We can extract value of the small expression via shifting even
13609            for nonzero bitpos.  */
13610         if (list_ret == 0)
13611           return 0;
13612         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
13613           {
13614             expansion_failed (loc, NULL_RTX,
13615                               "bitfield access");
13616             return 0;
13617           }
13618
13619         if (offset != NULL_TREE)
13620           {
13621             /* Variable offset.  */
13622             list_ret1 = loc_list_from_tree (offset, 0);
13623             if (list_ret1 == 0)
13624               return 0;
13625             add_loc_list (&list_ret, list_ret1);
13626             if (!list_ret)
13627               return 0;
13628             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
13629           }
13630
13631         bytepos = bitpos / BITS_PER_UNIT;
13632         if (bytepos > 0)
13633           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
13634         else if (bytepos < 0)
13635           loc_list_plus_const (list_ret, bytepos);
13636
13637         have_address = 1;
13638         break;
13639       }
13640
13641     case INTEGER_CST:
13642       if ((want_address || !host_integerp (loc, 0))
13643           && (ret = cst_pool_loc_descr (loc)))
13644         have_address = 1;
13645       else if (want_address == 2
13646                && host_integerp (loc, 0)
13647                && (ret = address_of_int_loc_descriptor
13648                            (int_size_in_bytes (TREE_TYPE (loc)),
13649                             tree_low_cst (loc, 0))))
13650         have_address = 1;
13651       else if (host_integerp (loc, 0))
13652         ret = int_loc_descriptor (tree_low_cst (loc, 0));
13653       else
13654         {
13655           expansion_failed (loc, NULL_RTX,
13656                             "Integer operand is not host integer");
13657           return 0;
13658         }
13659       break;
13660
13661     case CONSTRUCTOR:
13662     case REAL_CST:
13663     case STRING_CST:
13664     case COMPLEX_CST:
13665       if ((ret = cst_pool_loc_descr (loc)))
13666         have_address = 1;
13667       else
13668       /* We can construct small constants here using int_loc_descriptor.  */
13669         expansion_failed (loc, NULL_RTX,
13670                           "constructor or constant not in constant pool");
13671       break;
13672
13673     case TRUTH_AND_EXPR:
13674     case TRUTH_ANDIF_EXPR:
13675     case BIT_AND_EXPR:
13676       op = DW_OP_and;
13677       goto do_binop;
13678
13679     case TRUTH_XOR_EXPR:
13680     case BIT_XOR_EXPR:
13681       op = DW_OP_xor;
13682       goto do_binop;
13683
13684     case TRUTH_OR_EXPR:
13685     case TRUTH_ORIF_EXPR:
13686     case BIT_IOR_EXPR:
13687       op = DW_OP_or;
13688       goto do_binop;
13689
13690     case FLOOR_DIV_EXPR:
13691     case CEIL_DIV_EXPR:
13692     case ROUND_DIV_EXPR:
13693     case TRUNC_DIV_EXPR:
13694       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13695         return 0;
13696       op = DW_OP_div;
13697       goto do_binop;
13698
13699     case MINUS_EXPR:
13700       op = DW_OP_minus;
13701       goto do_binop;
13702
13703     case FLOOR_MOD_EXPR:
13704     case CEIL_MOD_EXPR:
13705     case ROUND_MOD_EXPR:
13706     case TRUNC_MOD_EXPR:
13707       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13708         {
13709           op = DW_OP_mod;
13710           goto do_binop;
13711         }
13712       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13713       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13714       if (list_ret == 0 || list_ret1 == 0)
13715         return 0;
13716
13717       add_loc_list (&list_ret, list_ret1);
13718       if (list_ret == 0)
13719         return 0;
13720       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13721       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13722       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
13723       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
13724       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
13725       break;
13726
13727     case MULT_EXPR:
13728       op = DW_OP_mul;
13729       goto do_binop;
13730
13731     case LSHIFT_EXPR:
13732       op = DW_OP_shl;
13733       goto do_binop;
13734
13735     case RSHIFT_EXPR:
13736       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
13737       goto do_binop;
13738
13739     case POINTER_PLUS_EXPR:
13740     case PLUS_EXPR:
13741       if (host_integerp (TREE_OPERAND (loc, 1), 0))
13742         {
13743           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13744           if (list_ret == 0)
13745             return 0;
13746
13747           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
13748           break;
13749         }
13750
13751       op = DW_OP_plus;
13752       goto do_binop;
13753
13754     case LE_EXPR:
13755       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13756         return 0;
13757
13758       op = DW_OP_le;
13759       goto do_binop;
13760
13761     case GE_EXPR:
13762       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13763         return 0;
13764
13765       op = DW_OP_ge;
13766       goto do_binop;
13767
13768     case LT_EXPR:
13769       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13770         return 0;
13771
13772       op = DW_OP_lt;
13773       goto do_binop;
13774
13775     case GT_EXPR:
13776       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13777         return 0;
13778
13779       op = DW_OP_gt;
13780       goto do_binop;
13781
13782     case EQ_EXPR:
13783       op = DW_OP_eq;
13784       goto do_binop;
13785
13786     case NE_EXPR:
13787       op = DW_OP_ne;
13788       goto do_binop;
13789
13790     do_binop:
13791       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13792       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13793       if (list_ret == 0 || list_ret1 == 0)
13794         return 0;
13795
13796       add_loc_list (&list_ret, list_ret1);
13797       if (list_ret == 0)
13798         return 0;
13799       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13800       break;
13801
13802     case TRUTH_NOT_EXPR:
13803     case BIT_NOT_EXPR:
13804       op = DW_OP_not;
13805       goto do_unop;
13806
13807     case ABS_EXPR:
13808       op = DW_OP_abs;
13809       goto do_unop;
13810
13811     case NEGATE_EXPR:
13812       op = DW_OP_neg;
13813       goto do_unop;
13814
13815     do_unop:
13816       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13817       if (list_ret == 0)
13818         return 0;
13819
13820       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13821       break;
13822
13823     case MIN_EXPR:
13824     case MAX_EXPR:
13825       {
13826         const enum tree_code code =
13827           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
13828
13829         loc = build3 (COND_EXPR, TREE_TYPE (loc),
13830                       build2 (code, integer_type_node,
13831                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
13832                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
13833       }
13834
13835       /* ... fall through ...  */
13836
13837     case COND_EXPR:
13838       {
13839         dw_loc_descr_ref lhs
13840           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
13841         dw_loc_list_ref rhs
13842           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
13843         dw_loc_descr_ref bra_node, jump_node, tmp;
13844
13845         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13846         if (list_ret == 0 || lhs == 0 || rhs == 0)
13847           return 0;
13848
13849         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13850         add_loc_descr_to_each (list_ret, bra_node);
13851
13852         add_loc_list (&list_ret, rhs);
13853         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
13854         add_loc_descr_to_each (list_ret, jump_node);
13855
13856         add_loc_descr_to_each (list_ret, lhs);
13857         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13858         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
13859
13860         /* ??? Need a node to point the skip at.  Use a nop.  */
13861         tmp = new_loc_descr (DW_OP_nop, 0, 0);
13862         add_loc_descr_to_each (list_ret, tmp);
13863         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13864         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
13865       }
13866       break;
13867
13868     case FIX_TRUNC_EXPR:
13869       return 0;
13870
13871     default:
13872       /* Leave front-end specific codes as simply unknown.  This comes
13873          up, for instance, with the C STMT_EXPR.  */
13874       if ((unsigned int) TREE_CODE (loc)
13875           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
13876         {
13877           expansion_failed (loc, NULL_RTX,
13878                             "language specific tree node");
13879           return 0;
13880         }
13881
13882 #ifdef ENABLE_CHECKING
13883       /* Otherwise this is a generic code; we should just lists all of
13884          these explicitly.  We forgot one.  */
13885       gcc_unreachable ();
13886 #else
13887       /* In a release build, we want to degrade gracefully: better to
13888          generate incomplete debugging information than to crash.  */
13889       return NULL;
13890 #endif
13891     }
13892
13893   if (!ret && !list_ret)
13894     return 0;
13895
13896   if (want_address == 2 && !have_address
13897       && (dwarf_version >= 4 || !dwarf_strict))
13898     {
13899       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13900         {
13901           expansion_failed (loc, NULL_RTX,
13902                             "DWARF address size mismatch");
13903           return 0;
13904         }
13905       if (ret)
13906         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
13907       else
13908         add_loc_descr_to_each (list_ret,
13909                                new_loc_descr (DW_OP_stack_value, 0, 0));
13910       have_address = 1;
13911     }
13912   /* Show if we can't fill the request for an address.  */
13913   if (want_address && !have_address)
13914     {
13915       expansion_failed (loc, NULL_RTX,
13916                         "Want address and only have value");
13917       return 0;
13918     }
13919
13920   gcc_assert (!ret || !list_ret);
13921
13922   /* If we've got an address and don't want one, dereference.  */
13923   if (!want_address && have_address)
13924     {
13925       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13926
13927       if (size > DWARF2_ADDR_SIZE || size == -1)
13928         {
13929           expansion_failed (loc, NULL_RTX,
13930                             "DWARF address size mismatch");
13931           return 0;
13932         }
13933       else if (size == DWARF2_ADDR_SIZE)
13934         op = DW_OP_deref;
13935       else
13936         op = DW_OP_deref_size;
13937
13938       if (ret)
13939         add_loc_descr (&ret, new_loc_descr (op, size, 0));
13940       else
13941         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
13942     }
13943   if (ret)
13944     list_ret = new_loc_list (ret, NULL, NULL, NULL);
13945
13946   return list_ret;
13947 }
13948
13949 /* Same as above but return only single location expression.  */
13950 static dw_loc_descr_ref
13951 loc_descriptor_from_tree (tree loc, int want_address)
13952 {
13953   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
13954   if (!ret)
13955     return NULL;
13956   if (ret->dw_loc_next)
13957     {
13958       expansion_failed (loc, NULL_RTX,
13959                         "Location list where only loc descriptor needed");
13960       return NULL;
13961     }
13962   return ret->expr;
13963 }
13964
13965 /* Given a value, round it up to the lowest multiple of `boundary'
13966    which is not less than the value itself.  */
13967
13968 static inline HOST_WIDE_INT
13969 ceiling (HOST_WIDE_INT value, unsigned int boundary)
13970 {
13971   return (((value + boundary - 1) / boundary) * boundary);
13972 }
13973
13974 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
13975    pointer to the declared type for the relevant field variable, or return
13976    `integer_type_node' if the given node turns out to be an
13977    ERROR_MARK node.  */
13978
13979 static inline tree
13980 field_type (const_tree decl)
13981 {
13982   tree type;
13983
13984   if (TREE_CODE (decl) == ERROR_MARK)
13985     return integer_type_node;
13986
13987   type = DECL_BIT_FIELD_TYPE (decl);
13988   if (type == NULL_TREE)
13989     type = TREE_TYPE (decl);
13990
13991   return type;
13992 }
13993
13994 /* Given a pointer to a tree node, return the alignment in bits for
13995    it, or else return BITS_PER_WORD if the node actually turns out to
13996    be an ERROR_MARK node.  */
13997
13998 static inline unsigned
13999 simple_type_align_in_bits (const_tree type)
14000 {
14001   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14002 }
14003
14004 static inline unsigned
14005 simple_decl_align_in_bits (const_tree decl)
14006 {
14007   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14008 }
14009
14010 /* Return the result of rounding T up to ALIGN.  */
14011
14012 static inline double_int
14013 round_up_to_align (double_int t, unsigned int align)
14014 {
14015   double_int alignd = uhwi_to_double_int (align);
14016   t = double_int_add (t, alignd);
14017   t = double_int_add (t, double_int_minus_one);
14018   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
14019   t = double_int_mul (t, alignd);
14020   return t;
14021 }
14022
14023 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
14024    lowest addressed byte of the "containing object" for the given FIELD_DECL,
14025    or return 0 if we are unable to determine what that offset is, either
14026    because the argument turns out to be a pointer to an ERROR_MARK node, or
14027    because the offset is actually variable.  (We can't handle the latter case
14028    just yet).  */
14029
14030 static HOST_WIDE_INT
14031 field_byte_offset (const_tree decl)
14032 {
14033   double_int object_offset_in_bits;
14034   double_int object_offset_in_bytes;
14035   double_int bitpos_int;
14036
14037   if (TREE_CODE (decl) == ERROR_MARK)
14038     return 0;
14039
14040   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14041
14042   /* We cannot yet cope with fields whose positions are variable, so
14043      for now, when we see such things, we simply return 0.  Someday, we may
14044      be able to handle such cases, but it will be damn difficult.  */
14045   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
14046     return 0;
14047
14048   bitpos_int = tree_to_double_int (bit_position (decl));
14049
14050 #ifdef PCC_BITFIELD_TYPE_MATTERS
14051   if (PCC_BITFIELD_TYPE_MATTERS)
14052     {
14053       tree type;
14054       tree field_size_tree;
14055       double_int deepest_bitpos;
14056       double_int field_size_in_bits;
14057       unsigned int type_align_in_bits;
14058       unsigned int decl_align_in_bits;
14059       double_int type_size_in_bits;
14060
14061       type = field_type (decl);
14062       type_size_in_bits = double_int_type_size_in_bits (type);
14063       type_align_in_bits = simple_type_align_in_bits (type);
14064
14065       field_size_tree = DECL_SIZE (decl);
14066
14067       /* The size could be unspecified if there was an error, or for
14068          a flexible array member.  */
14069       if (!field_size_tree)
14070         field_size_tree = bitsize_zero_node;
14071
14072       /* If the size of the field is not constant, use the type size.  */
14073       if (TREE_CODE (field_size_tree) == INTEGER_CST)
14074         field_size_in_bits = tree_to_double_int (field_size_tree);
14075       else
14076         field_size_in_bits = type_size_in_bits;
14077
14078       decl_align_in_bits = simple_decl_align_in_bits (decl);
14079
14080       /* The GCC front-end doesn't make any attempt to keep track of the
14081          starting bit offset (relative to the start of the containing
14082          structure type) of the hypothetical "containing object" for a
14083          bit-field.  Thus, when computing the byte offset value for the
14084          start of the "containing object" of a bit-field, we must deduce
14085          this information on our own. This can be rather tricky to do in
14086          some cases.  For example, handling the following structure type
14087          definition when compiling for an i386/i486 target (which only
14088          aligns long long's to 32-bit boundaries) can be very tricky:
14089
14090          struct S { int field1; long long field2:31; };
14091
14092          Fortunately, there is a simple rule-of-thumb which can be used
14093          in such cases.  When compiling for an i386/i486, GCC will
14094          allocate 8 bytes for the structure shown above.  It decides to
14095          do this based upon one simple rule for bit-field allocation.
14096          GCC allocates each "containing object" for each bit-field at
14097          the first (i.e. lowest addressed) legitimate alignment boundary
14098          (based upon the required minimum alignment for the declared
14099          type of the field) which it can possibly use, subject to the
14100          condition that there is still enough available space remaining
14101          in the containing object (when allocated at the selected point)
14102          to fully accommodate all of the bits of the bit-field itself.
14103
14104          This simple rule makes it obvious why GCC allocates 8 bytes for
14105          each object of the structure type shown above.  When looking
14106          for a place to allocate the "containing object" for `field2',
14107          the compiler simply tries to allocate a 64-bit "containing
14108          object" at each successive 32-bit boundary (starting at zero)
14109          until it finds a place to allocate that 64- bit field such that
14110          at least 31 contiguous (and previously unallocated) bits remain
14111          within that selected 64 bit field.  (As it turns out, for the
14112          example above, the compiler finds it is OK to allocate the
14113          "containing object" 64-bit field at bit-offset zero within the
14114          structure type.)
14115
14116          Here we attempt to work backwards from the limited set of facts
14117          we're given, and we try to deduce from those facts, where GCC
14118          must have believed that the containing object started (within
14119          the structure type). The value we deduce is then used (by the
14120          callers of this routine) to generate DW_AT_location and
14121          DW_AT_bit_offset attributes for fields (both bit-fields and, in
14122          the case of DW_AT_location, regular fields as well).  */
14123
14124       /* Figure out the bit-distance from the start of the structure to
14125          the "deepest" bit of the bit-field.  */
14126       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
14127
14128       /* This is the tricky part.  Use some fancy footwork to deduce
14129          where the lowest addressed bit of the containing object must
14130          be.  */
14131       object_offset_in_bits
14132         = double_int_sub (deepest_bitpos, type_size_in_bits);
14133
14134       /* Round up to type_align by default.  This works best for
14135          bitfields.  */
14136       object_offset_in_bits
14137         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14138
14139       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
14140         {
14141           object_offset_in_bits
14142             = double_int_sub (deepest_bitpos, type_size_in_bits);
14143
14144           /* Round up to decl_align instead.  */
14145           object_offset_in_bits
14146             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14147         }
14148     }
14149   else
14150 #endif /* PCC_BITFIELD_TYPE_MATTERS */
14151     object_offset_in_bits = bitpos_int;
14152
14153   object_offset_in_bytes
14154     = double_int_div (object_offset_in_bits,
14155                       uhwi_to_double_int (BITS_PER_UNIT), true,
14156                       TRUNC_DIV_EXPR);
14157   return double_int_to_shwi (object_offset_in_bytes);
14158 }
14159 \f
14160 /* The following routines define various Dwarf attributes and any data
14161    associated with them.  */
14162
14163 /* Add a location description attribute value to a DIE.
14164
14165    This emits location attributes suitable for whole variables and
14166    whole parameters.  Note that the location attributes for struct fields are
14167    generated by the routine `data_member_location_attribute' below.  */
14168
14169 static inline void
14170 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14171                              dw_loc_list_ref descr)
14172 {
14173   if (descr == 0)
14174     return;
14175   if (single_element_loc_list_p (descr))
14176     add_AT_loc (die, attr_kind, descr->expr);
14177   else
14178     add_AT_loc_list (die, attr_kind, descr);
14179 }
14180
14181 /* Add DW_AT_accessibility attribute to DIE if needed.  */
14182
14183 static void
14184 add_accessibility_attribute (dw_die_ref die, tree decl)
14185 {
14186   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
14187      children, otherwise the default is DW_ACCESS_public.  In DWARF2
14188      the default has always been DW_ACCESS_public.  */
14189   if (TREE_PROTECTED (decl))
14190     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
14191   else if (TREE_PRIVATE (decl))
14192     {
14193       if (dwarf_version == 2
14194           || die->die_parent == NULL
14195           || die->die_parent->die_tag != DW_TAG_class_type)
14196         add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
14197     }
14198   else if (dwarf_version > 2
14199            && die->die_parent
14200            && die->die_parent->die_tag == DW_TAG_class_type)
14201     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
14202 }
14203
14204 /* Attach the specialized form of location attribute used for data members of
14205    struct and union types.  In the special case of a FIELD_DECL node which
14206    represents a bit-field, the "offset" part of this special location
14207    descriptor must indicate the distance in bytes from the lowest-addressed
14208    byte of the containing struct or union type to the lowest-addressed byte of
14209    the "containing object" for the bit-field.  (See the `field_byte_offset'
14210    function above).
14211
14212    For any given bit-field, the "containing object" is a hypothetical object
14213    (of some integral or enum type) within which the given bit-field lives.  The
14214    type of this hypothetical "containing object" is always the same as the
14215    declared type of the individual bit-field itself (for GCC anyway... the
14216    DWARF spec doesn't actually mandate this).  Note that it is the size (in
14217    bytes) of the hypothetical "containing object" which will be given in the
14218    DW_AT_byte_size attribute for this bit-field.  (See the
14219    `byte_size_attribute' function below.)  It is also used when calculating the
14220    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
14221    function below.)  */
14222
14223 static void
14224 add_data_member_location_attribute (dw_die_ref die, tree decl)
14225 {
14226   HOST_WIDE_INT offset;
14227   dw_loc_descr_ref loc_descr = 0;
14228
14229   if (TREE_CODE (decl) == TREE_BINFO)
14230     {
14231       /* We're working on the TAG_inheritance for a base class.  */
14232       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
14233         {
14234           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
14235              aren't at a fixed offset from all (sub)objects of the same
14236              type.  We need to extract the appropriate offset from our
14237              vtable.  The following dwarf expression means
14238
14239                BaseAddr = ObAddr + *((*ObAddr) - Offset)
14240
14241              This is specific to the V3 ABI, of course.  */
14242
14243           dw_loc_descr_ref tmp;
14244
14245           /* Make a copy of the object address.  */
14246           tmp = new_loc_descr (DW_OP_dup, 0, 0);
14247           add_loc_descr (&loc_descr, tmp);
14248
14249           /* Extract the vtable address.  */
14250           tmp = new_loc_descr (DW_OP_deref, 0, 0);
14251           add_loc_descr (&loc_descr, tmp);
14252
14253           /* Calculate the address of the offset.  */
14254           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
14255           gcc_assert (offset < 0);
14256
14257           tmp = int_loc_descriptor (-offset);
14258           add_loc_descr (&loc_descr, tmp);
14259           tmp = new_loc_descr (DW_OP_minus, 0, 0);
14260           add_loc_descr (&loc_descr, tmp);
14261
14262           /* Extract the offset.  */
14263           tmp = new_loc_descr (DW_OP_deref, 0, 0);
14264           add_loc_descr (&loc_descr, tmp);
14265
14266           /* Add it to the object address.  */
14267           tmp = new_loc_descr (DW_OP_plus, 0, 0);
14268           add_loc_descr (&loc_descr, tmp);
14269         }
14270       else
14271         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
14272     }
14273   else
14274     offset = field_byte_offset (decl);
14275
14276   if (! loc_descr)
14277     {
14278       if (dwarf_version > 2)
14279         {
14280           /* Don't need to output a location expression, just the constant. */
14281           if (offset < 0)
14282             add_AT_int (die, DW_AT_data_member_location, offset);
14283           else
14284             add_AT_unsigned (die, DW_AT_data_member_location, offset);
14285           return;
14286         }
14287       else
14288         {
14289           enum dwarf_location_atom op;
14290
14291           /* The DWARF2 standard says that we should assume that the structure
14292              address is already on the stack, so we can specify a structure
14293              field address by using DW_OP_plus_uconst.  */
14294
14295 #ifdef MIPS_DEBUGGING_INFO
14296           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
14297              operator correctly.  It works only if we leave the offset on the
14298              stack.  */
14299           op = DW_OP_constu;
14300 #else
14301           op = DW_OP_plus_uconst;
14302 #endif
14303
14304           loc_descr = new_loc_descr (op, offset, 0);
14305         }
14306     }
14307
14308   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
14309 }
14310
14311 /* Writes integer values to dw_vec_const array.  */
14312
14313 static void
14314 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
14315 {
14316   while (size != 0)
14317     {
14318       *dest++ = val & 0xff;
14319       val >>= 8;
14320       --size;
14321     }
14322 }
14323
14324 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
14325
14326 static HOST_WIDE_INT
14327 extract_int (const unsigned char *src, unsigned int size)
14328 {
14329   HOST_WIDE_INT val = 0;
14330
14331   src += size;
14332   while (size != 0)
14333     {
14334       val <<= 8;
14335       val |= *--src & 0xff;
14336       --size;
14337     }
14338   return val;
14339 }
14340
14341 /* Writes double_int values to dw_vec_const array.  */
14342
14343 static void
14344 insert_double (double_int val, unsigned char *dest)
14345 {
14346   unsigned char *p0 = dest;
14347   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
14348
14349   if (WORDS_BIG_ENDIAN)
14350     {
14351       p0 = p1;
14352       p1 = dest;
14353     }
14354
14355   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
14356   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
14357 }
14358
14359 /* Writes floating point values to dw_vec_const array.  */
14360
14361 static void
14362 insert_float (const_rtx rtl, unsigned char *array)
14363 {
14364   REAL_VALUE_TYPE rv;
14365   long val[4];
14366   int i;
14367
14368   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
14369   real_to_target (val, &rv, GET_MODE (rtl));
14370
14371   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
14372   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
14373     {
14374       insert_int (val[i], 4, array);
14375       array += 4;
14376     }
14377 }
14378
14379 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
14380    does not have a "location" either in memory or in a register.  These
14381    things can arise in GNU C when a constant is passed as an actual parameter
14382    to an inlined function.  They can also arise in C++ where declared
14383    constants do not necessarily get memory "homes".  */
14384
14385 static bool
14386 add_const_value_attribute (dw_die_ref die, rtx rtl)
14387 {
14388   switch (GET_CODE (rtl))
14389     {
14390     case CONST_INT:
14391       {
14392         HOST_WIDE_INT val = INTVAL (rtl);
14393
14394         if (val < 0)
14395           add_AT_int (die, DW_AT_const_value, val);
14396         else
14397           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
14398       }
14399       return true;
14400
14401     case CONST_DOUBLE:
14402       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
14403          floating-point constant.  A CONST_DOUBLE is used whenever the
14404          constant requires more than one word in order to be adequately
14405          represented.  */
14406       {
14407         enum machine_mode mode = GET_MODE (rtl);
14408
14409         if (SCALAR_FLOAT_MODE_P (mode))
14410           {
14411             unsigned int length = GET_MODE_SIZE (mode);
14412             unsigned char *array = (unsigned char *) ggc_alloc_atomic (length);
14413
14414             insert_float (rtl, array);
14415             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
14416           }
14417         else
14418           add_AT_double (die, DW_AT_const_value,
14419                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
14420       }
14421       return true;
14422
14423     case CONST_VECTOR:
14424       {
14425         enum machine_mode mode = GET_MODE (rtl);
14426         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
14427         unsigned int length = CONST_VECTOR_NUNITS (rtl);
14428         unsigned char *array = (unsigned char *) ggc_alloc_atomic
14429           (length * elt_size);
14430         unsigned int i;
14431         unsigned char *p;
14432
14433         switch (GET_MODE_CLASS (mode))
14434           {
14435           case MODE_VECTOR_INT:
14436             for (i = 0, p = array; i < length; i++, p += elt_size)
14437               {
14438                 rtx elt = CONST_VECTOR_ELT (rtl, i);
14439                 double_int val = rtx_to_double_int (elt);
14440
14441                 if (elt_size <= sizeof (HOST_WIDE_INT))
14442                   insert_int (double_int_to_shwi (val), elt_size, p);
14443                 else
14444                   {
14445                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14446                     insert_double (val, p);
14447                   }
14448               }
14449             break;
14450
14451           case MODE_VECTOR_FLOAT:
14452             for (i = 0, p = array; i < length; i++, p += elt_size)
14453               {
14454                 rtx elt = CONST_VECTOR_ELT (rtl, i);
14455                 insert_float (elt, p);
14456               }
14457             break;
14458
14459           default:
14460             gcc_unreachable ();
14461           }
14462
14463         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
14464       }
14465       return true;
14466
14467     case CONST_STRING:
14468       if (dwarf_version >= 4 || !dwarf_strict)
14469         {
14470           dw_loc_descr_ref loc_result;
14471           resolve_one_addr (&rtl, NULL);
14472         rtl_addr:
14473           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14474           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14475           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14476           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14477           add_AT_loc (die, DW_AT_location, loc_result);
14478           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14479           return true;
14480         }
14481       return false;
14482
14483     case CONST:
14484       if (CONSTANT_P (XEXP (rtl, 0)))
14485         return add_const_value_attribute (die, XEXP (rtl, 0));
14486       /* FALLTHROUGH */
14487     case SYMBOL_REF:
14488       if (!const_ok_for_output (rtl))
14489         return false;
14490     case LABEL_REF:
14491       if (dwarf_version >= 4 || !dwarf_strict)
14492         goto rtl_addr;
14493       return false;
14494
14495     case PLUS:
14496       /* In cases where an inlined instance of an inline function is passed
14497          the address of an `auto' variable (which is local to the caller) we
14498          can get a situation where the DECL_RTL of the artificial local
14499          variable (for the inlining) which acts as a stand-in for the
14500          corresponding formal parameter (of the inline function) will look
14501          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
14502          exactly a compile-time constant expression, but it isn't the address
14503          of the (artificial) local variable either.  Rather, it represents the
14504          *value* which the artificial local variable always has during its
14505          lifetime.  We currently have no way to represent such quasi-constant
14506          values in Dwarf, so for now we just punt and generate nothing.  */
14507       return false;
14508
14509     case HIGH:
14510     case CONST_FIXED:
14511       return false;
14512
14513     case MEM:
14514       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
14515           && MEM_READONLY_P (rtl)
14516           && GET_MODE (rtl) == BLKmode)
14517         {
14518           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
14519           return true;
14520         }
14521       return false;
14522
14523     default:
14524       /* No other kinds of rtx should be possible here.  */
14525       gcc_unreachable ();
14526     }
14527   return false;
14528 }
14529
14530 /* Determine whether the evaluation of EXPR references any variables
14531    or functions which aren't otherwise used (and therefore may not be
14532    output).  */
14533 static tree
14534 reference_to_unused (tree * tp, int * walk_subtrees,
14535                      void * data ATTRIBUTE_UNUSED)
14536 {
14537   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
14538     *walk_subtrees = 0;
14539
14540   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
14541       && ! TREE_ASM_WRITTEN (*tp))
14542     return *tp;
14543   /* ???  The C++ FE emits debug information for using decls, so
14544      putting gcc_unreachable here falls over.  See PR31899.  For now
14545      be conservative.  */
14546   else if (!cgraph_global_info_ready
14547            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
14548     return *tp;
14549   else if (TREE_CODE (*tp) == VAR_DECL)
14550     {
14551       struct varpool_node *node = varpool_get_node (*tp);
14552       if (!node || !node->needed)
14553         return *tp;
14554     }
14555   else if (TREE_CODE (*tp) == FUNCTION_DECL
14556            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
14557     {
14558       /* The call graph machinery must have finished analyzing,
14559          optimizing and gimplifying the CU by now.
14560          So if *TP has no call graph node associated
14561          to it, it means *TP will not be emitted.  */
14562       if (!cgraph_get_node (*tp))
14563         return *tp;
14564     }
14565   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
14566     return *tp;
14567
14568   return NULL_TREE;
14569 }
14570
14571 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
14572    for use in a later add_const_value_attribute call.  */
14573
14574 static rtx
14575 rtl_for_decl_init (tree init, tree type)
14576 {
14577   rtx rtl = NULL_RTX;
14578
14579   STRIP_NOPS (init);
14580
14581   /* If a variable is initialized with a string constant without embedded
14582      zeros, build CONST_STRING.  */
14583   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
14584     {
14585       tree enttype = TREE_TYPE (type);
14586       tree domain = TYPE_DOMAIN (type);
14587       enum machine_mode mode = TYPE_MODE (enttype);
14588
14589       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
14590           && domain
14591           && integer_zerop (TYPE_MIN_VALUE (domain))
14592           && compare_tree_int (TYPE_MAX_VALUE (domain),
14593                                TREE_STRING_LENGTH (init) - 1) == 0
14594           && ((size_t) TREE_STRING_LENGTH (init)
14595               == strlen (TREE_STRING_POINTER (init)) + 1))
14596         {
14597           rtl = gen_rtx_CONST_STRING (VOIDmode,
14598                                       ggc_strdup (TREE_STRING_POINTER (init)));
14599           rtl = gen_rtx_MEM (BLKmode, rtl);
14600           MEM_READONLY_P (rtl) = 1;
14601         }
14602     }
14603   /* Other aggregates, and complex values, could be represented using
14604      CONCAT: FIXME!  */
14605   else if (AGGREGATE_TYPE_P (type)
14606            || (TREE_CODE (init) == VIEW_CONVERT_EXPR
14607                && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
14608            || TREE_CODE (type) == COMPLEX_TYPE)
14609     ;
14610   /* Vectors only work if their mode is supported by the target.
14611      FIXME: generic vectors ought to work too.  */
14612   else if (TREE_CODE (type) == VECTOR_TYPE
14613            && !VECTOR_MODE_P (TYPE_MODE (type)))
14614     ;
14615   /* If the initializer is something that we know will expand into an
14616      immediate RTL constant, expand it now.  We must be careful not to
14617      reference variables which won't be output.  */
14618   else if (initializer_constant_valid_p (init, type)
14619            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
14620     {
14621       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
14622          possible.  */
14623       if (TREE_CODE (type) == VECTOR_TYPE)
14624         switch (TREE_CODE (init))
14625           {
14626           case VECTOR_CST:
14627             break;
14628           case CONSTRUCTOR:
14629             if (TREE_CONSTANT (init))
14630               {
14631                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
14632                 bool constant_p = true;
14633                 tree value;
14634                 unsigned HOST_WIDE_INT ix;
14635
14636                 /* Even when ctor is constant, it might contain non-*_CST
14637                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
14638                    belong into VECTOR_CST nodes.  */
14639                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
14640                   if (!CONSTANT_CLASS_P (value))
14641                     {
14642                       constant_p = false;
14643                       break;
14644                     }
14645
14646                 if (constant_p)
14647                   {
14648                     init = build_vector_from_ctor (type, elts);
14649                     break;
14650                   }
14651               }
14652             /* FALLTHRU */
14653
14654           default:
14655             return NULL;
14656           }
14657
14658       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
14659
14660       /* If expand_expr returns a MEM, it wasn't immediate.  */
14661       gcc_assert (!rtl || !MEM_P (rtl));
14662     }
14663
14664   return rtl;
14665 }
14666
14667 /* Generate RTL for the variable DECL to represent its location.  */
14668
14669 static rtx
14670 rtl_for_decl_location (tree decl)
14671 {
14672   rtx rtl;
14673
14674   /* Here we have to decide where we are going to say the parameter "lives"
14675      (as far as the debugger is concerned).  We only have a couple of
14676      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
14677
14678      DECL_RTL normally indicates where the parameter lives during most of the
14679      activation of the function.  If optimization is enabled however, this
14680      could be either NULL or else a pseudo-reg.  Both of those cases indicate
14681      that the parameter doesn't really live anywhere (as far as the code
14682      generation parts of GCC are concerned) during most of the function's
14683      activation.  That will happen (for example) if the parameter is never
14684      referenced within the function.
14685
14686      We could just generate a location descriptor here for all non-NULL
14687      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
14688      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
14689      where DECL_RTL is NULL or is a pseudo-reg.
14690
14691      Note however that we can only get away with using DECL_INCOMING_RTL as
14692      a backup substitute for DECL_RTL in certain limited cases.  In cases
14693      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
14694      we can be sure that the parameter was passed using the same type as it is
14695      declared to have within the function, and that its DECL_INCOMING_RTL
14696      points us to a place where a value of that type is passed.
14697
14698      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
14699      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
14700      because in these cases DECL_INCOMING_RTL points us to a value of some
14701      type which is *different* from the type of the parameter itself.  Thus,
14702      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
14703      such cases, the debugger would end up (for example) trying to fetch a
14704      `float' from a place which actually contains the first part of a
14705      `double'.  That would lead to really incorrect and confusing
14706      output at debug-time.
14707
14708      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
14709      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
14710      are a couple of exceptions however.  On little-endian machines we can
14711      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
14712      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
14713      an integral type that is smaller than TREE_TYPE (decl). These cases arise
14714      when (on a little-endian machine) a non-prototyped function has a
14715      parameter declared to be of type `short' or `char'.  In such cases,
14716      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
14717      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
14718      passed `int' value.  If the debugger then uses that address to fetch
14719      a `short' or a `char' (on a little-endian machine) the result will be
14720      the correct data, so we allow for such exceptional cases below.
14721
14722      Note that our goal here is to describe the place where the given formal
14723      parameter lives during most of the function's activation (i.e. between the
14724      end of the prologue and the start of the epilogue).  We'll do that as best
14725      as we can. Note however that if the given formal parameter is modified
14726      sometime during the execution of the function, then a stack backtrace (at
14727      debug-time) will show the function as having been called with the *new*
14728      value rather than the value which was originally passed in.  This happens
14729      rarely enough that it is not a major problem, but it *is* a problem, and
14730      I'd like to fix it.
14731
14732      A future version of dwarf2out.c may generate two additional attributes for
14733      any given DW_TAG_formal_parameter DIE which will describe the "passed
14734      type" and the "passed location" for the given formal parameter in addition
14735      to the attributes we now generate to indicate the "declared type" and the
14736      "active location" for each parameter.  This additional set of attributes
14737      could be used by debuggers for stack backtraces. Separately, note that
14738      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
14739      This happens (for example) for inlined-instances of inline function formal
14740      parameters which are never referenced.  This really shouldn't be
14741      happening.  All PARM_DECL nodes should get valid non-NULL
14742      DECL_INCOMING_RTL values.  FIXME.  */
14743
14744   /* Use DECL_RTL as the "location" unless we find something better.  */
14745   rtl = DECL_RTL_IF_SET (decl);
14746
14747   /* When generating abstract instances, ignore everything except
14748      constants, symbols living in memory, and symbols living in
14749      fixed registers.  */
14750   if (! reload_completed)
14751     {
14752       if (rtl
14753           && (CONSTANT_P (rtl)
14754               || (MEM_P (rtl)
14755                   && CONSTANT_P (XEXP (rtl, 0)))
14756               || (REG_P (rtl)
14757                   && TREE_CODE (decl) == VAR_DECL
14758                   && TREE_STATIC (decl))))
14759         {
14760           rtl = targetm.delegitimize_address (rtl);
14761           return rtl;
14762         }
14763       rtl = NULL_RTX;
14764     }
14765   else if (TREE_CODE (decl) == PARM_DECL)
14766     {
14767       if (rtl == NULL_RTX
14768           || is_pseudo_reg (rtl)
14769           || (MEM_P (rtl)
14770               && is_pseudo_reg (XEXP (rtl, 0))
14771               && DECL_INCOMING_RTL (decl)
14772               && MEM_P (DECL_INCOMING_RTL (decl))
14773               && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
14774         {
14775           tree declared_type = TREE_TYPE (decl);
14776           tree passed_type = DECL_ARG_TYPE (decl);
14777           enum machine_mode dmode = TYPE_MODE (declared_type);
14778           enum machine_mode pmode = TYPE_MODE (passed_type);
14779
14780           /* This decl represents a formal parameter which was optimized out.
14781              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
14782              all cases where (rtl == NULL_RTX) just below.  */
14783           if (dmode == pmode)
14784             rtl = DECL_INCOMING_RTL (decl);
14785           else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
14786                    && SCALAR_INT_MODE_P (dmode)
14787                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
14788                    && DECL_INCOMING_RTL (decl))
14789             {
14790               rtx inc = DECL_INCOMING_RTL (decl);
14791               if (REG_P (inc))
14792                 rtl = inc;
14793               else if (MEM_P (inc))
14794                 {
14795                   if (BYTES_BIG_ENDIAN)
14796                     rtl = adjust_address_nv (inc, dmode,
14797                                              GET_MODE_SIZE (pmode)
14798                                              - GET_MODE_SIZE (dmode));
14799                   else
14800                     rtl = inc;
14801                 }
14802             }
14803         }
14804
14805       /* If the parm was passed in registers, but lives on the stack, then
14806          make a big endian correction if the mode of the type of the
14807          parameter is not the same as the mode of the rtl.  */
14808       /* ??? This is the same series of checks that are made in dbxout.c before
14809          we reach the big endian correction code there.  It isn't clear if all
14810          of these checks are necessary here, but keeping them all is the safe
14811          thing to do.  */
14812       else if (MEM_P (rtl)
14813                && XEXP (rtl, 0) != const0_rtx
14814                && ! CONSTANT_P (XEXP (rtl, 0))
14815                /* Not passed in memory.  */
14816                && !MEM_P (DECL_INCOMING_RTL (decl))
14817                /* Not passed by invisible reference.  */
14818                && (!REG_P (XEXP (rtl, 0))
14819                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
14820                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
14821 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
14822                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
14823 #endif
14824                      )
14825                /* Big endian correction check.  */
14826                && BYTES_BIG_ENDIAN
14827                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
14828                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
14829                    < UNITS_PER_WORD))
14830         {
14831           int offset = (UNITS_PER_WORD
14832                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
14833
14834           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14835                              plus_constant (XEXP (rtl, 0), offset));
14836         }
14837     }
14838   else if (TREE_CODE (decl) == VAR_DECL
14839            && rtl
14840            && MEM_P (rtl)
14841            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
14842            && BYTES_BIG_ENDIAN)
14843     {
14844       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
14845       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
14846
14847       /* If a variable is declared "register" yet is smaller than
14848          a register, then if we store the variable to memory, it
14849          looks like we're storing a register-sized value, when in
14850          fact we are not.  We need to adjust the offset of the
14851          storage location to reflect the actual value's bytes,
14852          else gdb will not be able to display it.  */
14853       if (rsize > dsize)
14854         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14855                            plus_constant (XEXP (rtl, 0), rsize-dsize));
14856     }
14857
14858   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
14859      and will have been substituted directly into all expressions that use it.
14860      C does not have such a concept, but C++ and other languages do.  */
14861   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
14862     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
14863
14864   if (rtl)
14865     rtl = targetm.delegitimize_address (rtl);
14866
14867   /* If we don't look past the constant pool, we risk emitting a
14868      reference to a constant pool entry that isn't referenced from
14869      code, and thus is not emitted.  */
14870   if (rtl)
14871     rtl = avoid_constant_pool_reference (rtl);
14872
14873   /* Try harder to get a rtl.  If this symbol ends up not being emitted
14874      in the current CU, resolve_addr will remove the expression referencing
14875      it.  */
14876   if (rtl == NULL_RTX
14877       && TREE_CODE (decl) == VAR_DECL
14878       && !DECL_EXTERNAL (decl)
14879       && TREE_STATIC (decl)
14880       && DECL_NAME (decl)
14881       && !DECL_HARD_REGISTER (decl)
14882       && DECL_MODE (decl) != VOIDmode)
14883     {
14884       rtl = make_decl_rtl_for_debug (decl);
14885       if (!MEM_P (rtl)
14886           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
14887           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
14888         rtl = NULL_RTX;
14889     }
14890
14891   return rtl;
14892 }
14893
14894 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
14895    returned.  If so, the decl for the COMMON block is returned, and the
14896    value is the offset into the common block for the symbol.  */
14897
14898 static tree
14899 fortran_common (tree decl, HOST_WIDE_INT *value)
14900 {
14901   tree val_expr, cvar;
14902   enum machine_mode mode;
14903   HOST_WIDE_INT bitsize, bitpos;
14904   tree offset;
14905   int volatilep = 0, unsignedp = 0;
14906
14907   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
14908      it does not have a value (the offset into the common area), or if it
14909      is thread local (as opposed to global) then it isn't common, and shouldn't
14910      be handled as such.  */
14911   if (TREE_CODE (decl) != VAR_DECL
14912       || !TREE_STATIC (decl)
14913       || !DECL_HAS_VALUE_EXPR_P (decl)
14914       || !is_fortran ())
14915     return NULL_TREE;
14916
14917   val_expr = DECL_VALUE_EXPR (decl);
14918   if (TREE_CODE (val_expr) != COMPONENT_REF)
14919     return NULL_TREE;
14920
14921   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
14922                               &mode, &unsignedp, &volatilep, true);
14923
14924   if (cvar == NULL_TREE
14925       || TREE_CODE (cvar) != VAR_DECL
14926       || DECL_ARTIFICIAL (cvar)
14927       || !TREE_PUBLIC (cvar))
14928     return NULL_TREE;
14929
14930   *value = 0;
14931   if (offset != NULL)
14932     {
14933       if (!host_integerp (offset, 0))
14934         return NULL_TREE;
14935       *value = tree_low_cst (offset, 0);
14936     }
14937   if (bitpos != 0)
14938     *value += bitpos / BITS_PER_UNIT;
14939
14940   return cvar;
14941 }
14942
14943 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
14944    data attribute for a variable or a parameter.  We generate the
14945    DW_AT_const_value attribute only in those cases where the given variable
14946    or parameter does not have a true "location" either in memory or in a
14947    register.  This can happen (for example) when a constant is passed as an
14948    actual argument in a call to an inline function.  (It's possible that
14949    these things can crop up in other ways also.)  Note that one type of
14950    constant value which can be passed into an inlined function is a constant
14951    pointer.  This can happen for example if an actual argument in an inlined
14952    function call evaluates to a compile-time constant address.
14953
14954    CACHE_P is true if it is worth caching the location list for DECL,
14955    so that future calls can reuse it rather than regenerate it from scratch.
14956    This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
14957    since we will need to refer to them each time the function is inlined.  */
14958
14959 static bool
14960 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
14961                                        enum dwarf_attribute attr)
14962 {
14963   rtx rtl;
14964   dw_loc_list_ref list;
14965   var_loc_list *loc_list;
14966   cached_dw_loc_list *cache;
14967   void **slot;
14968
14969   if (TREE_CODE (decl) == ERROR_MARK)
14970     return false;
14971
14972   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
14973               || TREE_CODE (decl) == RESULT_DECL);
14974
14975   /* Try to get some constant RTL for this decl, and use that as the value of
14976      the location.  */
14977
14978   rtl = rtl_for_decl_location (decl);
14979   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14980       && add_const_value_attribute (die, rtl))
14981     return true;
14982
14983   /* See if we have single element location list that is equivalent to
14984      a constant value.  That way we are better to use add_const_value_attribute
14985      rather than expanding constant value equivalent.  */
14986   loc_list = lookup_decl_loc (decl);
14987   if (loc_list
14988       && loc_list->first
14989       && loc_list->first->next == NULL
14990       && NOTE_P (loc_list->first->loc)
14991       && NOTE_VAR_LOCATION (loc_list->first->loc)
14992       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
14993     {
14994       struct var_loc_node *node;
14995
14996       node = loc_list->first;
14997       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
14998       if (GET_CODE (rtl) == EXPR_LIST)
14999         rtl = XEXP (rtl, 0);
15000       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15001           && add_const_value_attribute (die, rtl))
15002          return true;
15003     }
15004   /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
15005      list several times.  See if we've already cached the contents.  */
15006   list = NULL;
15007   if (loc_list == NULL || cached_dw_loc_list_table == NULL)
15008     cache_p = false;
15009   if (cache_p)
15010     {
15011       cache = (cached_dw_loc_list *)
15012         htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
15013       if (cache)
15014         list = cache->loc_list;
15015     }
15016   if (list == NULL)
15017     {
15018       list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15019       /* It is usually worth caching this result if the decl is from
15020          BLOCK_NONLOCALIZED_VARS and if the list has at least two elements.  */
15021       if (cache_p && list && list->dw_loc_next)
15022         {
15023           slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
15024                                            DECL_UID (decl), INSERT);
15025           cache = ggc_alloc_cleared_cached_dw_loc_list ();
15026           cache->decl_id = DECL_UID (decl);
15027           cache->loc_list = list;
15028           *slot = cache;
15029         }
15030     }
15031   if (list)
15032     {
15033       add_AT_location_description (die, attr, list);
15034       return true;
15035     }
15036   /* None of that worked, so it must not really have a location;
15037      try adding a constant value attribute from the DECL_INITIAL.  */
15038   return tree_add_const_value_attribute_for_decl (die, decl);
15039 }
15040
15041 /* Add VARIABLE and DIE into deferred locations list.  */
15042
15043 static void
15044 defer_location (tree variable, dw_die_ref die)
15045 {
15046   deferred_locations entry;
15047   entry.variable = variable;
15048   entry.die = die;
15049   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15050 }
15051
15052 /* Helper function for tree_add_const_value_attribute.  Natively encode
15053    initializer INIT into an array.  Return true if successful.  */
15054
15055 static bool
15056 native_encode_initializer (tree init, unsigned char *array, int size)
15057 {
15058   tree type;
15059
15060   if (init == NULL_TREE)
15061     return false;
15062
15063   STRIP_NOPS (init);
15064   switch (TREE_CODE (init))
15065     {
15066     case STRING_CST:
15067       type = TREE_TYPE (init);
15068       if (TREE_CODE (type) == ARRAY_TYPE)
15069         {
15070           tree enttype = TREE_TYPE (type);
15071           enum machine_mode mode = TYPE_MODE (enttype);
15072
15073           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15074             return false;
15075           if (int_size_in_bytes (type) != size)
15076             return false;
15077           if (size > TREE_STRING_LENGTH (init))
15078             {
15079               memcpy (array, TREE_STRING_POINTER (init),
15080                       TREE_STRING_LENGTH (init));
15081               memset (array + TREE_STRING_LENGTH (init),
15082                       '\0', size - TREE_STRING_LENGTH (init));
15083             }
15084           else
15085             memcpy (array, TREE_STRING_POINTER (init), size);
15086           return true;
15087         }
15088       return false;
15089     case CONSTRUCTOR:
15090       type = TREE_TYPE (init);
15091       if (int_size_in_bytes (type) != size)
15092         return false;
15093       if (TREE_CODE (type) == ARRAY_TYPE)
15094         {
15095           HOST_WIDE_INT min_index;
15096           unsigned HOST_WIDE_INT cnt;
15097           int curpos = 0, fieldsize;
15098           constructor_elt *ce;
15099
15100           if (TYPE_DOMAIN (type) == NULL_TREE
15101               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15102             return false;
15103
15104           fieldsize = int_size_in_bytes (TREE_TYPE (type));
15105           if (fieldsize <= 0)
15106             return false;
15107
15108           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15109           memset (array, '\0', size);
15110           FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15111             {
15112               tree val = ce->value;
15113               tree index = ce->index;
15114               int pos = curpos;
15115               if (index && TREE_CODE (index) == RANGE_EXPR)
15116                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15117                       * fieldsize;
15118               else if (index)
15119                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15120
15121               if (val)
15122                 {
15123                   STRIP_NOPS (val);
15124                   if (!native_encode_initializer (val, array + pos, fieldsize))
15125                     return false;
15126                 }
15127               curpos = pos + fieldsize;
15128               if (index && TREE_CODE (index) == RANGE_EXPR)
15129                 {
15130                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15131                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
15132                   while (count-- > 0)
15133                     {
15134                       if (val)
15135                         memcpy (array + curpos, array + pos, fieldsize);
15136                       curpos += fieldsize;
15137                     }
15138                 }
15139               gcc_assert (curpos <= size);
15140             }
15141           return true;
15142         }
15143       else if (TREE_CODE (type) == RECORD_TYPE
15144                || TREE_CODE (type) == UNION_TYPE)
15145         {
15146           tree field = NULL_TREE;
15147           unsigned HOST_WIDE_INT cnt;
15148           constructor_elt *ce;
15149
15150           if (int_size_in_bytes (type) != size)
15151             return false;
15152
15153           if (TREE_CODE (type) == RECORD_TYPE)
15154             field = TYPE_FIELDS (type);
15155
15156           FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15157             {
15158               tree val = ce->value;
15159               int pos, fieldsize;
15160
15161               if (ce->index != 0)
15162                 field = ce->index;
15163
15164               if (val)
15165                 STRIP_NOPS (val);
15166
15167               if (field == NULL_TREE || DECL_BIT_FIELD (field))
15168                 return false;
15169
15170               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15171                   && TYPE_DOMAIN (TREE_TYPE (field))
15172                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15173                 return false;
15174               else if (DECL_SIZE_UNIT (field) == NULL_TREE
15175                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
15176                 return false;
15177               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15178               pos = int_byte_position (field);
15179               gcc_assert (pos + fieldsize <= size);
15180               if (val
15181                   && !native_encode_initializer (val, array + pos, fieldsize))
15182                 return false;
15183             }
15184           return true;
15185         }
15186       return false;
15187     case VIEW_CONVERT_EXPR:
15188     case NON_LVALUE_EXPR:
15189       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15190     default:
15191       return native_encode_expr (init, array, size) == size;
15192     }
15193 }
15194
15195 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15196    attribute is the const value T.  */
15197
15198 static bool
15199 tree_add_const_value_attribute (dw_die_ref die, tree t)
15200 {
15201   tree init;
15202   tree type = TREE_TYPE (t);
15203   rtx rtl;
15204
15205   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15206     return false;
15207
15208   init = t;
15209   gcc_assert (!DECL_P (init));
15210
15211   rtl = rtl_for_decl_init (init, type);
15212   if (rtl)
15213     return add_const_value_attribute (die, rtl);
15214   /* If the host and target are sane, try harder.  */
15215   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15216            && initializer_constant_valid_p (init, type))
15217     {
15218       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15219       if (size > 0 && (int) size == size)
15220         {
15221           unsigned char *array = (unsigned char *)
15222             ggc_alloc_cleared_atomic (size);
15223
15224           if (native_encode_initializer (init, array, size))
15225             {
15226               add_AT_vec (die, DW_AT_const_value, size, 1, array);
15227               return true;
15228             }
15229         }
15230     }
15231   return false;
15232 }
15233
15234 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
15235    attribute is the const value of T, where T is an integral constant
15236    variable with static storage duration
15237    (so it can't be a PARM_DECL or a RESULT_DECL).  */
15238
15239 static bool
15240 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
15241 {
15242
15243   if (!decl
15244       || (TREE_CODE (decl) != VAR_DECL
15245           && TREE_CODE (decl) != CONST_DECL)
15246       || (TREE_CODE (decl) == VAR_DECL
15247           && !TREE_STATIC (decl)))
15248     return false;
15249
15250     if (TREE_READONLY (decl)
15251         && ! TREE_THIS_VOLATILE (decl)
15252         && DECL_INITIAL (decl))
15253       /* OK */;
15254     else
15255       return false;
15256
15257   /* Don't add DW_AT_const_value if abstract origin already has one.  */
15258   if (get_AT (var_die, DW_AT_const_value))
15259     return false;
15260
15261   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
15262 }
15263
15264 /* Convert the CFI instructions for the current function into a
15265    location list.  This is used for DW_AT_frame_base when we targeting
15266    a dwarf2 consumer that does not support the dwarf3
15267    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
15268    expressions.  */
15269
15270 static dw_loc_list_ref
15271 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
15272 {
15273   int ix;
15274   dw_fde_ref fde;
15275   dw_loc_list_ref list, *list_tail;
15276   dw_cfi_ref cfi;
15277   dw_cfa_location last_cfa, next_cfa;
15278   const char *start_label, *last_label, *section;
15279   dw_cfa_location remember;
15280
15281   fde = cfun->fde;
15282   gcc_assert (fde != NULL);
15283
15284   section = secname_for_decl (current_function_decl);
15285   list_tail = &list;
15286   list = NULL;
15287
15288   memset (&next_cfa, 0, sizeof (next_cfa));
15289   next_cfa.reg = INVALID_REGNUM;
15290   remember = next_cfa;
15291
15292   start_label = fde->dw_fde_begin;
15293
15294   /* ??? Bald assumption that the CIE opcode list does not contain
15295      advance opcodes.  */
15296   FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, ix, cfi)
15297     lookup_cfa_1 (cfi, &next_cfa, &remember);
15298
15299   last_cfa = next_cfa;
15300   last_label = start_label;
15301
15302   if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
15303     {
15304       /* If the first partition contained no CFI adjustments, the
15305          CIE opcodes apply to the whole first partition.  */
15306       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15307                                  fde->dw_fde_begin, fde->dw_fde_end, section);
15308       list_tail =&(*list_tail)->dw_loc_next;
15309       start_label = last_label = fde->dw_fde_second_begin;
15310     }
15311
15312   FOR_EACH_VEC_ELT (dw_cfi_ref, fde->dw_fde_cfi, ix, cfi)
15313     {
15314       switch (cfi->dw_cfi_opc)
15315         {
15316         case DW_CFA_set_loc:
15317         case DW_CFA_advance_loc1:
15318         case DW_CFA_advance_loc2:
15319         case DW_CFA_advance_loc4:
15320           if (!cfa_equal_p (&last_cfa, &next_cfa))
15321             {
15322               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15323                                          start_label, last_label, section);
15324
15325               list_tail = &(*list_tail)->dw_loc_next;
15326               last_cfa = next_cfa;
15327               start_label = last_label;
15328             }
15329           last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
15330           break;
15331
15332         case DW_CFA_advance_loc:
15333           /* The encoding is complex enough that we should never emit this.  */
15334           gcc_unreachable ();
15335
15336         default:
15337           lookup_cfa_1 (cfi, &next_cfa, &remember);
15338           break;
15339         }
15340       if (ix + 1 == fde->dw_fde_switch_cfi_index)
15341         {
15342           if (!cfa_equal_p (&last_cfa, &next_cfa))
15343             {
15344               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15345                                          start_label, last_label, section);
15346
15347               list_tail = &(*list_tail)->dw_loc_next;
15348               last_cfa = next_cfa;
15349               start_label = last_label;
15350             }
15351           *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15352                                      start_label, fde->dw_fde_end, section);
15353           list_tail = &(*list_tail)->dw_loc_next;
15354           start_label = last_label = fde->dw_fde_second_begin;
15355         }
15356     }
15357
15358   if (!cfa_equal_p (&last_cfa, &next_cfa))
15359     {
15360       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15361                                  start_label, last_label, section);
15362       list_tail = &(*list_tail)->dw_loc_next;
15363       start_label = last_label;
15364     }
15365
15366   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
15367                              start_label,
15368                              fde->dw_fde_second_begin
15369                              ? fde->dw_fde_second_end : fde->dw_fde_end,
15370                              section);
15371
15372   if (list && list->dw_loc_next)
15373     gen_llsym (list);
15374
15375   return list;
15376 }
15377
15378 /* Compute a displacement from the "steady-state frame pointer" to the
15379    frame base (often the same as the CFA), and store it in
15380    frame_pointer_fb_offset.  OFFSET is added to the displacement
15381    before the latter is negated.  */
15382
15383 static void
15384 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
15385 {
15386   rtx reg, elim;
15387
15388 #ifdef FRAME_POINTER_CFA_OFFSET
15389   reg = frame_pointer_rtx;
15390   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
15391 #else
15392   reg = arg_pointer_rtx;
15393   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
15394 #endif
15395
15396   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
15397   if (GET_CODE (elim) == PLUS)
15398     {
15399       offset += INTVAL (XEXP (elim, 1));
15400       elim = XEXP (elim, 0);
15401     }
15402
15403   frame_pointer_fb_offset = -offset;
15404
15405   /* ??? AVR doesn't set up valid eliminations when there is no stack frame
15406      in which to eliminate.  This is because it's stack pointer isn't 
15407      directly accessible as a register within the ISA.  To work around
15408      this, assume that while we cannot provide a proper value for
15409      frame_pointer_fb_offset, we won't need one either.  */
15410   frame_pointer_fb_offset_valid
15411     = ((SUPPORTS_STACK_ALIGNMENT
15412         && (elim == hard_frame_pointer_rtx
15413             || elim == stack_pointer_rtx))
15414        || elim == (frame_pointer_needed
15415                    ? hard_frame_pointer_rtx
15416                    : stack_pointer_rtx));
15417 }
15418
15419 /* Generate a DW_AT_name attribute given some string value to be included as
15420    the value of the attribute.  */
15421
15422 static void
15423 add_name_attribute (dw_die_ref die, const char *name_string)
15424 {
15425   if (name_string != NULL && *name_string != 0)
15426     {
15427       if (demangle_name_func)
15428         name_string = (*demangle_name_func) (name_string);
15429
15430       add_AT_string (die, DW_AT_name, name_string);
15431     }
15432 }
15433
15434 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
15435    DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
15436    of TYPE accordingly.
15437
15438    ??? This is a temporary measure until after we're able to generate
15439    regular DWARF for the complex Ada type system.  */
15440
15441 static void 
15442 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
15443                                      dw_die_ref context_die)
15444 {
15445   tree dtype;
15446   dw_die_ref dtype_die;
15447
15448   if (!lang_hooks.types.descriptive_type)
15449     return;
15450
15451   dtype = lang_hooks.types.descriptive_type (type);
15452   if (!dtype)
15453     return;
15454
15455   dtype_die = lookup_type_die (dtype);
15456   if (!dtype_die)
15457     {
15458       /* The descriptive type indirectly references TYPE if this is also the
15459          case for TYPE itself.  Do not deal with the circularity here.  */
15460       TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1;
15461       gen_type_die (dtype, context_die);
15462       TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 0;
15463       dtype_die = lookup_type_die (dtype);
15464       gcc_assert (dtype_die);
15465     }
15466
15467   add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
15468 }
15469
15470 /* Generate a DW_AT_comp_dir attribute for DIE.  */
15471
15472 static void
15473 add_comp_dir_attribute (dw_die_ref die)
15474 {
15475   const char *wd = get_src_pwd ();
15476   char *wd1;
15477
15478   if (wd == NULL)
15479     return;
15480
15481   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
15482     {
15483       int wdlen;
15484
15485       wdlen = strlen (wd);
15486       wd1 = (char *) ggc_alloc_atomic (wdlen + 2);
15487       strcpy (wd1, wd);
15488       wd1 [wdlen] = DIR_SEPARATOR;
15489       wd1 [wdlen + 1] = 0;
15490       wd = wd1;
15491     }
15492
15493     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
15494 }
15495
15496 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
15497    default.  */
15498
15499 static int
15500 lower_bound_default (void)
15501 {
15502   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
15503     {
15504     case DW_LANG_C:
15505     case DW_LANG_C89:
15506     case DW_LANG_C99:
15507     case DW_LANG_C_plus_plus:
15508     case DW_LANG_ObjC:
15509     case DW_LANG_ObjC_plus_plus:
15510     case DW_LANG_Java:
15511       return 0;
15512     case DW_LANG_Fortran77:
15513     case DW_LANG_Fortran90:
15514     case DW_LANG_Fortran95:
15515       return 1;
15516     case DW_LANG_UPC:
15517     case DW_LANG_D:
15518     case DW_LANG_Python:
15519       return dwarf_version >= 4 ? 0 : -1;
15520     case DW_LANG_Ada95:
15521     case DW_LANG_Ada83:
15522     case DW_LANG_Cobol74:
15523     case DW_LANG_Cobol85:
15524     case DW_LANG_Pascal83:
15525     case DW_LANG_Modula2:
15526     case DW_LANG_PLI:
15527       return dwarf_version >= 4 ? 1 : -1;
15528     default:
15529       return -1;
15530     }
15531 }
15532
15533 /* Given a tree node describing an array bound (either lower or upper) output
15534    a representation for that bound.  */
15535
15536 static void
15537 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
15538 {
15539   switch (TREE_CODE (bound))
15540     {
15541     case ERROR_MARK:
15542       return;
15543
15544     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
15545     case INTEGER_CST:
15546       {
15547         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
15548         int dflt;
15549
15550         /* Use the default if possible.  */
15551         if (bound_attr == DW_AT_lower_bound
15552             && host_integerp (bound, 0)
15553             && (dflt = lower_bound_default ()) != -1
15554             && tree_low_cst (bound, 0) == dflt)
15555           ;
15556
15557         /* Otherwise represent the bound as an unsigned value with the
15558            precision of its type.  The precision and signedness of the
15559            type will be necessary to re-interpret it unambiguously.  */
15560         else if (prec < HOST_BITS_PER_WIDE_INT)
15561           {
15562             unsigned HOST_WIDE_INT mask
15563               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
15564             add_AT_unsigned (subrange_die, bound_attr,
15565                              TREE_INT_CST_LOW (bound) & mask);
15566           }
15567         else if (prec == HOST_BITS_PER_WIDE_INT
15568                  || TREE_INT_CST_HIGH (bound) == 0)
15569           add_AT_unsigned (subrange_die, bound_attr,
15570                            TREE_INT_CST_LOW (bound));
15571         else
15572           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
15573                          TREE_INT_CST_LOW (bound));
15574       }
15575       break;
15576
15577     CASE_CONVERT:
15578     case VIEW_CONVERT_EXPR:
15579       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
15580       break;
15581
15582     case SAVE_EXPR:
15583       break;
15584
15585     case VAR_DECL:
15586     case PARM_DECL:
15587     case RESULT_DECL:
15588       {
15589         dw_die_ref decl_die = lookup_decl_die (bound);
15590
15591         /* ??? Can this happen, or should the variable have been bound
15592            first?  Probably it can, since I imagine that we try to create
15593            the types of parameters in the order in which they exist in
15594            the list, and won't have created a forward reference to a
15595            later parameter.  */
15596         if (decl_die != NULL)
15597           {
15598             add_AT_die_ref (subrange_die, bound_attr, decl_die);
15599             break;
15600           }
15601       }
15602       /* FALLTHRU */
15603
15604     default:
15605       {
15606         /* Otherwise try to create a stack operation procedure to
15607            evaluate the value of the array bound.  */
15608
15609         dw_die_ref ctx, decl_die;
15610         dw_loc_list_ref list;
15611
15612         list = loc_list_from_tree (bound, 2);
15613         if (list == NULL || single_element_loc_list_p (list))
15614           {
15615             /* If DW_AT_*bound is not a reference nor constant, it is
15616                a DWARF expression rather than location description.
15617                For that loc_list_from_tree (bound, 0) is needed.
15618                If that fails to give a single element list,
15619                fall back to outputting this as a reference anyway.  */
15620             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
15621             if (list2 && single_element_loc_list_p (list2))
15622               {
15623                 add_AT_loc (subrange_die, bound_attr, list2->expr);
15624                 break;
15625               }
15626           }
15627         if (list == NULL)
15628           break;
15629
15630         if (current_function_decl == 0)
15631           ctx = comp_unit_die ();
15632         else
15633           ctx = lookup_decl_die (current_function_decl);
15634
15635         decl_die = new_die (DW_TAG_variable, ctx, bound);
15636         add_AT_flag (decl_die, DW_AT_artificial, 1);
15637         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
15638         add_AT_location_description (decl_die, DW_AT_location, list);
15639         add_AT_die_ref (subrange_die, bound_attr, decl_die);
15640         break;
15641       }
15642     }
15643 }
15644
15645 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
15646    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
15647    Note that the block of subscript information for an array type also
15648    includes information about the element type of the given array type.  */
15649
15650 static void
15651 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
15652 {
15653   unsigned dimension_number;
15654   tree lower, upper;
15655   dw_die_ref subrange_die;
15656
15657   for (dimension_number = 0;
15658        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
15659        type = TREE_TYPE (type), dimension_number++)
15660     {
15661       tree domain = TYPE_DOMAIN (type);
15662
15663       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
15664         break;
15665
15666       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
15667          and (in GNU C only) variable bounds.  Handle all three forms
15668          here.  */
15669       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
15670       if (domain)
15671         {
15672           /* We have an array type with specified bounds.  */
15673           lower = TYPE_MIN_VALUE (domain);
15674           upper = TYPE_MAX_VALUE (domain);
15675
15676           /* Define the index type.  */
15677           if (TREE_TYPE (domain))
15678             {
15679               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
15680                  TREE_TYPE field.  We can't emit debug info for this
15681                  because it is an unnamed integral type.  */
15682               if (TREE_CODE (domain) == INTEGER_TYPE
15683                   && TYPE_NAME (domain) == NULL_TREE
15684                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
15685                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
15686                 ;
15687               else
15688                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
15689                                     type_die);
15690             }
15691
15692           /* ??? If upper is NULL, the array has unspecified length,
15693              but it does have a lower bound.  This happens with Fortran
15694                dimension arr(N:*)
15695              Since the debugger is definitely going to need to know N
15696              to produce useful results, go ahead and output the lower
15697              bound solo, and hope the debugger can cope.  */
15698
15699           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
15700           if (upper)
15701             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
15702         }
15703
15704       /* Otherwise we have an array type with an unspecified length.  The
15705          DWARF-2 spec does not say how to handle this; let's just leave out the
15706          bounds.  */
15707     }
15708 }
15709
15710 static void
15711 add_byte_size_attribute (dw_die_ref die, tree tree_node)
15712 {
15713   unsigned size;
15714
15715   switch (TREE_CODE (tree_node))
15716     {
15717     case ERROR_MARK:
15718       size = 0;
15719       break;
15720     case ENUMERAL_TYPE:
15721     case RECORD_TYPE:
15722     case UNION_TYPE:
15723     case QUAL_UNION_TYPE:
15724       size = int_size_in_bytes (tree_node);
15725       break;
15726     case FIELD_DECL:
15727       /* For a data member of a struct or union, the DW_AT_byte_size is
15728          generally given as the number of bytes normally allocated for an
15729          object of the *declared* type of the member itself.  This is true
15730          even for bit-fields.  */
15731       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
15732       break;
15733     default:
15734       gcc_unreachable ();
15735     }
15736
15737   /* Note that `size' might be -1 when we get to this point.  If it is, that
15738      indicates that the byte size of the entity in question is variable.  We
15739      have no good way of expressing this fact in Dwarf at the present time,
15740      so just let the -1 pass on through.  */
15741   add_AT_unsigned (die, DW_AT_byte_size, size);
15742 }
15743
15744 /* For a FIELD_DECL node which represents a bit-field, output an attribute
15745    which specifies the distance in bits from the highest order bit of the
15746    "containing object" for the bit-field to the highest order bit of the
15747    bit-field itself.
15748
15749    For any given bit-field, the "containing object" is a hypothetical object
15750    (of some integral or enum type) within which the given bit-field lives.  The
15751    type of this hypothetical "containing object" is always the same as the
15752    declared type of the individual bit-field itself.  The determination of the
15753    exact location of the "containing object" for a bit-field is rather
15754    complicated.  It's handled by the `field_byte_offset' function (above).
15755
15756    Note that it is the size (in bytes) of the hypothetical "containing object"
15757    which will be given in the DW_AT_byte_size attribute for this bit-field.
15758    (See `byte_size_attribute' above).  */
15759
15760 static inline void
15761 add_bit_offset_attribute (dw_die_ref die, tree decl)
15762 {
15763   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
15764   tree type = DECL_BIT_FIELD_TYPE (decl);
15765   HOST_WIDE_INT bitpos_int;
15766   HOST_WIDE_INT highest_order_object_bit_offset;
15767   HOST_WIDE_INT highest_order_field_bit_offset;
15768   HOST_WIDE_INT bit_offset;
15769
15770   /* Must be a field and a bit field.  */
15771   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
15772
15773   /* We can't yet handle bit-fields whose offsets are variable, so if we
15774      encounter such things, just return without generating any attribute
15775      whatsoever.  Likewise for variable or too large size.  */
15776   if (! host_integerp (bit_position (decl), 0)
15777       || ! host_integerp (DECL_SIZE (decl), 1))
15778     return;
15779
15780   bitpos_int = int_bit_position (decl);
15781
15782   /* Note that the bit offset is always the distance (in bits) from the
15783      highest-order bit of the "containing object" to the highest-order bit of
15784      the bit-field itself.  Since the "high-order end" of any object or field
15785      is different on big-endian and little-endian machines, the computation
15786      below must take account of these differences.  */
15787   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
15788   highest_order_field_bit_offset = bitpos_int;
15789
15790   if (! BYTES_BIG_ENDIAN)
15791     {
15792       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
15793       highest_order_object_bit_offset += simple_type_size_in_bits (type);
15794     }
15795
15796   bit_offset
15797     = (! BYTES_BIG_ENDIAN
15798        ? highest_order_object_bit_offset - highest_order_field_bit_offset
15799        : highest_order_field_bit_offset - highest_order_object_bit_offset);
15800
15801   if (bit_offset < 0)
15802     add_AT_int (die, DW_AT_bit_offset, bit_offset);
15803   else
15804     add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
15805 }
15806
15807 /* For a FIELD_DECL node which represents a bit field, output an attribute
15808    which specifies the length in bits of the given field.  */
15809
15810 static inline void
15811 add_bit_size_attribute (dw_die_ref die, tree decl)
15812 {
15813   /* Must be a field and a bit field.  */
15814   gcc_assert (TREE_CODE (decl) == FIELD_DECL
15815               && DECL_BIT_FIELD_TYPE (decl));
15816
15817   if (host_integerp (DECL_SIZE (decl), 1))
15818     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
15819 }
15820
15821 /* If the compiled language is ANSI C, then add a 'prototyped'
15822    attribute, if arg types are given for the parameters of a function.  */
15823
15824 static inline void
15825 add_prototyped_attribute (dw_die_ref die, tree func_type)
15826 {
15827   if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
15828       && prototype_p (func_type))
15829     add_AT_flag (die, DW_AT_prototyped, 1);
15830 }
15831
15832 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
15833    by looking in either the type declaration or object declaration
15834    equate table.  */
15835
15836 static inline dw_die_ref
15837 add_abstract_origin_attribute (dw_die_ref die, tree origin)
15838 {
15839   dw_die_ref origin_die = NULL;
15840
15841   if (TREE_CODE (origin) != FUNCTION_DECL)
15842     {
15843       /* We may have gotten separated from the block for the inlined
15844          function, if we're in an exception handler or some such; make
15845          sure that the abstract function has been written out.
15846
15847          Doing this for nested functions is wrong, however; functions are
15848          distinct units, and our context might not even be inline.  */
15849       tree fn = origin;
15850
15851       if (TYPE_P (fn))
15852         fn = TYPE_STUB_DECL (fn);
15853
15854       fn = decl_function_context (fn);
15855       if (fn)
15856         dwarf2out_abstract_function (fn);
15857     }
15858
15859   if (DECL_P (origin))
15860     origin_die = lookup_decl_die (origin);
15861   else if (TYPE_P (origin))
15862     origin_die = lookup_type_die (origin);
15863
15864   /* XXX: Functions that are never lowered don't always have correct block
15865      trees (in the case of java, they simply have no block tree, in some other
15866      languages).  For these functions, there is nothing we can really do to
15867      output correct debug info for inlined functions in all cases.  Rather
15868      than die, we'll just produce deficient debug info now, in that we will
15869      have variables without a proper abstract origin.  In the future, when all
15870      functions are lowered, we should re-add a gcc_assert (origin_die)
15871      here.  */
15872
15873   if (origin_die)
15874     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
15875   return origin_die;
15876 }
15877
15878 /* We do not currently support the pure_virtual attribute.  */
15879
15880 static inline void
15881 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
15882 {
15883   if (DECL_VINDEX (func_decl))
15884     {
15885       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
15886
15887       if (host_integerp (DECL_VINDEX (func_decl), 0))
15888         add_AT_loc (die, DW_AT_vtable_elem_location,
15889                     new_loc_descr (DW_OP_constu,
15890                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
15891                                    0));
15892
15893       /* GNU extension: Record what type this method came from originally.  */
15894       if (debug_info_level > DINFO_LEVEL_TERSE
15895           && DECL_CONTEXT (func_decl))
15896         add_AT_die_ref (die, DW_AT_containing_type,
15897                         lookup_type_die (DECL_CONTEXT (func_decl)));
15898     }
15899 }
15900 \f
15901 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
15902    given decl.  This used to be a vendor extension until after DWARF 4
15903    standardized it.  */
15904
15905 static void
15906 add_linkage_attr (dw_die_ref die, tree decl)
15907 {
15908   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
15909
15910   /* Mimic what assemble_name_raw does with a leading '*'.  */
15911   if (name[0] == '*')
15912     name = &name[1];
15913
15914   if (dwarf_version >= 4)
15915     add_AT_string (die, DW_AT_linkage_name, name);
15916   else
15917     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
15918 }
15919
15920 /* Add source coordinate attributes for the given decl.  */
15921
15922 static void
15923 add_src_coords_attributes (dw_die_ref die, tree decl)
15924 {
15925   expanded_location s;
15926
15927   if (DECL_SOURCE_LOCATION (decl) == UNKNOWN_LOCATION)
15928     return;
15929   s = expand_location (DECL_SOURCE_LOCATION (decl));
15930   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
15931   add_AT_unsigned (die, DW_AT_decl_line, s.line);
15932 }
15933
15934 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
15935
15936 static void
15937 add_linkage_name (dw_die_ref die, tree decl)
15938 {
15939   if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
15940        && TREE_PUBLIC (decl)
15941        && !DECL_ABSTRACT (decl)
15942        && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
15943        && die->die_tag != DW_TAG_member)
15944     {
15945       /* Defer until we have an assembler name set.  */
15946       if (!DECL_ASSEMBLER_NAME_SET_P (decl))
15947         {
15948           limbo_die_node *asm_name;
15949
15950           asm_name = ggc_alloc_cleared_limbo_die_node ();
15951           asm_name->die = die;
15952           asm_name->created_for = decl;
15953           asm_name->next = deferred_asm_name;
15954           deferred_asm_name = asm_name;
15955         }
15956       else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
15957         add_linkage_attr (die, decl);
15958     }
15959 }
15960
15961 /* Add a DW_AT_name attribute and source coordinate attribute for the
15962    given decl, but only if it actually has a name.  */
15963
15964 static void
15965 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
15966 {
15967   tree decl_name;
15968
15969   decl_name = DECL_NAME (decl);
15970   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
15971     {
15972       const char *name = dwarf2_name (decl, 0);
15973       if (name)
15974         add_name_attribute (die, name);
15975       if (! DECL_ARTIFICIAL (decl))
15976         add_src_coords_attributes (die, decl);
15977
15978       add_linkage_name (die, decl);
15979     }
15980
15981 #ifdef VMS_DEBUGGING_INFO
15982   /* Get the function's name, as described by its RTL.  This may be different
15983      from the DECL_NAME name used in the source file.  */
15984   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
15985     {
15986       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
15987                    XEXP (DECL_RTL (decl), 0));
15988       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
15989     }
15990 #endif /* VMS_DEBUGGING_INFO */
15991 }
15992
15993 #ifdef VMS_DEBUGGING_INFO
15994 /* Output the debug main pointer die for VMS */
15995
15996 void
15997 dwarf2out_vms_debug_main_pointer (void)
15998 {
15999   char label[MAX_ARTIFICIAL_LABEL_BYTES];
16000   dw_die_ref die;
16001
16002   /* Allocate the VMS debug main subprogram die.  */
16003   die = ggc_alloc_cleared_die_node ();
16004   die->die_tag = DW_TAG_subprogram;
16005   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
16006   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
16007                                current_function_funcdef_no);
16008   add_AT_lbl_id (die, DW_AT_entry_pc, label);
16009
16010   /* Make it the first child of comp_unit_die ().  */
16011   die->die_parent = comp_unit_die ();
16012   if (comp_unit_die ()->die_child)
16013     {
16014       die->die_sib = comp_unit_die ()->die_child->die_sib;
16015       comp_unit_die ()->die_child->die_sib = die;
16016     }
16017   else
16018     {
16019       die->die_sib = die;
16020       comp_unit_die ()->die_child = die;
16021     }
16022 }
16023 #endif /* VMS_DEBUGGING_INFO */
16024
16025 /* Push a new declaration scope.  */
16026
16027 static void
16028 push_decl_scope (tree scope)
16029 {
16030   VEC_safe_push (tree, gc, decl_scope_table, scope);
16031 }
16032
16033 /* Pop a declaration scope.  */
16034
16035 static inline void
16036 pop_decl_scope (void)
16037 {
16038   VEC_pop (tree, decl_scope_table);
16039 }
16040
16041 /* Return the DIE for the scope that immediately contains this type.
16042    Non-named types get global scope.  Named types nested in other
16043    types get their containing scope if it's open, or global scope
16044    otherwise.  All other types (i.e. function-local named types) get
16045    the current active scope.  */
16046
16047 static dw_die_ref
16048 scope_die_for (tree t, dw_die_ref context_die)
16049 {
16050   dw_die_ref scope_die = NULL;
16051   tree containing_scope;
16052   int i;
16053
16054   /* Non-types always go in the current scope.  */
16055   gcc_assert (TYPE_P (t));
16056
16057   containing_scope = TYPE_CONTEXT (t);
16058
16059   /* Use the containing namespace if it was passed in (for a declaration).  */
16060   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16061     {
16062       if (context_die == lookup_decl_die (containing_scope))
16063         /* OK */;
16064       else
16065         containing_scope = NULL_TREE;
16066     }
16067
16068   /* Ignore function type "scopes" from the C frontend.  They mean that
16069      a tagged type is local to a parmlist of a function declarator, but
16070      that isn't useful to DWARF.  */
16071   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16072     containing_scope = NULL_TREE;
16073
16074   if (SCOPE_FILE_SCOPE_P (containing_scope))
16075     scope_die = comp_unit_die ();
16076   else if (TYPE_P (containing_scope))
16077     {
16078       /* For types, we can just look up the appropriate DIE.  But
16079          first we check to see if we're in the middle of emitting it
16080          so we know where the new DIE should go.  */
16081       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16082         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16083           break;
16084
16085       if (i < 0)
16086         {
16087           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16088                       || TREE_ASM_WRITTEN (containing_scope));
16089           /*We are not in the middle of emitting the type
16090             CONTAINING_SCOPE. Let's see if it's emitted already.  */
16091           scope_die = lookup_type_die (containing_scope);
16092
16093           /* If none of the current dies are suitable, we get file scope.  */
16094           if (scope_die == NULL)
16095             scope_die = comp_unit_die ();
16096         }
16097       else
16098         scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
16099     }
16100   else
16101     scope_die = context_die;
16102
16103   return scope_die;
16104 }
16105
16106 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16107
16108 static inline int
16109 local_scope_p (dw_die_ref context_die)
16110 {
16111   for (; context_die; context_die = context_die->die_parent)
16112     if (context_die->die_tag == DW_TAG_inlined_subroutine
16113         || context_die->die_tag == DW_TAG_subprogram)
16114       return 1;
16115
16116   return 0;
16117 }
16118
16119 /* Returns nonzero if CONTEXT_DIE is a class.  */
16120
16121 static inline int
16122 class_scope_p (dw_die_ref context_die)
16123 {
16124   return (context_die
16125           && (context_die->die_tag == DW_TAG_structure_type
16126               || context_die->die_tag == DW_TAG_class_type
16127               || context_die->die_tag == DW_TAG_interface_type
16128               || context_die->die_tag == DW_TAG_union_type));
16129 }
16130
16131 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16132    whether or not to treat a DIE in this context as a declaration.  */
16133
16134 static inline int
16135 class_or_namespace_scope_p (dw_die_ref context_die)
16136 {
16137   return (class_scope_p (context_die)
16138           || (context_die && context_die->die_tag == DW_TAG_namespace));
16139 }
16140
16141 /* Many forms of DIEs require a "type description" attribute.  This
16142    routine locates the proper "type descriptor" die for the type given
16143    by 'type', and adds a DW_AT_type attribute below the given die.  */
16144
16145 static void
16146 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16147                     int decl_volatile, dw_die_ref context_die)
16148 {
16149   enum tree_code code  = TREE_CODE (type);
16150   dw_die_ref type_die  = NULL;
16151
16152   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16153      or fixed-point type, use the inner type.  This is because we have no
16154      support for unnamed types in base_type_die.  This can happen if this is
16155      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16156   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16157       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16158     type = TREE_TYPE (type), code = TREE_CODE (type);
16159
16160   if (code == ERROR_MARK
16161       /* Handle a special case.  For functions whose return type is void, we
16162          generate *no* type attribute.  (Note that no object may have type
16163          `void', so this only applies to function return types).  */
16164       || code == VOID_TYPE)
16165     return;
16166
16167   type_die = modified_type_die (type,
16168                                 decl_const || TYPE_READONLY (type),
16169                                 decl_volatile || TYPE_VOLATILE (type),
16170                                 context_die);
16171
16172   if (type_die != NULL)
16173     add_AT_die_ref (object_die, DW_AT_type, type_die);
16174 }
16175
16176 /* Given an object die, add the calling convention attribute for the
16177    function call type.  */
16178 static void
16179 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16180 {
16181   enum dwarf_calling_convention value = DW_CC_normal;
16182
16183   value = ((enum dwarf_calling_convention)
16184            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16185
16186   if (is_fortran ()
16187       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16188     {
16189       /* DWARF 2 doesn't provide a way to identify a program's source-level
16190         entry point.  DW_AT_calling_convention attributes are only meant
16191         to describe functions' calling conventions.  However, lacking a
16192         better way to signal the Fortran main program, we used this for 
16193         a long time, following existing custom.  Now, DWARF 4 has 
16194         DW_AT_main_subprogram, which we add below, but some tools still
16195         rely on the old way, which we thus keep.  */
16196       value = DW_CC_program;
16197
16198       if (dwarf_version >= 4 || !dwarf_strict)
16199         add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
16200     }
16201
16202   /* Only add the attribute if the backend requests it, and
16203      is not DW_CC_normal.  */
16204   if (value && (value != DW_CC_normal))
16205     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16206 }
16207
16208 /* Given a tree pointer to a struct, class, union, or enum type node, return
16209    a pointer to the (string) tag name for the given type, or zero if the type
16210    was declared without a tag.  */
16211
16212 static const char *
16213 type_tag (const_tree type)
16214 {
16215   const char *name = 0;
16216
16217   if (TYPE_NAME (type) != 0)
16218     {
16219       tree t = 0;
16220
16221       /* Find the IDENTIFIER_NODE for the type name.  */
16222       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
16223           && !TYPE_NAMELESS (type))
16224         t = TYPE_NAME (type);
16225
16226       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16227          a TYPE_DECL node, regardless of whether or not a `typedef' was
16228          involved.  */
16229       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16230                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16231         {
16232           /* We want to be extra verbose.  Don't call dwarf_name if
16233              DECL_NAME isn't set.  The default hook for decl_printable_name
16234              doesn't like that, and in this context it's correct to return
16235              0, instead of "<anonymous>" or the like.  */
16236           if (DECL_NAME (TYPE_NAME (type))
16237               && !DECL_NAMELESS (TYPE_NAME (type)))
16238             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16239         }
16240
16241       /* Now get the name as a string, or invent one.  */
16242       if (!name && t != 0)
16243         name = IDENTIFIER_POINTER (t);
16244     }
16245
16246   return (name == 0 || *name == '\0') ? 0 : name;
16247 }
16248
16249 /* Return the type associated with a data member, make a special check
16250    for bit field types.  */
16251
16252 static inline tree
16253 member_declared_type (const_tree member)
16254 {
16255   return (DECL_BIT_FIELD_TYPE (member)
16256           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16257 }
16258
16259 /* Get the decl's label, as described by its RTL. This may be different
16260    from the DECL_NAME name used in the source file.  */
16261
16262 #if 0
16263 static const char *
16264 decl_start_label (tree decl)
16265 {
16266   rtx x;
16267   const char *fnname;
16268
16269   x = DECL_RTL (decl);
16270   gcc_assert (MEM_P (x));
16271
16272   x = XEXP (x, 0);
16273   gcc_assert (GET_CODE (x) == SYMBOL_REF);
16274
16275   fnname = XSTR (x, 0);
16276   return fnname;
16277 }
16278 #endif
16279 \f
16280 /* These routines generate the internal representation of the DIE's for
16281    the compilation unit.  Debugging information is collected by walking
16282    the declaration trees passed in from dwarf2out_decl().  */
16283
16284 static void
16285 gen_array_type_die (tree type, dw_die_ref context_die)
16286 {
16287   dw_die_ref scope_die = scope_die_for (type, context_die);
16288   dw_die_ref array_die;
16289
16290   /* GNU compilers represent multidimensional array types as sequences of one
16291      dimensional array types whose element types are themselves array types.
16292      We sometimes squish that down to a single array_type DIE with multiple
16293      subscripts in the Dwarf debugging info.  The draft Dwarf specification
16294      say that we are allowed to do this kind of compression in C, because
16295      there is no difference between an array of arrays and a multidimensional
16296      array.  We don't do this for Ada to remain as close as possible to the
16297      actual representation, which is especially important against the language
16298      flexibilty wrt arrays of variable size.  */
16299
16300   bool collapse_nested_arrays = !is_ada ();
16301   tree element_type;
16302
16303   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16304      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
16305   if (TYPE_STRING_FLAG (type)
16306       && TREE_CODE (type) == ARRAY_TYPE
16307       && is_fortran ()
16308       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16309     {
16310       HOST_WIDE_INT size;
16311
16312       array_die = new_die (DW_TAG_string_type, scope_die, type);
16313       add_name_attribute (array_die, type_tag (type));
16314       equate_type_number_to_die (type, array_die);
16315       size = int_size_in_bytes (type);
16316       if (size >= 0)
16317         add_AT_unsigned (array_die, DW_AT_byte_size, size);
16318       else if (TYPE_DOMAIN (type) != NULL_TREE
16319                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16320                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16321         {
16322           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16323           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16324
16325           size = int_size_in_bytes (TREE_TYPE (szdecl));
16326           if (loc && size > 0)
16327             {
16328               add_AT_location_description (array_die, DW_AT_string_length, loc);
16329               if (size != DWARF2_ADDR_SIZE)
16330                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16331             }
16332         }
16333       return;
16334     }
16335
16336   /* ??? The SGI dwarf reader fails for array of array of enum types
16337      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16338      array type comes before the outer array type.  We thus call gen_type_die
16339      before we new_die and must prevent nested array types collapsing for this
16340      target.  */
16341
16342 #ifdef MIPS_DEBUGGING_INFO
16343   gen_type_die (TREE_TYPE (type), context_die);
16344   collapse_nested_arrays = false;
16345 #endif
16346
16347   array_die = new_die (DW_TAG_array_type, scope_die, type);
16348   add_name_attribute (array_die, type_tag (type));
16349   add_gnat_descriptive_type_attribute (array_die, type, context_die);
16350   if (TYPE_ARTIFICIAL (type))
16351     add_AT_flag (array_die, DW_AT_artificial, 1);
16352   equate_type_number_to_die (type, array_die);
16353
16354   if (TREE_CODE (type) == VECTOR_TYPE)
16355     add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16356
16357   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16358   if (is_fortran ()
16359       && TREE_CODE (type) == ARRAY_TYPE
16360       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16361       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16362     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16363
16364 #if 0
16365   /* We default the array ordering.  SDB will probably do
16366      the right things even if DW_AT_ordering is not present.  It's not even
16367      an issue until we start to get into multidimensional arrays anyway.  If
16368      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16369      then we'll have to put the DW_AT_ordering attribute back in.  (But if
16370      and when we find out that we need to put these in, we will only do so
16371      for multidimensional arrays.  */
16372   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16373 #endif
16374
16375 #ifdef MIPS_DEBUGGING_INFO
16376   /* The SGI compilers handle arrays of unknown bound by setting
16377      AT_declaration and not emitting any subrange DIEs.  */
16378   if (TREE_CODE (type) == ARRAY_TYPE
16379       && ! TYPE_DOMAIN (type))
16380     add_AT_flag (array_die, DW_AT_declaration, 1);
16381   else
16382 #endif
16383   if (TREE_CODE (type) == VECTOR_TYPE)
16384     {
16385       /* For VECTOR_TYPEs we use an array die with appropriate bounds.  */
16386       dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
16387       add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node);
16388       add_bound_info (subrange_die, DW_AT_upper_bound,
16389                       size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
16390     }
16391   else
16392     add_subscript_info (array_die, type, collapse_nested_arrays);
16393
16394   /* Add representation of the type of the elements of this array type and
16395      emit the corresponding DIE if we haven't done it already.  */
16396   element_type = TREE_TYPE (type);
16397   if (collapse_nested_arrays)
16398     while (TREE_CODE (element_type) == ARRAY_TYPE)
16399       {
16400         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16401           break;
16402         element_type = TREE_TYPE (element_type);
16403       }
16404
16405 #ifndef MIPS_DEBUGGING_INFO
16406   gen_type_die (element_type, context_die);
16407 #endif
16408
16409   add_type_attribute (array_die, element_type, 0, 0, context_die);
16410
16411   if (get_AT (array_die, DW_AT_name))
16412     add_pubtype (type, array_die);
16413 }
16414
16415 static dw_loc_descr_ref
16416 descr_info_loc (tree val, tree base_decl)
16417 {
16418   HOST_WIDE_INT size;
16419   dw_loc_descr_ref loc, loc2;
16420   enum dwarf_location_atom op;
16421
16422   if (val == base_decl)
16423     return new_loc_descr (DW_OP_push_object_address, 0, 0);
16424
16425   switch (TREE_CODE (val))
16426     {
16427     CASE_CONVERT:
16428       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16429     case VAR_DECL:
16430       return loc_descriptor_from_tree (val, 0);
16431     case INTEGER_CST:
16432       if (host_integerp (val, 0))
16433         return int_loc_descriptor (tree_low_cst (val, 0));
16434       break;
16435     case INDIRECT_REF:
16436       size = int_size_in_bytes (TREE_TYPE (val));
16437       if (size < 0)
16438         break;
16439       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16440       if (!loc)
16441         break;
16442       if (size == DWARF2_ADDR_SIZE)
16443         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
16444       else
16445         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
16446       return loc;
16447     case POINTER_PLUS_EXPR:
16448     case PLUS_EXPR:
16449       if (host_integerp (TREE_OPERAND (val, 1), 1)
16450           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
16451              < 16384)
16452         {
16453           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16454           if (!loc)
16455             break;
16456           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
16457         }
16458       else
16459         {
16460           op = DW_OP_plus;
16461         do_binop:
16462           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16463           if (!loc)
16464             break;
16465           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
16466           if (!loc2)
16467             break;
16468           add_loc_descr (&loc, loc2);
16469           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
16470         }
16471       return loc;
16472     case MINUS_EXPR:
16473       op = DW_OP_minus;
16474       goto do_binop;
16475     case MULT_EXPR:
16476       op = DW_OP_mul;
16477       goto do_binop;
16478     case EQ_EXPR:
16479       op = DW_OP_eq;
16480       goto do_binop;
16481     case NE_EXPR:
16482       op = DW_OP_ne;
16483       goto do_binop;
16484     default:
16485       break;
16486     }
16487   return NULL;
16488 }
16489
16490 static void
16491 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
16492                       tree val, tree base_decl)
16493 {
16494   dw_loc_descr_ref loc;
16495
16496   if (host_integerp (val, 0))
16497     {
16498       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
16499       return;
16500     }
16501
16502   loc = descr_info_loc (val, base_decl);
16503   if (!loc)
16504     return;
16505
16506   add_AT_loc (die, attr, loc);
16507 }
16508
16509 /* This routine generates DIE for array with hidden descriptor, details
16510    are filled into *info by a langhook.  */
16511
16512 static void
16513 gen_descr_array_type_die (tree type, struct array_descr_info *info,
16514                           dw_die_ref context_die)
16515 {
16516   dw_die_ref scope_die = scope_die_for (type, context_die);
16517   dw_die_ref array_die;
16518   int dim;
16519
16520   array_die = new_die (DW_TAG_array_type, scope_die, type);
16521   add_name_attribute (array_die, type_tag (type));
16522   equate_type_number_to_die (type, array_die);
16523
16524   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16525   if (is_fortran ()
16526       && info->ndimensions >= 2)
16527     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16528
16529   if (info->data_location)
16530     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
16531                           info->base_decl);
16532   if (info->associated)
16533     add_descr_info_field (array_die, DW_AT_associated, info->associated,
16534                           info->base_decl);
16535   if (info->allocated)
16536     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
16537                           info->base_decl);
16538
16539   for (dim = 0; dim < info->ndimensions; dim++)
16540     {
16541       dw_die_ref subrange_die
16542         = new_die (DW_TAG_subrange_type, array_die, NULL);
16543
16544       if (info->dimen[dim].lower_bound)
16545         {
16546           /* If it is the default value, omit it.  */
16547           int dflt;
16548
16549           if (host_integerp (info->dimen[dim].lower_bound, 0)
16550               && (dflt = lower_bound_default ()) != -1
16551               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
16552             ;
16553           else
16554             add_descr_info_field (subrange_die, DW_AT_lower_bound,
16555                                   info->dimen[dim].lower_bound,
16556                                   info->base_decl);
16557         }
16558       if (info->dimen[dim].upper_bound)
16559         add_descr_info_field (subrange_die, DW_AT_upper_bound,
16560                               info->dimen[dim].upper_bound,
16561                               info->base_decl);
16562       if (info->dimen[dim].stride)
16563         add_descr_info_field (subrange_die, DW_AT_byte_stride,
16564                               info->dimen[dim].stride,
16565                               info->base_decl);
16566     }
16567
16568   gen_type_die (info->element_type, context_die);
16569   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
16570
16571   if (get_AT (array_die, DW_AT_name))
16572     add_pubtype (type, array_die);
16573 }
16574
16575 #if 0
16576 static void
16577 gen_entry_point_die (tree decl, dw_die_ref context_die)
16578 {
16579   tree origin = decl_ultimate_origin (decl);
16580   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
16581
16582   if (origin != NULL)
16583     add_abstract_origin_attribute (decl_die, origin);
16584   else
16585     {
16586       add_name_and_src_coords_attributes (decl_die, decl);
16587       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
16588                           0, 0, context_die);
16589     }
16590
16591   if (DECL_ABSTRACT (decl))
16592     equate_decl_number_to_die (decl, decl_die);
16593   else
16594     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
16595 }
16596 #endif
16597
16598 /* Walk through the list of incomplete types again, trying once more to
16599    emit full debugging info for them.  */
16600
16601 static void
16602 retry_incomplete_types (void)
16603 {
16604   int i;
16605
16606   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
16607     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
16608                                   DINFO_USAGE_DIR_USE))
16609       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die ());
16610 }
16611
16612 /* Determine what tag to use for a record type.  */
16613
16614 static enum dwarf_tag
16615 record_type_tag (tree type)
16616 {
16617   if (! lang_hooks.types.classify_record)
16618     return DW_TAG_structure_type;
16619
16620   switch (lang_hooks.types.classify_record (type))
16621     {
16622     case RECORD_IS_STRUCT:
16623       return DW_TAG_structure_type;
16624
16625     case RECORD_IS_CLASS:
16626       return DW_TAG_class_type;
16627
16628     case RECORD_IS_INTERFACE:
16629       if (dwarf_version >= 3 || !dwarf_strict)
16630         return DW_TAG_interface_type;
16631       return DW_TAG_structure_type;
16632
16633     default:
16634       gcc_unreachable ();
16635     }
16636 }
16637
16638 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
16639    include all of the information about the enumeration values also. Each
16640    enumerated type name/value is listed as a child of the enumerated type
16641    DIE.  */
16642
16643 static dw_die_ref
16644 gen_enumeration_type_die (tree type, dw_die_ref context_die)
16645 {
16646   dw_die_ref type_die = lookup_type_die (type);
16647
16648   if (type_die == NULL)
16649     {
16650       type_die = new_die (DW_TAG_enumeration_type,
16651                           scope_die_for (type, context_die), type);
16652       equate_type_number_to_die (type, type_die);
16653       add_name_attribute (type_die, type_tag (type));
16654       add_gnat_descriptive_type_attribute (type_die, type, context_die);
16655       if (TYPE_ARTIFICIAL (type))
16656         add_AT_flag (type_die, DW_AT_artificial, 1);
16657       if (dwarf_version >= 4 || !dwarf_strict)
16658         {
16659           if (ENUM_IS_SCOPED (type))
16660             add_AT_flag (type_die, DW_AT_enum_class, 1);
16661           if (ENUM_IS_OPAQUE (type))
16662             add_AT_flag (type_die, DW_AT_declaration, 1);
16663         }
16664     }
16665   else if (! TYPE_SIZE (type))
16666     return type_die;
16667   else
16668     remove_AT (type_die, DW_AT_declaration);
16669
16670   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
16671      given enum type is incomplete, do not generate the DW_AT_byte_size
16672      attribute or the DW_AT_element_list attribute.  */
16673   if (TYPE_SIZE (type))
16674     {
16675       tree link;
16676
16677       TREE_ASM_WRITTEN (type) = 1;
16678       add_byte_size_attribute (type_die, type);
16679       if (TYPE_STUB_DECL (type) != NULL_TREE)
16680         {
16681           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
16682           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
16683         }
16684
16685       /* If the first reference to this type was as the return type of an
16686          inline function, then it may not have a parent.  Fix this now.  */
16687       if (type_die->die_parent == NULL)
16688         add_child_die (scope_die_for (type, context_die), type_die);
16689
16690       for (link = TYPE_VALUES (type);
16691            link != NULL; link = TREE_CHAIN (link))
16692         {
16693           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
16694           tree value = TREE_VALUE (link);
16695
16696           add_name_attribute (enum_die,
16697                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
16698
16699           if (TREE_CODE (value) == CONST_DECL)
16700             value = DECL_INITIAL (value);
16701
16702           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
16703             /* DWARF2 does not provide a way of indicating whether or
16704                not enumeration constants are signed or unsigned.  GDB
16705                always assumes the values are signed, so we output all
16706                values as if they were signed.  That means that
16707                enumeration constants with very large unsigned values
16708                will appear to have negative values in the debugger.  */
16709             add_AT_int (enum_die, DW_AT_const_value,
16710                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
16711         }
16712     }
16713   else
16714     add_AT_flag (type_die, DW_AT_declaration, 1);
16715
16716   if (get_AT (type_die, DW_AT_name))
16717     add_pubtype (type, type_die);
16718
16719   return type_die;
16720 }
16721
16722 /* Generate a DIE to represent either a real live formal parameter decl or to
16723    represent just the type of some formal parameter position in some function
16724    type.
16725
16726    Note that this routine is a bit unusual because its argument may be a
16727    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
16728    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
16729    node.  If it's the former then this function is being called to output a
16730    DIE to represent a formal parameter object (or some inlining thereof).  If
16731    it's the latter, then this function is only being called to output a
16732    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
16733    argument type of some subprogram type.
16734    If EMIT_NAME_P is true, name and source coordinate attributes
16735    are emitted.  */
16736
16737 static dw_die_ref
16738 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
16739                           dw_die_ref context_die)
16740 {
16741   tree node_or_origin = node ? node : origin;
16742   tree ultimate_origin;
16743   dw_die_ref parm_die
16744     = new_die (DW_TAG_formal_parameter, context_die, node);
16745
16746   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
16747     {
16748     case tcc_declaration:
16749       ultimate_origin = decl_ultimate_origin (node_or_origin);
16750       if (node || ultimate_origin)
16751         origin = ultimate_origin;
16752       if (origin != NULL)
16753         add_abstract_origin_attribute (parm_die, origin);
16754       else if (emit_name_p)
16755         add_name_and_src_coords_attributes (parm_die, node);
16756       if (origin == NULL
16757           || (! DECL_ABSTRACT (node_or_origin)
16758               && variably_modified_type_p (TREE_TYPE (node_or_origin),
16759                                            decl_function_context
16760                                                             (node_or_origin))))
16761         {
16762           tree type = TREE_TYPE (node_or_origin);
16763           if (decl_by_reference_p (node_or_origin))
16764             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
16765                                 context_die);
16766           else
16767             add_type_attribute (parm_die, type,
16768                                 TREE_READONLY (node_or_origin),
16769                                 TREE_THIS_VOLATILE (node_or_origin),
16770                                 context_die);
16771         }
16772       if (origin == NULL && DECL_ARTIFICIAL (node))
16773         add_AT_flag (parm_die, DW_AT_artificial, 1);
16774
16775       if (node && node != origin)
16776         equate_decl_number_to_die (node, parm_die);
16777       if (! DECL_ABSTRACT (node_or_origin))
16778         add_location_or_const_value_attribute (parm_die, node_or_origin,
16779                                                node == NULL, DW_AT_location);
16780
16781       break;
16782
16783     case tcc_type:
16784       /* We were called with some kind of a ..._TYPE node.  */
16785       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
16786       break;
16787
16788     default:
16789       gcc_unreachable ();
16790     }
16791
16792   return parm_die;
16793 }
16794
16795 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
16796    children DW_TAG_formal_parameter DIEs representing the arguments of the
16797    parameter pack.
16798
16799    PARM_PACK must be a function parameter pack.
16800    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
16801    must point to the subsequent arguments of the function PACK_ARG belongs to.
16802    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
16803    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
16804    following the last one for which a DIE was generated.  */
16805
16806 static dw_die_ref
16807 gen_formal_parameter_pack_die  (tree parm_pack,
16808                                 tree pack_arg,
16809                                 dw_die_ref subr_die,
16810                                 tree *next_arg)
16811 {
16812   tree arg;
16813   dw_die_ref parm_pack_die;
16814
16815   gcc_assert (parm_pack
16816               && lang_hooks.function_parameter_pack_p (parm_pack)
16817               && subr_die);
16818
16819   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
16820   add_src_coords_attributes (parm_pack_die, parm_pack);
16821
16822   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
16823     {
16824       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
16825                                                                  parm_pack))
16826         break;
16827       gen_formal_parameter_die (arg, NULL,
16828                                 false /* Don't emit name attribute.  */,
16829                                 parm_pack_die);
16830     }
16831   if (next_arg)
16832     *next_arg = arg;
16833   return parm_pack_die;
16834 }
16835
16836 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
16837    at the end of an (ANSI prototyped) formal parameters list.  */
16838
16839 static void
16840 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
16841 {
16842   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
16843 }
16844
16845 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
16846    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
16847    parameters as specified in some function type specification (except for
16848    those which appear as part of a function *definition*).  */
16849
16850 static void
16851 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
16852 {
16853   tree link;
16854   tree formal_type = NULL;
16855   tree first_parm_type;
16856   tree arg;
16857
16858   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
16859     {
16860       arg = DECL_ARGUMENTS (function_or_method_type);
16861       function_or_method_type = TREE_TYPE (function_or_method_type);
16862     }
16863   else
16864     arg = NULL_TREE;
16865
16866   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
16867
16868   /* Make our first pass over the list of formal parameter types and output a
16869      DW_TAG_formal_parameter DIE for each one.  */
16870   for (link = first_parm_type; link; )
16871     {
16872       dw_die_ref parm_die;
16873
16874       formal_type = TREE_VALUE (link);
16875       if (formal_type == void_type_node)
16876         break;
16877
16878       /* Output a (nameless) DIE to represent the formal parameter itself.  */
16879       parm_die = gen_formal_parameter_die (formal_type, NULL,
16880                                            true /* Emit name attribute.  */,
16881                                            context_die);
16882       if (TREE_CODE (function_or_method_type) == METHOD_TYPE
16883           && link == first_parm_type)
16884         {
16885           add_AT_flag (parm_die, DW_AT_artificial, 1);
16886           if (dwarf_version >= 3 || !dwarf_strict)
16887             add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
16888         }
16889       else if (arg && DECL_ARTIFICIAL (arg))
16890         add_AT_flag (parm_die, DW_AT_artificial, 1);
16891
16892       link = TREE_CHAIN (link);
16893       if (arg)
16894         arg = DECL_CHAIN (arg);
16895     }
16896
16897   /* If this function type has an ellipsis, add a
16898      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
16899   if (formal_type != void_type_node)
16900     gen_unspecified_parameters_die (function_or_method_type, context_die);
16901
16902   /* Make our second (and final) pass over the list of formal parameter types
16903      and output DIEs to represent those types (as necessary).  */
16904   for (link = TYPE_ARG_TYPES (function_or_method_type);
16905        link && TREE_VALUE (link);
16906        link = TREE_CHAIN (link))
16907     gen_type_die (TREE_VALUE (link), context_die);
16908 }
16909
16910 /* We want to generate the DIE for TYPE so that we can generate the
16911    die for MEMBER, which has been defined; we will need to refer back
16912    to the member declaration nested within TYPE.  If we're trying to
16913    generate minimal debug info for TYPE, processing TYPE won't do the
16914    trick; we need to attach the member declaration by hand.  */
16915
16916 static void
16917 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
16918 {
16919   gen_type_die (type, context_die);
16920
16921   /* If we're trying to avoid duplicate debug info, we may not have
16922      emitted the member decl for this function.  Emit it now.  */
16923   if (TYPE_STUB_DECL (type)
16924       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
16925       && ! lookup_decl_die (member))
16926     {
16927       dw_die_ref type_die;
16928       gcc_assert (!decl_ultimate_origin (member));
16929
16930       push_decl_scope (type);
16931       type_die = lookup_type_die_strip_naming_typedef (type);
16932       if (TREE_CODE (member) == FUNCTION_DECL)
16933         gen_subprogram_die (member, type_die);
16934       else if (TREE_CODE (member) == FIELD_DECL)
16935         {
16936           /* Ignore the nameless fields that are used to skip bits but handle
16937              C++ anonymous unions and structs.  */
16938           if (DECL_NAME (member) != NULL_TREE
16939               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
16940               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
16941             {
16942               gen_type_die (member_declared_type (member), type_die);
16943               gen_field_die (member, type_die);
16944             }
16945         }
16946       else
16947         gen_variable_die (member, NULL_TREE, type_die);
16948
16949       pop_decl_scope ();
16950     }
16951 }
16952
16953 /* Generate the DWARF2 info for the "abstract" instance of a function which we
16954    may later generate inlined and/or out-of-line instances of.  */
16955
16956 static void
16957 dwarf2out_abstract_function (tree decl)
16958 {
16959   dw_die_ref old_die;
16960   tree save_fn;
16961   tree context;
16962   int was_abstract;
16963   htab_t old_decl_loc_table;
16964   htab_t old_cached_dw_loc_list_table;
16965   int old_call_site_count, old_tail_call_site_count;
16966   struct call_arg_loc_node *old_call_arg_locations;
16967
16968   /* Make sure we have the actual abstract inline, not a clone.  */
16969   decl = DECL_ORIGIN (decl);
16970
16971   old_die = lookup_decl_die (decl);
16972   if (old_die && get_AT (old_die, DW_AT_inline))
16973     /* We've already generated the abstract instance.  */
16974     return;
16975
16976   /* We can be called while recursively when seeing block defining inlined subroutine
16977      DIE.  Be sure to not clobber the outer location table nor use it or we would
16978      get locations in abstract instantces.  */
16979   old_decl_loc_table = decl_loc_table;
16980   decl_loc_table = NULL;
16981   old_cached_dw_loc_list_table = cached_dw_loc_list_table;
16982   cached_dw_loc_list_table = NULL;
16983   old_call_arg_locations = call_arg_locations;
16984   call_arg_locations = NULL;
16985   old_call_site_count = call_site_count;
16986   call_site_count = -1;
16987   old_tail_call_site_count = tail_call_site_count;
16988   tail_call_site_count = -1;
16989
16990   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
16991      we don't get confused by DECL_ABSTRACT.  */
16992   if (debug_info_level > DINFO_LEVEL_TERSE)
16993     {
16994       context = decl_class_context (decl);
16995       if (context)
16996         gen_type_die_for_member
16997           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
16998     }
16999
17000   /* Pretend we've just finished compiling this function.  */
17001   save_fn = current_function_decl;
17002   current_function_decl = decl;
17003   push_cfun (DECL_STRUCT_FUNCTION (decl));
17004
17005   was_abstract = DECL_ABSTRACT (decl);
17006   set_decl_abstract_flags (decl, 1);
17007   dwarf2out_decl (decl);
17008   if (! was_abstract)
17009     set_decl_abstract_flags (decl, 0);
17010
17011   current_function_decl = save_fn;
17012   decl_loc_table = old_decl_loc_table;
17013   cached_dw_loc_list_table = old_cached_dw_loc_list_table;
17014   call_arg_locations = old_call_arg_locations;
17015   call_site_count = old_call_site_count;
17016   tail_call_site_count = old_tail_call_site_count;
17017   pop_cfun ();
17018 }
17019
17020 /* Helper function of premark_used_types() which gets called through
17021    htab_traverse.
17022
17023    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17024    marked as unused by prune_unused_types.  */
17025
17026 static int
17027 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17028 {
17029   tree type;
17030   dw_die_ref die;
17031
17032   type = (tree) *slot;
17033   die = lookup_type_die (type);
17034   if (die != NULL)
17035     die->die_perennial_p = 1;
17036   return 1;
17037 }
17038
17039 /* Helper function of premark_types_used_by_global_vars which gets called
17040    through htab_traverse.
17041
17042    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17043    marked as unused by prune_unused_types. The DIE of the type is marked
17044    only if the global variable using the type will actually be emitted.  */
17045
17046 static int
17047 premark_types_used_by_global_vars_helper (void **slot,
17048                                           void *data ATTRIBUTE_UNUSED)
17049 {
17050   struct types_used_by_vars_entry *entry;
17051   dw_die_ref die;
17052
17053   entry = (struct types_used_by_vars_entry *) *slot;
17054   gcc_assert (entry->type != NULL
17055               && entry->var_decl != NULL);
17056   die = lookup_type_die (entry->type);
17057   if (die)
17058     {
17059       /* Ask cgraph if the global variable really is to be emitted.
17060          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17061       struct varpool_node *node = varpool_get_node (entry->var_decl);
17062       if (node && node->needed)
17063         {
17064           die->die_perennial_p = 1;
17065           /* Keep the parent DIEs as well.  */
17066           while ((die = die->die_parent) && die->die_perennial_p == 0)
17067             die->die_perennial_p = 1;
17068         }
17069     }
17070   return 1;
17071 }
17072
17073 /* Mark all members of used_types_hash as perennial.  */
17074
17075 static void
17076 premark_used_types (void)
17077 {
17078   if (cfun && cfun->used_types_hash)
17079     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17080 }
17081
17082 /* Mark all members of types_used_by_vars_entry as perennial.  */
17083
17084 static void
17085 premark_types_used_by_global_vars (void)
17086 {
17087   if (types_used_by_vars_hash)
17088     htab_traverse (types_used_by_vars_hash,
17089                    premark_types_used_by_global_vars_helper, NULL);
17090 }
17091
17092 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
17093    for CA_LOC call arg loc node.  */
17094
17095 static dw_die_ref
17096 gen_call_site_die (tree decl, dw_die_ref subr_die,
17097                    struct call_arg_loc_node *ca_loc)
17098 {
17099   dw_die_ref stmt_die = NULL, die;
17100   tree block = ca_loc->block;
17101
17102   while (block
17103          && block != DECL_INITIAL (decl)
17104          && TREE_CODE (block) == BLOCK)
17105     {
17106       if (VEC_length (dw_die_ref, block_map) > BLOCK_NUMBER (block))
17107         stmt_die = VEC_index (dw_die_ref, block_map, BLOCK_NUMBER (block));
17108       if (stmt_die)
17109         break;
17110       block = BLOCK_SUPERCONTEXT (block);
17111     }
17112   if (stmt_die == NULL)
17113     stmt_die = subr_die;
17114   die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
17115   add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
17116   if (ca_loc->tail_call_p)
17117     add_AT_flag (die, DW_AT_GNU_tail_call, 1);
17118   if (ca_loc->symbol_ref)
17119     {
17120       dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
17121       if (tdie)
17122         add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
17123       else
17124         add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref);
17125     }
17126   return die;
17127 }
17128
17129 /* Generate a DIE to represent a declared function (either file-scope or
17130    block-local).  */
17131
17132 static void
17133 gen_subprogram_die (tree decl, dw_die_ref context_die)
17134 {
17135   tree origin = decl_ultimate_origin (decl);
17136   dw_die_ref subr_die;
17137   tree outer_scope;
17138   dw_die_ref old_die = lookup_decl_die (decl);
17139   int declaration = (current_function_decl != decl
17140                      || class_or_namespace_scope_p (context_die));
17141
17142   premark_used_types ();
17143
17144   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17145      started to generate the abstract instance of an inline, decided to output
17146      its containing class, and proceeded to emit the declaration of the inline
17147      from the member list for the class.  If so, DECLARATION takes priority;
17148      we'll get back to the abstract instance when done with the class.  */
17149
17150   /* The class-scope declaration DIE must be the primary DIE.  */
17151   if (origin && declaration && class_or_namespace_scope_p (context_die))
17152     {
17153       origin = NULL;
17154       gcc_assert (!old_die);
17155     }
17156
17157   /* Now that the C++ front end lazily declares artificial member fns, we
17158      might need to retrofit the declaration into its class.  */
17159   if (!declaration && !origin && !old_die
17160       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17161       && !class_or_namespace_scope_p (context_die)
17162       && debug_info_level > DINFO_LEVEL_TERSE)
17163     old_die = force_decl_die (decl);
17164
17165   if (origin != NULL)
17166     {
17167       gcc_assert (!declaration || local_scope_p (context_die));
17168
17169       /* Fixup die_parent for the abstract instance of a nested
17170          inline function.  */
17171       if (old_die && old_die->die_parent == NULL)
17172         add_child_die (context_die, old_die);
17173
17174       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17175       add_abstract_origin_attribute (subr_die, origin);
17176       /*  This is where the actual code for a cloned function is.
17177           Let's emit linkage name attribute for it.  This helps
17178           debuggers to e.g, set breakpoints into
17179           constructors/destructors when the user asks "break
17180           K::K".  */
17181       add_linkage_name (subr_die, decl);
17182     }
17183   else if (old_die)
17184     {
17185       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17186       struct dwarf_file_data * file_index = lookup_filename (s.file);
17187
17188       if (!get_AT_flag (old_die, DW_AT_declaration)
17189           /* We can have a normal definition following an inline one in the
17190              case of redefinition of GNU C extern inlines.
17191              It seems reasonable to use AT_specification in this case.  */
17192           && !get_AT (old_die, DW_AT_inline))
17193         {
17194           /* Detect and ignore this case, where we are trying to output
17195              something we have already output.  */
17196           return;
17197         }
17198
17199       /* If the definition comes from the same place as the declaration,
17200          maybe use the old DIE.  We always want the DIE for this function
17201          that has the *_pc attributes to be under comp_unit_die so the
17202          debugger can find it.  We also need to do this for abstract
17203          instances of inlines, since the spec requires the out-of-line copy
17204          to have the same parent.  For local class methods, this doesn't
17205          apply; we just use the old DIE.  */
17206       if ((is_cu_die (old_die->die_parent) || context_die == NULL)
17207           && (DECL_ARTIFICIAL (decl)
17208               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17209                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17210                       == (unsigned) s.line))))
17211         {
17212           subr_die = old_die;
17213
17214           /* Clear out the declaration attribute and the formal parameters.
17215              Do not remove all children, because it is possible that this
17216              declaration die was forced using force_decl_die(). In such
17217              cases die that forced declaration die (e.g. TAG_imported_module)
17218              is one of the children that we do not want to remove.  */
17219           remove_AT (subr_die, DW_AT_declaration);
17220           remove_AT (subr_die, DW_AT_object_pointer);
17221           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17222         }
17223       else
17224         {
17225           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17226           add_AT_specification (subr_die, old_die);
17227           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17228             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17229           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17230             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17231         }
17232     }
17233   else
17234     {
17235       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17236
17237       if (TREE_PUBLIC (decl))
17238         add_AT_flag (subr_die, DW_AT_external, 1);
17239
17240       add_name_and_src_coords_attributes (subr_die, decl);
17241       if (debug_info_level > DINFO_LEVEL_TERSE)
17242         {
17243           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17244           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17245                               0, 0, context_die);
17246         }
17247
17248       add_pure_or_virtual_attribute (subr_die, decl);
17249       if (DECL_ARTIFICIAL (decl))
17250         add_AT_flag (subr_die, DW_AT_artificial, 1);
17251
17252       add_accessibility_attribute (subr_die, decl);
17253     }
17254
17255   if (declaration)
17256     {
17257       if (!old_die || !get_AT (old_die, DW_AT_inline))
17258         {
17259           add_AT_flag (subr_die, DW_AT_declaration, 1);
17260
17261           /* If this is an explicit function declaration then generate
17262              a DW_AT_explicit attribute.  */
17263           if (lang_hooks.decls.function_decl_explicit_p (decl)
17264               && (dwarf_version >= 3 || !dwarf_strict))
17265             add_AT_flag (subr_die, DW_AT_explicit, 1);
17266
17267           /* The first time we see a member function, it is in the context of
17268              the class to which it belongs.  We make sure of this by emitting
17269              the class first.  The next time is the definition, which is
17270              handled above.  The two may come from the same source text.
17271
17272              Note that force_decl_die() forces function declaration die. It is
17273              later reused to represent definition.  */
17274           equate_decl_number_to_die (decl, subr_die);
17275         }
17276     }
17277   else if (DECL_ABSTRACT (decl))
17278     {
17279       if (DECL_DECLARED_INLINE_P (decl))
17280         {
17281           if (cgraph_function_possibly_inlined_p (decl))
17282             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17283           else
17284             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17285         }
17286       else
17287         {
17288           if (cgraph_function_possibly_inlined_p (decl))
17289             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17290           else
17291             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17292         }
17293
17294       if (DECL_DECLARED_INLINE_P (decl)
17295           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17296         add_AT_flag (subr_die, DW_AT_artificial, 1);
17297
17298       equate_decl_number_to_die (decl, subr_die);
17299     }
17300   else if (!DECL_EXTERNAL (decl))
17301     {
17302       HOST_WIDE_INT cfa_fb_offset;
17303
17304       if (!old_die || !get_AT (old_die, DW_AT_inline))
17305         equate_decl_number_to_die (decl, subr_die);
17306
17307       if (!flag_reorder_blocks_and_partition)
17308         {
17309           dw_fde_ref fde = cfun->fde;
17310           if (fde->dw_fde_begin)
17311             {
17312               /* We have already generated the labels.  */
17313               add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17314               add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17315             }
17316           else
17317             {
17318               /* Create start/end labels and add the range.  */
17319               char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17320               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17321                                            current_function_funcdef_no);
17322               add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17323               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17324                                            current_function_funcdef_no);
17325               add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17326             }
17327
17328 #if VMS_DEBUGGING_INFO
17329       /* HP OpenVMS Industry Standard 64: DWARF Extensions
17330          Section 2.3 Prologue and Epilogue Attributes:
17331          When a breakpoint is set on entry to a function, it is generally
17332          desirable for execution to be suspended, not on the very first
17333          instruction of the function, but rather at a point after the
17334          function's frame has been set up, after any language defined local
17335          declaration processing has been completed, and before execution of
17336          the first statement of the function begins. Debuggers generally
17337          cannot properly determine where this point is.  Similarly for a
17338          breakpoint set on exit from a function. The prologue and epilogue
17339          attributes allow a compiler to communicate the location(s) to use.  */
17340
17341       {
17342         if (fde->dw_fde_vms_end_prologue)
17343           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
17344             fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
17345
17346         if (fde->dw_fde_vms_begin_epilogue)
17347           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
17348             fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
17349       }
17350 #endif
17351
17352           add_pubname (decl, subr_die);
17353         }
17354       else
17355         {
17356           /* Generate pubnames entries for the split function code ranges.  */
17357           dw_fde_ref fde = cfun->fde;
17358
17359           if (fde->dw_fde_second_begin)
17360             {
17361               if (dwarf_version >= 3 || !dwarf_strict)
17362                 {
17363                   /* We should use ranges for non-contiguous code section 
17364                      addresses.  Use the actual code range for the initial
17365                      section, since the HOT/COLD labels might precede an 
17366                      alignment offset.  */
17367                   bool range_list_added = false;
17368                   add_ranges_by_labels (subr_die, fde->dw_fde_begin,
17369                                         fde->dw_fde_end, &range_list_added);
17370                   add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
17371                                         fde->dw_fde_second_end,
17372                                         &range_list_added);
17373                   add_pubname (decl, subr_die);
17374                   if (range_list_added)
17375                     add_ranges (NULL);
17376                 }
17377               else
17378                 {
17379                   /* There is no real support in DW2 for this .. so we make
17380                      a work-around.  First, emit the pub name for the segment
17381                      containing the function label.  Then make and emit a
17382                      simplified subprogram DIE for the second segment with the
17383                      name pre-fixed by __hot/cold_sect_of_.  We use the same
17384                      linkage name for the second die so that gdb will find both
17385                      sections when given "b foo".  */
17386                   const char *name = NULL;
17387                   tree decl_name = DECL_NAME (decl);
17388                   dw_die_ref seg_die;
17389
17390                   /* Do the 'primary' section.   */
17391                   add_AT_lbl_id (subr_die, DW_AT_low_pc,
17392                                  fde->dw_fde_begin);
17393                   add_AT_lbl_id (subr_die, DW_AT_high_pc,
17394                                  fde->dw_fde_end);
17395                   /* Add it.   */
17396                   add_pubname (decl, subr_die);
17397
17398                   /* Build a minimal DIE for the secondary section.  */
17399                   seg_die = new_die (DW_TAG_subprogram,
17400                                      subr_die->die_parent, decl);
17401
17402                   if (TREE_PUBLIC (decl))
17403                     add_AT_flag (seg_die, DW_AT_external, 1);
17404
17405                   if (decl_name != NULL 
17406                       && IDENTIFIER_POINTER (decl_name) != NULL)
17407                     {
17408                       name = dwarf2_name (decl, 1);
17409                       if (! DECL_ARTIFICIAL (decl))
17410                         add_src_coords_attributes (seg_die, decl);
17411
17412                       add_linkage_name (seg_die, decl);
17413                     }
17414                   gcc_assert (name != NULL);
17415                   add_pure_or_virtual_attribute (seg_die, decl);
17416                   if (DECL_ARTIFICIAL (decl))
17417                     add_AT_flag (seg_die, DW_AT_artificial, 1);
17418
17419                   name = concat ("__second_sect_of_", name, NULL); 
17420                   add_AT_lbl_id (seg_die, DW_AT_low_pc,
17421                                  fde->dw_fde_second_begin);
17422                   add_AT_lbl_id (seg_die, DW_AT_high_pc,
17423                                  fde->dw_fde_second_end);
17424                   add_name_attribute (seg_die, name);
17425                   add_pubname_string (name, seg_die);
17426                 }
17427             }
17428           else
17429             {
17430               add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17431               add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17432               add_pubname (decl, subr_die);
17433             }
17434         }
17435
17436 #ifdef MIPS_DEBUGGING_INFO
17437       /* Add a reference to the FDE for this routine.  */
17438       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, cfun->fde->fde_index);
17439 #endif
17440
17441       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17442
17443       /* We define the "frame base" as the function's CFA.  This is more
17444          convenient for several reasons: (1) It's stable across the prologue
17445          and epilogue, which makes it better than just a frame pointer,
17446          (2) With dwarf3, there exists a one-byte encoding that allows us
17447          to reference the .debug_frame data by proxy, but failing that,
17448          (3) We can at least reuse the code inspection and interpretation
17449          code that determines the CFA position at various points in the
17450          function.  */
17451       if (dwarf_version >= 3)
17452         {
17453           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17454           add_AT_loc (subr_die, DW_AT_frame_base, op);
17455         }
17456       else
17457         {
17458           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17459           if (list->dw_loc_next)
17460             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17461           else
17462             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17463         }
17464
17465       /* Compute a displacement from the "steady-state frame pointer" to
17466          the CFA.  The former is what all stack slots and argument slots
17467          will reference in the rtl; the later is what we've told the
17468          debugger about.  We'll need to adjust all frame_base references
17469          by this displacement.  */
17470       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17471
17472       if (cfun->static_chain_decl)
17473         add_AT_location_description (subr_die, DW_AT_static_link,
17474                  loc_list_from_tree (cfun->static_chain_decl, 2));
17475     }
17476
17477   /* Generate child dies for template paramaters.  */
17478   if (debug_info_level > DINFO_LEVEL_TERSE)
17479     gen_generic_params_dies (decl);
17480
17481   /* Now output descriptions of the arguments for this function. This gets
17482      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17483      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17484      `...' at the end of the formal parameter list.  In order to find out if
17485      there was a trailing ellipsis or not, we must instead look at the type
17486      associated with the FUNCTION_DECL.  This will be a node of type
17487      FUNCTION_TYPE. If the chain of type nodes hanging off of this
17488      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17489      an ellipsis at the end.  */
17490
17491   /* In the case where we are describing a mere function declaration, all we
17492      need to do here (and all we *can* do here) is to describe the *types* of
17493      its formal parameters.  */
17494   if (debug_info_level <= DINFO_LEVEL_TERSE)
17495     ;
17496   else if (declaration)
17497     gen_formal_types_die (decl, subr_die);
17498   else
17499     {
17500       /* Generate DIEs to represent all known formal parameters.  */
17501       tree parm = DECL_ARGUMENTS (decl);
17502       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17503       tree generic_decl_parm = generic_decl
17504                                 ? DECL_ARGUMENTS (generic_decl)
17505                                 : NULL;
17506
17507       /* Now we want to walk the list of parameters of the function and
17508          emit their relevant DIEs.
17509
17510          We consider the case of DECL being an instance of a generic function
17511          as well as it being a normal function.
17512
17513          If DECL is an instance of a generic function we walk the
17514          parameters of the generic function declaration _and_ the parameters of
17515          DECL itself. This is useful because we want to emit specific DIEs for
17516          function parameter packs and those are declared as part of the
17517          generic function declaration. In that particular case,
17518          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17519          That DIE has children DIEs representing the set of arguments
17520          of the pack. Note that the set of pack arguments can be empty.
17521          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17522          children DIE.
17523
17524          Otherwise, we just consider the parameters of DECL.  */
17525       while (generic_decl_parm || parm)
17526         {
17527           if (generic_decl_parm
17528               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17529             gen_formal_parameter_pack_die (generic_decl_parm,
17530                                            parm, subr_die,
17531                                            &parm);
17532           else if (parm)
17533             {
17534               dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
17535
17536               if (parm == DECL_ARGUMENTS (decl)
17537                   && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
17538                   && parm_die
17539                   && (dwarf_version >= 3 || !dwarf_strict))
17540                 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
17541
17542               parm = DECL_CHAIN (parm);
17543             }
17544
17545           if (generic_decl_parm)
17546             generic_decl_parm = DECL_CHAIN (generic_decl_parm);
17547         }
17548
17549       /* Decide whether we need an unspecified_parameters DIE at the end.
17550          There are 2 more cases to do this for: 1) the ansi ... declaration -
17551          this is detectable when the end of the arg list is not a
17552          void_type_node 2) an unprototyped function declaration (not a
17553          definition).  This just means that we have no info about the
17554          parameters at all.  */
17555       if (prototype_p (TREE_TYPE (decl)))
17556         {
17557           /* This is the prototyped case, check for....  */
17558           if (stdarg_p (TREE_TYPE (decl)))
17559             gen_unspecified_parameters_die (decl, subr_die);
17560         }
17561       else if (DECL_INITIAL (decl) == NULL_TREE)
17562         gen_unspecified_parameters_die (decl, subr_die);
17563     }
17564
17565   /* Output Dwarf info for all of the stuff within the body of the function
17566      (if it has one - it may be just a declaration).  */
17567   outer_scope = DECL_INITIAL (decl);
17568
17569   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17570      a function.  This BLOCK actually represents the outermost binding contour
17571      for the function, i.e. the contour in which the function's formal
17572      parameters and labels get declared. Curiously, it appears that the front
17573      end doesn't actually put the PARM_DECL nodes for the current function onto
17574      the BLOCK_VARS list for this outer scope, but are strung off of the
17575      DECL_ARGUMENTS list for the function instead.
17576
17577      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17578      the LABEL_DECL nodes for the function however, and we output DWARF info
17579      for those in decls_for_scope.  Just within the `outer_scope' there will be
17580      a BLOCK node representing the function's outermost pair of curly braces,
17581      and any blocks used for the base and member initializers of a C++
17582      constructor function.  */
17583   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17584     {
17585       int call_site_note_count = 0;
17586       int tail_call_site_note_count = 0;
17587
17588       /* Emit a DW_TAG_variable DIE for a named return value.  */
17589       if (DECL_NAME (DECL_RESULT (decl)))
17590         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17591
17592       current_function_has_inlines = 0;
17593       decls_for_scope (outer_scope, subr_die, 0);
17594
17595       if (call_arg_locations && !dwarf_strict)
17596         {
17597           struct call_arg_loc_node *ca_loc;
17598           for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
17599             {
17600               dw_die_ref die = NULL;
17601               rtx tloc = NULL_RTX, tlocc = NULL_RTX;
17602               rtx arg, next_arg;
17603
17604               for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
17605                    arg; arg = next_arg)
17606                 {
17607                   dw_loc_descr_ref reg, val;
17608                   enum machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
17609                   dw_die_ref cdie, tdie = NULL;
17610
17611                   next_arg = XEXP (arg, 1);
17612                   if (REG_P (XEXP (XEXP (arg, 0), 0))
17613                       && next_arg
17614                       && MEM_P (XEXP (XEXP (next_arg, 0), 0))
17615                       && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
17616                       && REGNO (XEXP (XEXP (arg, 0), 0))
17617                          == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
17618                     next_arg = XEXP (next_arg, 1);
17619                   if (mode == VOIDmode)
17620                     {
17621                       mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
17622                       if (mode == VOIDmode)
17623                         mode = GET_MODE (XEXP (arg, 0));
17624                     }
17625                   if (mode == VOIDmode || mode == BLKmode)
17626                     continue;
17627                   if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
17628                     {
17629                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17630                       tloc = XEXP (XEXP (arg, 0), 1);
17631                       continue;
17632                     }
17633                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
17634                            && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
17635                     {
17636                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17637                       tlocc = XEXP (XEXP (arg, 0), 1);
17638                       continue;
17639                     }
17640                   reg = NULL;
17641                   if (REG_P (XEXP (XEXP (arg, 0), 0)))
17642                     reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
17643                                               VAR_INIT_STATUS_INITIALIZED);
17644                   else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
17645                     {
17646                       rtx mem = XEXP (XEXP (arg, 0), 0);
17647                       reg = mem_loc_descriptor (XEXP (mem, 0),
17648                                                 get_address_mode (mem),
17649                                                 GET_MODE (mem),
17650                                                 VAR_INIT_STATUS_INITIALIZED);
17651                     }
17652                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
17653                            == DEBUG_PARAMETER_REF)
17654                     {
17655                       tree tdecl
17656                         = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
17657                       tdie = lookup_decl_die (tdecl);
17658                       if (tdie == NULL)
17659                         continue;
17660                     }
17661                   else
17662                     continue;
17663                   if (reg == NULL
17664                       && GET_CODE (XEXP (XEXP (arg, 0), 0))
17665                          != DEBUG_PARAMETER_REF)
17666                     continue;
17667                   val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
17668                                             VOIDmode,
17669                                             VAR_INIT_STATUS_INITIALIZED);
17670                   if (val == NULL)
17671                     continue;
17672                   if (die == NULL)
17673                     die = gen_call_site_die (decl, subr_die, ca_loc);
17674                   cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
17675                                   NULL_TREE);
17676                   if (reg != NULL)
17677                     add_AT_loc (cdie, DW_AT_location, reg);
17678                   else if (tdie != NULL)
17679                     add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
17680                   add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
17681                   if (next_arg != XEXP (arg, 1))
17682                     {
17683                       mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
17684                       if (mode == VOIDmode)
17685                         mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
17686                       val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
17687                                                             0), 1),
17688                                                 mode, VOIDmode,
17689                                                 VAR_INIT_STATUS_INITIALIZED);
17690                       if (val != NULL)
17691                         add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
17692                     }
17693                 }
17694               if (die == NULL
17695                   && (ca_loc->symbol_ref || tloc))
17696                 die = gen_call_site_die (decl, subr_die, ca_loc);
17697               if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
17698                 {
17699                   dw_loc_descr_ref tval = NULL;
17700
17701                   if (tloc != NULL_RTX)
17702                     tval = mem_loc_descriptor (tloc,
17703                                                GET_MODE (tloc) == VOIDmode
17704                                                ? Pmode : GET_MODE (tloc),
17705                                                VOIDmode,
17706                                                VAR_INIT_STATUS_INITIALIZED);
17707                   if (tval)
17708                     add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
17709                   else if (tlocc != NULL_RTX)
17710                     {
17711                       tval = mem_loc_descriptor (tlocc,
17712                                                  GET_MODE (tlocc) == VOIDmode
17713                                                  ? Pmode : GET_MODE (tlocc),
17714                                                  VOIDmode,
17715                                                  VAR_INIT_STATUS_INITIALIZED);
17716                       if (tval)
17717                         add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
17718                                     tval);
17719                     }
17720                 }
17721               if (die != NULL)
17722                 {
17723                   call_site_note_count++;
17724                   if (ca_loc->tail_call_p)
17725                     tail_call_site_note_count++;
17726                 }
17727             }
17728         }
17729       call_arg_locations = NULL;
17730       call_arg_loc_last = NULL;
17731       if (tail_call_site_count >= 0
17732           && tail_call_site_count == tail_call_site_note_count
17733           && !dwarf_strict)
17734         {
17735           if (call_site_count >= 0
17736               && call_site_count == call_site_note_count)
17737             add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
17738           else
17739             add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
17740         }
17741       call_site_count = -1;
17742       tail_call_site_count = -1;
17743     }
17744   /* Add the calling convention attribute if requested.  */
17745   add_calling_convention_attribute (subr_die, decl);
17746
17747 }
17748
17749 /* Returns a hash value for X (which really is a die_struct).  */
17750
17751 static hashval_t
17752 common_block_die_table_hash (const void *x)
17753 {
17754   const_dw_die_ref d = (const_dw_die_ref) x;
17755   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17756 }
17757
17758 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17759    as decl_id and die_parent of die_struct Y.  */
17760
17761 static int
17762 common_block_die_table_eq (const void *x, const void *y)
17763 {
17764   const_dw_die_ref d = (const_dw_die_ref) x;
17765   const_dw_die_ref e = (const_dw_die_ref) y;
17766   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
17767 }
17768
17769 /* Generate a DIE to represent a declared data object.
17770    Either DECL or ORIGIN must be non-null.  */
17771
17772 static void
17773 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
17774 {
17775   HOST_WIDE_INT off;
17776   tree com_decl;
17777   tree decl_or_origin = decl ? decl : origin;
17778   tree ultimate_origin;
17779   dw_die_ref var_die;
17780   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
17781   dw_die_ref origin_die;
17782   bool declaration = (DECL_EXTERNAL (decl_or_origin)
17783                       || class_or_namespace_scope_p (context_die));
17784   bool specialization_p = false;
17785
17786   ultimate_origin = decl_ultimate_origin (decl_or_origin);
17787   if (decl || ultimate_origin)
17788     origin = ultimate_origin;
17789   com_decl = fortran_common (decl_or_origin, &off);
17790
17791   /* Symbol in common gets emitted as a child of the common block, in the form
17792      of a data member.  */
17793   if (com_decl)
17794     {
17795       dw_die_ref com_die;
17796       dw_loc_list_ref loc;
17797       die_node com_die_arg;
17798
17799       var_die = lookup_decl_die (decl_or_origin);
17800       if (var_die)
17801         {
17802           if (get_AT (var_die, DW_AT_location) == NULL)
17803             {
17804               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
17805               if (loc)
17806                 {
17807                   if (off)
17808                     {
17809                       /* Optimize the common case.  */
17810                       if (single_element_loc_list_p (loc)
17811                           && loc->expr->dw_loc_opc == DW_OP_addr
17812                           && loc->expr->dw_loc_next == NULL
17813                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
17814                              == SYMBOL_REF)
17815                         loc->expr->dw_loc_oprnd1.v.val_addr
17816                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17817                         else
17818                           loc_list_plus_const (loc, off);
17819                     }
17820                   add_AT_location_description (var_die, DW_AT_location, loc);
17821                   remove_AT (var_die, DW_AT_declaration);
17822                 }
17823             }
17824           return;
17825         }
17826
17827       if (common_block_die_table == NULL)
17828         common_block_die_table
17829           = htab_create_ggc (10, common_block_die_table_hash,
17830                              common_block_die_table_eq, NULL);
17831
17832       com_die_arg.decl_id = DECL_UID (com_decl);
17833       com_die_arg.die_parent = context_die;
17834       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
17835       loc = loc_list_from_tree (com_decl, 2);
17836       if (com_die == NULL)
17837         {
17838           const char *cnam
17839             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
17840           void **slot;
17841
17842           com_die = new_die (DW_TAG_common_block, context_die, decl);
17843           add_name_and_src_coords_attributes (com_die, com_decl);
17844           if (loc)
17845             {
17846               add_AT_location_description (com_die, DW_AT_location, loc);
17847               /* Avoid sharing the same loc descriptor between
17848                  DW_TAG_common_block and DW_TAG_variable.  */
17849               loc = loc_list_from_tree (com_decl, 2);
17850             }
17851           else if (DECL_EXTERNAL (decl))
17852             add_AT_flag (com_die, DW_AT_declaration, 1);
17853           add_pubname_string (cnam, com_die); /* ??? needed? */
17854           com_die->decl_id = DECL_UID (com_decl);
17855           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
17856           *slot = (void *) com_die;
17857         }
17858       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
17859         {
17860           add_AT_location_description (com_die, DW_AT_location, loc);
17861           loc = loc_list_from_tree (com_decl, 2);
17862           remove_AT (com_die, DW_AT_declaration);
17863         }
17864       var_die = new_die (DW_TAG_variable, com_die, decl);
17865       add_name_and_src_coords_attributes (var_die, decl);
17866       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
17867                           TREE_THIS_VOLATILE (decl), context_die);
17868       add_AT_flag (var_die, DW_AT_external, 1);
17869       if (loc)
17870         {
17871           if (off)
17872             {
17873               /* Optimize the common case.  */
17874               if (single_element_loc_list_p (loc)
17875                   && loc->expr->dw_loc_opc == DW_OP_addr
17876                   && loc->expr->dw_loc_next == NULL
17877                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
17878                 loc->expr->dw_loc_oprnd1.v.val_addr
17879                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17880               else
17881                 loc_list_plus_const (loc, off);
17882             }
17883           add_AT_location_description (var_die, DW_AT_location, loc);
17884         }
17885       else if (DECL_EXTERNAL (decl))
17886         add_AT_flag (var_die, DW_AT_declaration, 1);
17887       equate_decl_number_to_die (decl, var_die);
17888       return;
17889     }
17890
17891   /* If the compiler emitted a definition for the DECL declaration
17892      and if we already emitted a DIE for it, don't emit a second
17893      DIE for it again. Allow re-declarations of DECLs that are
17894      inside functions, though.  */
17895   if (old_die && declaration && !local_scope_p (context_die))
17896     return;
17897
17898   /* For static data members, the declaration in the class is supposed
17899      to have DW_TAG_member tag; the specification should still be
17900      DW_TAG_variable referencing the DW_TAG_member DIE.  */
17901   if (declaration && class_scope_p (context_die))
17902     var_die = new_die (DW_TAG_member, context_die, decl);
17903   else
17904     var_die = new_die (DW_TAG_variable, context_die, decl);
17905
17906   origin_die = NULL;
17907   if (origin != NULL)
17908     origin_die = add_abstract_origin_attribute (var_die, origin);
17909
17910   /* Loop unrolling can create multiple blocks that refer to the same
17911      static variable, so we must test for the DW_AT_declaration flag.
17912
17913      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
17914      copy decls and set the DECL_ABSTRACT flag on them instead of
17915      sharing them.
17916
17917      ??? Duplicated blocks have been rewritten to use .debug_ranges.
17918
17919      ??? The declare_in_namespace support causes us to get two DIEs for one
17920      variable, both of which are declarations.  We want to avoid considering
17921      one to be a specification, so we must test that this DIE is not a
17922      declaration.  */
17923   else if (old_die && TREE_STATIC (decl) && ! declaration
17924            && get_AT_flag (old_die, DW_AT_declaration) == 1)
17925     {
17926       /* This is a definition of a C++ class level static.  */
17927       add_AT_specification (var_die, old_die);
17928       specialization_p = true;
17929       if (DECL_NAME (decl))
17930         {
17931           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17932           struct dwarf_file_data * file_index = lookup_filename (s.file);
17933
17934           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17935             add_AT_file (var_die, DW_AT_decl_file, file_index);
17936
17937           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17938             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
17939
17940           if (old_die->die_tag == DW_TAG_member)
17941             add_linkage_name (var_die, decl);
17942         }
17943     }
17944   else
17945     add_name_and_src_coords_attributes (var_die, decl);
17946
17947   if ((origin == NULL && !specialization_p)
17948       || (origin != NULL
17949           && !DECL_ABSTRACT (decl_or_origin)
17950           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
17951                                        decl_function_context
17952                                                         (decl_or_origin))))
17953     {
17954       tree type = TREE_TYPE (decl_or_origin);
17955
17956       if (decl_by_reference_p (decl_or_origin))
17957         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
17958       else
17959         add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
17960                             TREE_THIS_VOLATILE (decl_or_origin), context_die);
17961     }
17962
17963   if (origin == NULL && !specialization_p)
17964     {
17965       if (TREE_PUBLIC (decl))
17966         add_AT_flag (var_die, DW_AT_external, 1);
17967
17968       if (DECL_ARTIFICIAL (decl))
17969         add_AT_flag (var_die, DW_AT_artificial, 1);
17970
17971       add_accessibility_attribute (var_die, decl);
17972     }
17973
17974   if (declaration)
17975     add_AT_flag (var_die, DW_AT_declaration, 1);
17976
17977   if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL))
17978     equate_decl_number_to_die (decl, var_die);
17979
17980   if (! declaration
17981       && (! DECL_ABSTRACT (decl_or_origin)
17982           /* Local static vars are shared between all clones/inlines,
17983              so emit DW_AT_location on the abstract DIE if DECL_RTL is
17984              already set.  */
17985           || (TREE_CODE (decl_or_origin) == VAR_DECL
17986               && TREE_STATIC (decl_or_origin)
17987               && DECL_RTL_SET_P (decl_or_origin)))
17988       /* When abstract origin already has DW_AT_location attribute, no need
17989          to add it again.  */
17990       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
17991     {
17992       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
17993           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
17994         defer_location (decl_or_origin, var_die);
17995       else
17996         add_location_or_const_value_attribute (var_die, decl_or_origin,
17997                                                decl == NULL, DW_AT_location);
17998       add_pubname (decl_or_origin, var_die);
17999     }
18000   else
18001     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18002 }
18003
18004 /* Generate a DIE to represent a named constant.  */
18005
18006 static void
18007 gen_const_die (tree decl, dw_die_ref context_die)
18008 {
18009   dw_die_ref const_die;
18010   tree type = TREE_TYPE (decl);
18011
18012   const_die = new_die (DW_TAG_constant, context_die, decl);
18013   add_name_and_src_coords_attributes (const_die, decl);
18014   add_type_attribute (const_die, type, 1, 0, context_die);
18015   if (TREE_PUBLIC (decl))
18016     add_AT_flag (const_die, DW_AT_external, 1);
18017   if (DECL_ARTIFICIAL (decl))
18018     add_AT_flag (const_die, DW_AT_artificial, 1);
18019   tree_add_const_value_attribute_for_decl (const_die, decl);
18020 }
18021
18022 /* Generate a DIE to represent a label identifier.  */
18023
18024 static void
18025 gen_label_die (tree decl, dw_die_ref context_die)
18026 {
18027   tree origin = decl_ultimate_origin (decl);
18028   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18029   rtx insn;
18030   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18031
18032   if (origin != NULL)
18033     add_abstract_origin_attribute (lbl_die, origin);
18034   else
18035     add_name_and_src_coords_attributes (lbl_die, decl);
18036
18037   if (DECL_ABSTRACT (decl))
18038     equate_decl_number_to_die (decl, lbl_die);
18039   else
18040     {
18041       insn = DECL_RTL_IF_SET (decl);
18042
18043       /* Deleted labels are programmer specified labels which have been
18044          eliminated because of various optimizations.  We still emit them
18045          here so that it is possible to put breakpoints on them.  */
18046       if (insn
18047           && (LABEL_P (insn)
18048               || ((NOTE_P (insn)
18049                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18050         {
18051           /* When optimization is enabled (via -O) some parts of the compiler
18052              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18053              represent source-level labels which were explicitly declared by
18054              the user.  This really shouldn't be happening though, so catch
18055              it if it ever does happen.  */
18056           gcc_assert (!INSN_DELETED_P (insn));
18057
18058           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18059           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18060         }
18061       else if (insn
18062                && NOTE_P (insn)
18063                && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
18064                && CODE_LABEL_NUMBER (insn) != -1)
18065         {
18066           ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
18067           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18068         }
18069     }
18070 }
18071
18072 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18073    attributes to the DIE for a block STMT, to describe where the inlined
18074    function was called from.  This is similar to add_src_coords_attributes.  */
18075
18076 static inline void
18077 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18078 {
18079   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18080
18081   if (dwarf_version >= 3 || !dwarf_strict)
18082     {
18083       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18084       add_AT_unsigned (die, DW_AT_call_line, s.line);
18085     }
18086 }
18087
18088
18089 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18090    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18091
18092 static inline void
18093 add_high_low_attributes (tree stmt, dw_die_ref die)
18094 {
18095   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18096
18097   if (BLOCK_FRAGMENT_CHAIN (stmt)
18098       && (dwarf_version >= 3 || !dwarf_strict))
18099     {
18100       tree chain;
18101
18102       if (inlined_function_outer_scope_p (stmt))
18103         {
18104           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18105                                        BLOCK_NUMBER (stmt));
18106           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18107         }
18108
18109       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18110
18111       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18112       do
18113         {
18114           add_ranges (chain);
18115           chain = BLOCK_FRAGMENT_CHAIN (chain);
18116         }
18117       while (chain);
18118       add_ranges (NULL);
18119     }
18120   else
18121     {
18122       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18123                                    BLOCK_NUMBER (stmt));
18124       add_AT_lbl_id (die, DW_AT_low_pc, label);
18125       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18126                                    BLOCK_NUMBER (stmt));
18127       add_AT_lbl_id (die, DW_AT_high_pc, label);
18128     }
18129 }
18130
18131 /* Generate a DIE for a lexical block.  */
18132
18133 static void
18134 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18135 {
18136   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18137
18138   if (call_arg_locations)
18139     {
18140       if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18141         VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18142                                BLOCK_NUMBER (stmt) + 1);
18143       VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), stmt_die);
18144     }
18145
18146   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18147     add_high_low_attributes (stmt, stmt_die);
18148
18149   decls_for_scope (stmt, stmt_die, depth);
18150 }
18151
18152 /* Generate a DIE for an inlined subprogram.  */
18153
18154 static void
18155 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18156 {
18157   tree decl;
18158
18159   /* The instance of function that is effectively being inlined shall not
18160      be abstract.  */
18161   gcc_assert (! BLOCK_ABSTRACT (stmt));
18162
18163   decl = block_ultimate_origin (stmt);
18164
18165   /* Emit info for the abstract instance first, if we haven't yet.  We
18166      must emit this even if the block is abstract, otherwise when we
18167      emit the block below (or elsewhere), we may end up trying to emit
18168      a die whose origin die hasn't been emitted, and crashing.  */
18169   dwarf2out_abstract_function (decl);
18170
18171   if (! BLOCK_ABSTRACT (stmt))
18172     {
18173       dw_die_ref subr_die
18174         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18175
18176       if (call_arg_locations)
18177         {
18178           if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18179             VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18180                                    BLOCK_NUMBER (stmt) + 1);
18181           VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), subr_die);
18182         }
18183       add_abstract_origin_attribute (subr_die, decl);
18184       if (TREE_ASM_WRITTEN (stmt))
18185         add_high_low_attributes (stmt, subr_die);
18186       add_call_src_coords_attributes (stmt, subr_die);
18187
18188       decls_for_scope (stmt, subr_die, depth);
18189       current_function_has_inlines = 1;
18190     }
18191 }
18192
18193 /* Generate a DIE for a field in a record, or structure.  */
18194
18195 static void
18196 gen_field_die (tree decl, dw_die_ref context_die)
18197 {
18198   dw_die_ref decl_die;
18199
18200   if (TREE_TYPE (decl) == error_mark_node)
18201     return;
18202
18203   decl_die = new_die (DW_TAG_member, context_die, decl);
18204   add_name_and_src_coords_attributes (decl_die, decl);
18205   add_type_attribute (decl_die, member_declared_type (decl),
18206                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18207                       context_die);
18208
18209   if (DECL_BIT_FIELD_TYPE (decl))
18210     {
18211       add_byte_size_attribute (decl_die, decl);
18212       add_bit_size_attribute (decl_die, decl);
18213       add_bit_offset_attribute (decl_die, decl);
18214     }
18215
18216   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18217     add_data_member_location_attribute (decl_die, decl);
18218
18219   if (DECL_ARTIFICIAL (decl))
18220     add_AT_flag (decl_die, DW_AT_artificial, 1);
18221
18222   add_accessibility_attribute (decl_die, decl);
18223
18224   /* Equate decl number to die, so that we can look up this decl later on.  */
18225   equate_decl_number_to_die (decl, decl_die);
18226 }
18227
18228 #if 0
18229 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18230    Use modified_type_die instead.
18231    We keep this code here just in case these types of DIEs may be needed to
18232    represent certain things in other languages (e.g. Pascal) someday.  */
18233
18234 static void
18235 gen_pointer_type_die (tree type, dw_die_ref context_die)
18236 {
18237   dw_die_ref ptr_die
18238     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18239
18240   equate_type_number_to_die (type, ptr_die);
18241   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18242   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18243 }
18244
18245 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18246    Use modified_type_die instead.
18247    We keep this code here just in case these types of DIEs may be needed to
18248    represent certain things in other languages (e.g. Pascal) someday.  */
18249
18250 static void
18251 gen_reference_type_die (tree type, dw_die_ref context_die)
18252 {
18253   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18254
18255   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18256     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18257   else
18258     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18259
18260   equate_type_number_to_die (type, ref_die);
18261   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18262   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18263 }
18264 #endif
18265
18266 /* Generate a DIE for a pointer to a member type.  */
18267
18268 static void
18269 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18270 {
18271   dw_die_ref ptr_die
18272     = new_die (DW_TAG_ptr_to_member_type,
18273                scope_die_for (type, context_die), type);
18274
18275   equate_type_number_to_die (type, ptr_die);
18276   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18277                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18278   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18279 }
18280
18281 typedef const char *dchar_p; /* For DEF_VEC_P.  */
18282 DEF_VEC_P(dchar_p);
18283 DEF_VEC_ALLOC_P(dchar_p,heap);
18284
18285 static char *producer_string;
18286
18287 /* Return a heap allocated producer string including command line options
18288    if -grecord-gcc-switches.  */
18289
18290 static char *
18291 gen_producer_string (void)
18292 {
18293   size_t j;
18294   VEC(dchar_p, heap) *switches = NULL;
18295   const char *language_string = lang_hooks.name;
18296   char *producer, *tail;
18297   const char *p;
18298   size_t len = dwarf_record_gcc_switches ? 0 : 3;
18299   size_t plen = strlen (language_string) + 1 + strlen (version_string);
18300
18301   for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
18302     switch (save_decoded_options[j].opt_index)
18303       {
18304       case OPT_o:
18305       case OPT_d:
18306       case OPT_dumpbase:
18307       case OPT_dumpdir:
18308       case OPT_auxbase:
18309       case OPT_auxbase_strip:
18310       case OPT_quiet:
18311       case OPT_version:
18312       case OPT_v:
18313       case OPT_w:
18314       case OPT_L:
18315       case OPT_D:
18316       case OPT_I:
18317       case OPT_U:
18318       case OPT_SPECIAL_unknown:
18319       case OPT_SPECIAL_ignore:
18320       case OPT_SPECIAL_program_name:
18321       case OPT_SPECIAL_input_file:
18322       case OPT_grecord_gcc_switches:
18323       case OPT_gno_record_gcc_switches:
18324       case OPT__output_pch_:
18325       case OPT_fdiagnostics_show_location_:
18326       case OPT_fdiagnostics_show_option:
18327       case OPT_fverbose_asm:
18328       case OPT____:
18329       case OPT__sysroot_:
18330       case OPT_nostdinc:
18331       case OPT_nostdinc__:
18332         /* Ignore these.  */
18333         continue;
18334       default:
18335         gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
18336                              == '-');
18337         switch (save_decoded_options[j].canonical_option[0][1])
18338           {
18339           case 'M':
18340           case 'i':
18341           case 'W':
18342             continue;
18343           case 'f':
18344             if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
18345                          "dump", 4) == 0)
18346               continue;
18347             break;
18348           default:
18349             break;
18350           }
18351         VEC_safe_push (dchar_p, heap, switches,
18352                        save_decoded_options[j].orig_option_with_args_text);
18353         len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
18354         break;
18355       }
18356
18357   producer = XNEWVEC (char, plen + 1 + len + 1);
18358   tail = producer;
18359   sprintf (tail, "%s %s", language_string, version_string);
18360   tail += plen;
18361
18362   if (!dwarf_record_gcc_switches)
18363     {
18364 #ifdef MIPS_DEBUGGING_INFO
18365       /* The MIPS/SGI compilers place the 'cc' command line options in the
18366          producer string.  The SGI debugger looks for -g, -g1, -g2, or -g3;
18367          if they do not appear in the producer string, the debugger reaches
18368          the conclusion that the object file is stripped and has no debugging
18369          information.  To get the MIPS/SGI debugger to believe that there is
18370          debugging information in the object file, we add a -g to the producer
18371          string.  */
18372       if (debug_info_level > DINFO_LEVEL_TERSE)
18373         {
18374           memcpy (tail, " -g", 3);
18375           tail += 3;
18376         }
18377 #endif
18378     }
18379
18380   FOR_EACH_VEC_ELT (dchar_p, switches, j, p)
18381     {
18382       len = strlen (p);
18383       *tail = ' ';
18384       memcpy (tail + 1, p, len);
18385       tail += len + 1;
18386     }
18387
18388   *tail = '\0';
18389   VEC_free (dchar_p, heap, switches);
18390   return producer;
18391 }
18392
18393 /* Generate the DIE for the compilation unit.  */
18394
18395 static dw_die_ref
18396 gen_compile_unit_die (const char *filename)
18397 {
18398   dw_die_ref die;
18399   const char *language_string = lang_hooks.name;
18400   int language;
18401
18402   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18403
18404   if (filename)
18405     {
18406       add_name_attribute (die, filename);
18407       /* Don't add cwd for <built-in>.  */
18408       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18409         add_comp_dir_attribute (die);
18410     }
18411
18412   if (producer_string == NULL)
18413     producer_string = gen_producer_string ();
18414   add_AT_string (die, DW_AT_producer, producer_string);
18415
18416   /* If our producer is LTO try to figure out a common language to use
18417      from the global list of translation units.  */
18418   if (strcmp (language_string, "GNU GIMPLE") == 0)
18419     {
18420       unsigned i;
18421       tree t;
18422       const char *common_lang = NULL;
18423
18424       FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
18425         {
18426           if (!TRANSLATION_UNIT_LANGUAGE (t))
18427             continue;
18428           if (!common_lang)
18429             common_lang = TRANSLATION_UNIT_LANGUAGE (t);
18430           else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
18431             ;
18432           else if (strncmp (common_lang, "GNU C", 5) == 0
18433                    && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
18434             /* Mixing C and C++ is ok, use C++ in that case.  */
18435             common_lang = "GNU C++";
18436           else
18437             {
18438               /* Fall back to C.  */
18439               common_lang = NULL;
18440               break;
18441             }
18442         }
18443
18444       if (common_lang)
18445         language_string = common_lang;
18446     }
18447
18448   language = DW_LANG_C89;
18449   if (strcmp (language_string, "GNU C++") == 0)
18450     language = DW_LANG_C_plus_plus;
18451   else if (strcmp (language_string, "GNU F77") == 0)
18452     language = DW_LANG_Fortran77;
18453   else if (strcmp (language_string, "GNU Pascal") == 0)
18454     language = DW_LANG_Pascal83;
18455   else if (dwarf_version >= 3 || !dwarf_strict)
18456     {
18457       if (strcmp (language_string, "GNU Ada") == 0)
18458         language = DW_LANG_Ada95;
18459       else if (strcmp (language_string, "GNU Fortran") == 0)
18460         language = DW_LANG_Fortran95;
18461       else if (strcmp (language_string, "GNU Java") == 0)
18462         language = DW_LANG_Java;
18463       else if (strcmp (language_string, "GNU Objective-C") == 0)
18464         language = DW_LANG_ObjC;
18465       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18466         language = DW_LANG_ObjC_plus_plus;
18467       else if (dwarf_version >= 5 || !dwarf_strict)
18468         {
18469           if (strcmp (language_string, "GNU Go") == 0)
18470             language = DW_LANG_Go;
18471         }
18472     }
18473
18474   add_AT_unsigned (die, DW_AT_language, language);
18475
18476   switch (language)
18477     {
18478     case DW_LANG_Fortran77:
18479     case DW_LANG_Fortran90:
18480     case DW_LANG_Fortran95:
18481       /* Fortran has case insensitive identifiers and the front-end
18482          lowercases everything.  */
18483       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
18484       break;
18485     default:
18486       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
18487       break;
18488     }
18489   return die;
18490 }
18491
18492 /* Generate the DIE for a base class.  */
18493
18494 static void
18495 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18496 {
18497   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18498
18499   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18500   add_data_member_location_attribute (die, binfo);
18501
18502   if (BINFO_VIRTUAL_P (binfo))
18503     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18504
18505   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
18506      children, otherwise the default is DW_ACCESS_public.  In DWARF2
18507      the default has always been DW_ACCESS_private.  */
18508   if (access == access_public_node)
18509     {
18510       if (dwarf_version == 2
18511           || context_die->die_tag == DW_TAG_class_type)
18512       add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18513     }
18514   else if (access == access_protected_node)
18515     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18516   else if (dwarf_version > 2
18517            && context_die->die_tag != DW_TAG_class_type)
18518     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
18519 }
18520
18521 /* Generate a DIE for a class member.  */
18522
18523 static void
18524 gen_member_die (tree type, dw_die_ref context_die)
18525 {
18526   tree member;
18527   tree binfo = TYPE_BINFO (type);
18528   dw_die_ref child;
18529
18530   /* If this is not an incomplete type, output descriptions of each of its
18531      members. Note that as we output the DIEs necessary to represent the
18532      members of this record or union type, we will also be trying to output
18533      DIEs to represent the *types* of those members. However the `type'
18534      function (above) will specifically avoid generating type DIEs for member
18535      types *within* the list of member DIEs for this (containing) type except
18536      for those types (of members) which are explicitly marked as also being
18537      members of this (containing) type themselves.  The g++ front- end can
18538      force any given type to be treated as a member of some other (containing)
18539      type by setting the TYPE_CONTEXT of the given (member) type to point to
18540      the TREE node representing the appropriate (containing) type.  */
18541
18542   /* First output info about the base classes.  */
18543   if (binfo)
18544     {
18545       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18546       int i;
18547       tree base;
18548
18549       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18550         gen_inheritance_die (base,
18551                              (accesses ? VEC_index (tree, accesses, i)
18552                               : access_public_node), context_die);
18553     }
18554
18555   /* Now output info about the data members and type members.  */
18556   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
18557     {
18558       /* If we thought we were generating minimal debug info for TYPE
18559          and then changed our minds, some of the member declarations
18560          may have already been defined.  Don't define them again, but
18561          do put them in the right order.  */
18562
18563       child = lookup_decl_die (member);
18564       if (child)
18565         splice_child_die (context_die, child);
18566       else
18567         gen_decl_die (member, NULL, context_die);
18568     }
18569
18570   /* Now output info about the function members (if any).  */
18571   for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
18572     {
18573       /* Don't include clones in the member list.  */
18574       if (DECL_ABSTRACT_ORIGIN (member))
18575         continue;
18576
18577       child = lookup_decl_die (member);
18578       if (child)
18579         splice_child_die (context_die, child);
18580       else
18581         gen_decl_die (member, NULL, context_die);
18582     }
18583 }
18584
18585 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18586    is set, we pretend that the type was never defined, so we only get the
18587    member DIEs needed by later specification DIEs.  */
18588
18589 static void
18590 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18591                                 enum debug_info_usage usage)
18592 {
18593   dw_die_ref type_die = lookup_type_die (type);
18594   dw_die_ref scope_die = 0;
18595   int nested = 0;
18596   int complete = (TYPE_SIZE (type)
18597                   && (! TYPE_STUB_DECL (type)
18598                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18599   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18600   complete = complete && should_emit_struct_debug (type, usage);
18601
18602   if (type_die && ! complete)
18603     return;
18604
18605   if (TYPE_CONTEXT (type) != NULL_TREE
18606       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18607           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18608     nested = 1;
18609
18610   scope_die = scope_die_for (type, context_die);
18611
18612   if (! type_die || (nested && is_cu_die (scope_die)))
18613     /* First occurrence of type or toplevel definition of nested class.  */
18614     {
18615       dw_die_ref old_die = type_die;
18616
18617       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18618                           ? record_type_tag (type) : DW_TAG_union_type,
18619                           scope_die, type);
18620       equate_type_number_to_die (type, type_die);
18621       if (old_die)
18622         add_AT_specification (type_die, old_die);
18623       else
18624         {
18625           add_name_attribute (type_die, type_tag (type));
18626           add_gnat_descriptive_type_attribute (type_die, type, context_die);
18627           if (TYPE_ARTIFICIAL (type))
18628             add_AT_flag (type_die, DW_AT_artificial, 1);
18629         }
18630     }
18631   else
18632     remove_AT (type_die, DW_AT_declaration);
18633
18634   /* Generate child dies for template paramaters.  */
18635   if (debug_info_level > DINFO_LEVEL_TERSE
18636       && COMPLETE_TYPE_P (type))
18637     schedule_generic_params_dies_gen (type);
18638
18639   /* If this type has been completed, then give it a byte_size attribute and
18640      then give a list of members.  */
18641   if (complete && !ns_decl)
18642     {
18643       /* Prevent infinite recursion in cases where the type of some member of
18644          this type is expressed in terms of this type itself.  */
18645       TREE_ASM_WRITTEN (type) = 1;
18646       add_byte_size_attribute (type_die, type);
18647       if (TYPE_STUB_DECL (type) != NULL_TREE)
18648         {
18649           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18650           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
18651         }
18652
18653       /* If the first reference to this type was as the return type of an
18654          inline function, then it may not have a parent.  Fix this now.  */
18655       if (type_die->die_parent == NULL)
18656         add_child_die (scope_die, type_die);
18657
18658       push_decl_scope (type);
18659       gen_member_die (type, type_die);
18660       pop_decl_scope ();
18661
18662       /* GNU extension: Record what type our vtable lives in.  */
18663       if (TYPE_VFIELD (type))
18664         {
18665           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18666
18667           gen_type_die (vtype, context_die);
18668           add_AT_die_ref (type_die, DW_AT_containing_type,
18669                           lookup_type_die (vtype));
18670         }
18671     }
18672   else
18673     {
18674       add_AT_flag (type_die, DW_AT_declaration, 1);
18675
18676       /* We don't need to do this for function-local types.  */
18677       if (TYPE_STUB_DECL (type)
18678           && ! decl_function_context (TYPE_STUB_DECL (type)))
18679         VEC_safe_push (tree, gc, incomplete_types, type);
18680     }
18681
18682   if (get_AT (type_die, DW_AT_name))
18683     add_pubtype (type, type_die);
18684 }
18685
18686 /* Generate a DIE for a subroutine _type_.  */
18687
18688 static void
18689 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18690 {
18691   tree return_type = TREE_TYPE (type);
18692   dw_die_ref subr_die
18693     = new_die (DW_TAG_subroutine_type,
18694                scope_die_for (type, context_die), type);
18695
18696   equate_type_number_to_die (type, subr_die);
18697   add_prototyped_attribute (subr_die, type);
18698   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18699   gen_formal_types_die (type, subr_die);
18700
18701   if (get_AT (subr_die, DW_AT_name))
18702     add_pubtype (type, subr_die);
18703 }
18704
18705 /* Generate a DIE for a type definition.  */
18706
18707 static void
18708 gen_typedef_die (tree decl, dw_die_ref context_die)
18709 {
18710   dw_die_ref type_die;
18711   tree origin;
18712
18713   if (TREE_ASM_WRITTEN (decl))
18714     return;
18715
18716   TREE_ASM_WRITTEN (decl) = 1;
18717   type_die = new_die (DW_TAG_typedef, context_die, decl);
18718   origin = decl_ultimate_origin (decl);
18719   if (origin != NULL)
18720     add_abstract_origin_attribute (type_die, origin);
18721   else
18722     {
18723       tree type;
18724
18725       add_name_and_src_coords_attributes (type_die, decl);
18726       if (DECL_ORIGINAL_TYPE (decl))
18727         {
18728           type = DECL_ORIGINAL_TYPE (decl);
18729
18730           gcc_assert (type != TREE_TYPE (decl));
18731           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18732         }
18733       else
18734         {
18735           type = TREE_TYPE (decl);
18736
18737           if (is_naming_typedef_decl (TYPE_NAME (type)))
18738             {
18739               /* Here, we are in the case of decl being a typedef naming
18740                  an anonymous type, e.g:
18741                      typedef struct {...} foo;
18742                  In that case TREE_TYPE (decl) is not a typedef variant
18743                  type and TYPE_NAME of the anonymous type is set to the
18744                  TYPE_DECL of the typedef. This construct is emitted by
18745                  the C++ FE.
18746
18747                  TYPE is the anonymous struct named by the typedef
18748                  DECL. As we need the DW_AT_type attribute of the
18749                  DW_TAG_typedef to point to the DIE of TYPE, let's
18750                  generate that DIE right away. add_type_attribute
18751                  called below will then pick (via lookup_type_die) that
18752                  anonymous struct DIE.  */
18753               if (!TREE_ASM_WRITTEN (type))
18754                 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
18755
18756               /* This is a GNU Extension.  We are adding a
18757                  DW_AT_linkage_name attribute to the DIE of the
18758                  anonymous struct TYPE.  The value of that attribute
18759                  is the name of the typedef decl naming the anonymous
18760                  struct.  This greatly eases the work of consumers of
18761                  this debug info.  */
18762               add_linkage_attr (lookup_type_die (type), decl);
18763             }
18764         }
18765
18766       add_type_attribute (type_die, type, TREE_READONLY (decl),
18767                           TREE_THIS_VOLATILE (decl), context_die);
18768
18769       if (is_naming_typedef_decl (decl))
18770         /* We want that all subsequent calls to lookup_type_die with
18771            TYPE in argument yield the DW_TAG_typedef we have just
18772            created.  */
18773         equate_type_number_to_die (type, type_die);
18774
18775       add_accessibility_attribute (type_die, decl);
18776     }
18777
18778   if (DECL_ABSTRACT (decl))
18779     equate_decl_number_to_die (decl, type_die);
18780
18781   if (get_AT (type_die, DW_AT_name))
18782     add_pubtype (decl, type_die);
18783 }
18784
18785 /* Generate a DIE for a struct, class, enum or union type.  */
18786
18787 static void
18788 gen_tagged_type_die (tree type,
18789                      dw_die_ref context_die,
18790                      enum debug_info_usage usage)
18791 {
18792   int need_pop;
18793
18794   if (type == NULL_TREE
18795       || !is_tagged_type (type))
18796     return;
18797
18798   /* If this is a nested type whose containing class hasn't been written
18799      out yet, writing it out will cover this one, too.  This does not apply
18800      to instantiations of member class templates; they need to be added to
18801      the containing class as they are generated.  FIXME: This hurts the
18802      idea of combining type decls from multiple TUs, since we can't predict
18803      what set of template instantiations we'll get.  */
18804   if (TYPE_CONTEXT (type)
18805       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18806       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18807     {
18808       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18809
18810       if (TREE_ASM_WRITTEN (type))
18811         return;
18812
18813       /* If that failed, attach ourselves to the stub.  */
18814       push_decl_scope (TYPE_CONTEXT (type));
18815       context_die = lookup_type_die (TYPE_CONTEXT (type));
18816       need_pop = 1;
18817     }
18818   else if (TYPE_CONTEXT (type) != NULL_TREE
18819            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18820     {
18821       /* If this type is local to a function that hasn't been written
18822          out yet, use a NULL context for now; it will be fixed up in
18823          decls_for_scope.  */
18824       context_die = lookup_decl_die (TYPE_CONTEXT (type));
18825       /* A declaration DIE doesn't count; nested types need to go in the
18826          specification.  */
18827       if (context_die && is_declaration_die (context_die))
18828         context_die = NULL;
18829       need_pop = 0;
18830     }
18831   else
18832     {
18833       context_die = declare_in_namespace (type, context_die);
18834       need_pop = 0;
18835     }
18836
18837   if (TREE_CODE (type) == ENUMERAL_TYPE)
18838     {
18839       /* This might have been written out by the call to
18840          declare_in_namespace.  */
18841       if (!TREE_ASM_WRITTEN (type))
18842         gen_enumeration_type_die (type, context_die);
18843     }
18844   else
18845     gen_struct_or_union_type_die (type, context_die, usage);
18846
18847   if (need_pop)
18848     pop_decl_scope ();
18849
18850   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18851      it up if it is ever completed.  gen_*_type_die will set it for us
18852      when appropriate.  */
18853 }
18854
18855 /* Generate a type description DIE.  */
18856
18857 static void
18858 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18859                          enum debug_info_usage usage)
18860 {
18861   struct array_descr_info info;
18862
18863   if (type == NULL_TREE || type == error_mark_node)
18864     return;
18865
18866   if (TYPE_NAME (type) != NULL_TREE
18867       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18868       && is_redundant_typedef (TYPE_NAME (type))
18869       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18870     /* The DECL of this type is a typedef we don't want to emit debug
18871        info for but we want debug info for its underlying typedef.
18872        This can happen for e.g, the injected-class-name of a C++
18873        type.  */
18874     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
18875
18876   /* If TYPE is a typedef type variant, let's generate debug info
18877      for the parent typedef which TYPE is a type of.  */
18878   if (typedef_variant_p (type))
18879     {
18880       if (TREE_ASM_WRITTEN (type))
18881         return;
18882
18883       /* Prevent broken recursion; we can't hand off to the same type.  */
18884       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18885
18886       /* Use the DIE of the containing namespace as the parent DIE of
18887          the type description DIE we want to generate.  */
18888       if (DECL_FILE_SCOPE_P (TYPE_NAME (type))
18889           || (DECL_CONTEXT (TYPE_NAME (type))
18890               && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL))
18891         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18892
18893       TREE_ASM_WRITTEN (type) = 1;
18894
18895       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18896       return;
18897     }
18898
18899   /* If type is an anonymous tagged type named by a typedef, let's
18900      generate debug info for the typedef.  */
18901   if (is_naming_typedef_decl (TYPE_NAME (type)))
18902     {
18903       /* Use the DIE of the containing namespace as the parent DIE of
18904          the type description DIE we want to generate.  */
18905       if (DECL_CONTEXT (TYPE_NAME (type))
18906           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18907         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18908       
18909       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18910       return;
18911     }
18912
18913   /* If this is an array type with hidden descriptor, handle it first.  */
18914   if (!TREE_ASM_WRITTEN (type)
18915       && lang_hooks.types.get_array_descr_info
18916       && lang_hooks.types.get_array_descr_info (type, &info)
18917       && (dwarf_version >= 3 || !dwarf_strict))
18918     {
18919       gen_descr_array_type_die (type, &info, context_die);
18920       TREE_ASM_WRITTEN (type) = 1;
18921       return;
18922     }
18923
18924   /* We are going to output a DIE to represent the unqualified version
18925      of this type (i.e. without any const or volatile qualifiers) so
18926      get the main variant (i.e. the unqualified version) of this type
18927      now.  (Vectors are special because the debugging info is in the
18928      cloned type itself).  */
18929   if (TREE_CODE (type) != VECTOR_TYPE)
18930     type = type_main_variant (type);
18931
18932   if (TREE_ASM_WRITTEN (type))
18933     return;
18934
18935   switch (TREE_CODE (type))
18936     {
18937     case ERROR_MARK:
18938       break;
18939
18940     case POINTER_TYPE:
18941     case REFERENCE_TYPE:
18942       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
18943          ensures that the gen_type_die recursion will terminate even if the
18944          type is recursive.  Recursive types are possible in Ada.  */
18945       /* ??? We could perhaps do this for all types before the switch
18946          statement.  */
18947       TREE_ASM_WRITTEN (type) = 1;
18948
18949       /* For these types, all that is required is that we output a DIE (or a
18950          set of DIEs) to represent the "basis" type.  */
18951       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18952                                 DINFO_USAGE_IND_USE);
18953       break;
18954
18955     case OFFSET_TYPE:
18956       /* This code is used for C++ pointer-to-data-member types.
18957          Output a description of the relevant class type.  */
18958       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
18959                                         DINFO_USAGE_IND_USE);
18960
18961       /* Output a description of the type of the object pointed to.  */
18962       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18963                                         DINFO_USAGE_IND_USE);
18964
18965       /* Now output a DIE to represent this pointer-to-data-member type
18966          itself.  */
18967       gen_ptr_to_mbr_type_die (type, context_die);
18968       break;
18969
18970     case FUNCTION_TYPE:
18971       /* Force out return type (in case it wasn't forced out already).  */
18972       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18973                                         DINFO_USAGE_DIR_USE);
18974       gen_subroutine_type_die (type, context_die);
18975       break;
18976
18977     case METHOD_TYPE:
18978       /* Force out return type (in case it wasn't forced out already).  */
18979       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18980                                         DINFO_USAGE_DIR_USE);
18981       gen_subroutine_type_die (type, context_die);
18982       break;
18983
18984     case ARRAY_TYPE:
18985       gen_array_type_die (type, context_die);
18986       break;
18987
18988     case VECTOR_TYPE:
18989       gen_array_type_die (type, context_die);
18990       break;
18991
18992     case ENUMERAL_TYPE:
18993     case RECORD_TYPE:
18994     case UNION_TYPE:
18995     case QUAL_UNION_TYPE:
18996       gen_tagged_type_die (type, context_die, usage);
18997       return;
18998
18999     case VOID_TYPE:
19000     case INTEGER_TYPE:
19001     case REAL_TYPE:
19002     case FIXED_POINT_TYPE:
19003     case COMPLEX_TYPE:
19004     case BOOLEAN_TYPE:
19005       /* No DIEs needed for fundamental types.  */
19006       break;
19007
19008     case NULLPTR_TYPE:
19009     case LANG_TYPE:
19010       /* Just use DW_TAG_unspecified_type.  */
19011       {
19012         dw_die_ref type_die = lookup_type_die (type);
19013         if (type_die == NULL)
19014           {
19015             tree name = TYPE_NAME (type);
19016             if (TREE_CODE (name) == TYPE_DECL)
19017               name = DECL_NAME (name);
19018             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (), type);
19019             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
19020             equate_type_number_to_die (type, type_die);
19021           }
19022       }
19023       break;
19024
19025     default:
19026       gcc_unreachable ();
19027     }
19028
19029   TREE_ASM_WRITTEN (type) = 1;
19030 }
19031
19032 static void
19033 gen_type_die (tree type, dw_die_ref context_die)
19034 {
19035   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19036 }
19037
19038 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19039    things which are local to the given block.  */
19040
19041 static void
19042 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19043 {
19044   int must_output_die = 0;
19045   bool inlined_func;
19046
19047   /* Ignore blocks that are NULL.  */
19048   if (stmt == NULL_TREE)
19049     return;
19050
19051   inlined_func = inlined_function_outer_scope_p (stmt);
19052
19053   /* If the block is one fragment of a non-contiguous block, do not
19054      process the variables, since they will have been done by the
19055      origin block.  Do process subblocks.  */
19056   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19057     {
19058       tree sub;
19059
19060       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19061         gen_block_die (sub, context_die, depth + 1);
19062
19063       return;
19064     }
19065
19066   /* Determine if we need to output any Dwarf DIEs at all to represent this
19067      block.  */
19068   if (inlined_func)
19069     /* The outer scopes for inlinings *must* always be represented.  We
19070        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19071     must_output_die = 1;
19072   else
19073     {
19074       /* Determine if this block directly contains any "significant"
19075          local declarations which we will need to output DIEs for.  */
19076       if (debug_info_level > DINFO_LEVEL_TERSE)
19077         /* We are not in terse mode so *any* local declaration counts
19078            as being a "significant" one.  */
19079         must_output_die = ((BLOCK_VARS (stmt) != NULL
19080                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19081                            && (TREE_USED (stmt)
19082                                || TREE_ASM_WRITTEN (stmt)
19083                                || BLOCK_ABSTRACT (stmt)));
19084       else if ((TREE_USED (stmt)
19085                 || TREE_ASM_WRITTEN (stmt)
19086                 || BLOCK_ABSTRACT (stmt))
19087                && !dwarf2out_ignore_block (stmt))
19088         must_output_die = 1;
19089     }
19090
19091   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19092      DIE for any block which contains no significant local declarations at
19093      all.  Rather, in such cases we just call `decls_for_scope' so that any
19094      needed Dwarf info for any sub-blocks will get properly generated. Note
19095      that in terse mode, our definition of what constitutes a "significant"
19096      local declaration gets restricted to include only inlined function
19097      instances and local (nested) function definitions.  */
19098   if (must_output_die)
19099     {
19100       if (inlined_func)
19101         {
19102           /* If STMT block is abstract, that means we have been called
19103              indirectly from dwarf2out_abstract_function.
19104              That function rightfully marks the descendent blocks (of
19105              the abstract function it is dealing with) as being abstract,
19106              precisely to prevent us from emitting any
19107              DW_TAG_inlined_subroutine DIE as a descendent
19108              of an abstract function instance. So in that case, we should
19109              not call gen_inlined_subroutine_die.
19110
19111              Later though, when cgraph asks dwarf2out to emit info
19112              for the concrete instance of the function decl into which
19113              the concrete instance of STMT got inlined, the later will lead
19114              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19115           if (! BLOCK_ABSTRACT (stmt))
19116             gen_inlined_subroutine_die (stmt, context_die, depth);
19117         }
19118       else
19119         gen_lexical_block_die (stmt, context_die, depth);
19120     }
19121   else
19122     decls_for_scope (stmt, context_die, depth);
19123 }
19124
19125 /* Process variable DECL (or variable with origin ORIGIN) within
19126    block STMT and add it to CONTEXT_DIE.  */
19127 static void
19128 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19129 {
19130   dw_die_ref die;
19131   tree decl_or_origin = decl ? decl : origin;
19132
19133   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19134     die = lookup_decl_die (decl_or_origin);
19135   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19136            && TYPE_DECL_IS_STUB (decl_or_origin))
19137     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19138   else
19139     die = NULL;
19140
19141   if (die != NULL && die->die_parent == NULL)
19142     add_child_die (context_die, die);
19143   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19144     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19145                                          stmt, context_die);
19146   else
19147     gen_decl_die (decl, origin, context_die);
19148 }
19149
19150 /* Generate all of the decls declared within a given scope and (recursively)
19151    all of its sub-blocks.  */
19152
19153 static void
19154 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19155 {
19156   tree decl;
19157   unsigned int i;
19158   tree subblocks;
19159
19160   /* Ignore NULL blocks.  */
19161   if (stmt == NULL_TREE)
19162     return;
19163
19164   /* Output the DIEs to represent all of the data objects and typedefs
19165      declared directly within this block but not within any nested
19166      sub-blocks.  Also, nested function and tag DIEs have been
19167      generated with a parent of NULL; fix that up now.  */
19168   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
19169     process_scope_var (stmt, decl, NULL_TREE, context_die);
19170   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19171     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19172                        context_die);
19173
19174   /* If we're at -g1, we're not interested in subblocks.  */
19175   if (debug_info_level <= DINFO_LEVEL_TERSE)
19176     return;
19177
19178   /* Output the DIEs to represent all sub-blocks (and the items declared
19179      therein) of this block.  */
19180   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19181        subblocks != NULL;
19182        subblocks = BLOCK_CHAIN (subblocks))
19183     gen_block_die (subblocks, context_die, depth + 1);
19184 }
19185
19186 /* Is this a typedef we can avoid emitting?  */
19187
19188 static inline int
19189 is_redundant_typedef (const_tree decl)
19190 {
19191   if (TYPE_DECL_IS_STUB (decl))
19192     return 1;
19193
19194   if (DECL_ARTIFICIAL (decl)
19195       && DECL_CONTEXT (decl)
19196       && is_tagged_type (DECL_CONTEXT (decl))
19197       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19198       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19199     /* Also ignore the artificial member typedef for the class name.  */
19200     return 1;
19201
19202   return 0;
19203 }
19204
19205 /* Return TRUE if TYPE is a typedef that names a type for linkage
19206    purposes. This kind of typedefs is produced by the C++ FE for
19207    constructs like:
19208
19209    typedef struct {...} foo;
19210
19211    In that case, there is no typedef variant type produced for foo.
19212    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
19213    struct type.  */
19214
19215 static bool
19216 is_naming_typedef_decl (const_tree decl)
19217 {
19218   if (decl == NULL_TREE
19219       || TREE_CODE (decl) != TYPE_DECL
19220       || !is_tagged_type (TREE_TYPE (decl))
19221       || DECL_IS_BUILTIN (decl)
19222       || is_redundant_typedef (decl)
19223       /* It looks like Ada produces TYPE_DECLs that are very similar
19224          to C++ naming typedefs but that have different
19225          semantics. Let's be specific to c++ for now.  */
19226       || !is_cxx ())
19227     return FALSE;
19228
19229   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
19230           && TYPE_NAME (TREE_TYPE (decl)) == decl
19231           && (TYPE_STUB_DECL (TREE_TYPE (decl))
19232               != TYPE_NAME (TREE_TYPE (decl))));
19233 }
19234
19235 /* Returns the DIE for a context.  */
19236
19237 static inline dw_die_ref
19238 get_context_die (tree context)
19239 {
19240   if (context)
19241     {
19242       /* Find die that represents this context.  */
19243       if (TYPE_P (context))
19244         {
19245           context = TYPE_MAIN_VARIANT (context);
19246           return strip_naming_typedef (context, force_type_die (context));
19247         }
19248       else
19249         return force_decl_die (context);
19250     }
19251   return comp_unit_die ();
19252 }
19253
19254 /* Returns the DIE for decl.  A DIE will always be returned.  */
19255
19256 static dw_die_ref
19257 force_decl_die (tree decl)
19258 {
19259   dw_die_ref decl_die;
19260   unsigned saved_external_flag;
19261   tree save_fn = NULL_TREE;
19262   decl_die = lookup_decl_die (decl);
19263   if (!decl_die)
19264     {
19265       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19266
19267       decl_die = lookup_decl_die (decl);
19268       if (decl_die)
19269         return decl_die;
19270
19271       switch (TREE_CODE (decl))
19272         {
19273         case FUNCTION_DECL:
19274           /* Clear current_function_decl, so that gen_subprogram_die thinks
19275              that this is a declaration. At this point, we just want to force
19276              declaration die.  */
19277           save_fn = current_function_decl;
19278           current_function_decl = NULL_TREE;
19279           gen_subprogram_die (decl, context_die);
19280           current_function_decl = save_fn;
19281           break;
19282
19283         case VAR_DECL:
19284           /* Set external flag to force declaration die. Restore it after
19285            gen_decl_die() call.  */
19286           saved_external_flag = DECL_EXTERNAL (decl);
19287           DECL_EXTERNAL (decl) = 1;
19288           gen_decl_die (decl, NULL, context_die);
19289           DECL_EXTERNAL (decl) = saved_external_flag;
19290           break;
19291
19292         case NAMESPACE_DECL:
19293           if (dwarf_version >= 3 || !dwarf_strict)
19294             dwarf2out_decl (decl);
19295           else
19296             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19297             decl_die = comp_unit_die ();
19298           break;
19299
19300         case TRANSLATION_UNIT_DECL:
19301           decl_die = comp_unit_die ();
19302           break;
19303
19304         default:
19305           gcc_unreachable ();
19306         }
19307
19308       /* We should be able to find the DIE now.  */
19309       if (!decl_die)
19310         decl_die = lookup_decl_die (decl);
19311       gcc_assert (decl_die);
19312     }
19313
19314   return decl_die;
19315 }
19316
19317 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19318    always returned.  */
19319
19320 static dw_die_ref
19321 force_type_die (tree type)
19322 {
19323   dw_die_ref type_die;
19324
19325   type_die = lookup_type_die (type);
19326   if (!type_die)
19327     {
19328       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19329
19330       type_die = modified_type_die (type, TYPE_READONLY (type),
19331                                     TYPE_VOLATILE (type), context_die);
19332       gcc_assert (type_die);
19333     }
19334   return type_die;
19335 }
19336
19337 /* Force out any required namespaces to be able to output DECL,
19338    and return the new context_die for it, if it's changed.  */
19339
19340 static dw_die_ref
19341 setup_namespace_context (tree thing, dw_die_ref context_die)
19342 {
19343   tree context = (DECL_P (thing)
19344                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19345   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19346     /* Force out the namespace.  */
19347     context_die = force_decl_die (context);
19348
19349   return context_die;
19350 }
19351
19352 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19353    type) within its namespace, if appropriate.
19354
19355    For compatibility with older debuggers, namespace DIEs only contain
19356    declarations; all definitions are emitted at CU scope.  */
19357
19358 static dw_die_ref
19359 declare_in_namespace (tree thing, dw_die_ref context_die)
19360 {
19361   dw_die_ref ns_context;
19362
19363   if (debug_info_level <= DINFO_LEVEL_TERSE)
19364     return context_die;
19365
19366   /* If this decl is from an inlined function, then don't try to emit it in its
19367      namespace, as we will get confused.  It would have already been emitted
19368      when the abstract instance of the inline function was emitted anyways.  */
19369   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19370     return context_die;
19371
19372   ns_context = setup_namespace_context (thing, context_die);
19373
19374   if (ns_context != context_die)
19375     {
19376       if (is_fortran ())
19377         return ns_context;
19378       if (DECL_P (thing))
19379         gen_decl_die (thing, NULL, ns_context);
19380       else
19381         gen_type_die (thing, ns_context);
19382     }
19383   return context_die;
19384 }
19385
19386 /* Generate a DIE for a namespace or namespace alias.  */
19387
19388 static void
19389 gen_namespace_die (tree decl, dw_die_ref context_die)
19390 {
19391   dw_die_ref namespace_die;
19392
19393   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19394      they are an alias of.  */
19395   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19396     {
19397       /* Output a real namespace or module.  */
19398       context_die = setup_namespace_context (decl, comp_unit_die ());
19399       namespace_die = new_die (is_fortran ()
19400                                ? DW_TAG_module : DW_TAG_namespace,
19401                                context_die, decl);
19402       /* For Fortran modules defined in different CU don't add src coords.  */
19403       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19404         {
19405           const char *name = dwarf2_name (decl, 0);
19406           if (name)
19407             add_name_attribute (namespace_die, name);
19408         }
19409       else
19410         add_name_and_src_coords_attributes (namespace_die, decl);
19411       if (DECL_EXTERNAL (decl))
19412         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19413       equate_decl_number_to_die (decl, namespace_die);
19414     }
19415   else
19416     {
19417       /* Output a namespace alias.  */
19418
19419       /* Force out the namespace we are an alias of, if necessary.  */
19420       dw_die_ref origin_die
19421         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19422
19423       if (DECL_FILE_SCOPE_P (decl)
19424           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19425         context_die = setup_namespace_context (decl, comp_unit_die ());
19426       /* Now create the namespace alias DIE.  */
19427       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19428       add_name_and_src_coords_attributes (namespace_die, decl);
19429       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19430       equate_decl_number_to_die (decl, namespace_die);
19431     }
19432 }
19433
19434 /* Generate Dwarf debug information for a decl described by DECL.
19435    The return value is currently only meaningful for PARM_DECLs,
19436    for all other decls it returns NULL.  */
19437
19438 static dw_die_ref
19439 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19440 {
19441   tree decl_or_origin = decl ? decl : origin;
19442   tree class_origin = NULL, ultimate_origin;
19443
19444   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19445     return NULL;
19446
19447   switch (TREE_CODE (decl_or_origin))
19448     {
19449     case ERROR_MARK:
19450       break;
19451
19452     case CONST_DECL:
19453       if (!is_fortran () && !is_ada ())
19454         {
19455           /* The individual enumerators of an enum type get output when we output
19456              the Dwarf representation of the relevant enum type itself.  */
19457           break;
19458         }
19459
19460       /* Emit its type.  */
19461       gen_type_die (TREE_TYPE (decl), context_die);
19462
19463       /* And its containing namespace.  */
19464       context_die = declare_in_namespace (decl, context_die);
19465
19466       gen_const_die (decl, context_die);
19467       break;
19468
19469     case FUNCTION_DECL:
19470       /* Don't output any DIEs to represent mere function declarations,
19471          unless they are class members or explicit block externs.  */
19472       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19473           && DECL_FILE_SCOPE_P (decl_or_origin)
19474           && (current_function_decl == NULL_TREE
19475               || DECL_ARTIFICIAL (decl_or_origin)))
19476         break;
19477
19478 #if 0
19479       /* FIXME */
19480       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19481          on local redeclarations of global functions.  That seems broken.  */
19482       if (current_function_decl != decl)
19483         /* This is only a declaration.  */;
19484 #endif
19485
19486       /* If we're emitting a clone, emit info for the abstract instance.  */
19487       if (origin || DECL_ORIGIN (decl) != decl)
19488         dwarf2out_abstract_function (origin
19489                                      ? DECL_ORIGIN (origin)
19490                                      : DECL_ABSTRACT_ORIGIN (decl));
19491
19492       /* If we're emitting an out-of-line copy of an inline function,
19493          emit info for the abstract instance and set up to refer to it.  */
19494       else if (cgraph_function_possibly_inlined_p (decl)
19495                && ! DECL_ABSTRACT (decl)
19496                && ! class_or_namespace_scope_p (context_die)
19497                /* dwarf2out_abstract_function won't emit a die if this is just
19498                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19499                   that case, because that works only if we have a die.  */
19500                && DECL_INITIAL (decl) != NULL_TREE)
19501         {
19502           dwarf2out_abstract_function (decl);
19503           set_decl_origin_self (decl);
19504         }
19505
19506       /* Otherwise we're emitting the primary DIE for this decl.  */
19507       else if (debug_info_level > DINFO_LEVEL_TERSE)
19508         {
19509           /* Before we describe the FUNCTION_DECL itself, make sure that we
19510              have its containing type.  */
19511           if (!origin)
19512             origin = decl_class_context (decl);
19513           if (origin != NULL_TREE)
19514             gen_type_die (origin, context_die);
19515
19516           /* And its return type.  */
19517           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19518
19519           /* And its virtual context.  */
19520           if (DECL_VINDEX (decl) != NULL_TREE)
19521             gen_type_die (DECL_CONTEXT (decl), context_die);
19522
19523           /* Make sure we have a member DIE for decl.  */
19524           if (origin != NULL_TREE)
19525             gen_type_die_for_member (origin, decl, context_die);
19526
19527           /* And its containing namespace.  */
19528           context_die = declare_in_namespace (decl, context_die);
19529         }
19530
19531       /* Now output a DIE to represent the function itself.  */
19532       if (decl)
19533         gen_subprogram_die (decl, context_die);
19534       break;
19535
19536     case TYPE_DECL:
19537       /* If we are in terse mode, don't generate any DIEs to represent any
19538          actual typedefs.  */
19539       if (debug_info_level <= DINFO_LEVEL_TERSE)
19540         break;
19541
19542       /* In the special case of a TYPE_DECL node representing the declaration
19543          of some type tag, if the given TYPE_DECL is marked as having been
19544          instantiated from some other (original) TYPE_DECL node (e.g. one which
19545          was generated within the original definition of an inline function) we
19546          used to generate a special (abbreviated) DW_TAG_structure_type,
19547          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19548          should be actually referencing those DIEs, as variable DIEs with that
19549          type would be emitted already in the abstract origin, so it was always
19550          removed during unused type prunning.  Don't add anything in this
19551          case.  */
19552       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19553         break;
19554
19555       if (is_redundant_typedef (decl))
19556         gen_type_die (TREE_TYPE (decl), context_die);
19557       else
19558         /* Output a DIE to represent the typedef itself.  */
19559         gen_typedef_die (decl, context_die);
19560       break;
19561
19562     case LABEL_DECL:
19563       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19564         gen_label_die (decl, context_die);
19565       break;
19566
19567     case VAR_DECL:
19568     case RESULT_DECL:
19569       /* If we are in terse mode, don't generate any DIEs to represent any
19570          variable declarations or definitions.  */
19571       if (debug_info_level <= DINFO_LEVEL_TERSE)
19572         break;
19573
19574       /* Output any DIEs that are needed to specify the type of this data
19575          object.  */
19576       if (decl_by_reference_p (decl_or_origin))
19577         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19578       else
19579         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19580
19581       /* And its containing type.  */
19582       class_origin = decl_class_context (decl_or_origin);
19583       if (class_origin != NULL_TREE)
19584         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19585
19586       /* And its containing namespace.  */
19587       context_die = declare_in_namespace (decl_or_origin, context_die);
19588
19589       /* Now output the DIE to represent the data object itself.  This gets
19590          complicated because of the possibility that the VAR_DECL really
19591          represents an inlined instance of a formal parameter for an inline
19592          function.  */
19593       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19594       if (ultimate_origin != NULL_TREE
19595           && TREE_CODE (ultimate_origin) == PARM_DECL)
19596         gen_formal_parameter_die (decl, origin,
19597                                   true /* Emit name attribute.  */,
19598                                   context_die);
19599       else
19600         gen_variable_die (decl, origin, context_die);
19601       break;
19602
19603     case FIELD_DECL:
19604       /* Ignore the nameless fields that are used to skip bits but handle C++
19605          anonymous unions and structs.  */
19606       if (DECL_NAME (decl) != NULL_TREE
19607           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19608           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19609         {
19610           gen_type_die (member_declared_type (decl), context_die);
19611           gen_field_die (decl, context_die);
19612         }
19613       break;
19614
19615     case PARM_DECL:
19616       if (DECL_BY_REFERENCE (decl_or_origin))
19617         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19618       else
19619         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19620       return gen_formal_parameter_die (decl, origin,
19621                                        true /* Emit name attribute.  */,
19622                                        context_die);
19623
19624     case NAMESPACE_DECL:
19625     case IMPORTED_DECL:
19626       if (dwarf_version >= 3 || !dwarf_strict)
19627         gen_namespace_die (decl, context_die);
19628       break;
19629
19630     default:
19631       /* Probably some frontend-internal decl.  Assume we don't care.  */
19632       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19633       break;
19634     }
19635
19636   return NULL;
19637 }
19638 \f
19639 /* Output debug information for global decl DECL.  Called from toplev.c after
19640    compilation proper has finished.  */
19641
19642 static void
19643 dwarf2out_global_decl (tree decl)
19644 {
19645   /* Output DWARF2 information for file-scope tentative data object
19646      declarations, file-scope (extern) function declarations (which
19647      had no corresponding body) and file-scope tagged type declarations
19648      and definitions which have not yet been forced out.  */
19649   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19650     dwarf2out_decl (decl);
19651 }
19652
19653 /* Output debug information for type decl DECL.  Called from toplev.c
19654    and from language front ends (to record built-in types).  */
19655 static void
19656 dwarf2out_type_decl (tree decl, int local)
19657 {
19658   if (!local)
19659     dwarf2out_decl (decl);
19660 }
19661
19662 /* Output debug information for imported module or decl DECL.
19663    NAME is non-NULL name in the lexical block if the decl has been renamed.
19664    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19665    that DECL belongs to.
19666    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19667 static void
19668 dwarf2out_imported_module_or_decl_1 (tree decl,
19669                                      tree name,
19670                                      tree lexical_block,
19671                                      dw_die_ref lexical_block_die)
19672 {
19673   expanded_location xloc;
19674   dw_die_ref imported_die = NULL;
19675   dw_die_ref at_import_die;
19676
19677   if (TREE_CODE (decl) == IMPORTED_DECL)
19678     {
19679       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19680       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19681       gcc_assert (decl);
19682     }
19683   else
19684     xloc = expand_location (input_location);
19685
19686   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19687     {
19688       at_import_die = force_type_die (TREE_TYPE (decl));
19689       /* For namespace N { typedef void T; } using N::T; base_type_die
19690          returns NULL, but DW_TAG_imported_declaration requires
19691          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19692       if (!at_import_die)
19693         {
19694           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19695           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19696           at_import_die = lookup_type_die (TREE_TYPE (decl));
19697           gcc_assert (at_import_die);
19698         }
19699     }
19700   else
19701     {
19702       at_import_die = lookup_decl_die (decl);
19703       if (!at_import_die)
19704         {
19705           /* If we're trying to avoid duplicate debug info, we may not have
19706              emitted the member decl for this field.  Emit it now.  */
19707           if (TREE_CODE (decl) == FIELD_DECL)
19708             {
19709               tree type = DECL_CONTEXT (decl);
19710
19711               if (TYPE_CONTEXT (type)
19712                   && TYPE_P (TYPE_CONTEXT (type))
19713                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19714                                                 DINFO_USAGE_DIR_USE))
19715                 return;
19716               gen_type_die_for_member (type, decl,
19717                                        get_context_die (TYPE_CONTEXT (type)));
19718             }
19719           at_import_die = force_decl_die (decl);
19720         }
19721     }
19722
19723   if (TREE_CODE (decl) == NAMESPACE_DECL)
19724     {
19725       if (dwarf_version >= 3 || !dwarf_strict)
19726         imported_die = new_die (DW_TAG_imported_module,
19727                                 lexical_block_die,
19728                                 lexical_block);
19729       else
19730         return;
19731     }
19732   else
19733     imported_die = new_die (DW_TAG_imported_declaration,
19734                             lexical_block_die,
19735                             lexical_block);
19736
19737   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19738   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19739   if (name)
19740     add_AT_string (imported_die, DW_AT_name,
19741                    IDENTIFIER_POINTER (name));
19742   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19743 }
19744
19745 /* Output debug information for imported module or decl DECL.
19746    NAME is non-NULL name in context if the decl has been renamed.
19747    CHILD is true if decl is one of the renamed decls as part of
19748    importing whole module.  */
19749
19750 static void
19751 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19752                                    bool child)
19753 {
19754   /* dw_die_ref at_import_die;  */
19755   dw_die_ref scope_die;
19756
19757   if (debug_info_level <= DINFO_LEVEL_TERSE)
19758     return;
19759
19760   gcc_assert (decl);
19761
19762   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19763      We need decl DIE for reference and scope die. First, get DIE for the decl
19764      itself.  */
19765
19766   /* Get the scope die for decl context. Use comp_unit_die for global module
19767      or decl. If die is not found for non globals, force new die.  */
19768   if (context
19769       && TYPE_P (context)
19770       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19771     return;
19772
19773   if (!(dwarf_version >= 3 || !dwarf_strict))
19774     return;
19775
19776   scope_die = get_context_die (context);
19777
19778   if (child)
19779     {
19780       gcc_assert (scope_die->die_child);
19781       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19782       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19783       scope_die = scope_die->die_child;
19784     }
19785
19786   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19787   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19788
19789 }
19790
19791 /* Write the debugging output for DECL.  */
19792
19793 void
19794 dwarf2out_decl (tree decl)
19795 {
19796   dw_die_ref context_die = comp_unit_die ();
19797
19798   switch (TREE_CODE (decl))
19799     {
19800     case ERROR_MARK:
19801       return;
19802
19803     case FUNCTION_DECL:
19804       /* What we would really like to do here is to filter out all mere
19805          file-scope declarations of file-scope functions which are never
19806          referenced later within this translation unit (and keep all of ones
19807          that *are* referenced later on) but we aren't clairvoyant, so we have
19808          no idea which functions will be referenced in the future (i.e. later
19809          on within the current translation unit). So here we just ignore all
19810          file-scope function declarations which are not also definitions.  If
19811          and when the debugger needs to know something about these functions,
19812          it will have to hunt around and find the DWARF information associated
19813          with the definition of the function.
19814
19815          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19816          nodes represent definitions and which ones represent mere
19817          declarations.  We have to check DECL_INITIAL instead. That's because
19818          the C front-end supports some weird semantics for "extern inline"
19819          function definitions.  These can get inlined within the current
19820          translation unit (and thus, we need to generate Dwarf info for their
19821          abstract instances so that the Dwarf info for the concrete inlined
19822          instances can have something to refer to) but the compiler never
19823          generates any out-of-lines instances of such things (despite the fact
19824          that they *are* definitions).
19825
19826          The important point is that the C front-end marks these "extern
19827          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19828          them anyway. Note that the C++ front-end also plays some similar games
19829          for inline function definitions appearing within include files which
19830          also contain `#pragma interface' pragmas.  */
19831       if (DECL_INITIAL (decl) == NULL_TREE)
19832         return;
19833
19834       /* If we're a nested function, initially use a parent of NULL; if we're
19835          a plain function, this will be fixed up in decls_for_scope.  If
19836          we're a method, it will be ignored, since we already have a DIE.  */
19837       if (decl_function_context (decl)
19838           /* But if we're in terse mode, we don't care about scope.  */
19839           && debug_info_level > DINFO_LEVEL_TERSE)
19840         context_die = NULL;
19841       break;
19842
19843     case VAR_DECL:
19844       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19845          declaration and if the declaration was never even referenced from
19846          within this entire compilation unit.  We suppress these DIEs in
19847          order to save space in the .debug section (by eliminating entries
19848          which are probably useless).  Note that we must not suppress
19849          block-local extern declarations (whether used or not) because that
19850          would screw-up the debugger's name lookup mechanism and cause it to
19851          miss things which really ought to be in scope at a given point.  */
19852       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19853         return;
19854
19855       /* For local statics lookup proper context die.  */
19856       if (TREE_STATIC (decl) && decl_function_context (decl))
19857         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19858
19859       /* If we are in terse mode, don't generate any DIEs to represent any
19860          variable declarations or definitions.  */
19861       if (debug_info_level <= DINFO_LEVEL_TERSE)
19862         return;
19863       break;
19864
19865     case CONST_DECL:
19866       if (debug_info_level <= DINFO_LEVEL_TERSE)
19867         return;
19868       if (!is_fortran () && !is_ada ())
19869         return;
19870       if (TREE_STATIC (decl) && decl_function_context (decl))
19871         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19872       break;
19873
19874     case NAMESPACE_DECL:
19875     case IMPORTED_DECL:
19876       if (debug_info_level <= DINFO_LEVEL_TERSE)
19877         return;
19878       if (lookup_decl_die (decl) != NULL)
19879         return;
19880       break;
19881
19882     case TYPE_DECL:
19883       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19884       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19885         return;
19886
19887       /* Don't bother trying to generate any DIEs to represent any of the
19888          normal built-in types for the language we are compiling.  */
19889       if (DECL_IS_BUILTIN (decl))
19890         return;
19891
19892       /* If we are in terse mode, don't generate any DIEs for types.  */
19893       if (debug_info_level <= DINFO_LEVEL_TERSE)
19894         return;
19895
19896       /* If we're a function-scope tag, initially use a parent of NULL;
19897          this will be fixed up in decls_for_scope.  */
19898       if (decl_function_context (decl))
19899         context_die = NULL;
19900
19901       break;
19902
19903     default:
19904       return;
19905     }
19906
19907   gen_decl_die (decl, NULL, context_die);
19908 }
19909
19910 /* Write the debugging output for DECL.  */
19911
19912 static void
19913 dwarf2out_function_decl (tree decl)
19914 {
19915   dwarf2out_decl (decl);
19916   call_arg_locations = NULL;
19917   call_arg_loc_last = NULL;
19918   call_site_count = -1;
19919   tail_call_site_count = -1;
19920   VEC_free (dw_die_ref, heap, block_map);
19921   htab_empty (decl_loc_table);
19922   htab_empty (cached_dw_loc_list_table);
19923 }
19924
19925 /* Output a marker (i.e. a label) for the beginning of the generated code for
19926    a lexical block.  */
19927
19928 static void
19929 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19930                        unsigned int blocknum)
19931 {
19932   switch_to_section (current_function_section ());
19933   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19934 }
19935
19936 /* Output a marker (i.e. a label) for the end of the generated code for a
19937    lexical block.  */
19938
19939 static void
19940 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19941 {
19942   switch_to_section (current_function_section ());
19943   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
19944 }
19945
19946 /* Returns nonzero if it is appropriate not to emit any debugging
19947    information for BLOCK, because it doesn't contain any instructions.
19948
19949    Don't allow this for blocks with nested functions or local classes
19950    as we would end up with orphans, and in the presence of scheduling
19951    we may end up calling them anyway.  */
19952
19953 static bool
19954 dwarf2out_ignore_block (const_tree block)
19955 {
19956   tree decl;
19957   unsigned int i;
19958
19959   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
19960     if (TREE_CODE (decl) == FUNCTION_DECL
19961         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19962       return 0;
19963   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
19964     {
19965       decl = BLOCK_NONLOCALIZED_VAR (block, i);
19966       if (TREE_CODE (decl) == FUNCTION_DECL
19967           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19968       return 0;
19969     }
19970
19971   return 1;
19972 }
19973
19974 /* Hash table routines for file_hash.  */
19975
19976 static int
19977 file_table_eq (const void *p1_p, const void *p2_p)
19978 {
19979   const struct dwarf_file_data *const p1 =
19980     (const struct dwarf_file_data *) p1_p;
19981   const char *const p2 = (const char *) p2_p;
19982   return filename_cmp (p1->filename, p2) == 0;
19983 }
19984
19985 static hashval_t
19986 file_table_hash (const void *p_p)
19987 {
19988   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
19989   return htab_hash_string (p->filename);
19990 }
19991
19992 /* Lookup FILE_NAME (in the list of filenames that we know about here in
19993    dwarf2out.c) and return its "index".  The index of each (known) filename is
19994    just a unique number which is associated with only that one filename.  We
19995    need such numbers for the sake of generating labels (in the .debug_sfnames
19996    section) and references to those files numbers (in the .debug_srcinfo
19997    and.debug_macinfo sections).  If the filename given as an argument is not
19998    found in our current list, add it to the list and assign it the next
19999    available unique index number.  In order to speed up searches, we remember
20000    the index of the filename was looked up last.  This handles the majority of
20001    all searches.  */
20002
20003 static struct dwarf_file_data *
20004 lookup_filename (const char *file_name)
20005 {
20006   void ** slot;
20007   struct dwarf_file_data * created;
20008
20009   /* Check to see if the file name that was searched on the previous
20010      call matches this file name.  If so, return the index.  */
20011   if (file_table_last_lookup
20012       && (file_name == file_table_last_lookup->filename
20013           || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
20014     return file_table_last_lookup;
20015
20016   /* Didn't match the previous lookup, search the table.  */
20017   slot = htab_find_slot_with_hash (file_table, file_name,
20018                                    htab_hash_string (file_name), INSERT);
20019   if (*slot)
20020     return (struct dwarf_file_data *) *slot;
20021
20022   created = ggc_alloc_dwarf_file_data ();
20023   created->filename = file_name;
20024   created->emitted_number = 0;
20025   *slot = created;
20026   return created;
20027 }
20028
20029 /* If the assembler will construct the file table, then translate the compiler
20030    internal file table number into the assembler file table number, and emit
20031    a .file directive if we haven't already emitted one yet.  The file table
20032    numbers are different because we prune debug info for unused variables and
20033    types, which may include filenames.  */
20034
20035 static int
20036 maybe_emit_file (struct dwarf_file_data * fd)
20037 {
20038   if (! fd->emitted_number)
20039     {
20040       if (last_emitted_file)
20041         fd->emitted_number = last_emitted_file->emitted_number + 1;
20042       else
20043         fd->emitted_number = 1;
20044       last_emitted_file = fd;
20045
20046       if (DWARF2_ASM_LINE_DEBUG_INFO)
20047         {
20048           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20049           output_quoted_string (asm_out_file,
20050                                 remap_debug_filename (fd->filename));
20051           fputc ('\n', asm_out_file);
20052         }
20053     }
20054
20055   return fd->emitted_number;
20056 }
20057
20058 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20059    That generation should happen after function debug info has been
20060    generated. The value of the attribute is the constant value of ARG.  */
20061
20062 static void
20063 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20064 {
20065   die_arg_entry entry;
20066
20067   if (!die || !arg)
20068     return;
20069
20070   if (!tmpl_value_parm_die_table)
20071     tmpl_value_parm_die_table
20072       = VEC_alloc (die_arg_entry, gc, 32);
20073
20074   entry.die = die;
20075   entry.arg = arg;
20076   VEC_safe_push (die_arg_entry, gc,
20077                  tmpl_value_parm_die_table,
20078                  &entry);
20079 }
20080
20081 /* Return TRUE if T is an instance of generic type, FALSE
20082    otherwise.  */
20083
20084 static bool
20085 generic_type_p (tree t)
20086 {
20087   if (t == NULL_TREE || !TYPE_P (t))
20088     return false;
20089   return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
20090 }
20091
20092 /* Schedule the generation of the generic parameter dies for the
20093   instance of generic type T. The proper generation itself is later
20094   done by gen_scheduled_generic_parms_dies. */
20095
20096 static void
20097 schedule_generic_params_dies_gen (tree t)
20098 {
20099   if (!generic_type_p (t))
20100     return;
20101
20102   if (generic_type_instances == NULL)
20103     generic_type_instances = VEC_alloc (tree, gc, 256);
20104
20105   VEC_safe_push (tree, gc, generic_type_instances, t);
20106 }
20107
20108 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20109    by append_entry_to_tmpl_value_parm_die_table. This function must
20110    be called after function DIEs have been generated.  */
20111
20112 static void
20113 gen_remaining_tmpl_value_param_die_attribute (void)
20114 {
20115   if (tmpl_value_parm_die_table)
20116     {
20117       unsigned i;
20118       die_arg_entry *e;
20119
20120       FOR_EACH_VEC_ELT (die_arg_entry, tmpl_value_parm_die_table, i, e)
20121         tree_add_const_value_attribute (e->die, e->arg);
20122     }
20123 }
20124
20125 /* Generate generic parameters DIEs for instances of generic types
20126    that have been previously scheduled by
20127    schedule_generic_params_dies_gen. This function must be called
20128    after all the types of the CU have been laid out.  */
20129
20130 static void
20131 gen_scheduled_generic_parms_dies (void)
20132 {
20133   unsigned i;
20134   tree t;
20135
20136   if (generic_type_instances == NULL)
20137     return;
20138   
20139   FOR_EACH_VEC_ELT (tree, generic_type_instances, i, t)
20140     gen_generic_params_dies (t);
20141 }
20142
20143
20144 /* Replace DW_AT_name for the decl with name.  */
20145
20146 static void
20147 dwarf2out_set_name (tree decl, tree name)
20148 {
20149   dw_die_ref die;
20150   dw_attr_ref attr;
20151   const char *dname;
20152
20153   die = TYPE_SYMTAB_DIE (decl);
20154   if (!die)
20155     return;
20156
20157   dname = dwarf2_name (name, 0);
20158   if (!dname)
20159     return;
20160
20161   attr = get_AT (die, DW_AT_name);
20162   if (attr)
20163     {
20164       struct indirect_string_node *node;
20165
20166       node = find_AT_string (dname);
20167       /* replace the string.  */
20168       attr->dw_attr_val.v.val_str = node;
20169     }
20170
20171   else
20172     add_name_attribute (die, dname);
20173 }
20174
20175 /* Called by the final INSN scan whenever we see a var location.  We
20176    use it to drop labels in the right places, and throw the location in
20177    our lookup table.  */
20178
20179 static void
20180 dwarf2out_var_location (rtx loc_note)
20181 {
20182   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20183   struct var_loc_node *newloc;
20184   rtx next_real, next_note;
20185   static const char *last_label;
20186   static const char *last_postcall_label;
20187   static bool last_in_cold_section_p;
20188   static rtx expected_next_loc_note;
20189   tree decl;
20190   bool var_loc_p;
20191
20192   if (!NOTE_P (loc_note))
20193     {
20194       if (CALL_P (loc_note))
20195         {
20196           call_site_count++;
20197           if (SIBLING_CALL_P (loc_note))
20198             tail_call_site_count++;
20199         }
20200       return;
20201     }
20202
20203   var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
20204   if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20205     return;
20206
20207   /* Optimize processing a large consecutive sequence of location
20208      notes so we don't spend too much time in next_real_insn.  If the
20209      next insn is another location note, remember the next_real_insn
20210      calculation for next time.  */
20211   next_real = cached_next_real_insn;
20212   if (next_real)
20213     {
20214       if (expected_next_loc_note != loc_note)
20215         next_real = NULL_RTX;
20216     }
20217
20218   next_note = NEXT_INSN (loc_note);
20219   if (! next_note
20220       || INSN_DELETED_P (next_note)
20221       || GET_CODE (next_note) != NOTE
20222       || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
20223           && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
20224     next_note = NULL_RTX;
20225
20226   if (! next_real)
20227     next_real = next_real_insn (loc_note);
20228
20229   if (next_note)
20230     {
20231       expected_next_loc_note = next_note;
20232       cached_next_real_insn = next_real;
20233     }
20234   else
20235     cached_next_real_insn = NULL_RTX;
20236
20237   /* If there are no instructions which would be affected by this note,
20238      don't do anything.  */
20239   if (var_loc_p
20240       && next_real == NULL_RTX
20241       && !NOTE_DURING_CALL_P (loc_note))
20242     return;
20243
20244   if (next_real == NULL_RTX)
20245     next_real = get_last_insn ();
20246
20247   /* If there were any real insns between note we processed last time
20248      and this note (or if it is the first note), clear
20249      last_{,postcall_}label so that they are not reused this time.  */
20250   if (last_var_location_insn == NULL_RTX
20251       || last_var_location_insn != next_real
20252       || last_in_cold_section_p != in_cold_section_p)
20253     {
20254       last_label = NULL;
20255       last_postcall_label = NULL;
20256     }
20257
20258   if (var_loc_p)
20259     {
20260       decl = NOTE_VAR_LOCATION_DECL (loc_note);
20261       newloc = add_var_loc_to_decl (decl, loc_note,
20262                                     NOTE_DURING_CALL_P (loc_note)
20263                                     ? last_postcall_label : last_label);
20264       if (newloc == NULL)
20265         return;
20266     }
20267   else
20268     {
20269       decl = NULL_TREE;
20270       newloc = NULL;
20271     }
20272
20273   /* If there were no real insns between note we processed last time
20274      and this note, use the label we emitted last time.  Otherwise
20275      create a new label and emit it.  */
20276   if (last_label == NULL)
20277     {
20278       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20279       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20280       loclabel_num++;
20281       last_label = ggc_strdup (loclabel);
20282     }
20283
20284   if (!var_loc_p)
20285     {
20286       struct call_arg_loc_node *ca_loc
20287         = ggc_alloc_cleared_call_arg_loc_node ();
20288       rtx prev = prev_real_insn (loc_note), x;
20289       ca_loc->call_arg_loc_note = loc_note;
20290       ca_loc->next = NULL;
20291       ca_loc->label = last_label;
20292       gcc_assert (prev
20293                   && (CALL_P (prev)
20294                       || (NONJUMP_INSN_P (prev)
20295                           && GET_CODE (PATTERN (prev)) == SEQUENCE
20296                           && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
20297       if (!CALL_P (prev))
20298         prev = XVECEXP (PATTERN (prev), 0, 0);
20299       ca_loc->tail_call_p = SIBLING_CALL_P (prev);
20300       x = PATTERN (prev);
20301       if (GET_CODE (x) == PARALLEL)
20302         x = XVECEXP (x, 0, 0);
20303       if (GET_CODE (x) == SET)
20304         x = SET_SRC (x);
20305       if (GET_CODE (x) == CALL && MEM_P (XEXP (x, 0)))
20306         {
20307           x = XEXP (XEXP (x, 0), 0);
20308           if (GET_CODE (x) == SYMBOL_REF
20309               && SYMBOL_REF_DECL (x)
20310               && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
20311             ca_loc->symbol_ref = x;
20312         }
20313       ca_loc->block = insn_scope (prev);
20314       if (call_arg_locations)
20315         call_arg_loc_last->next = ca_loc;
20316       else
20317         call_arg_locations = ca_loc;
20318       call_arg_loc_last = ca_loc;
20319     }
20320   else if (!NOTE_DURING_CALL_P (loc_note))
20321     newloc->label = last_label;
20322   else
20323     {
20324       if (!last_postcall_label)
20325         {
20326           sprintf (loclabel, "%s-1", last_label);
20327           last_postcall_label = ggc_strdup (loclabel);
20328         }
20329       newloc->label = last_postcall_label;
20330     }
20331
20332   last_var_location_insn = next_real;
20333   last_in_cold_section_p = in_cold_section_p;
20334 }
20335
20336 /* Note in one location list that text section has changed.  */
20337
20338 static int
20339 var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED)
20340 {
20341   var_loc_list *list = (var_loc_list *) *slot;
20342   if (list->first)
20343     list->last_before_switch
20344       = list->last->next ? list->last->next : list->last;
20345   return 1;
20346 }
20347
20348 /* Note in all location lists that text section has changed.  */
20349
20350 static void
20351 var_location_switch_text_section (void)
20352 {
20353   if (decl_loc_table == NULL)
20354     return;
20355
20356   htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL);
20357 }
20358
20359 /* Create a new line number table.  */
20360
20361 static dw_line_info_table *
20362 new_line_info_table (void)
20363 {
20364   dw_line_info_table *table;
20365
20366   table = ggc_alloc_cleared_dw_line_info_table_struct ();
20367   table->file_num = 1;
20368   table->line_num = 1;
20369   table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
20370
20371   return table;
20372 }
20373
20374 /* Lookup the "current" table into which we emit line info, so
20375    that we don't have to do it for every source line.  */
20376
20377 static void
20378 set_cur_line_info_table (section *sec)
20379 {
20380   dw_line_info_table *table;
20381
20382   if (sec == text_section)
20383     table = text_section_line_info;
20384   else if (sec == cold_text_section)
20385     {
20386       table = cold_text_section_line_info;
20387       if (!table)
20388         {
20389           cold_text_section_line_info = table = new_line_info_table ();
20390           table->end_label = cold_end_label;
20391         }
20392     }
20393   else
20394     {
20395       const char *end_label;
20396
20397       if (flag_reorder_blocks_and_partition)
20398         {
20399           if (in_cold_section_p)
20400             end_label = crtl->subsections.cold_section_end_label;
20401           else
20402             end_label = crtl->subsections.hot_section_end_label;
20403         }
20404       else
20405         {
20406           char label[MAX_ARTIFICIAL_LABEL_BYTES];
20407           ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
20408                                        current_function_funcdef_no);
20409           end_label = ggc_strdup (label);
20410         }
20411
20412       table = new_line_info_table ();
20413       table->end_label = end_label;
20414
20415       VEC_safe_push (dw_line_info_table_p, gc, separate_line_info, table);
20416     }
20417
20418   if (DWARF2_ASM_LINE_DEBUG_INFO)
20419     table->is_stmt = (cur_line_info_table
20420                       ? cur_line_info_table->is_stmt
20421                       : DWARF_LINE_DEFAULT_IS_STMT_START);
20422   cur_line_info_table = table;
20423 }
20424
20425
20426 /* We need to reset the locations at the beginning of each
20427    function. We can't do this in the end_function hook, because the
20428    declarations that use the locations won't have been output when
20429    that hook is called.  Also compute have_multiple_function_sections here.  */
20430
20431 static void
20432 dwarf2out_begin_function (tree fun)
20433 {
20434   section *sec = function_section (fun);
20435
20436   if (sec != text_section)
20437     have_multiple_function_sections = true;
20438
20439   if (flag_reorder_blocks_and_partition && !cold_text_section)
20440     {
20441       gcc_assert (current_function_decl == fun);
20442       cold_text_section = unlikely_text_section ();
20443       switch_to_section (cold_text_section);
20444       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20445       switch_to_section (sec);
20446     }
20447
20448   dwarf2out_note_section_used ();
20449   call_site_count = 0;
20450   tail_call_site_count = 0;
20451
20452   set_cur_line_info_table (sec);
20453 }
20454
20455 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.  */
20456
20457 static void
20458 push_dw_line_info_entry (dw_line_info_table *table,
20459                          enum dw_line_info_opcode opcode, unsigned int val)
20460 {
20461   dw_line_info_entry e;
20462   e.opcode = opcode;
20463   e.val = val;
20464   VEC_safe_push (dw_line_info_entry, gc, table->entries, &e);
20465 }
20466
20467 /* Output a label to mark the beginning of a source code line entry
20468    and record information relating to this source line, in
20469    'line_info_table' for later output of the .debug_line section.  */
20470 /* ??? The discriminator parameter ought to be unsigned.  */
20471
20472 static void
20473 dwarf2out_source_line (unsigned int line, const char *filename,
20474                        int discriminator, bool is_stmt)
20475 {
20476   unsigned int file_num;
20477   dw_line_info_table *table;
20478
20479   if (debug_info_level < DINFO_LEVEL_NORMAL || line == 0)
20480     return;
20481
20482   /* The discriminator column was added in dwarf4.  Simplify the below
20483      by simply removing it if we're not supposed to output it.  */
20484   if (dwarf_version < 4 && dwarf_strict)
20485     discriminator = 0;
20486
20487   table = cur_line_info_table;
20488   file_num = maybe_emit_file (lookup_filename (filename));
20489
20490   /* ??? TODO: Elide duplicate line number entries.  Traditionally,
20491      the debugger has used the second (possibly duplicate) line number
20492      at the beginning of the function to mark the end of the prologue.
20493      We could eliminate any other duplicates within the function.  For
20494      Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
20495      that second line number entry.  */
20496   /* Recall that this end-of-prologue indication is *not* the same thing
20497      as the end_prologue debug hook.  The NOTE_INSN_PROLOGUE_END note,
20498      to which the hook corresponds, follows the last insn that was 
20499      emitted by gen_prologue.  What we need is to preceed the first insn
20500      that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
20501      insn that corresponds to something the user wrote.  These may be
20502      very different locations once scheduling is enabled.  */
20503
20504   if (0 && file_num == table->file_num
20505       && line == table->line_num
20506       && discriminator == table->discrim_num
20507       && is_stmt == table->is_stmt)
20508     return;
20509
20510   switch_to_section (current_function_section ());
20511
20512   /* If requested, emit something human-readable.  */
20513   if (flag_debug_asm)
20514     fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
20515
20516   if (DWARF2_ASM_LINE_DEBUG_INFO)
20517     {
20518       /* Emit the .loc directive understood by GNU as.  */
20519       /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
20520          file_num, line, is_stmt, discriminator */
20521       fputs ("\t.loc ", asm_out_file);
20522       fprint_ul (asm_out_file, file_num);
20523       putc (' ', asm_out_file);
20524       fprint_ul (asm_out_file, line);
20525       putc (' ', asm_out_file);
20526       putc ('0', asm_out_file);
20527
20528       if (is_stmt != table->is_stmt)
20529         {
20530           fputs (" is_stmt ", asm_out_file);
20531           putc (is_stmt ? '1' : '0', asm_out_file);
20532         }
20533       if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20534         {
20535           gcc_assert (discriminator > 0);
20536           fputs (" discriminator ", asm_out_file);
20537           fprint_ul (asm_out_file, (unsigned long) discriminator);
20538         }
20539       putc ('\n', asm_out_file);
20540     }
20541   else
20542     {
20543       unsigned int label_num = ++line_info_label_num;
20544
20545       targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
20546
20547       push_dw_line_info_entry (table, LI_set_address, label_num);
20548       if (file_num != table->file_num)
20549         push_dw_line_info_entry (table, LI_set_file, file_num);
20550       if (discriminator != table->discrim_num)
20551         push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
20552       if (is_stmt != table->is_stmt)
20553         push_dw_line_info_entry (table, LI_negate_stmt, 0);
20554       push_dw_line_info_entry (table, LI_set_line, line);
20555     }
20556
20557   table->file_num = file_num;
20558   table->line_num = line;
20559   table->discrim_num = discriminator;
20560   table->is_stmt = is_stmt;
20561   table->in_use = true;
20562 }
20563
20564 /* Record the beginning of a new source file.  */
20565
20566 static void
20567 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20568 {
20569   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20570     {
20571       /* Record the beginning of the file for break_out_includes.  */
20572       dw_die_ref bincl_die;
20573
20574       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
20575       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20576     }
20577
20578   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20579     {
20580       macinfo_entry e;
20581       e.code = DW_MACINFO_start_file;
20582       e.lineno = lineno;
20583       e.info = ggc_strdup (filename);
20584       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20585     }
20586 }
20587
20588 /* Record the end of a source file.  */
20589
20590 static void
20591 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20592 {
20593   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20594     /* Record the end of the file for break_out_includes.  */
20595     new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
20596
20597   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20598     {
20599       macinfo_entry e;
20600       e.code = DW_MACINFO_end_file;
20601       e.lineno = lineno;
20602       e.info = NULL;
20603       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20604     }
20605 }
20606
20607 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20608    the tail part of the directive line, i.e. the part which is past the
20609    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20610
20611 static void
20612 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20613                   const char *buffer ATTRIBUTE_UNUSED)
20614 {
20615   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20616     {
20617       macinfo_entry e;
20618       /* Insert a dummy first entry to be able to optimize the whole
20619          predefined macro block using DW_MACRO_GNU_transparent_include.  */
20620       if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20621         {
20622           e.code = 0;
20623           e.lineno = 0;
20624           e.info = NULL;
20625           VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20626         }
20627       e.code = DW_MACINFO_define;
20628       e.lineno = lineno;
20629       e.info = ggc_strdup (buffer);
20630       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20631     }
20632 }
20633
20634 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20635    the tail part of the directive line, i.e. the part which is past the
20636    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20637
20638 static void
20639 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20640                  const char *buffer ATTRIBUTE_UNUSED)
20641 {
20642   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20643     {
20644       macinfo_entry e;
20645       /* Insert a dummy first entry to be able to optimize the whole
20646          predefined macro block using DW_MACRO_GNU_transparent_include.  */
20647       if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20648         {
20649           e.code = 0;
20650           e.lineno = 0;
20651           e.info = NULL;
20652           VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20653         }
20654       e.code = DW_MACINFO_undef;
20655       e.lineno = lineno;
20656       e.info = ggc_strdup (buffer);
20657       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20658     }
20659 }
20660
20661 /* Routines to manipulate hash table of CUs.  */
20662
20663 static hashval_t
20664 htab_macinfo_hash (const void *of)
20665 {
20666   const macinfo_entry *const entry =
20667     (const macinfo_entry *) of;
20668
20669   return htab_hash_string (entry->info);
20670 }
20671
20672 static int
20673 htab_macinfo_eq (const void *of1, const void *of2)
20674 {
20675   const macinfo_entry *const entry1 = (const macinfo_entry *) of1;
20676   const macinfo_entry *const entry2 = (const macinfo_entry *) of2;
20677
20678   return !strcmp (entry1->info, entry2->info);
20679 }
20680
20681 /* Output a single .debug_macinfo entry.  */
20682
20683 static void
20684 output_macinfo_op (macinfo_entry *ref)
20685 {
20686   int file_num;
20687   size_t len;
20688   struct indirect_string_node *node;
20689   char label[MAX_ARTIFICIAL_LABEL_BYTES];
20690   struct dwarf_file_data *fd;
20691
20692   switch (ref->code)
20693     {
20694     case DW_MACINFO_start_file:
20695       fd = lookup_filename (ref->info);
20696       file_num = maybe_emit_file (fd);
20697       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20698       dw2_asm_output_data_uleb128 (ref->lineno,
20699                                    "Included from line number %lu", 
20700                                    (unsigned long) ref->lineno);
20701       dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
20702       break;
20703     case DW_MACINFO_end_file:
20704       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20705       break;
20706     case DW_MACINFO_define:
20707     case DW_MACINFO_undef:
20708       len = strlen (ref->info) + 1;
20709       if (!dwarf_strict
20710           && len > DWARF_OFFSET_SIZE
20711           && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
20712           && (debug_str_section->common.flags & SECTION_MERGE) != 0)
20713         {
20714           ref->code = ref->code == DW_MACINFO_define
20715                       ? DW_MACRO_GNU_define_indirect
20716                       : DW_MACRO_GNU_undef_indirect;
20717           output_macinfo_op (ref);
20718           return;
20719         }
20720       dw2_asm_output_data (1, ref->code,
20721                            ref->code == DW_MACINFO_define
20722                            ? "Define macro" : "Undefine macro");
20723       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 
20724                                    (unsigned long) ref->lineno);
20725       dw2_asm_output_nstring (ref->info, -1, "The macro");
20726       break;
20727     case DW_MACRO_GNU_define_indirect:
20728     case DW_MACRO_GNU_undef_indirect:
20729       node = find_AT_string (ref->info);
20730       if (node->form != DW_FORM_strp)
20731         {
20732           char label[32];
20733           ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
20734           ++dw2_string_counter;
20735           node->label = xstrdup (label);
20736           node->form = DW_FORM_strp;
20737         }
20738       dw2_asm_output_data (1, ref->code,
20739                            ref->code == DW_MACRO_GNU_define_indirect
20740                            ? "Define macro indirect"
20741                            : "Undefine macro indirect");
20742       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
20743                                    (unsigned long) ref->lineno);
20744       dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
20745                              debug_str_section, "The macro: \"%s\"",
20746                              ref->info);
20747       break;
20748     case DW_MACRO_GNU_transparent_include:
20749       dw2_asm_output_data (1, ref->code, "Transparent include");
20750       ASM_GENERATE_INTERNAL_LABEL (label,
20751                                    DEBUG_MACRO_SECTION_LABEL, ref->lineno);
20752       dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
20753       break;
20754     default:
20755       fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
20756                ASM_COMMENT_START, (unsigned long) ref->code);
20757       break;
20758     }
20759 }
20760
20761 /* Attempt to make a sequence of define/undef macinfo ops shareable with
20762    other compilation unit .debug_macinfo sections.  IDX is the first
20763    index of a define/undef, return the number of ops that should be
20764    emitted in a comdat .debug_macinfo section and emit
20765    a DW_MACRO_GNU_transparent_include entry referencing it.
20766    If the define/undef entry should be emitted normally, return 0.  */
20767
20768 static unsigned
20769 optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
20770                         htab_t *macinfo_htab)
20771 {
20772   macinfo_entry *first, *second, *cur, *inc;
20773   char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
20774   unsigned char checksum[16];
20775   struct md5_ctx ctx;
20776   char *grp_name, *tail;
20777   const char *base;
20778   unsigned int i, count, encoded_filename_len, linebuf_len;
20779   void **slot;
20780
20781   first = VEC_index (macinfo_entry, macinfo_table, idx);
20782   second = VEC_index (macinfo_entry, macinfo_table, idx + 1);
20783
20784   /* Optimize only if there are at least two consecutive define/undef ops,
20785      and either all of them are before first DW_MACINFO_start_file
20786      with lineno 0 (i.e. predefined macro block), or all of them are
20787      in some included header file.  */
20788   if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
20789     return 0;
20790   if (VEC_empty (macinfo_entry, files))
20791     {
20792       if (first->lineno != 0 || second->lineno != 0)
20793         return 0;
20794     }
20795   else if (first->lineno == 0)
20796     return 0;
20797
20798   /* Find the last define/undef entry that can be grouped together
20799      with first and at the same time compute md5 checksum of their
20800      codes, linenumbers and strings.  */
20801   md5_init_ctx (&ctx);
20802   for (i = idx; VEC_iterate (macinfo_entry, macinfo_table, i, cur); i++)
20803     if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
20804       break;
20805     else if (first->lineno == 0 && cur->lineno != 0)
20806       break;
20807     else
20808       {
20809         unsigned char code = cur->code;
20810         md5_process_bytes (&code, 1, &ctx);
20811         checksum_uleb128 (cur->lineno, &ctx);
20812         md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
20813       }
20814   md5_finish_ctx (&ctx, checksum);
20815   count = i - idx;
20816
20817   /* From the containing include filename (if any) pick up just
20818      usable characters from its basename.  */
20819   if (first->lineno == 0)
20820     base = "";
20821   else
20822     base = lbasename (VEC_last (macinfo_entry, files)->info);
20823   for (encoded_filename_len = 0, i = 0; base[i]; i++)
20824     if (ISIDNUM (base[i]) || base[i] == '.')
20825       encoded_filename_len++;
20826   /* Count . at the end.  */
20827   if (encoded_filename_len)
20828     encoded_filename_len++;
20829
20830   sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
20831   linebuf_len = strlen (linebuf);
20832
20833   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
20834   grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
20835                          + 16 * 2 + 1);
20836   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
20837   tail = grp_name + 4;
20838   if (encoded_filename_len)
20839     {
20840       for (i = 0; base[i]; i++)
20841         if (ISIDNUM (base[i]) || base[i] == '.')
20842           *tail++ = base[i];
20843       *tail++ = '.';
20844     }
20845   memcpy (tail, linebuf, linebuf_len);
20846   tail += linebuf_len;
20847   *tail++ = '.';
20848   for (i = 0; i < 16; i++)
20849     sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
20850
20851   /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
20852      in the empty vector entry before the first define/undef.  */
20853   inc = VEC_index (macinfo_entry, macinfo_table, idx - 1);
20854   inc->code = DW_MACRO_GNU_transparent_include;
20855   inc->lineno = 0;
20856   inc->info = ggc_strdup (grp_name);
20857   if (*macinfo_htab == NULL)
20858     *macinfo_htab = htab_create (10, htab_macinfo_hash, htab_macinfo_eq, NULL);
20859   /* Avoid emitting duplicates.  */
20860   slot = htab_find_slot (*macinfo_htab, inc, INSERT);
20861   if (*slot != NULL)
20862     {
20863       inc->code = 0;
20864       inc->info = NULL;
20865       /* If such an entry has been used before, just emit
20866          a DW_MACRO_GNU_transparent_include op.  */
20867       inc = (macinfo_entry *) *slot;
20868       output_macinfo_op (inc);
20869       /* And clear all macinfo_entry in the range to avoid emitting them
20870          in the second pass.  */
20871       for (i = idx;
20872            VEC_iterate (macinfo_entry, macinfo_table, i, cur)
20873            && i < idx + count;
20874            i++)
20875         {
20876           cur->code = 0;
20877           cur->info = NULL;
20878         }
20879     }
20880   else
20881     {
20882       *slot = inc;
20883       inc->lineno = htab_elements (*macinfo_htab);
20884       output_macinfo_op (inc);
20885     }
20886   return count;
20887 }
20888
20889 /* Output macinfo section(s).  */
20890
20891 static void
20892 output_macinfo (void)
20893 {
20894   unsigned i;
20895   unsigned long length = VEC_length (macinfo_entry, macinfo_table);
20896   macinfo_entry *ref;
20897   VEC (macinfo_entry, gc) *files = NULL;
20898   htab_t macinfo_htab = NULL;
20899
20900   if (! length)
20901     return;
20902
20903   /* output_macinfo* uses these interchangeably.  */
20904   gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
20905               && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
20906               && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
20907               && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
20908
20909   /* For .debug_macro emit the section header.  */
20910   if (!dwarf_strict)
20911     {
20912       dw2_asm_output_data (2, 4, "DWARF macro version number");
20913       if (DWARF_OFFSET_SIZE == 8)
20914         dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
20915       else
20916         dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
20917       dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_line_section_label,
20918                              debug_line_section, NULL);
20919     }
20920
20921   /* In the first loop, it emits the primary .debug_macinfo section
20922      and after each emitted op the macinfo_entry is cleared.
20923      If a longer range of define/undef ops can be optimized using
20924      DW_MACRO_GNU_transparent_include, the
20925      DW_MACRO_GNU_transparent_include op is emitted and kept in
20926      the vector before the first define/undef in the range and the
20927      whole range of define/undef ops is not emitted and kept.  */
20928   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20929     {
20930       switch (ref->code)
20931         {
20932         case DW_MACINFO_start_file:
20933           VEC_safe_push (macinfo_entry, gc, files, ref);
20934           break;
20935         case DW_MACINFO_end_file:
20936           if (!VEC_empty (macinfo_entry, files))
20937             VEC_pop (macinfo_entry, files);
20938           break;
20939         case DW_MACINFO_define:
20940         case DW_MACINFO_undef:
20941           if (!dwarf_strict
20942               && HAVE_COMDAT_GROUP
20943               && VEC_length (macinfo_entry, files) != 1
20944               && i > 0
20945               && i + 1 < length
20946               && VEC_index (macinfo_entry, macinfo_table, i - 1)->code == 0)
20947             {
20948               unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
20949               if (count)
20950                 {
20951                   i += count - 1;
20952                   continue;
20953                 }
20954             }
20955           break;
20956         case 0:
20957           /* A dummy entry may be inserted at the beginning to be able
20958              to optimize the whole block of predefined macros.  */
20959           if (i == 0)
20960             continue;
20961         default:
20962           break;
20963         }
20964       output_macinfo_op (ref);
20965       ref->info = NULL;
20966       ref->code = 0;
20967     }
20968
20969   if (macinfo_htab == NULL)
20970     return;
20971
20972   htab_delete (macinfo_htab);
20973
20974   /* If any DW_MACRO_GNU_transparent_include were used, on those
20975      DW_MACRO_GNU_transparent_include entries terminate the
20976      current chain and switch to a new comdat .debug_macinfo
20977      section and emit the define/undef entries within it.  */
20978   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20979     switch (ref->code)
20980       {
20981       case 0:
20982         continue;
20983       case DW_MACRO_GNU_transparent_include:
20984         {
20985           char label[MAX_ARTIFICIAL_LABEL_BYTES];
20986           tree comdat_key = get_identifier (ref->info);
20987           /* Terminate the previous .debug_macinfo section.  */
20988           dw2_asm_output_data (1, 0, "End compilation unit");
20989           targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
20990                                          SECTION_DEBUG
20991                                          | SECTION_LINKONCE,
20992                                          comdat_key);
20993           ASM_GENERATE_INTERNAL_LABEL (label,
20994                                        DEBUG_MACRO_SECTION_LABEL,
20995                                        ref->lineno);
20996           ASM_OUTPUT_LABEL (asm_out_file, label);
20997           ref->code = 0;
20998           ref->info = NULL;
20999           dw2_asm_output_data (2, 4, "DWARF macro version number");
21000           if (DWARF_OFFSET_SIZE == 8)
21001             dw2_asm_output_data (1, 1, "Flags: 64-bit");
21002           else
21003             dw2_asm_output_data (1, 0, "Flags: 32-bit");
21004         }
21005         break;
21006       case DW_MACINFO_define:
21007       case DW_MACINFO_undef:
21008         output_macinfo_op (ref);
21009         ref->code = 0;
21010         ref->info = NULL;
21011         break;
21012       default:
21013         gcc_unreachable ();
21014       }
21015 }
21016
21017 /* Set up for Dwarf output at the start of compilation.  */
21018
21019 static void
21020 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
21021 {
21022   /* Allocate the file_table.  */
21023   file_table = htab_create_ggc (50, file_table_hash,
21024                                 file_table_eq, NULL);
21025
21026   /* Allocate the decl_die_table.  */
21027   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
21028                                     decl_die_table_eq, NULL);
21029
21030   /* Allocate the decl_loc_table.  */
21031   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
21032                                     decl_loc_table_eq, NULL);
21033
21034   /* Allocate the cached_dw_loc_list_table.  */
21035   cached_dw_loc_list_table
21036     = htab_create_ggc (10, cached_dw_loc_list_table_hash,
21037                        cached_dw_loc_list_table_eq, NULL);
21038
21039   /* Allocate the initial hunk of the decl_scope_table.  */
21040   decl_scope_table = VEC_alloc (tree, gc, 256);
21041
21042   /* Allocate the initial hunk of the abbrev_die_table.  */
21043   abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref
21044     (ABBREV_DIE_TABLE_INCREMENT);
21045   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
21046   /* Zero-th entry is allocated, but unused.  */
21047   abbrev_die_table_in_use = 1;
21048
21049   /* Allocate the pubtypes and pubnames vectors.  */
21050   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21051   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21052
21053   incomplete_types = VEC_alloc (tree, gc, 64);
21054
21055   used_rtx_array = VEC_alloc (rtx, gc, 32);
21056
21057   debug_info_section = get_section (DEBUG_INFO_SECTION,
21058                                     SECTION_DEBUG, NULL);
21059   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21060                                       SECTION_DEBUG, NULL);
21061   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21062                                        SECTION_DEBUG, NULL);
21063   debug_macinfo_section = get_section (dwarf_strict
21064                                        ? DEBUG_MACINFO_SECTION
21065                                        : DEBUG_MACRO_SECTION,
21066                                        SECTION_DEBUG, NULL);
21067   debug_line_section = get_section (DEBUG_LINE_SECTION,
21068                                     SECTION_DEBUG, NULL);
21069   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21070                                    SECTION_DEBUG, NULL);
21071   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21072                                         SECTION_DEBUG, NULL);
21073   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21074                                         SECTION_DEBUG, NULL);
21075   debug_str_section = get_section (DEBUG_STR_SECTION,
21076                                    DEBUG_STR_SECTION_FLAGS, NULL);
21077   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21078                                       SECTION_DEBUG, NULL);
21079   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21080                                      SECTION_DEBUG, NULL);
21081
21082   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21083   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21084                                DEBUG_ABBREV_SECTION_LABEL, 0);
21085   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21086   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21087                                COLD_TEXT_SECTION_LABEL, 0);
21088   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21089
21090   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21091                                DEBUG_INFO_SECTION_LABEL, 0);
21092   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21093                                DEBUG_LINE_SECTION_LABEL, 0);
21094   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21095                                DEBUG_RANGES_SECTION_LABEL, 0);
21096   ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21097                                dwarf_strict
21098                                ? DEBUG_MACINFO_SECTION_LABEL
21099                                : DEBUG_MACRO_SECTION_LABEL, 0);
21100
21101   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21102     macinfo_table = VEC_alloc (macinfo_entry, gc, 64);
21103
21104   switch_to_section (text_section);
21105   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21106
21107   /* Make sure the line number table for .text always exists.  */
21108   text_section_line_info = new_line_info_table ();
21109   text_section_line_info->end_label = text_end_label;
21110 }
21111
21112 /* Called before cgraph_optimize starts outputtting functions, variables
21113    and toplevel asms into assembly.  */
21114
21115 static void
21116 dwarf2out_assembly_start (void)
21117 {
21118   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
21119       && dwarf2out_do_cfi_asm ()
21120       && (!(flag_unwind_tables || flag_exceptions)
21121           || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
21122     fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21123 }
21124
21125 /* A helper function for dwarf2out_finish called through
21126    htab_traverse.  Emit one queued .debug_str string.  */
21127
21128 static int
21129 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21130 {
21131   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21132
21133   if (node->form == DW_FORM_strp)
21134     {
21135       switch_to_section (debug_str_section);
21136       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21137       assemble_string (node->str, strlen (node->str) + 1);
21138     }
21139
21140   return 1;
21141 }
21142
21143 #if ENABLE_ASSERT_CHECKING
21144 /* Verify that all marks are clear.  */
21145
21146 static void
21147 verify_marks_clear (dw_die_ref die)
21148 {
21149   dw_die_ref c;
21150
21151   gcc_assert (! die->die_mark);
21152   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21153 }
21154 #endif /* ENABLE_ASSERT_CHECKING */
21155
21156 /* Clear the marks for a die and its children.
21157    Be cool if the mark isn't set.  */
21158
21159 static void
21160 prune_unmark_dies (dw_die_ref die)
21161 {
21162   dw_die_ref c;
21163
21164   if (die->die_mark)
21165     die->die_mark = 0;
21166   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21167 }
21168
21169 /* Given DIE that we're marking as used, find any other dies
21170    it references as attributes and mark them as used.  */
21171
21172 static void
21173 prune_unused_types_walk_attribs (dw_die_ref die)
21174 {
21175   dw_attr_ref a;
21176   unsigned ix;
21177
21178   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21179     {
21180       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21181         {
21182           /* A reference to another DIE.
21183              Make sure that it will get emitted.
21184              If it was broken out into a comdat group, don't follow it.  */
21185           if (! use_debug_types
21186               || a->dw_attr == DW_AT_specification
21187               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21188             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21189         }
21190       /* Set the string's refcount to 0 so that prune_unused_types_mark
21191          accounts properly for it.  */
21192       if (AT_class (a) == dw_val_class_str)
21193         a->dw_attr_val.v.val_str->refcount = 0;
21194     }
21195 }
21196
21197 /* Mark the generic parameters and arguments children DIEs of DIE.  */
21198
21199 static void
21200 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
21201 {
21202   dw_die_ref c;
21203
21204   if (die == NULL || die->die_child == NULL)
21205     return;
21206   c = die->die_child;
21207   do
21208     {
21209       switch (c->die_tag)
21210         {
21211         case DW_TAG_template_type_param:
21212         case DW_TAG_template_value_param:
21213         case DW_TAG_GNU_template_template_param:
21214         case DW_TAG_GNU_template_parameter_pack:
21215           prune_unused_types_mark (c, 1);
21216           break;
21217         default:
21218           break;
21219         }
21220       c = c->die_sib;
21221     } while (c && c != die->die_child);
21222 }
21223
21224 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21225    to DIE's children.  */
21226
21227 static void
21228 prune_unused_types_mark (dw_die_ref die, int dokids)
21229 {
21230   dw_die_ref c;
21231
21232   if (die->die_mark == 0)
21233     {
21234       /* We haven't done this node yet.  Mark it as used.  */
21235       die->die_mark = 1;
21236       /* If this is the DIE of a generic type instantiation,
21237          mark the children DIEs that describe its generic parms and
21238          args.  */
21239       prune_unused_types_mark_generic_parms_dies (die);
21240
21241       /* We also have to mark its parents as used.
21242          (But we don't want to mark our parents' kids due to this.)  */
21243       if (die->die_parent)
21244         prune_unused_types_mark (die->die_parent, 0);
21245
21246       /* Mark any referenced nodes.  */
21247       prune_unused_types_walk_attribs (die);
21248
21249       /* If this node is a specification,
21250          also mark the definition, if it exists.  */
21251       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21252         prune_unused_types_mark (die->die_definition, 1);
21253     }
21254
21255   if (dokids && die->die_mark != 2)
21256     {
21257       /* We need to walk the children, but haven't done so yet.
21258          Remember that we've walked the kids.  */
21259       die->die_mark = 2;
21260
21261       /* If this is an array type, we need to make sure our
21262          kids get marked, even if they're types.  If we're
21263          breaking out types into comdat sections, do this
21264          for all type definitions.  */
21265       if (die->die_tag == DW_TAG_array_type
21266           || (use_debug_types
21267               && is_type_die (die) && ! is_declaration_die (die)))
21268         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21269       else
21270         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21271     }
21272 }
21273
21274 /* For local classes, look if any static member functions were emitted
21275    and if so, mark them.  */
21276
21277 static void
21278 prune_unused_types_walk_local_classes (dw_die_ref die)
21279 {
21280   dw_die_ref c;
21281
21282   if (die->die_mark == 2)
21283     return;
21284
21285   switch (die->die_tag)
21286     {
21287     case DW_TAG_structure_type:
21288     case DW_TAG_union_type:
21289     case DW_TAG_class_type:
21290       break;
21291
21292     case DW_TAG_subprogram:
21293       if (!get_AT_flag (die, DW_AT_declaration)
21294           || die->die_definition != NULL)
21295         prune_unused_types_mark (die, 1);
21296       return;
21297
21298     default:
21299       return;
21300     }
21301
21302   /* Mark children.  */
21303   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21304 }
21305
21306 /* Walk the tree DIE and mark types that we actually use.  */
21307
21308 static void
21309 prune_unused_types_walk (dw_die_ref die)
21310 {
21311   dw_die_ref c;
21312
21313   /* Don't do anything if this node is already marked and
21314      children have been marked as well.  */
21315   if (die->die_mark == 2)
21316     return;
21317
21318   switch (die->die_tag)
21319     {
21320     case DW_TAG_structure_type:
21321     case DW_TAG_union_type:
21322     case DW_TAG_class_type:
21323       if (die->die_perennial_p)
21324         break;
21325
21326       for (c = die->die_parent; c; c = c->die_parent)
21327         if (c->die_tag == DW_TAG_subprogram)
21328           break;
21329
21330       /* Finding used static member functions inside of classes
21331          is needed just for local classes, because for other classes
21332          static member function DIEs with DW_AT_specification
21333          are emitted outside of the DW_TAG_*_type.  If we ever change
21334          it, we'd need to call this even for non-local classes.  */
21335       if (c)
21336         prune_unused_types_walk_local_classes (die);
21337
21338       /* It's a type node --- don't mark it.  */
21339       return;
21340
21341     case DW_TAG_const_type:
21342     case DW_TAG_packed_type:
21343     case DW_TAG_pointer_type:
21344     case DW_TAG_reference_type:
21345     case DW_TAG_rvalue_reference_type:
21346     case DW_TAG_volatile_type:
21347     case DW_TAG_typedef:
21348     case DW_TAG_array_type:
21349     case DW_TAG_interface_type:
21350     case DW_TAG_friend:
21351     case DW_TAG_variant_part:
21352     case DW_TAG_enumeration_type:
21353     case DW_TAG_subroutine_type:
21354     case DW_TAG_string_type:
21355     case DW_TAG_set_type:
21356     case DW_TAG_subrange_type:
21357     case DW_TAG_ptr_to_member_type:
21358     case DW_TAG_file_type:
21359       if (die->die_perennial_p)
21360         break;
21361
21362       /* It's a type node --- don't mark it.  */
21363       return;
21364
21365     default:
21366       /* Mark everything else.  */
21367       break;
21368   }
21369
21370   if (die->die_mark == 0)
21371     {
21372       die->die_mark = 1;
21373
21374       /* Now, mark any dies referenced from here.  */
21375       prune_unused_types_walk_attribs (die);
21376     }
21377
21378   die->die_mark = 2;
21379
21380   /* Mark children.  */
21381   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21382 }
21383
21384 /* Increment the string counts on strings referred to from DIE's
21385    attributes.  */
21386
21387 static void
21388 prune_unused_types_update_strings (dw_die_ref die)
21389 {
21390   dw_attr_ref a;
21391   unsigned ix;
21392
21393   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21394     if (AT_class (a) == dw_val_class_str)
21395       {
21396         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21397         s->refcount++;
21398         /* Avoid unnecessarily putting strings that are used less than
21399            twice in the hash table.  */
21400         if (s->refcount
21401             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21402           {
21403             void ** slot;
21404             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21405                                              htab_hash_string (s->str),
21406                                              INSERT);
21407             gcc_assert (*slot == NULL);
21408             *slot = s;
21409           }
21410       }
21411 }
21412
21413 /* Remove from the tree DIE any dies that aren't marked.  */
21414
21415 static void
21416 prune_unused_types_prune (dw_die_ref die)
21417 {
21418   dw_die_ref c;
21419
21420   gcc_assert (die->die_mark);
21421   prune_unused_types_update_strings (die);
21422
21423   if (! die->die_child)
21424     return;
21425
21426   c = die->die_child;
21427   do {
21428     dw_die_ref prev = c;
21429     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21430       if (c == die->die_child)
21431         {
21432           /* No marked children between 'prev' and the end of the list.  */
21433           if (prev == c)
21434             /* No marked children at all.  */
21435             die->die_child = NULL;
21436           else
21437             {
21438               prev->die_sib = c->die_sib;
21439               die->die_child = prev;
21440             }
21441           return;
21442         }
21443
21444     if (c != prev->die_sib)
21445       prev->die_sib = c;
21446     prune_unused_types_prune (c);
21447   } while (c != die->die_child);
21448 }
21449
21450 /* Remove dies representing declarations that we never use.  */
21451
21452 static void
21453 prune_unused_types (void)
21454 {
21455   unsigned int i;
21456   limbo_die_node *node;
21457   comdat_type_node *ctnode;
21458   pubname_ref pub;
21459   dw_die_ref base_type;
21460
21461 #if ENABLE_ASSERT_CHECKING
21462   /* All the marks should already be clear.  */
21463   verify_marks_clear (comp_unit_die ());
21464   for (node = limbo_die_list; node; node = node->next)
21465     verify_marks_clear (node->die);
21466   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21467     verify_marks_clear (ctnode->root_die);
21468 #endif /* ENABLE_ASSERT_CHECKING */
21469
21470   /* Mark types that are used in global variables.  */
21471   premark_types_used_by_global_vars ();
21472
21473   /* Set the mark on nodes that are actually used.  */
21474   prune_unused_types_walk (comp_unit_die ());
21475   for (node = limbo_die_list; node; node = node->next)
21476     prune_unused_types_walk (node->die);
21477   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21478     {
21479       prune_unused_types_walk (ctnode->root_die);
21480       prune_unused_types_mark (ctnode->type_die, 1);
21481     }
21482
21483   /* Also set the mark on nodes referenced from the
21484      pubname_table.  */
21485   FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
21486     prune_unused_types_mark (pub->die, 1);
21487   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21488     prune_unused_types_mark (base_type, 1);
21489
21490   if (debug_str_hash)
21491     htab_empty (debug_str_hash);
21492   prune_unused_types_prune (comp_unit_die ());
21493   for (node = limbo_die_list; node; node = node->next)
21494     prune_unused_types_prune (node->die);
21495   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21496     prune_unused_types_prune (ctnode->root_die);
21497
21498   /* Leave the marks clear.  */
21499   prune_unmark_dies (comp_unit_die ());
21500   for (node = limbo_die_list; node; node = node->next)
21501     prune_unmark_dies (node->die);
21502   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21503     prune_unmark_dies (ctnode->root_die);
21504 }
21505
21506 /* Set the parameter to true if there are any relative pathnames in
21507    the file table.  */
21508 static int
21509 file_table_relative_p (void ** slot, void *param)
21510 {
21511   bool *p = (bool *) param;
21512   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21513   if (!IS_ABSOLUTE_PATH (d->filename))
21514     {
21515       *p = true;
21516       return 0;
21517     }
21518   return 1;
21519 }
21520
21521 /* Routines to manipulate hash table of comdat type units.  */
21522
21523 static hashval_t
21524 htab_ct_hash (const void *of)
21525 {
21526   hashval_t h;
21527   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21528
21529   memcpy (&h, type_node->signature, sizeof (h));
21530   return h;
21531 }
21532
21533 static int
21534 htab_ct_eq (const void *of1, const void *of2)
21535 {
21536   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21537   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21538
21539   return (! memcmp (type_node_1->signature, type_node_2->signature,
21540                     DWARF_TYPE_SIGNATURE_SIZE));
21541 }
21542
21543 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21544    to the location it would have been added, should we know its
21545    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21546    probably improve compactness of debug info, removing equivalent
21547    abbrevs, and hide any differences caused by deferring the
21548    computation of the assembler name, triggered by e.g. PCH.  */
21549
21550 static inline void
21551 move_linkage_attr (dw_die_ref die)
21552 {
21553   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21554   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21555
21556   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
21557               || linkage.dw_attr == DW_AT_MIPS_linkage_name);
21558
21559   while (--ix > 0)
21560     {
21561       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21562
21563       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21564         break;
21565     }
21566
21567   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21568     {
21569       VEC_pop (dw_attr_node, die->die_attr);
21570       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21571     }
21572 }
21573
21574 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
21575    referenced from typed stack ops and count how often they are used.  */
21576
21577 static void
21578 mark_base_types (dw_loc_descr_ref loc)
21579 {
21580   dw_die_ref base_type = NULL;
21581
21582   for (; loc; loc = loc->dw_loc_next)
21583     {
21584       switch (loc->dw_loc_opc)
21585         {
21586         case DW_OP_GNU_regval_type:
21587         case DW_OP_GNU_deref_type:
21588           base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
21589           break;
21590         case DW_OP_GNU_convert:
21591         case DW_OP_GNU_reinterpret:
21592           if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
21593             continue;
21594           /* FALLTHRU */
21595         case DW_OP_GNU_const_type:
21596           base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
21597           break;
21598         case DW_OP_GNU_entry_value:
21599           mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
21600           continue;
21601         default:
21602           continue;
21603         }
21604       gcc_assert (base_type->die_parent == comp_unit_die ());
21605       if (base_type->die_mark)
21606         base_type->die_mark++;
21607       else
21608         {
21609           VEC_safe_push (dw_die_ref, heap, base_types, base_type);
21610           base_type->die_mark = 1;
21611         }
21612     }
21613 }
21614
21615 /* Comparison function for sorting marked base types.  */
21616
21617 static int
21618 base_type_cmp (const void *x, const void *y)
21619 {
21620   dw_die_ref dx = *(const dw_die_ref *) x;
21621   dw_die_ref dy = *(const dw_die_ref *) y;
21622   unsigned int byte_size1, byte_size2;
21623   unsigned int encoding1, encoding2;
21624   if (dx->die_mark > dy->die_mark)
21625     return -1;
21626   if (dx->die_mark < dy->die_mark)
21627     return 1;
21628   byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
21629   byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
21630   if (byte_size1 < byte_size2)
21631     return 1;
21632   if (byte_size1 > byte_size2)
21633     return -1;
21634   encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
21635   encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
21636   if (encoding1 < encoding2)
21637     return 1;
21638   if (encoding1 > encoding2)
21639     return -1;
21640   return 0;
21641 }
21642
21643 /* Move base types marked by mark_base_types as early as possible
21644    in the CU, sorted by decreasing usage count both to make the
21645    uleb128 references as small as possible and to make sure they
21646    will have die_offset already computed by calc_die_sizes when
21647    sizes of typed stack loc ops is computed.  */
21648
21649 static void
21650 move_marked_base_types (void)
21651 {
21652   unsigned int i;
21653   dw_die_ref base_type, die, c;
21654
21655   if (VEC_empty (dw_die_ref, base_types))
21656     return;
21657
21658   /* Sort by decreasing usage count, they will be added again in that
21659      order later on.  */
21660   VEC_qsort (dw_die_ref, base_types, base_type_cmp);
21661   die = comp_unit_die ();
21662   c = die->die_child;
21663   do
21664     {
21665       dw_die_ref prev = c;
21666       c = c->die_sib;
21667       while (c->die_mark)
21668         {
21669           remove_child_with_prev (c, prev);
21670           /* As base types got marked, there must be at least
21671              one node other than DW_TAG_base_type.  */
21672           gcc_assert (c != c->die_sib);
21673           c = c->die_sib;
21674         }
21675     }
21676   while (c != die->die_child);
21677   gcc_assert (die->die_child);
21678   c = die->die_child;
21679   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21680     {
21681       base_type->die_mark = 0;
21682       base_type->die_sib = c->die_sib;
21683       c->die_sib = base_type;
21684       c = base_type;
21685     }
21686 }
21687
21688 /* Helper function for resolve_addr, attempt to resolve
21689    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21690    SYMBOL_REFs refer to variables emitted in the current CU.  */
21691
21692 static int
21693 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21694 {
21695   rtx rtl = *addr;
21696
21697   if (GET_CODE (rtl) == CONST_STRING)
21698     {
21699       size_t len = strlen (XSTR (rtl, 0)) + 1;
21700       tree t = build_string (len, XSTR (rtl, 0));
21701       tree tlen = size_int (len - 1);
21702       TREE_TYPE (t)
21703         = build_array_type (char_type_node, build_index_type (tlen));
21704       rtl = lookup_constant_def (t);
21705       if (!rtl || !MEM_P (rtl))
21706         return 1;
21707       rtl = XEXP (rtl, 0);
21708       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21709       *addr = rtl;
21710       return 0;
21711     }
21712
21713   if (GET_CODE (rtl) == SYMBOL_REF
21714       && SYMBOL_REF_DECL (rtl))
21715     {
21716       if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
21717         {
21718           if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
21719             return 1;
21720         }
21721       else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21722         return 1;
21723     }
21724
21725   if (GET_CODE (rtl) == CONST
21726       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21727     return 1;
21728
21729   return 0;
21730 }
21731
21732 /* Helper function for resolve_addr, handle one location
21733    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21734    the location list couldn't be resolved.  */
21735
21736 static bool
21737 resolve_addr_in_expr (dw_loc_descr_ref loc)
21738 {
21739   dw_loc_descr_ref keep = NULL;
21740   for (; loc; loc = loc->dw_loc_next)
21741     switch (loc->dw_loc_opc)
21742       {
21743       case DW_OP_addr:
21744         if (resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21745           return false;
21746         break;
21747       case DW_OP_const4u:
21748       case DW_OP_const8u:
21749         if (loc->dtprel
21750             && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21751           return false;
21752         break;
21753       case DW_OP_plus_uconst:
21754         if (size_of_loc_descr (loc)
21755             > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
21756               + 1
21757             && loc->dw_loc_oprnd1.v.val_unsigned > 0)
21758           {
21759             dw_loc_descr_ref repl
21760               = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
21761             add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
21762             add_loc_descr (&repl, loc->dw_loc_next);
21763             *loc = *repl;
21764           }
21765         break;
21766       case DW_OP_implicit_value:
21767         if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21768             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL))
21769           return false;
21770         break;
21771       case DW_OP_GNU_implicit_pointer:
21772       case DW_OP_GNU_parameter_ref:
21773         if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
21774           {
21775             dw_die_ref ref
21776               = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
21777             if (ref == NULL)
21778               return false;
21779             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
21780             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
21781             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
21782           }
21783         break;
21784       case DW_OP_GNU_const_type:
21785       case DW_OP_GNU_regval_type:
21786       case DW_OP_GNU_deref_type:
21787       case DW_OP_GNU_convert:
21788       case DW_OP_GNU_reinterpret:
21789         while (loc->dw_loc_next
21790                && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
21791           {
21792             dw_die_ref base1, base2;
21793             unsigned enc1, enc2, size1, size2;
21794             if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21795                 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21796               base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
21797             else if (loc->dw_loc_oprnd1.val_class
21798                      == dw_val_class_unsigned_const)
21799               break;
21800             else
21801               base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
21802             if (loc->dw_loc_next->dw_loc_oprnd1.val_class
21803                 == dw_val_class_unsigned_const)
21804               break;
21805             base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
21806             gcc_assert (base1->die_tag == DW_TAG_base_type
21807                         && base2->die_tag == DW_TAG_base_type);
21808             enc1 = get_AT_unsigned (base1, DW_AT_encoding);
21809             enc2 = get_AT_unsigned (base2, DW_AT_encoding);
21810             size1 = get_AT_unsigned (base1, DW_AT_byte_size);
21811             size2 = get_AT_unsigned (base2, DW_AT_byte_size);
21812             if (size1 == size2
21813                 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
21814                      && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
21815                      && loc != keep)
21816                     || enc1 == enc2))
21817               {
21818                 /* Optimize away next DW_OP_GNU_convert after
21819                    adjusting LOC's base type die reference.  */
21820                 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21821                     || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21822                   loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
21823                 else
21824                   loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
21825                 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
21826                 continue;
21827               }
21828             /* Don't change integer DW_OP_GNU_convert after e.g. floating
21829                point typed stack entry.  */
21830             else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
21831               keep = loc->dw_loc_next;
21832             break;
21833           }
21834         break;
21835       default:
21836         break;
21837       }
21838   return true;
21839 }
21840
21841 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21842    an address in .rodata section if the string literal is emitted there,
21843    or remove the containing location list or replace DW_AT_const_value
21844    with DW_AT_location and empty location expression, if it isn't found
21845    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21846    to something that has been emitted in the current CU.  */
21847
21848 static void
21849 resolve_addr (dw_die_ref die)
21850 {
21851   dw_die_ref c;
21852   dw_attr_ref a;
21853   dw_loc_list_ref *curr, *start, loc;
21854   unsigned ix;
21855
21856   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21857     switch (AT_class (a))
21858       {
21859       case dw_val_class_loc_list:
21860         start = curr = AT_loc_list_ptr (a);
21861         loc = *curr;
21862         gcc_assert (loc);
21863         /* The same list can be referenced more than once.  See if we have
21864            already recorded the result from a previous pass.  */
21865         if (loc->replaced)
21866           *curr = loc->dw_loc_next;
21867         else if (!loc->resolved_addr)
21868           {
21869             /* As things stand, we do not expect or allow one die to
21870                reference a suffix of another die's location list chain.
21871                References must be identical or completely separate.
21872                There is therefore no need to cache the result of this
21873                pass on any list other than the first; doing so
21874                would lead to unnecessary writes.  */
21875             while (*curr)
21876               {
21877                 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
21878                 if (!resolve_addr_in_expr ((*curr)->expr))
21879                   {
21880                     dw_loc_list_ref next = (*curr)->dw_loc_next;
21881                     if (next && (*curr)->ll_symbol)
21882                       {
21883                         gcc_assert (!next->ll_symbol);
21884                         next->ll_symbol = (*curr)->ll_symbol;
21885                       }
21886                     *curr = next;
21887                   }
21888                 else
21889                   {
21890                     mark_base_types ((*curr)->expr);
21891                     curr = &(*curr)->dw_loc_next;
21892                   }
21893               }
21894             if (loc == *start)
21895               loc->resolved_addr = 1;
21896             else
21897               {
21898                 loc->replaced = 1;
21899                 loc->dw_loc_next = *start;
21900               }
21901           }
21902         if (!*start)
21903           {
21904             remove_AT (die, a->dw_attr);
21905             ix--;
21906           }
21907         break;
21908       case dw_val_class_loc:
21909         {
21910           dw_loc_descr_ref l = AT_loc (a);
21911           /* For -gdwarf-2 don't attempt to optimize
21912              DW_AT_data_member_location containing
21913              DW_OP_plus_uconst - older consumers might
21914              rely on it being that op instead of a more complex,
21915              but shorter, location description.  */
21916           if ((dwarf_version > 2
21917                || a->dw_attr != DW_AT_data_member_location
21918                || l == NULL
21919                || l->dw_loc_opc != DW_OP_plus_uconst
21920                || l->dw_loc_next != NULL)
21921               && !resolve_addr_in_expr (l))
21922             {
21923               remove_AT (die, a->dw_attr);
21924               ix--;
21925             }
21926           else
21927             mark_base_types (l);
21928         }
21929         break;
21930       case dw_val_class_addr:
21931         if (a->dw_attr == DW_AT_const_value
21932             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21933           {
21934             remove_AT (die, a->dw_attr);
21935             ix--;
21936           }
21937         if (die->die_tag == DW_TAG_GNU_call_site
21938             && a->dw_attr == DW_AT_abstract_origin)
21939           {
21940             tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
21941             dw_die_ref tdie = lookup_decl_die (tdecl);
21942             if (tdie == NULL
21943                 && DECL_EXTERNAL (tdecl)
21944                 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
21945               {
21946                 force_decl_die (tdecl);
21947                 tdie = lookup_decl_die (tdecl);
21948               }
21949             if (tdie)
21950               {
21951                 a->dw_attr_val.val_class = dw_val_class_die_ref;
21952                 a->dw_attr_val.v.val_die_ref.die = tdie;
21953                 a->dw_attr_val.v.val_die_ref.external = 0;
21954               }
21955             else
21956               {
21957                 remove_AT (die, a->dw_attr);
21958                 ix--;
21959               }
21960           }
21961         break;
21962       default:
21963         break;
21964       }
21965
21966   FOR_EACH_CHILD (die, c, resolve_addr (c));
21967 }
21968 \f
21969 /* Helper routines for optimize_location_lists.
21970    This pass tries to share identical local lists in .debug_loc
21971    section.  */
21972
21973 /* Iteratively hash operands of LOC opcode.  */
21974
21975 static inline hashval_t
21976 hash_loc_operands (dw_loc_descr_ref loc, hashval_t hash)
21977 {
21978   dw_val_ref val1 = &loc->dw_loc_oprnd1;
21979   dw_val_ref val2 = &loc->dw_loc_oprnd2;
21980
21981   switch (loc->dw_loc_opc)
21982     {
21983     case DW_OP_const4u:
21984     case DW_OP_const8u:
21985       if (loc->dtprel)
21986         goto hash_addr;
21987       /* FALLTHRU */
21988     case DW_OP_const1u:
21989     case DW_OP_const1s:
21990     case DW_OP_const2u:
21991     case DW_OP_const2s:
21992     case DW_OP_const4s:
21993     case DW_OP_const8s:
21994     case DW_OP_constu:
21995     case DW_OP_consts:
21996     case DW_OP_pick:
21997     case DW_OP_plus_uconst:
21998     case DW_OP_breg0:
21999     case DW_OP_breg1:
22000     case DW_OP_breg2:
22001     case DW_OP_breg3:
22002     case DW_OP_breg4:
22003     case DW_OP_breg5:
22004     case DW_OP_breg6:
22005     case DW_OP_breg7:
22006     case DW_OP_breg8:
22007     case DW_OP_breg9:
22008     case DW_OP_breg10:
22009     case DW_OP_breg11:
22010     case DW_OP_breg12:
22011     case DW_OP_breg13:
22012     case DW_OP_breg14:
22013     case DW_OP_breg15:
22014     case DW_OP_breg16:
22015     case DW_OP_breg17:
22016     case DW_OP_breg18:
22017     case DW_OP_breg19:
22018     case DW_OP_breg20:
22019     case DW_OP_breg21:
22020     case DW_OP_breg22:
22021     case DW_OP_breg23:
22022     case DW_OP_breg24:
22023     case DW_OP_breg25:
22024     case DW_OP_breg26:
22025     case DW_OP_breg27:
22026     case DW_OP_breg28:
22027     case DW_OP_breg29:
22028     case DW_OP_breg30:
22029     case DW_OP_breg31:
22030     case DW_OP_regx:
22031     case DW_OP_fbreg:
22032     case DW_OP_piece:
22033     case DW_OP_deref_size:
22034     case DW_OP_xderef_size:
22035       hash = iterative_hash_object (val1->v.val_int, hash);
22036       break;
22037     case DW_OP_skip:
22038     case DW_OP_bra:
22039       {
22040         int offset;
22041
22042         gcc_assert (val1->val_class == dw_val_class_loc);
22043         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
22044         hash = iterative_hash_object (offset, hash);
22045       }
22046       break;
22047     case DW_OP_implicit_value:
22048       hash = iterative_hash_object (val1->v.val_unsigned, hash);
22049       switch (val2->val_class)
22050         {
22051         case dw_val_class_const:
22052           hash = iterative_hash_object (val2->v.val_int, hash);
22053           break;
22054         case dw_val_class_vec:
22055           {
22056             unsigned int elt_size = val2->v.val_vec.elt_size;
22057             unsigned int len = val2->v.val_vec.length;
22058
22059             hash = iterative_hash_object (elt_size, hash);
22060             hash = iterative_hash_object (len, hash);
22061             hash = iterative_hash (val2->v.val_vec.array,
22062                                    len * elt_size, hash);
22063           }
22064           break;
22065         case dw_val_class_const_double:
22066           hash = iterative_hash_object (val2->v.val_double.low, hash);
22067           hash = iterative_hash_object (val2->v.val_double.high, hash);
22068           break;
22069         case dw_val_class_addr:
22070           hash = iterative_hash_rtx (val2->v.val_addr, hash);
22071           break;
22072         default:
22073           gcc_unreachable ();
22074         }
22075       break;
22076     case DW_OP_bregx:
22077     case DW_OP_bit_piece:
22078       hash = iterative_hash_object (val1->v.val_int, hash);
22079       hash = iterative_hash_object (val2->v.val_int, hash);
22080       break;
22081     case DW_OP_addr:
22082     hash_addr:
22083       if (loc->dtprel)
22084         {
22085           unsigned char dtprel = 0xd1;
22086           hash = iterative_hash_object (dtprel, hash);
22087         }
22088       hash = iterative_hash_rtx (val1->v.val_addr, hash);
22089       break;
22090     case DW_OP_GNU_implicit_pointer:
22091       hash = iterative_hash_object (val2->v.val_int, hash);
22092       break;
22093     case DW_OP_GNU_entry_value:
22094       hash = hash_loc_operands (val1->v.val_loc, hash);
22095       break;
22096     case DW_OP_GNU_regval_type:
22097     case DW_OP_GNU_deref_type:
22098       {
22099         unsigned int byte_size
22100           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
22101         unsigned int encoding
22102           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
22103         hash = iterative_hash_object (val1->v.val_int, hash);
22104         hash = iterative_hash_object (byte_size, hash);
22105         hash = iterative_hash_object (encoding, hash);
22106       }
22107       break;
22108     case DW_OP_GNU_convert:
22109     case DW_OP_GNU_reinterpret:
22110       if (val1->val_class == dw_val_class_unsigned_const)
22111         {
22112           hash = iterative_hash_object (val1->v.val_unsigned, hash);
22113           break;
22114         }
22115       /* FALLTHRU */
22116     case DW_OP_GNU_const_type:
22117       {
22118         unsigned int byte_size
22119           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
22120         unsigned int encoding
22121           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
22122         hash = iterative_hash_object (byte_size, hash);
22123         hash = iterative_hash_object (encoding, hash);
22124         if (loc->dw_loc_opc != DW_OP_GNU_const_type)
22125           break;
22126         hash = iterative_hash_object (val2->val_class, hash);
22127         switch (val2->val_class)
22128           {
22129           case dw_val_class_const:
22130             hash = iterative_hash_object (val2->v.val_int, hash);
22131             break;
22132           case dw_val_class_vec:
22133             {
22134               unsigned int elt_size = val2->v.val_vec.elt_size;
22135               unsigned int len = val2->v.val_vec.length;
22136
22137               hash = iterative_hash_object (elt_size, hash);
22138               hash = iterative_hash_object (len, hash);
22139               hash = iterative_hash (val2->v.val_vec.array,
22140                                      len * elt_size, hash);
22141             }
22142             break;
22143           case dw_val_class_const_double:
22144             hash = iterative_hash_object (val2->v.val_double.low, hash);
22145             hash = iterative_hash_object (val2->v.val_double.high, hash);
22146             break;
22147           default:
22148             gcc_unreachable ();
22149           }
22150       }
22151       break;
22152
22153     default:
22154       /* Other codes have no operands.  */
22155       break;
22156     }
22157   return hash;
22158 }
22159
22160 /* Iteratively hash the whole DWARF location expression LOC.  */
22161
22162 static inline hashval_t
22163 hash_locs (dw_loc_descr_ref loc, hashval_t hash)
22164 {
22165   dw_loc_descr_ref l;
22166   bool sizes_computed = false;
22167   /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed.  */
22168   size_of_locs (loc);
22169
22170   for (l = loc; l != NULL; l = l->dw_loc_next)
22171     {
22172       enum dwarf_location_atom opc = l->dw_loc_opc;
22173       hash = iterative_hash_object (opc, hash);
22174       if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
22175         {
22176           size_of_locs (loc);
22177           sizes_computed = true;
22178         }
22179       hash = hash_loc_operands (l, hash);
22180     }
22181   return hash;
22182 }
22183
22184 /* Compute hash of the whole location list LIST_HEAD.  */
22185
22186 static inline void
22187 hash_loc_list (dw_loc_list_ref list_head)
22188 {
22189   dw_loc_list_ref curr = list_head;
22190   hashval_t hash = 0;
22191
22192   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
22193     {
22194       hash = iterative_hash (curr->begin, strlen (curr->begin) + 1, hash);
22195       hash = iterative_hash (curr->end, strlen (curr->end) + 1, hash);
22196       if (curr->section)
22197         hash = iterative_hash (curr->section, strlen (curr->section) + 1,
22198                                hash);
22199       hash = hash_locs (curr->expr, hash);
22200     }
22201   list_head->hash = hash;
22202 }
22203
22204 /* Return true if X and Y opcodes have the same operands.  */
22205
22206 static inline bool
22207 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
22208 {
22209   dw_val_ref valx1 = &x->dw_loc_oprnd1;
22210   dw_val_ref valx2 = &x->dw_loc_oprnd2;
22211   dw_val_ref valy1 = &y->dw_loc_oprnd1;
22212   dw_val_ref valy2 = &y->dw_loc_oprnd2;
22213
22214   switch (x->dw_loc_opc)
22215     {
22216     case DW_OP_const4u:
22217     case DW_OP_const8u:
22218       if (x->dtprel)
22219         goto hash_addr;
22220       /* FALLTHRU */
22221     case DW_OP_const1u:
22222     case DW_OP_const1s:
22223     case DW_OP_const2u:
22224     case DW_OP_const2s:
22225     case DW_OP_const4s:
22226     case DW_OP_const8s:
22227     case DW_OP_constu:
22228     case DW_OP_consts:
22229     case DW_OP_pick:
22230     case DW_OP_plus_uconst:
22231     case DW_OP_breg0:
22232     case DW_OP_breg1:
22233     case DW_OP_breg2:
22234     case DW_OP_breg3:
22235     case DW_OP_breg4:
22236     case DW_OP_breg5:
22237     case DW_OP_breg6:
22238     case DW_OP_breg7:
22239     case DW_OP_breg8:
22240     case DW_OP_breg9:
22241     case DW_OP_breg10:
22242     case DW_OP_breg11:
22243     case DW_OP_breg12:
22244     case DW_OP_breg13:
22245     case DW_OP_breg14:
22246     case DW_OP_breg15:
22247     case DW_OP_breg16:
22248     case DW_OP_breg17:
22249     case DW_OP_breg18:
22250     case DW_OP_breg19:
22251     case DW_OP_breg20:
22252     case DW_OP_breg21:
22253     case DW_OP_breg22:
22254     case DW_OP_breg23:
22255     case DW_OP_breg24:
22256     case DW_OP_breg25:
22257     case DW_OP_breg26:
22258     case DW_OP_breg27:
22259     case DW_OP_breg28:
22260     case DW_OP_breg29:
22261     case DW_OP_breg30:
22262     case DW_OP_breg31:
22263     case DW_OP_regx:
22264     case DW_OP_fbreg:
22265     case DW_OP_piece:
22266     case DW_OP_deref_size:
22267     case DW_OP_xderef_size:
22268       return valx1->v.val_int == valy1->v.val_int;
22269     case DW_OP_skip:
22270     case DW_OP_bra:
22271       gcc_assert (valx1->val_class == dw_val_class_loc
22272                   && valy1->val_class == dw_val_class_loc
22273                   && x->dw_loc_addr == y->dw_loc_addr);
22274       return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
22275     case DW_OP_implicit_value:
22276       if (valx1->v.val_unsigned != valy1->v.val_unsigned
22277           || valx2->val_class != valy2->val_class)
22278         return false;
22279       switch (valx2->val_class)
22280         {
22281         case dw_val_class_const:
22282           return valx2->v.val_int == valy2->v.val_int;
22283         case dw_val_class_vec:
22284           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22285                  && valx2->v.val_vec.length == valy2->v.val_vec.length
22286                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22287                             valx2->v.val_vec.elt_size
22288                             * valx2->v.val_vec.length) == 0;
22289         case dw_val_class_const_double:
22290           return valx2->v.val_double.low == valy2->v.val_double.low
22291                  && valx2->v.val_double.high == valy2->v.val_double.high;
22292         case dw_val_class_addr:
22293           return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
22294         default:
22295           gcc_unreachable ();
22296         }
22297     case DW_OP_bregx:
22298     case DW_OP_bit_piece:
22299       return valx1->v.val_int == valy1->v.val_int
22300              && valx2->v.val_int == valy2->v.val_int;
22301     case DW_OP_addr:
22302     hash_addr:
22303       return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
22304     case DW_OP_GNU_implicit_pointer:
22305       return valx1->val_class == dw_val_class_die_ref
22306              && valx1->val_class == valy1->val_class
22307              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
22308              && valx2->v.val_int == valy2->v.val_int;
22309     case DW_OP_GNU_entry_value:
22310       return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
22311     case DW_OP_GNU_const_type:
22312       if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
22313           || valx2->val_class != valy2->val_class)
22314         return false;
22315       switch (valx2->val_class)
22316         {
22317         case dw_val_class_const:
22318           return valx2->v.val_int == valy2->v.val_int;
22319         case dw_val_class_vec:
22320           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22321                  && valx2->v.val_vec.length == valy2->v.val_vec.length
22322                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22323                             valx2->v.val_vec.elt_size
22324                             * valx2->v.val_vec.length) == 0;
22325         case dw_val_class_const_double:
22326           return valx2->v.val_double.low == valy2->v.val_double.low
22327                  && valx2->v.val_double.high == valy2->v.val_double.high;
22328         default:
22329           gcc_unreachable ();
22330         }
22331     case DW_OP_GNU_regval_type:
22332     case DW_OP_GNU_deref_type:
22333       return valx1->v.val_int == valy1->v.val_int
22334              && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
22335     case DW_OP_GNU_convert:
22336     case DW_OP_GNU_reinterpret:
22337       if (valx1->val_class != valy1->val_class)
22338         return false;
22339       if (valx1->val_class == dw_val_class_unsigned_const)
22340         return valx1->v.val_unsigned == valy1->v.val_unsigned;
22341       return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22342     case DW_OP_GNU_parameter_ref:
22343       return valx1->val_class == dw_val_class_die_ref
22344              && valx1->val_class == valy1->val_class
22345              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22346     default:
22347       /* Other codes have no operands.  */
22348       return true;
22349     }
22350 }
22351
22352 /* Return true if DWARF location expressions X and Y are the same.  */
22353
22354 static inline bool
22355 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
22356 {
22357   for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
22358     if (x->dw_loc_opc != y->dw_loc_opc
22359         || x->dtprel != y->dtprel
22360         || !compare_loc_operands (x, y))
22361       break;
22362   return x == NULL && y == NULL;
22363 }
22364
22365 /* Return precomputed hash of location list X.  */
22366
22367 static hashval_t
22368 loc_list_hash (const void *x)
22369 {
22370   return ((const struct dw_loc_list_struct *) x)->hash;
22371 }
22372
22373 /* Return 1 if location lists X and Y are the same.  */
22374
22375 static int
22376 loc_list_eq (const void *x, const void *y)
22377 {
22378   const struct dw_loc_list_struct *a = (const struct dw_loc_list_struct *) x;
22379   const struct dw_loc_list_struct *b = (const struct dw_loc_list_struct *) y;
22380   if (a == b)
22381     return 1;
22382   if (a->hash != b->hash)
22383     return 0;
22384   for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
22385     if (strcmp (a->begin, b->begin) != 0
22386         || strcmp (a->end, b->end) != 0
22387         || (a->section == NULL) != (b->section == NULL)
22388         || (a->section && strcmp (a->section, b->section) != 0)
22389         || !compare_locs (a->expr, b->expr))
22390       break;
22391   return a == NULL && b == NULL;
22392 }
22393
22394 /* Recursively optimize location lists referenced from DIE
22395    children and share them whenever possible.  */
22396
22397 static void
22398 optimize_location_lists_1 (dw_die_ref die, htab_t htab)
22399 {
22400   dw_die_ref c;
22401   dw_attr_ref a;
22402   unsigned ix;
22403   void **slot;
22404
22405   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
22406     if (AT_class (a) == dw_val_class_loc_list)
22407       {
22408         dw_loc_list_ref list = AT_loc_list (a);
22409         /* TODO: perform some optimizations here, before hashing
22410            it and storing into the hash table.  */
22411         hash_loc_list (list);
22412         slot = htab_find_slot_with_hash (htab, list, list->hash,
22413                                          INSERT);
22414         if (*slot == NULL)
22415           *slot = (void *) list;
22416         else
22417           a->dw_attr_val.v.val_loc_list = (dw_loc_list_ref) *slot;
22418       }
22419
22420   FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
22421 }
22422
22423 /* Optimize location lists referenced from DIE
22424    children and share them whenever possible.  */
22425
22426 static void
22427 optimize_location_lists (dw_die_ref die)
22428 {
22429   htab_t htab = htab_create (500, loc_list_hash, loc_list_eq, NULL);
22430   optimize_location_lists_1 (die, htab);
22431   htab_delete (htab);
22432 }
22433 \f
22434 /* Output stuff that dwarf requires at the end of every file,
22435    and generate the DWARF-2 debugging info.  */
22436
22437 static void
22438 dwarf2out_finish (const char *filename)
22439 {
22440   limbo_die_node *node, *next_node;
22441   comdat_type_node *ctnode;
22442   htab_t comdat_type_table;
22443   unsigned int i;
22444
22445   /* PCH might result in DW_AT_producer string being restored from the
22446      header compilation, fix it up if needed.  */
22447   dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
22448   if (strcmp (AT_string (producer), producer_string) != 0)
22449     {
22450       struct indirect_string_node *node = find_AT_string (producer_string);
22451       producer->dw_attr_val.v.val_str = node;
22452     }
22453
22454   gen_scheduled_generic_parms_dies ();
22455   gen_remaining_tmpl_value_param_die_attribute ();
22456
22457   /* Add the name for the main input file now.  We delayed this from
22458      dwarf2out_init to avoid complications with PCH.  */
22459   add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
22460   if (!IS_ABSOLUTE_PATH (filename))
22461     add_comp_dir_attribute (comp_unit_die ());
22462   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
22463     {
22464       bool p = false;
22465       htab_traverse (file_table, file_table_relative_p, &p);
22466       if (p)
22467         add_comp_dir_attribute (comp_unit_die ());
22468     }
22469
22470   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
22471     {
22472       add_location_or_const_value_attribute (
22473         VEC_index (deferred_locations, deferred_locations_list, i)->die,
22474         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
22475         false,
22476         DW_AT_location);
22477     }
22478
22479   /* Traverse the limbo die list, and add parent/child links.  The only
22480      dies without parents that should be here are concrete instances of
22481      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
22482      For concrete instances, we can get the parent die from the abstract
22483      instance.  */
22484   for (node = limbo_die_list; node; node = next_node)
22485     {
22486       dw_die_ref die = node->die;
22487       next_node = node->next;
22488
22489       if (die->die_parent == NULL)
22490         {
22491           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
22492
22493           if (origin && origin->die_parent)
22494             add_child_die (origin->die_parent, die);
22495           else if (is_cu_die (die))
22496             ;
22497           else if (seen_error ())
22498             /* It's OK to be confused by errors in the input.  */
22499             add_child_die (comp_unit_die (), die);
22500           else
22501             {
22502               /* In certain situations, the lexical block containing a
22503                  nested function can be optimized away, which results
22504                  in the nested function die being orphaned.  Likewise
22505                  with the return type of that nested function.  Force
22506                  this to be a child of the containing function.
22507
22508                  It may happen that even the containing function got fully
22509                  inlined and optimized out.  In that case we are lost and
22510                  assign the empty child.  This should not be big issue as
22511                  the function is likely unreachable too.  */
22512               tree context = NULL_TREE;
22513
22514               gcc_assert (node->created_for);
22515
22516               if (DECL_P (node->created_for))
22517                 context = DECL_CONTEXT (node->created_for);
22518               else if (TYPE_P (node->created_for))
22519                 context = TYPE_CONTEXT (node->created_for);
22520
22521               origin = get_context_die (context);
22522               add_child_die (origin, die);
22523             }
22524         }
22525     }
22526
22527   limbo_die_list = NULL;
22528
22529 #if ENABLE_ASSERT_CHECKING
22530   {
22531     dw_die_ref die = comp_unit_die (), c;
22532     FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
22533   }
22534 #endif
22535   resolve_addr (comp_unit_die ());
22536   move_marked_base_types ();
22537
22538   for (node = deferred_asm_name; node; node = node->next)
22539     {
22540       tree decl = node->created_for;
22541       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
22542         {
22543           add_linkage_attr (node->die, decl);
22544           move_linkage_attr (node->die);
22545         }
22546     }
22547
22548   deferred_asm_name = NULL;
22549
22550   /* Walk through the list of incomplete types again, trying once more to
22551      emit full debugging info for them.  */
22552   retry_incomplete_types ();
22553
22554   if (flag_eliminate_unused_debug_types)
22555     prune_unused_types ();
22556
22557   /* Generate separate CUs for each of the include files we've seen.
22558      They will go into limbo_die_list.  */
22559   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
22560     break_out_includes (comp_unit_die ());
22561
22562   /* Generate separate COMDAT sections for type DIEs. */
22563   if (use_debug_types)
22564     {
22565       break_out_comdat_types (comp_unit_die ());
22566
22567       /* Each new type_unit DIE was added to the limbo die list when created.
22568          Since these have all been added to comdat_type_list, clear the
22569          limbo die list.  */
22570       limbo_die_list = NULL;
22571
22572       /* For each new comdat type unit, copy declarations for incomplete
22573          types to make the new unit self-contained (i.e., no direct
22574          references to the main compile unit).  */
22575       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22576         copy_decls_for_unworthy_types (ctnode->root_die);
22577       copy_decls_for_unworthy_types (comp_unit_die ());
22578
22579       /* In the process of copying declarations from one unit to another,
22580          we may have left some declarations behind that are no longer
22581          referenced.  Prune them.  */
22582       prune_unused_types ();
22583     }
22584
22585   /* Traverse the DIE's and add add sibling attributes to those DIE's
22586      that have children.  */
22587   add_sibling_attributes (comp_unit_die ());
22588   for (node = limbo_die_list; node; node = node->next)
22589     add_sibling_attributes (node->die);
22590   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22591     add_sibling_attributes (ctnode->root_die);
22592
22593   /* Output a terminator label for the .text section.  */
22594   switch_to_section (text_section);
22595   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22596   if (cold_text_section)
22597     {
22598       switch_to_section (cold_text_section);
22599       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22600     }
22601
22602   /* We can only use the low/high_pc attributes if all of the code was
22603      in .text.  */
22604   if (!have_multiple_function_sections 
22605       || (dwarf_version < 3 && dwarf_strict))
22606     {
22607       /* Don't add if the CU has no associated code.  */
22608       if (text_section_used)
22609         {
22610           add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label);
22611           add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
22612         }
22613     }
22614   else
22615     {
22616       unsigned fde_idx;
22617       dw_fde_ref fde;
22618       bool range_list_added = false;
22619
22620       if (text_section_used)
22621         add_ranges_by_labels (comp_unit_die (), text_section_label,
22622                               text_end_label, &range_list_added);
22623       if (cold_text_section_used)
22624         add_ranges_by_labels (comp_unit_die (), cold_text_section_label,
22625                               cold_end_label, &range_list_added);
22626
22627       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
22628         {
22629           if (!fde->in_std_section)
22630             add_ranges_by_labels (comp_unit_die (), fde->dw_fde_begin,
22631                                   fde->dw_fde_end, &range_list_added);
22632           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
22633             add_ranges_by_labels (comp_unit_die (), fde->dw_fde_second_begin,
22634                                   fde->dw_fde_second_end, &range_list_added);
22635         }
22636
22637       if (range_list_added)
22638         {
22639           /* We need to give .debug_loc and .debug_ranges an appropriate
22640              "base address".  Use zero so that these addresses become
22641              absolute.  Historically, we've emitted the unexpected
22642              DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22643              Emit both to give time for other tools to adapt.  */
22644           add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx);
22645           if (! dwarf_strict && dwarf_version < 4)
22646             add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx);
22647
22648           add_ranges (NULL);
22649         }
22650     }
22651
22652   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22653     add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list,
22654                     debug_line_section_label);
22655
22656   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22657     add_AT_macptr (comp_unit_die (),
22658                    dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
22659                    macinfo_section_label);
22660
22661   if (have_location_lists)
22662     optimize_location_lists (comp_unit_die ());
22663
22664   /* Output all of the compilation units.  We put the main one last so that
22665      the offsets are available to output_pubnames.  */
22666   for (node = limbo_die_list; node; node = node->next)
22667     output_comp_unit (node->die, 0);
22668
22669   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22670   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22671     {
22672       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22673
22674       /* Don't output duplicate types.  */
22675       if (*slot != HTAB_EMPTY_ENTRY)
22676         continue;
22677
22678       /* Add a pointer to the line table for the main compilation unit
22679          so that the debugger can make sense of DW_AT_decl_file
22680          attributes.  */
22681       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22682         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22683                         debug_line_section_label);
22684
22685       output_comdat_type_unit (ctnode);
22686       *slot = ctnode;
22687     }
22688   htab_delete (comdat_type_table);
22689
22690   /* Output the main compilation unit if non-empty or if .debug_macinfo
22691      will be emitted.  */
22692   output_comp_unit (comp_unit_die (), debug_info_level >= DINFO_LEVEL_VERBOSE);
22693
22694   /* Output the abbreviation table.  */
22695   if (abbrev_die_table_in_use != 1)
22696     {
22697       switch_to_section (debug_abbrev_section);
22698       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
22699       output_abbrev_section ();
22700     }
22701
22702   /* Output location list section if necessary.  */
22703   if (have_location_lists)
22704     {
22705       /* Output the location lists info.  */
22706       switch_to_section (debug_loc_section);
22707       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22708                                    DEBUG_LOC_SECTION_LABEL, 0);
22709       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22710       output_location_lists (comp_unit_die ());
22711     }
22712
22713   /* Output public names table if necessary.  */
22714   if (!VEC_empty (pubname_entry, pubname_table))
22715     {
22716       gcc_assert (info_section_emitted);
22717       switch_to_section (debug_pubnames_section);
22718       output_pubnames (pubname_table);
22719     }
22720
22721   /* Output public types table if necessary.  */
22722   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22723      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22724      simply won't look for the section.  */
22725   if (!VEC_empty (pubname_entry, pubtype_table))
22726     {
22727       bool empty = false;
22728       
22729       if (flag_eliminate_unused_debug_types)
22730         {
22731           /* The pubtypes table might be emptied by pruning unused items.  */
22732           unsigned i;
22733           pubname_ref p;
22734           empty = true;
22735           FOR_EACH_VEC_ELT (pubname_entry, pubtype_table, i, p)
22736             if (p->die->die_offset != 0)
22737               {
22738                 empty = false;
22739                 break;
22740               }
22741         }
22742       if (!empty)
22743         {
22744           gcc_assert (info_section_emitted);
22745           switch_to_section (debug_pubtypes_section);
22746           output_pubnames (pubtype_table);
22747         }
22748     }
22749
22750   /* Output the address range information if a CU (.debug_info section)
22751      was emitted.  We output an empty table even if we had no functions
22752      to put in it.  This because the consumer has no way to tell the
22753      difference between an empty table that we omitted and failure to
22754      generate a table that would have contained data.  */
22755   if (info_section_emitted)
22756     {
22757       unsigned long aranges_length = size_of_aranges ();
22758
22759       switch_to_section (debug_aranges_section);
22760       output_aranges (aranges_length);
22761     }
22762
22763   /* Output ranges section if necessary.  */
22764   if (ranges_table_in_use)
22765     {
22766       switch_to_section (debug_ranges_section);
22767       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22768       output_ranges ();
22769     }
22770
22771   /* Have to end the macro section.  */
22772   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22773     {
22774       switch_to_section (debug_macinfo_section);
22775       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
22776       if (!VEC_empty (macinfo_entry, macinfo_table))
22777         output_macinfo ();
22778       dw2_asm_output_data (1, 0, "End compilation unit");
22779     }
22780
22781   /* Output the source line correspondence table.  We must do this
22782      even if there is no line information.  Otherwise, on an empty
22783      translation unit, we will generate a present, but empty,
22784      .debug_info section.  IRIX 6.5 `nm' will then complain when
22785      examining the file.  This is done late so that any filenames
22786      used by the debug_info section are marked as 'used'.  */
22787   switch_to_section (debug_line_section);
22788   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
22789   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22790     output_line_info ();
22791
22792   /* If we emitted any DW_FORM_strp form attribute, output the string
22793      table too.  */
22794   if (debug_str_hash)
22795     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22796 }
22797
22798 #include "gt-dwarf2out.h"