OSDN Git Service

Fix up last commit.
[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 void 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 static void break_out_comdat_types (dw_die_ref);
3312 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
3313 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
3314 static void copy_decls_for_unworthy_types (dw_die_ref);
3315
3316 static hashval_t htab_cu_hash (const void *);
3317 static int htab_cu_eq (const void *, const void *);
3318 static void htab_cu_del (void *);
3319 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
3320 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
3321 static void add_sibling_attributes (dw_die_ref);
3322 static void build_abbrev_table (dw_die_ref);
3323 static void output_location_lists (dw_die_ref);
3324 static int constant_size (unsigned HOST_WIDE_INT);
3325 static unsigned long size_of_die (dw_die_ref);
3326 static void calc_die_sizes (dw_die_ref);
3327 static void calc_base_type_die_sizes (void);
3328 static void mark_dies (dw_die_ref);
3329 static void unmark_dies (dw_die_ref);
3330 static void unmark_all_dies (dw_die_ref);
3331 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
3332 static unsigned long size_of_aranges (void);
3333 static enum dwarf_form value_format (dw_attr_ref);
3334 static void output_value_format (dw_attr_ref);
3335 static void output_abbrev_section (void);
3336 static void output_die_symbol (dw_die_ref);
3337 static void output_die (dw_die_ref);
3338 static void output_compilation_unit_header (void);
3339 static void output_comp_unit (dw_die_ref, int);
3340 static void output_comdat_type_unit (comdat_type_node *);
3341 static const char *dwarf2_name (tree, int);
3342 static void add_pubname (tree, dw_die_ref);
3343 static void add_pubname_string (const char *, dw_die_ref);
3344 static void add_pubtype (tree, dw_die_ref);
3345 static void output_pubnames (VEC (pubname_entry,gc) *);
3346 static void output_aranges (unsigned long);
3347 static unsigned int add_ranges_num (int);
3348 static unsigned int add_ranges (const_tree);
3349 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3350                                   bool *);
3351 static void output_ranges (void);
3352 static dw_line_info_table *new_line_info_table (void);
3353 static void output_line_info (void);
3354 static void output_file_names (void);
3355 static dw_die_ref base_type_die (tree);
3356 static int is_base_type (tree);
3357 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
3358 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
3359 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3360 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3361 static int type_is_enum (const_tree);
3362 static unsigned int dbx_reg_number (const_rtx);
3363 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3364 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3365 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3366                                                 enum var_init_status);
3367 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3368                                                      enum var_init_status);
3369 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3370                                          enum var_init_status);
3371 static int is_based_loc (const_rtx);
3372 static int resolve_one_addr (rtx *, void *);
3373 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3374                                                enum var_init_status);
3375 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
3376                                         enum var_init_status);
3377 static dw_loc_list_ref loc_list_from_tree (tree, int);
3378 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
3379 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3380 static tree field_type (const_tree);
3381 static unsigned int simple_type_align_in_bits (const_tree);
3382 static unsigned int simple_decl_align_in_bits (const_tree);
3383 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3384 static HOST_WIDE_INT field_byte_offset (const_tree);
3385 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3386                                          dw_loc_list_ref);
3387 static void add_data_member_location_attribute (dw_die_ref, tree);
3388 static bool add_const_value_attribute (dw_die_ref, rtx);
3389 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3390 static void insert_double (double_int, unsigned char *);
3391 static void insert_float (const_rtx, unsigned char *);
3392 static rtx rtl_for_decl_location (tree);
3393 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
3394                                                    enum dwarf_attribute);
3395 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3396 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3397 static void add_name_attribute (dw_die_ref, const char *);
3398 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3399 static void add_comp_dir_attribute (dw_die_ref);
3400 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
3401 static void add_subscript_info (dw_die_ref, tree, bool);
3402 static void add_byte_size_attribute (dw_die_ref, tree);
3403 static void add_bit_offset_attribute (dw_die_ref, tree);
3404 static void add_bit_size_attribute (dw_die_ref, tree);
3405 static void add_prototyped_attribute (dw_die_ref, tree);
3406 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3407 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3408 static void add_src_coords_attributes (dw_die_ref, tree);
3409 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3410 static void push_decl_scope (tree);
3411 static void pop_decl_scope (void);
3412 static dw_die_ref scope_die_for (tree, dw_die_ref);
3413 static inline int local_scope_p (dw_die_ref);
3414 static inline int class_scope_p (dw_die_ref);
3415 static inline int class_or_namespace_scope_p (dw_die_ref);
3416 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
3417 static void add_calling_convention_attribute (dw_die_ref, tree);
3418 static const char *type_tag (const_tree);
3419 static tree member_declared_type (const_tree);
3420 #if 0
3421 static const char *decl_start_label (tree);
3422 #endif
3423 static void gen_array_type_die (tree, dw_die_ref);
3424 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3425 #if 0
3426 static void gen_entry_point_die (tree, dw_die_ref);
3427 #endif
3428 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3429 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3430 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
3431 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3432 static void gen_formal_types_die (tree, dw_die_ref);
3433 static void gen_subprogram_die (tree, dw_die_ref);
3434 static void gen_variable_die (tree, tree, dw_die_ref);
3435 static void gen_const_die (tree, dw_die_ref);
3436 static void gen_label_die (tree, dw_die_ref);
3437 static void gen_lexical_block_die (tree, dw_die_ref, int);
3438 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
3439 static void gen_field_die (tree, dw_die_ref);
3440 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3441 static dw_die_ref gen_compile_unit_die (const char *);
3442 static void gen_inheritance_die (tree, tree, dw_die_ref);
3443 static void gen_member_die (tree, dw_die_ref);
3444 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3445                                                 enum debug_info_usage);
3446 static void gen_subroutine_type_die (tree, dw_die_ref);
3447 static void gen_typedef_die (tree, dw_die_ref);
3448 static void gen_type_die (tree, dw_die_ref);
3449 static void gen_block_die (tree, dw_die_ref, int);
3450 static void decls_for_scope (tree, dw_die_ref, int);
3451 static inline int is_redundant_typedef (const_tree);
3452 static bool is_naming_typedef_decl (const_tree);
3453 static inline dw_die_ref get_context_die (tree);
3454 static void gen_namespace_die (tree, dw_die_ref);
3455 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref);
3456 static dw_die_ref force_decl_die (tree);
3457 static dw_die_ref force_type_die (tree);
3458 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3459 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3460 static struct dwarf_file_data * lookup_filename (const char *);
3461 static void retry_incomplete_types (void);
3462 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3463 static void gen_generic_params_dies (tree);
3464 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3465 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3466 static void splice_child_die (dw_die_ref, dw_die_ref);
3467 static int file_info_cmp (const void *, const void *);
3468 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3469                                      const char *, const char *);
3470 static void output_loc_list (dw_loc_list_ref);
3471 static char *gen_internal_sym (const char *);
3472
3473 static void prune_unmark_dies (dw_die_ref);
3474 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3475 static void prune_unused_types_mark (dw_die_ref, int);
3476 static void prune_unused_types_walk (dw_die_ref);
3477 static void prune_unused_types_walk_attribs (dw_die_ref);
3478 static void prune_unused_types_prune (dw_die_ref);
3479 static void prune_unused_types (void);
3480 static int maybe_emit_file (struct dwarf_file_data *fd);
3481 static inline const char *AT_vms_delta1 (dw_attr_ref);
3482 static inline const char *AT_vms_delta2 (dw_attr_ref);
3483 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3484                                      const char *, const char *);
3485 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3486 static void gen_remaining_tmpl_value_param_die_attribute (void);
3487 static bool generic_type_p (tree);
3488 static void schedule_generic_params_dies_gen (tree t);
3489 static void gen_scheduled_generic_parms_dies (void);
3490
3491 /* Section names used to hold DWARF debugging information.  */
3492 #ifndef DEBUG_INFO_SECTION
3493 #define DEBUG_INFO_SECTION      ".debug_info"
3494 #endif
3495 #ifndef DEBUG_ABBREV_SECTION
3496 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
3497 #endif
3498 #ifndef DEBUG_ARANGES_SECTION
3499 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
3500 #endif
3501 #ifndef DEBUG_MACINFO_SECTION
3502 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
3503 #endif
3504 #ifndef DEBUG_MACRO_SECTION
3505 #define DEBUG_MACRO_SECTION     ".debug_macro"
3506 #endif
3507 #ifndef DEBUG_LINE_SECTION
3508 #define DEBUG_LINE_SECTION      ".debug_line"
3509 #endif
3510 #ifndef DEBUG_LOC_SECTION
3511 #define DEBUG_LOC_SECTION       ".debug_loc"
3512 #endif
3513 #ifndef DEBUG_PUBNAMES_SECTION
3514 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
3515 #endif
3516 #ifndef DEBUG_PUBTYPES_SECTION
3517 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
3518 #endif
3519 #ifndef DEBUG_STR_SECTION
3520 #define DEBUG_STR_SECTION       ".debug_str"
3521 #endif
3522 #ifndef DEBUG_RANGES_SECTION
3523 #define DEBUG_RANGES_SECTION    ".debug_ranges"
3524 #endif
3525
3526 /* Standard ELF section names for compiled code and data.  */
3527 #ifndef TEXT_SECTION_NAME
3528 #define TEXT_SECTION_NAME       ".text"
3529 #endif
3530
3531 /* Section flags for .debug_str section.  */
3532 #define DEBUG_STR_SECTION_FLAGS \
3533   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
3534    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
3535    : SECTION_DEBUG)
3536
3537 /* Labels we insert at beginning sections we can reference instead of
3538    the section names themselves.  */
3539
3540 #ifndef TEXT_SECTION_LABEL
3541 #define TEXT_SECTION_LABEL              "Ltext"
3542 #endif
3543 #ifndef COLD_TEXT_SECTION_LABEL
3544 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
3545 #endif
3546 #ifndef DEBUG_LINE_SECTION_LABEL
3547 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
3548 #endif
3549 #ifndef DEBUG_INFO_SECTION_LABEL
3550 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
3551 #endif
3552 #ifndef DEBUG_ABBREV_SECTION_LABEL
3553 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
3554 #endif
3555 #ifndef DEBUG_LOC_SECTION_LABEL
3556 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
3557 #endif
3558 #ifndef DEBUG_RANGES_SECTION_LABEL
3559 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
3560 #endif
3561 #ifndef DEBUG_MACINFO_SECTION_LABEL
3562 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
3563 #endif
3564 #ifndef DEBUG_MACRO_SECTION_LABEL
3565 #define DEBUG_MACRO_SECTION_LABEL       "Ldebug_macro"
3566 #endif
3567
3568
3569 /* Definitions of defaults for formats and names of various special
3570    (artificial) labels which may be generated within this file (when the -g
3571    options is used and DWARF2_DEBUGGING_INFO is in effect.
3572    If necessary, these may be overridden from within the tm.h file, but
3573    typically, overriding these defaults is unnecessary.  */
3574
3575 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3576 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3577 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3578 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3579 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3580 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3581 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3582 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3583 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3584 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3585
3586 #ifndef TEXT_END_LABEL
3587 #define TEXT_END_LABEL          "Letext"
3588 #endif
3589 #ifndef COLD_END_LABEL
3590 #define COLD_END_LABEL          "Letext_cold"
3591 #endif
3592 #ifndef BLOCK_BEGIN_LABEL
3593 #define BLOCK_BEGIN_LABEL       "LBB"
3594 #endif
3595 #ifndef BLOCK_END_LABEL
3596 #define BLOCK_END_LABEL         "LBE"
3597 #endif
3598 #ifndef LINE_CODE_LABEL
3599 #define LINE_CODE_LABEL         "LM"
3600 #endif
3601
3602 \f
3603 /* Return the root of the DIE's built for the current compilation unit.  */
3604 static dw_die_ref
3605 comp_unit_die (void)
3606 {
3607   if (!single_comp_unit_die)
3608     single_comp_unit_die = gen_compile_unit_die (NULL);
3609   return single_comp_unit_die;
3610 }
3611
3612 /* We allow a language front-end to designate a function that is to be
3613    called to "demangle" any name before it is put into a DIE.  */
3614
3615 static const char *(*demangle_name_func) (const char *);
3616
3617 void
3618 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3619 {
3620   demangle_name_func = func;
3621 }
3622
3623 /* Test if rtl node points to a pseudo register.  */
3624
3625 static inline int
3626 is_pseudo_reg (const_rtx rtl)
3627 {
3628   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3629           || (GET_CODE (rtl) == SUBREG
3630               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3631 }
3632
3633 /* Return a reference to a type, with its const and volatile qualifiers
3634    removed.  */
3635
3636 static inline tree
3637 type_main_variant (tree type)
3638 {
3639   type = TYPE_MAIN_VARIANT (type);
3640
3641   /* ??? There really should be only one main variant among any group of
3642      variants of a given type (and all of the MAIN_VARIANT values for all
3643      members of the group should point to that one type) but sometimes the C
3644      front-end messes this up for array types, so we work around that bug
3645      here.  */
3646   if (TREE_CODE (type) == ARRAY_TYPE)
3647     while (type != TYPE_MAIN_VARIANT (type))
3648       type = TYPE_MAIN_VARIANT (type);
3649
3650   return type;
3651 }
3652
3653 /* Return nonzero if the given type node represents a tagged type.  */
3654
3655 static inline int
3656 is_tagged_type (const_tree type)
3657 {
3658   enum tree_code code = TREE_CODE (type);
3659
3660   return (code == RECORD_TYPE || code == UNION_TYPE
3661           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3662 }
3663
3664 /* Set label to debug_info_section_label + die_offset of a DIE reference.  */
3665
3666 static void
3667 get_ref_die_offset_label (char *label, dw_die_ref ref)
3668 {
3669   sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3670 }
3671
3672 /* Return die_offset of a DIE reference to a base type.  */
3673
3674 static unsigned long int
3675 get_base_type_offset (dw_die_ref ref)
3676 {
3677   if (ref->die_offset)
3678     return ref->die_offset;
3679   if (comp_unit_die ()->die_abbrev)
3680     {
3681       calc_base_type_die_sizes ();
3682       gcc_assert (ref->die_offset);
3683     }
3684   return ref->die_offset;
3685 }
3686
3687 /* Return die_offset of a DIE reference other than base type.  */
3688
3689 static unsigned long int
3690 get_ref_die_offset (dw_die_ref ref)
3691 {
3692   gcc_assert (ref->die_offset);
3693   return ref->die_offset;
3694 }
3695
3696 /* Convert a DIE tag into its string name.  */
3697
3698 static const char *
3699 dwarf_tag_name (unsigned int tag)
3700 {
3701   switch (tag)
3702     {
3703     case DW_TAG_padding:
3704       return "DW_TAG_padding";
3705     case DW_TAG_array_type:
3706       return "DW_TAG_array_type";
3707     case DW_TAG_class_type:
3708       return "DW_TAG_class_type";
3709     case DW_TAG_entry_point:
3710       return "DW_TAG_entry_point";
3711     case DW_TAG_enumeration_type:
3712       return "DW_TAG_enumeration_type";
3713     case DW_TAG_formal_parameter:
3714       return "DW_TAG_formal_parameter";
3715     case DW_TAG_imported_declaration:
3716       return "DW_TAG_imported_declaration";
3717     case DW_TAG_label:
3718       return "DW_TAG_label";
3719     case DW_TAG_lexical_block:
3720       return "DW_TAG_lexical_block";
3721     case DW_TAG_member:
3722       return "DW_TAG_member";
3723     case DW_TAG_pointer_type:
3724       return "DW_TAG_pointer_type";
3725     case DW_TAG_reference_type:
3726       return "DW_TAG_reference_type";
3727     case DW_TAG_compile_unit:
3728       return "DW_TAG_compile_unit";
3729     case DW_TAG_string_type:
3730       return "DW_TAG_string_type";
3731     case DW_TAG_structure_type:
3732       return "DW_TAG_structure_type";
3733     case DW_TAG_subroutine_type:
3734       return "DW_TAG_subroutine_type";
3735     case DW_TAG_typedef:
3736       return "DW_TAG_typedef";
3737     case DW_TAG_union_type:
3738       return "DW_TAG_union_type";
3739     case DW_TAG_unspecified_parameters:
3740       return "DW_TAG_unspecified_parameters";
3741     case DW_TAG_variant:
3742       return "DW_TAG_variant";
3743     case DW_TAG_common_block:
3744       return "DW_TAG_common_block";
3745     case DW_TAG_common_inclusion:
3746       return "DW_TAG_common_inclusion";
3747     case DW_TAG_inheritance:
3748       return "DW_TAG_inheritance";
3749     case DW_TAG_inlined_subroutine:
3750       return "DW_TAG_inlined_subroutine";
3751     case DW_TAG_module:
3752       return "DW_TAG_module";
3753     case DW_TAG_ptr_to_member_type:
3754       return "DW_TAG_ptr_to_member_type";
3755     case DW_TAG_set_type:
3756       return "DW_TAG_set_type";
3757     case DW_TAG_subrange_type:
3758       return "DW_TAG_subrange_type";
3759     case DW_TAG_with_stmt:
3760       return "DW_TAG_with_stmt";
3761     case DW_TAG_access_declaration:
3762       return "DW_TAG_access_declaration";
3763     case DW_TAG_base_type:
3764       return "DW_TAG_base_type";
3765     case DW_TAG_catch_block:
3766       return "DW_TAG_catch_block";
3767     case DW_TAG_const_type:
3768       return "DW_TAG_const_type";
3769     case DW_TAG_constant:
3770       return "DW_TAG_constant";
3771     case DW_TAG_enumerator:
3772       return "DW_TAG_enumerator";
3773     case DW_TAG_file_type:
3774       return "DW_TAG_file_type";
3775     case DW_TAG_friend:
3776       return "DW_TAG_friend";
3777     case DW_TAG_namelist:
3778       return "DW_TAG_namelist";
3779     case DW_TAG_namelist_item:
3780       return "DW_TAG_namelist_item";
3781     case DW_TAG_packed_type:
3782       return "DW_TAG_packed_type";
3783     case DW_TAG_subprogram:
3784       return "DW_TAG_subprogram";
3785     case DW_TAG_template_type_param:
3786       return "DW_TAG_template_type_param";
3787     case DW_TAG_template_value_param:
3788       return "DW_TAG_template_value_param";
3789     case DW_TAG_thrown_type:
3790       return "DW_TAG_thrown_type";
3791     case DW_TAG_try_block:
3792       return "DW_TAG_try_block";
3793     case DW_TAG_variant_part:
3794       return "DW_TAG_variant_part";
3795     case DW_TAG_variable:
3796       return "DW_TAG_variable";
3797     case DW_TAG_volatile_type:
3798       return "DW_TAG_volatile_type";
3799     case DW_TAG_dwarf_procedure:
3800       return "DW_TAG_dwarf_procedure";
3801     case DW_TAG_restrict_type:
3802       return "DW_TAG_restrict_type";
3803     case DW_TAG_interface_type:
3804       return "DW_TAG_interface_type";
3805     case DW_TAG_namespace:
3806       return "DW_TAG_namespace";
3807     case DW_TAG_imported_module:
3808       return "DW_TAG_imported_module";
3809     case DW_TAG_unspecified_type:
3810       return "DW_TAG_unspecified_type";
3811     case DW_TAG_partial_unit:
3812       return "DW_TAG_partial_unit";
3813     case DW_TAG_imported_unit:
3814       return "DW_TAG_imported_unit";
3815     case DW_TAG_condition:
3816       return "DW_TAG_condition";
3817     case DW_TAG_shared_type:
3818       return "DW_TAG_shared_type";
3819     case DW_TAG_type_unit:
3820       return "DW_TAG_type_unit";
3821     case DW_TAG_rvalue_reference_type:
3822       return "DW_TAG_rvalue_reference_type";
3823     case DW_TAG_template_alias:
3824       return "DW_TAG_template_alias";
3825     case DW_TAG_GNU_template_parameter_pack:
3826       return "DW_TAG_GNU_template_parameter_pack";
3827     case DW_TAG_GNU_formal_parameter_pack:
3828       return "DW_TAG_GNU_formal_parameter_pack";
3829     case DW_TAG_MIPS_loop:
3830       return "DW_TAG_MIPS_loop";
3831     case DW_TAG_format_label:
3832       return "DW_TAG_format_label";
3833     case DW_TAG_function_template:
3834       return "DW_TAG_function_template";
3835     case DW_TAG_class_template:
3836       return "DW_TAG_class_template";
3837     case DW_TAG_GNU_BINCL:
3838       return "DW_TAG_GNU_BINCL";
3839     case DW_TAG_GNU_EINCL:
3840       return "DW_TAG_GNU_EINCL";
3841     case DW_TAG_GNU_template_template_param:
3842       return "DW_TAG_GNU_template_template_param";
3843     case DW_TAG_GNU_call_site:
3844       return "DW_TAG_GNU_call_site";
3845     case DW_TAG_GNU_call_site_parameter:
3846       return "DW_TAG_GNU_call_site_parameter";
3847     default:
3848       return "DW_TAG_<unknown>";
3849     }
3850 }
3851
3852 /* Convert a DWARF attribute code into its string name.  */
3853
3854 static const char *
3855 dwarf_attr_name (unsigned int attr)
3856 {
3857   switch (attr)
3858     {
3859     case DW_AT_sibling:
3860       return "DW_AT_sibling";
3861     case DW_AT_location:
3862       return "DW_AT_location";
3863     case DW_AT_name:
3864       return "DW_AT_name";
3865     case DW_AT_ordering:
3866       return "DW_AT_ordering";
3867     case DW_AT_subscr_data:
3868       return "DW_AT_subscr_data";
3869     case DW_AT_byte_size:
3870       return "DW_AT_byte_size";
3871     case DW_AT_bit_offset:
3872       return "DW_AT_bit_offset";
3873     case DW_AT_bit_size:
3874       return "DW_AT_bit_size";
3875     case DW_AT_element_list:
3876       return "DW_AT_element_list";
3877     case DW_AT_stmt_list:
3878       return "DW_AT_stmt_list";
3879     case DW_AT_low_pc:
3880       return "DW_AT_low_pc";
3881     case DW_AT_high_pc:
3882       return "DW_AT_high_pc";
3883     case DW_AT_language:
3884       return "DW_AT_language";
3885     case DW_AT_member:
3886       return "DW_AT_member";
3887     case DW_AT_discr:
3888       return "DW_AT_discr";
3889     case DW_AT_discr_value:
3890       return "DW_AT_discr_value";
3891     case DW_AT_visibility:
3892       return "DW_AT_visibility";
3893     case DW_AT_import:
3894       return "DW_AT_import";
3895     case DW_AT_string_length:
3896       return "DW_AT_string_length";
3897     case DW_AT_common_reference:
3898       return "DW_AT_common_reference";
3899     case DW_AT_comp_dir:
3900       return "DW_AT_comp_dir";
3901     case DW_AT_const_value:
3902       return "DW_AT_const_value";
3903     case DW_AT_containing_type:
3904       return "DW_AT_containing_type";
3905     case DW_AT_default_value:
3906       return "DW_AT_default_value";
3907     case DW_AT_inline:
3908       return "DW_AT_inline";
3909     case DW_AT_is_optional:
3910       return "DW_AT_is_optional";
3911     case DW_AT_lower_bound:
3912       return "DW_AT_lower_bound";
3913     case DW_AT_producer:
3914       return "DW_AT_producer";
3915     case DW_AT_prototyped:
3916       return "DW_AT_prototyped";
3917     case DW_AT_return_addr:
3918       return "DW_AT_return_addr";
3919     case DW_AT_start_scope:
3920       return "DW_AT_start_scope";
3921     case DW_AT_bit_stride:
3922       return "DW_AT_bit_stride";
3923     case DW_AT_upper_bound:
3924       return "DW_AT_upper_bound";
3925     case DW_AT_abstract_origin:
3926       return "DW_AT_abstract_origin";
3927     case DW_AT_accessibility:
3928       return "DW_AT_accessibility";
3929     case DW_AT_address_class:
3930       return "DW_AT_address_class";
3931     case DW_AT_artificial:
3932       return "DW_AT_artificial";
3933     case DW_AT_base_types:
3934       return "DW_AT_base_types";
3935     case DW_AT_calling_convention:
3936       return "DW_AT_calling_convention";
3937     case DW_AT_count:
3938       return "DW_AT_count";
3939     case DW_AT_data_member_location:
3940       return "DW_AT_data_member_location";
3941     case DW_AT_decl_column:
3942       return "DW_AT_decl_column";
3943     case DW_AT_decl_file:
3944       return "DW_AT_decl_file";
3945     case DW_AT_decl_line:
3946       return "DW_AT_decl_line";
3947     case DW_AT_declaration:
3948       return "DW_AT_declaration";
3949     case DW_AT_discr_list:
3950       return "DW_AT_discr_list";
3951     case DW_AT_encoding:
3952       return "DW_AT_encoding";
3953     case DW_AT_external:
3954       return "DW_AT_external";
3955     case DW_AT_explicit:
3956       return "DW_AT_explicit";
3957     case DW_AT_frame_base:
3958       return "DW_AT_frame_base";
3959     case DW_AT_friend:
3960       return "DW_AT_friend";
3961     case DW_AT_identifier_case:
3962       return "DW_AT_identifier_case";
3963     case DW_AT_macro_info:
3964       return "DW_AT_macro_info";
3965     case DW_AT_namelist_items:
3966       return "DW_AT_namelist_items";
3967     case DW_AT_priority:
3968       return "DW_AT_priority";
3969     case DW_AT_segment:
3970       return "DW_AT_segment";
3971     case DW_AT_specification:
3972       return "DW_AT_specification";
3973     case DW_AT_static_link:
3974       return "DW_AT_static_link";
3975     case DW_AT_type:
3976       return "DW_AT_type";
3977     case DW_AT_use_location:
3978       return "DW_AT_use_location";
3979     case DW_AT_variable_parameter:
3980       return "DW_AT_variable_parameter";
3981     case DW_AT_virtuality:
3982       return "DW_AT_virtuality";
3983     case DW_AT_vtable_elem_location:
3984       return "DW_AT_vtable_elem_location";
3985
3986     case DW_AT_allocated:
3987       return "DW_AT_allocated";
3988     case DW_AT_associated:
3989       return "DW_AT_associated";
3990     case DW_AT_data_location:
3991       return "DW_AT_data_location";
3992     case DW_AT_byte_stride:
3993       return "DW_AT_byte_stride";
3994     case DW_AT_entry_pc:
3995       return "DW_AT_entry_pc";
3996     case DW_AT_use_UTF8:
3997       return "DW_AT_use_UTF8";
3998     case DW_AT_extension:
3999       return "DW_AT_extension";
4000     case DW_AT_ranges:
4001       return "DW_AT_ranges";
4002     case DW_AT_trampoline:
4003       return "DW_AT_trampoline";
4004     case DW_AT_call_column:
4005       return "DW_AT_call_column";
4006     case DW_AT_call_file:
4007       return "DW_AT_call_file";
4008     case DW_AT_call_line:
4009       return "DW_AT_call_line";
4010     case DW_AT_object_pointer:
4011       return "DW_AT_object_pointer";
4012
4013     case DW_AT_signature:
4014       return "DW_AT_signature";
4015     case DW_AT_main_subprogram:
4016       return "DW_AT_main_subprogram";
4017     case DW_AT_data_bit_offset:
4018       return "DW_AT_data_bit_offset";
4019     case DW_AT_const_expr:
4020       return "DW_AT_const_expr";
4021     case DW_AT_enum_class:
4022       return "DW_AT_enum_class";
4023     case DW_AT_linkage_name:
4024       return "DW_AT_linkage_name";
4025
4026     case DW_AT_MIPS_fde:
4027       return "DW_AT_MIPS_fde";
4028     case DW_AT_MIPS_loop_begin:
4029       return "DW_AT_MIPS_loop_begin";
4030     case DW_AT_MIPS_tail_loop_begin:
4031       return "DW_AT_MIPS_tail_loop_begin";
4032     case DW_AT_MIPS_epilog_begin:
4033       return "DW_AT_MIPS_epilog_begin";
4034 #if VMS_DEBUGGING_INFO
4035     case DW_AT_HP_prologue:
4036       return "DW_AT_HP_prologue";
4037 #else
4038     case DW_AT_MIPS_loop_unroll_factor:
4039       return "DW_AT_MIPS_loop_unroll_factor";
4040 #endif
4041     case DW_AT_MIPS_software_pipeline_depth:
4042       return "DW_AT_MIPS_software_pipeline_depth";
4043     case DW_AT_MIPS_linkage_name:
4044       return "DW_AT_MIPS_linkage_name";
4045 #if VMS_DEBUGGING_INFO
4046     case DW_AT_HP_epilogue:
4047       return "DW_AT_HP_epilogue";
4048 #else
4049     case DW_AT_MIPS_stride:
4050       return "DW_AT_MIPS_stride";
4051 #endif
4052     case DW_AT_MIPS_abstract_name:
4053       return "DW_AT_MIPS_abstract_name";
4054     case DW_AT_MIPS_clone_origin:
4055       return "DW_AT_MIPS_clone_origin";
4056     case DW_AT_MIPS_has_inlines:
4057       return "DW_AT_MIPS_has_inlines";
4058
4059     case DW_AT_sf_names:
4060       return "DW_AT_sf_names";
4061     case DW_AT_src_info:
4062       return "DW_AT_src_info";
4063     case DW_AT_mac_info:
4064       return "DW_AT_mac_info";
4065     case DW_AT_src_coords:
4066       return "DW_AT_src_coords";
4067     case DW_AT_body_begin:
4068       return "DW_AT_body_begin";
4069     case DW_AT_body_end:
4070       return "DW_AT_body_end";
4071
4072     case DW_AT_GNU_vector:
4073       return "DW_AT_GNU_vector";
4074     case DW_AT_GNU_guarded_by:
4075       return "DW_AT_GNU_guarded_by";
4076     case DW_AT_GNU_pt_guarded_by:
4077       return "DW_AT_GNU_pt_guarded_by";
4078     case DW_AT_GNU_guarded:
4079       return "DW_AT_GNU_guarded";
4080     case DW_AT_GNU_pt_guarded:
4081       return "DW_AT_GNU_pt_guarded";
4082     case DW_AT_GNU_locks_excluded:
4083       return "DW_AT_GNU_locks_excluded";
4084     case DW_AT_GNU_exclusive_locks_required:
4085       return "DW_AT_GNU_exclusive_locks_required";
4086     case DW_AT_GNU_shared_locks_required:
4087       return "DW_AT_GNU_shared_locks_required";
4088     case DW_AT_GNU_odr_signature:
4089       return "DW_AT_GNU_odr_signature";
4090     case DW_AT_GNU_template_name:
4091       return "DW_AT_GNU_template_name";
4092     case DW_AT_GNU_call_site_value:
4093       return "DW_AT_GNU_call_site_value";
4094     case DW_AT_GNU_call_site_data_value:
4095       return "DW_AT_GNU_call_site_data_value";
4096     case DW_AT_GNU_call_site_target:
4097       return "DW_AT_GNU_call_site_target";
4098     case DW_AT_GNU_call_site_target_clobbered:
4099       return "DW_AT_GNU_call_site_target_clobbered";
4100     case DW_AT_GNU_tail_call:
4101       return "DW_AT_GNU_tail_call";
4102     case DW_AT_GNU_all_tail_call_sites:
4103       return "DW_AT_GNU_all_tail_call_sites";
4104     case DW_AT_GNU_all_call_sites:
4105       return "DW_AT_GNU_all_call_sites";
4106     case DW_AT_GNU_all_source_call_sites:
4107       return "DW_AT_GNU_all_source_call_sites";
4108     case DW_AT_GNU_macros:
4109       return "DW_AT_GNU_macros";
4110
4111     case DW_AT_GNAT_descriptive_type:
4112       return "DW_AT_GNAT_descriptive_type";
4113
4114     case DW_AT_VMS_rtnbeg_pd_address:
4115       return "DW_AT_VMS_rtnbeg_pd_address";
4116
4117     default:
4118       return "DW_AT_<unknown>";
4119     }
4120 }
4121
4122 /* Convert a DWARF value form code into its string name.  */
4123
4124 static const char *
4125 dwarf_form_name (unsigned int form)
4126 {
4127   switch (form)
4128     {
4129     case DW_FORM_addr:
4130       return "DW_FORM_addr";
4131     case DW_FORM_block2:
4132       return "DW_FORM_block2";
4133     case DW_FORM_block4:
4134       return "DW_FORM_block4";
4135     case DW_FORM_data2:
4136       return "DW_FORM_data2";
4137     case DW_FORM_data4:
4138       return "DW_FORM_data4";
4139     case DW_FORM_data8:
4140       return "DW_FORM_data8";
4141     case DW_FORM_string:
4142       return "DW_FORM_string";
4143     case DW_FORM_block:
4144       return "DW_FORM_block";
4145     case DW_FORM_block1:
4146       return "DW_FORM_block1";
4147     case DW_FORM_data1:
4148       return "DW_FORM_data1";
4149     case DW_FORM_flag:
4150       return "DW_FORM_flag";
4151     case DW_FORM_sdata:
4152       return "DW_FORM_sdata";
4153     case DW_FORM_strp:
4154       return "DW_FORM_strp";
4155     case DW_FORM_udata:
4156       return "DW_FORM_udata";
4157     case DW_FORM_ref_addr:
4158       return "DW_FORM_ref_addr";
4159     case DW_FORM_ref1:
4160       return "DW_FORM_ref1";
4161     case DW_FORM_ref2:
4162       return "DW_FORM_ref2";
4163     case DW_FORM_ref4:
4164       return "DW_FORM_ref4";
4165     case DW_FORM_ref8:
4166       return "DW_FORM_ref8";
4167     case DW_FORM_ref_udata:
4168       return "DW_FORM_ref_udata";
4169     case DW_FORM_indirect:
4170       return "DW_FORM_indirect";
4171     case DW_FORM_sec_offset:
4172       return "DW_FORM_sec_offset";
4173     case DW_FORM_exprloc:
4174       return "DW_FORM_exprloc";
4175     case DW_FORM_flag_present:
4176       return "DW_FORM_flag_present";
4177     case DW_FORM_ref_sig8:
4178       return "DW_FORM_ref_sig8";
4179     default:
4180       return "DW_FORM_<unknown>";
4181     }
4182 }
4183 \f
4184 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
4185    instance of an inlined instance of a decl which is local to an inline
4186    function, so we have to trace all of the way back through the origin chain
4187    to find out what sort of node actually served as the original seed for the
4188    given block.  */
4189
4190 static tree
4191 decl_ultimate_origin (const_tree decl)
4192 {
4193   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4194     return NULL_TREE;
4195
4196   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4197      nodes in the function to point to themselves; ignore that if
4198      we're trying to output the abstract instance of this function.  */
4199   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4200     return NULL_TREE;
4201
4202   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4203      most distant ancestor, this should never happen.  */
4204   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4205
4206   return DECL_ABSTRACT_ORIGIN (decl);
4207 }
4208
4209 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
4210    of a virtual function may refer to a base class, so we check the 'this'
4211    parameter.  */
4212
4213 static tree
4214 decl_class_context (tree decl)
4215 {
4216   tree context = NULL_TREE;
4217
4218   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4219     context = DECL_CONTEXT (decl);
4220   else
4221     context = TYPE_MAIN_VARIANT
4222       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4223
4224   if (context && !TYPE_P (context))
4225     context = NULL_TREE;
4226
4227   return context;
4228 }
4229 \f
4230 /* Add an attribute/value pair to a DIE.  */
4231
4232 static inline void
4233 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4234 {
4235   /* Maybe this should be an assert?  */
4236   if (die == NULL)
4237     return;
4238
4239   if (die->die_attr == NULL)
4240     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
4241   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
4242 }
4243
4244 static inline enum dw_val_class
4245 AT_class (dw_attr_ref a)
4246 {
4247   return a->dw_attr_val.val_class;
4248 }
4249
4250 /* Add a flag value attribute to a DIE.  */
4251
4252 static inline void
4253 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4254 {
4255   dw_attr_node attr;
4256
4257   attr.dw_attr = attr_kind;
4258   attr.dw_attr_val.val_class = dw_val_class_flag;
4259   attr.dw_attr_val.v.val_flag = flag;
4260   add_dwarf_attr (die, &attr);
4261 }
4262
4263 static inline unsigned
4264 AT_flag (dw_attr_ref a)
4265 {
4266   gcc_assert (a && AT_class (a) == dw_val_class_flag);
4267   return a->dw_attr_val.v.val_flag;
4268 }
4269
4270 /* Add a signed integer attribute value to a DIE.  */
4271
4272 static inline void
4273 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4274 {
4275   dw_attr_node attr;
4276
4277   attr.dw_attr = attr_kind;
4278   attr.dw_attr_val.val_class = dw_val_class_const;
4279   attr.dw_attr_val.v.val_int = int_val;
4280   add_dwarf_attr (die, &attr);
4281 }
4282
4283 static inline HOST_WIDE_INT
4284 AT_int (dw_attr_ref a)
4285 {
4286   gcc_assert (a && AT_class (a) == dw_val_class_const);
4287   return a->dw_attr_val.v.val_int;
4288 }
4289
4290 /* Add an unsigned integer attribute value to a DIE.  */
4291
4292 static inline void
4293 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4294                  unsigned HOST_WIDE_INT unsigned_val)
4295 {
4296   dw_attr_node attr;
4297
4298   attr.dw_attr = attr_kind;
4299   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
4300   attr.dw_attr_val.v.val_unsigned = unsigned_val;
4301   add_dwarf_attr (die, &attr);
4302 }
4303
4304 static inline unsigned HOST_WIDE_INT
4305 AT_unsigned (dw_attr_ref a)
4306 {
4307   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4308   return a->dw_attr_val.v.val_unsigned;
4309 }
4310
4311 /* Add an unsigned double integer attribute value to a DIE.  */
4312
4313 static inline void
4314 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
4315                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
4316 {
4317   dw_attr_node attr;
4318
4319   attr.dw_attr = attr_kind;
4320   attr.dw_attr_val.val_class = dw_val_class_const_double;
4321   attr.dw_attr_val.v.val_double.high = high;
4322   attr.dw_attr_val.v.val_double.low = low;
4323   add_dwarf_attr (die, &attr);
4324 }
4325
4326 /* Add a floating point attribute value to a DIE and return it.  */
4327
4328 static inline void
4329 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4330             unsigned int length, unsigned int elt_size, unsigned char *array)
4331 {
4332   dw_attr_node attr;
4333
4334   attr.dw_attr = attr_kind;
4335   attr.dw_attr_val.val_class = dw_val_class_vec;
4336   attr.dw_attr_val.v.val_vec.length = length;
4337   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
4338   attr.dw_attr_val.v.val_vec.array = array;
4339   add_dwarf_attr (die, &attr);
4340 }
4341
4342 /* Add an 8-byte data attribute value to a DIE.  */
4343
4344 static inline void
4345 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
4346               unsigned char data8[8])
4347 {
4348   dw_attr_node attr;
4349
4350   attr.dw_attr = attr_kind;
4351   attr.dw_attr_val.val_class = dw_val_class_data8;
4352   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
4353   add_dwarf_attr (die, &attr);
4354 }
4355
4356 /* Hash and equality functions for debug_str_hash.  */
4357
4358 static hashval_t
4359 debug_str_do_hash (const void *x)
4360 {
4361   return htab_hash_string (((const struct indirect_string_node *)x)->str);
4362 }
4363
4364 static int
4365 debug_str_eq (const void *x1, const void *x2)
4366 {
4367   return strcmp ((((const struct indirect_string_node *)x1)->str),
4368                  (const char *)x2) == 0;
4369 }
4370
4371 /* Add STR to the indirect string hash table.  */
4372
4373 static struct indirect_string_node *
4374 find_AT_string (const char *str)
4375 {
4376   struct indirect_string_node *node;
4377   void **slot;
4378
4379   if (! debug_str_hash)
4380     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4381                                       debug_str_eq, NULL);
4382
4383   slot = htab_find_slot_with_hash (debug_str_hash, str,
4384                                    htab_hash_string (str), INSERT);
4385   if (*slot == NULL)
4386     {
4387       node = ggc_alloc_cleared_indirect_string_node ();
4388       node->str = ggc_strdup (str);
4389       *slot = node;
4390     }
4391   else
4392     node = (struct indirect_string_node *) *slot;
4393
4394   node->refcount++;
4395   return node;
4396 }
4397
4398 /* Add a string attribute value to a DIE.  */
4399
4400 static inline void
4401 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4402 {
4403   dw_attr_node attr;
4404   struct indirect_string_node *node;
4405
4406   node = find_AT_string (str);
4407
4408   attr.dw_attr = attr_kind;
4409   attr.dw_attr_val.val_class = dw_val_class_str;
4410   attr.dw_attr_val.v.val_str = node;
4411   add_dwarf_attr (die, &attr);
4412 }
4413
4414 static inline const char *
4415 AT_string (dw_attr_ref a)
4416 {
4417   gcc_assert (a && AT_class (a) == dw_val_class_str);
4418   return a->dw_attr_val.v.val_str->str;
4419 }
4420
4421 /* Find out whether a string should be output inline in DIE
4422    or out-of-line in .debug_str section.  */
4423
4424 static enum dwarf_form
4425 AT_string_form (dw_attr_ref a)
4426 {
4427   struct indirect_string_node *node;
4428   unsigned int len;
4429   char label[32];
4430
4431   gcc_assert (a && AT_class (a) == dw_val_class_str);
4432
4433   node = a->dw_attr_val.v.val_str;
4434   if (node->form)
4435     return node->form;
4436
4437   len = strlen (node->str) + 1;
4438
4439   /* If the string is shorter or equal to the size of the reference, it is
4440      always better to put it inline.  */
4441   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4442     return node->form = DW_FORM_string;
4443
4444   /* If we cannot expect the linker to merge strings in .debug_str
4445      section, only put it into .debug_str if it is worth even in this
4446      single module.  */
4447   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4448       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4449       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4450     return node->form = DW_FORM_string;
4451
4452   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4453   ++dw2_string_counter;
4454   node->label = xstrdup (label);
4455
4456   return node->form = DW_FORM_strp;
4457 }
4458
4459 /* Add a DIE reference attribute value to a DIE.  */
4460
4461 static inline void
4462 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4463 {
4464   dw_attr_node attr;
4465
4466 #ifdef ENABLE_CHECKING
4467   gcc_assert (targ_die != NULL);
4468 #else
4469   /* With LTO we can end up trying to reference something we didn't create
4470      a DIE for.  Avoid crashing later on a NULL referenced DIE.  */
4471   if (targ_die == NULL)
4472     return;
4473 #endif
4474
4475   attr.dw_attr = attr_kind;
4476   attr.dw_attr_val.val_class = dw_val_class_die_ref;
4477   attr.dw_attr_val.v.val_die_ref.die = targ_die;
4478   attr.dw_attr_val.v.val_die_ref.external = 0;
4479   add_dwarf_attr (die, &attr);
4480 }
4481
4482 /* Add an AT_specification attribute to a DIE, and also make the back
4483    pointer from the specification to the definition.  */
4484
4485 static inline void
4486 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4487 {
4488   add_AT_die_ref (die, DW_AT_specification, targ_die);
4489   gcc_assert (!targ_die->die_definition);
4490   targ_die->die_definition = die;
4491 }
4492
4493 static inline dw_die_ref
4494 AT_ref (dw_attr_ref a)
4495 {
4496   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4497   return a->dw_attr_val.v.val_die_ref.die;
4498 }
4499
4500 static inline int
4501 AT_ref_external (dw_attr_ref a)
4502 {
4503   if (a && AT_class (a) == dw_val_class_die_ref)
4504     return a->dw_attr_val.v.val_die_ref.external;
4505
4506   return 0;
4507 }
4508
4509 static inline void
4510 set_AT_ref_external (dw_attr_ref a, int i)
4511 {
4512   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4513   a->dw_attr_val.v.val_die_ref.external = i;
4514 }
4515
4516 /* Add an FDE reference attribute value to a DIE.  */
4517
4518 static inline void
4519 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4520 {
4521   dw_attr_node attr;
4522
4523   attr.dw_attr = attr_kind;
4524   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4525   attr.dw_attr_val.v.val_fde_index = targ_fde;
4526   add_dwarf_attr (die, &attr);
4527 }
4528
4529 /* Add a location description attribute value to a DIE.  */
4530
4531 static inline void
4532 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4533 {
4534   dw_attr_node attr;
4535
4536   attr.dw_attr = attr_kind;
4537   attr.dw_attr_val.val_class = dw_val_class_loc;
4538   attr.dw_attr_val.v.val_loc = loc;
4539   add_dwarf_attr (die, &attr);
4540 }
4541
4542 static inline dw_loc_descr_ref
4543 AT_loc (dw_attr_ref a)
4544 {
4545   gcc_assert (a && AT_class (a) == dw_val_class_loc);
4546   return a->dw_attr_val.v.val_loc;
4547 }
4548
4549 static inline void
4550 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4551 {
4552   dw_attr_node attr;
4553
4554   attr.dw_attr = attr_kind;
4555   attr.dw_attr_val.val_class = dw_val_class_loc_list;
4556   attr.dw_attr_val.v.val_loc_list = loc_list;
4557   add_dwarf_attr (die, &attr);
4558   have_location_lists = true;
4559 }
4560
4561 static inline dw_loc_list_ref
4562 AT_loc_list (dw_attr_ref a)
4563 {
4564   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4565   return a->dw_attr_val.v.val_loc_list;
4566 }
4567
4568 static inline dw_loc_list_ref *
4569 AT_loc_list_ptr (dw_attr_ref a)
4570 {
4571   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4572   return &a->dw_attr_val.v.val_loc_list;
4573 }
4574
4575 /* Add an address constant attribute value to a DIE.  */
4576
4577 static inline void
4578 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
4579 {
4580   dw_attr_node attr;
4581
4582   attr.dw_attr = attr_kind;
4583   attr.dw_attr_val.val_class = dw_val_class_addr;
4584   attr.dw_attr_val.v.val_addr = addr;
4585   add_dwarf_attr (die, &attr);
4586 }
4587
4588 /* Get the RTX from to an address DIE attribute.  */
4589
4590 static inline rtx
4591 AT_addr (dw_attr_ref a)
4592 {
4593   gcc_assert (a && AT_class (a) == dw_val_class_addr);
4594   return a->dw_attr_val.v.val_addr;
4595 }
4596
4597 /* Add a file attribute value to a DIE.  */
4598
4599 static inline void
4600 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4601              struct dwarf_file_data *fd)
4602 {
4603   dw_attr_node attr;
4604
4605   attr.dw_attr = attr_kind;
4606   attr.dw_attr_val.val_class = dw_val_class_file;
4607   attr.dw_attr_val.v.val_file = fd;
4608   add_dwarf_attr (die, &attr);
4609 }
4610
4611 /* Get the dwarf_file_data from a file DIE attribute.  */
4612
4613 static inline struct dwarf_file_data *
4614 AT_file (dw_attr_ref a)
4615 {
4616   gcc_assert (a && AT_class (a) == dw_val_class_file);
4617   return a->dw_attr_val.v.val_file;
4618 }
4619
4620 /* Add a vms delta attribute value to a DIE.  */
4621
4622 static inline void
4623 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4624                   const char *lbl1, const char *lbl2)
4625 {
4626   dw_attr_node attr;
4627
4628   attr.dw_attr = attr_kind;
4629   attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4630   attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4631   attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4632   add_dwarf_attr (die, &attr);
4633 }
4634
4635 /* Add a label identifier attribute value to a DIE.  */
4636
4637 static inline void
4638 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
4639 {
4640   dw_attr_node attr;
4641
4642   attr.dw_attr = attr_kind;
4643   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4644   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4645   add_dwarf_attr (die, &attr);
4646 }
4647
4648 /* Add a section offset attribute value to a DIE, an offset into the
4649    debug_line section.  */
4650
4651 static inline void
4652 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4653                 const char *label)
4654 {
4655   dw_attr_node attr;
4656
4657   attr.dw_attr = attr_kind;
4658   attr.dw_attr_val.val_class = dw_val_class_lineptr;
4659   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4660   add_dwarf_attr (die, &attr);
4661 }
4662
4663 /* Add a section offset attribute value to a DIE, an offset into the
4664    debug_macinfo section.  */
4665
4666 static inline void
4667 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4668                const char *label)
4669 {
4670   dw_attr_node attr;
4671
4672   attr.dw_attr = attr_kind;
4673   attr.dw_attr_val.val_class = dw_val_class_macptr;
4674   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4675   add_dwarf_attr (die, &attr);
4676 }
4677
4678 /* Add an offset attribute value to a DIE.  */
4679
4680 static inline void
4681 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4682                unsigned HOST_WIDE_INT offset)
4683 {
4684   dw_attr_node attr;
4685
4686   attr.dw_attr = attr_kind;
4687   attr.dw_attr_val.val_class = dw_val_class_offset;
4688   attr.dw_attr_val.v.val_offset = offset;
4689   add_dwarf_attr (die, &attr);
4690 }
4691
4692 /* Add an range_list attribute value to a DIE.  */
4693
4694 static void
4695 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4696                    long unsigned int offset)
4697 {
4698   dw_attr_node attr;
4699
4700   attr.dw_attr = attr_kind;
4701   attr.dw_attr_val.val_class = dw_val_class_range_list;
4702   attr.dw_attr_val.v.val_offset = offset;
4703   add_dwarf_attr (die, &attr);
4704 }
4705
4706 /* Return the start label of a delta attribute.  */
4707
4708 static inline const char *
4709 AT_vms_delta1 (dw_attr_ref a)
4710 {
4711   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4712   return a->dw_attr_val.v.val_vms_delta.lbl1;
4713 }
4714
4715 /* Return the end label of a delta attribute.  */
4716
4717 static inline const char *
4718 AT_vms_delta2 (dw_attr_ref a)
4719 {
4720   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4721   return a->dw_attr_val.v.val_vms_delta.lbl2;
4722 }
4723
4724 static inline const char *
4725 AT_lbl (dw_attr_ref a)
4726 {
4727   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4728                     || AT_class (a) == dw_val_class_lineptr
4729                     || AT_class (a) == dw_val_class_macptr));
4730   return a->dw_attr_val.v.val_lbl_id;
4731 }
4732
4733 /* Get the attribute of type attr_kind.  */
4734
4735 static dw_attr_ref
4736 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4737 {
4738   dw_attr_ref a;
4739   unsigned ix;
4740   dw_die_ref spec = NULL;
4741
4742   if (! die)
4743     return NULL;
4744
4745   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4746     if (a->dw_attr == attr_kind)
4747       return a;
4748     else if (a->dw_attr == DW_AT_specification
4749              || a->dw_attr == DW_AT_abstract_origin)
4750       spec = AT_ref (a);
4751
4752   if (spec)
4753     return get_AT (spec, attr_kind);
4754
4755   return NULL;
4756 }
4757
4758 /* Return the "low pc" attribute value, typically associated with a subprogram
4759    DIE.  Return null if the "low pc" attribute is either not present, or if it
4760    cannot be represented as an assembler label identifier.  */
4761
4762 static inline const char *
4763 get_AT_low_pc (dw_die_ref die)
4764 {
4765   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4766
4767   return a ? AT_lbl (a) : NULL;
4768 }
4769
4770 /* Return the "high pc" attribute value, typically associated with a subprogram
4771    DIE.  Return null if the "high pc" attribute is either not present, or if it
4772    cannot be represented as an assembler label identifier.  */
4773
4774 static inline const char *
4775 get_AT_hi_pc (dw_die_ref die)
4776 {
4777   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4778
4779   return a ? AT_lbl (a) : NULL;
4780 }
4781
4782 /* Return the value of the string attribute designated by ATTR_KIND, or
4783    NULL if it is not present.  */
4784
4785 static inline const char *
4786 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4787 {
4788   dw_attr_ref a = get_AT (die, attr_kind);
4789
4790   return a ? AT_string (a) : NULL;
4791 }
4792
4793 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4794    if it is not present.  */
4795
4796 static inline int
4797 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4798 {
4799   dw_attr_ref a = get_AT (die, attr_kind);
4800
4801   return a ? AT_flag (a) : 0;
4802 }
4803
4804 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4805    if it is not present.  */
4806
4807 static inline unsigned
4808 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4809 {
4810   dw_attr_ref a = get_AT (die, attr_kind);
4811
4812   return a ? AT_unsigned (a) : 0;
4813 }
4814
4815 static inline dw_die_ref
4816 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4817 {
4818   dw_attr_ref a = get_AT (die, attr_kind);
4819
4820   return a ? AT_ref (a) : NULL;
4821 }
4822
4823 static inline struct dwarf_file_data *
4824 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4825 {
4826   dw_attr_ref a = get_AT (die, attr_kind);
4827
4828   return a ? AT_file (a) : NULL;
4829 }
4830
4831 /* Return TRUE if the language is C++.  */
4832
4833 static inline bool
4834 is_cxx (void)
4835 {
4836   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4837
4838   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
4839 }
4840
4841 /* Return TRUE if the language is Fortran.  */
4842
4843 static inline bool
4844 is_fortran (void)
4845 {
4846   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4847
4848   return (lang == DW_LANG_Fortran77
4849           || lang == DW_LANG_Fortran90
4850           || lang == DW_LANG_Fortran95);
4851 }
4852
4853 /* Return TRUE if the language is Ada.  */
4854
4855 static inline bool
4856 is_ada (void)
4857 {
4858   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4859
4860   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4861 }
4862
4863 /* Remove the specified attribute if present.  */
4864
4865 static void
4866 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4867 {
4868   dw_attr_ref a;
4869   unsigned ix;
4870
4871   if (! die)
4872     return;
4873
4874   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4875     if (a->dw_attr == attr_kind)
4876       {
4877         if (AT_class (a) == dw_val_class_str)
4878           if (a->dw_attr_val.v.val_str->refcount)
4879             a->dw_attr_val.v.val_str->refcount--;
4880
4881         /* VEC_ordered_remove should help reduce the number of abbrevs
4882            that are needed.  */
4883         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
4884         return;
4885       }
4886 }
4887
4888 /* Remove CHILD from its parent.  PREV must have the property that
4889    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
4890
4891 static void
4892 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4893 {
4894   gcc_assert (child->die_parent == prev->die_parent);
4895   gcc_assert (prev->die_sib == child);
4896   if (prev == child)
4897     {
4898       gcc_assert (child->die_parent->die_child == child);
4899       prev = NULL;
4900     }
4901   else
4902     prev->die_sib = child->die_sib;
4903   if (child->die_parent->die_child == child)
4904     child->die_parent->die_child = prev;
4905 }
4906
4907 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
4908    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
4909
4910 static void
4911 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4912 {
4913   dw_die_ref parent = old_child->die_parent;
4914
4915   gcc_assert (parent == prev->die_parent);
4916   gcc_assert (prev->die_sib == old_child);
4917
4918   new_child->die_parent = parent;
4919   if (prev == old_child)
4920     {
4921       gcc_assert (parent->die_child == old_child);
4922       new_child->die_sib = new_child;
4923     }
4924   else
4925     {
4926       prev->die_sib = new_child;
4927       new_child->die_sib = old_child->die_sib;
4928     }
4929   if (old_child->die_parent->die_child == old_child)
4930     old_child->die_parent->die_child = new_child;
4931 }
4932
4933 /* Move all children from OLD_PARENT to NEW_PARENT.  */
4934
4935 static void
4936 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4937 {
4938   dw_die_ref c;
4939   new_parent->die_child = old_parent->die_child;
4940   old_parent->die_child = NULL;
4941   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4942 }
4943
4944 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
4945    matches TAG.  */
4946
4947 static void
4948 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4949 {
4950   dw_die_ref c;
4951
4952   c = die->die_child;
4953   if (c) do {
4954     dw_die_ref prev = c;
4955     c = c->die_sib;
4956     while (c->die_tag == tag)
4957       {
4958         remove_child_with_prev (c, prev);
4959         /* Might have removed every child.  */
4960         if (c == c->die_sib)
4961           return;
4962         c = c->die_sib;
4963       }
4964   } while (c != die->die_child);
4965 }
4966
4967 /* Add a CHILD_DIE as the last child of DIE.  */
4968
4969 static void
4970 add_child_die (dw_die_ref die, dw_die_ref child_die)
4971 {
4972   /* FIXME this should probably be an assert.  */
4973   if (! die || ! child_die)
4974     return;
4975   gcc_assert (die != child_die);
4976
4977   child_die->die_parent = die;
4978   if (die->die_child)
4979     {
4980       child_die->die_sib = die->die_child->die_sib;
4981       die->die_child->die_sib = child_die;
4982     }
4983   else
4984     child_die->die_sib = child_die;
4985   die->die_child = child_die;
4986 }
4987
4988 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4989    is the specification, to the end of PARENT's list of children.
4990    This is done by removing and re-adding it.  */
4991
4992 static void
4993 splice_child_die (dw_die_ref parent, dw_die_ref child)
4994 {
4995   dw_die_ref p;
4996
4997   /* We want the declaration DIE from inside the class, not the
4998      specification DIE at toplevel.  */
4999   if (child->die_parent != parent)
5000     {
5001       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5002
5003       if (tmp)
5004         child = tmp;
5005     }
5006
5007   gcc_assert (child->die_parent == parent
5008               || (child->die_parent
5009                   == get_AT_ref (parent, DW_AT_specification)));
5010
5011   for (p = child->die_parent->die_child; ; p = p->die_sib)
5012     if (p->die_sib == child)
5013       {
5014         remove_child_with_prev (child, p);
5015         break;
5016       }
5017
5018   add_child_die (parent, child);
5019 }
5020
5021 /* Return a pointer to a newly created DIE node.  */
5022
5023 static inline dw_die_ref
5024 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5025 {
5026   dw_die_ref die = ggc_alloc_cleared_die_node ();
5027
5028   die->die_tag = tag_value;
5029
5030   if (parent_die != NULL)
5031     add_child_die (parent_die, die);
5032   else
5033     {
5034       limbo_die_node *limbo_node;
5035
5036       limbo_node = ggc_alloc_cleared_limbo_die_node ();
5037       limbo_node->die = die;
5038       limbo_node->created_for = t;
5039       limbo_node->next = limbo_die_list;
5040       limbo_die_list = limbo_node;
5041     }
5042
5043   return die;
5044 }
5045
5046 /* Return the DIE associated with the given type specifier.  */
5047
5048 static inline dw_die_ref
5049 lookup_type_die (tree type)
5050 {
5051   return TYPE_SYMTAB_DIE (type);
5052 }
5053
5054 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
5055    anonymous type named by the typedef TYPE_DIE, return the DIE of the
5056    anonymous type instead the one of the naming typedef.  */
5057
5058 static inline dw_die_ref
5059 strip_naming_typedef (tree type, dw_die_ref type_die)
5060 {
5061   if (type
5062       && TREE_CODE (type) == RECORD_TYPE
5063       && type_die
5064       && type_die->die_tag == DW_TAG_typedef
5065       && is_naming_typedef_decl (TYPE_NAME (type)))
5066     type_die = get_AT_ref (type_die, DW_AT_type);
5067   return type_die;
5068 }
5069
5070 /* Like lookup_type_die, but if type is an anonymous type named by a
5071    typedef[1], return the DIE of the anonymous type instead the one of
5072    the naming typedef.  This is because in gen_typedef_die, we did
5073    equate the anonymous struct named by the typedef with the DIE of
5074    the naming typedef. So by default, lookup_type_die on an anonymous
5075    struct yields the DIE of the naming typedef.
5076
5077    [1]: Read the comment of is_naming_typedef_decl to learn about what
5078    a naming typedef is.  */
5079
5080 static inline dw_die_ref
5081 lookup_type_die_strip_naming_typedef (tree type)
5082 {
5083   dw_die_ref die = lookup_type_die (type);
5084   return strip_naming_typedef (type, die);
5085 }
5086
5087 /* Equate a DIE to a given type specifier.  */
5088
5089 static inline void
5090 equate_type_number_to_die (tree type, dw_die_ref type_die)
5091 {
5092   TYPE_SYMTAB_DIE (type) = type_die;
5093 }
5094
5095 /* Returns a hash value for X (which really is a die_struct).  */
5096
5097 static hashval_t
5098 decl_die_table_hash (const void *x)
5099 {
5100   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
5101 }
5102
5103 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5104
5105 static int
5106 decl_die_table_eq (const void *x, const void *y)
5107 {
5108   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
5109 }
5110
5111 /* Return the DIE associated with a given declaration.  */
5112
5113 static inline dw_die_ref
5114 lookup_decl_die (tree decl)
5115 {
5116   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5117 }
5118
5119 /* Returns a hash value for X (which really is a var_loc_list).  */
5120
5121 static hashval_t
5122 decl_loc_table_hash (const void *x)
5123 {
5124   return (hashval_t) ((const var_loc_list *) x)->decl_id;
5125 }
5126
5127 /* Return nonzero if decl_id of var_loc_list X is the same as
5128    UID of decl *Y.  */
5129
5130 static int
5131 decl_loc_table_eq (const void *x, const void *y)
5132 {
5133   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
5134 }
5135
5136 /* Return the var_loc list associated with a given declaration.  */
5137
5138 static inline var_loc_list *
5139 lookup_decl_loc (const_tree decl)
5140 {
5141   if (!decl_loc_table)
5142     return NULL;
5143   return (var_loc_list *)
5144     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5145 }
5146
5147 /* Returns a hash value for X (which really is a cached_dw_loc_list_list).  */
5148
5149 static hashval_t
5150 cached_dw_loc_list_table_hash (const void *x)
5151 {
5152   return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
5153 }
5154
5155 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5156    UID of decl *Y.  */
5157
5158 static int
5159 cached_dw_loc_list_table_eq (const void *x, const void *y)
5160 {
5161   return (((const cached_dw_loc_list *) x)->decl_id
5162           == DECL_UID ((const_tree) y));
5163 }
5164
5165 /* Equate a DIE to a particular declaration.  */
5166
5167 static void
5168 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5169 {
5170   unsigned int decl_id = DECL_UID (decl);
5171   void **slot;
5172
5173   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5174   *slot = decl_die;
5175   decl_die->decl_id = decl_id;
5176 }
5177
5178 /* Return how many bits covers PIECE EXPR_LIST.  */
5179
5180 static int
5181 decl_piece_bitsize (rtx piece)
5182 {
5183   int ret = (int) GET_MODE (piece);
5184   if (ret)
5185     return ret;
5186   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5187               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5188   return INTVAL (XEXP (XEXP (piece, 0), 0));
5189 }
5190
5191 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
5192
5193 static rtx *
5194 decl_piece_varloc_ptr (rtx piece)
5195 {
5196   if ((int) GET_MODE (piece))
5197     return &XEXP (piece, 0);
5198   else
5199     return &XEXP (XEXP (piece, 0), 1);
5200 }
5201
5202 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5203    Next is the chain of following piece nodes.  */
5204
5205 static rtx
5206 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5207 {
5208   if (bitsize <= (int) MAX_MACHINE_MODE)
5209     return alloc_EXPR_LIST (bitsize, loc_note, next);
5210   else
5211     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5212                                                GEN_INT (bitsize),
5213                                                loc_note), next);
5214 }
5215
5216 /* Return rtx that should be stored into loc field for
5217    LOC_NOTE and BITPOS/BITSIZE.  */
5218
5219 static rtx
5220 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5221                       HOST_WIDE_INT bitsize)
5222 {
5223   if (bitsize != -1)
5224     {
5225       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5226       if (bitpos != 0)
5227         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5228     }
5229   return loc_note;
5230 }
5231
5232 /* This function either modifies location piece list *DEST in
5233    place (if SRC and INNER is NULL), or copies location piece list
5234    *SRC to *DEST while modifying it.  Location BITPOS is modified
5235    to contain LOC_NOTE, any pieces overlapping it are removed resp.
5236    not copied and if needed some padding around it is added.
5237    When modifying in place, DEST should point to EXPR_LIST where
5238    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5239    to the start of the whole list and INNER points to the EXPR_LIST
5240    where earlier pieces cover PIECE_BITPOS bits.  */
5241
5242 static void
5243 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5244                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5245                    HOST_WIDE_INT bitsize, rtx loc_note)
5246 {
5247   int diff;
5248   bool copy = inner != NULL;
5249
5250   if (copy)
5251     {
5252       /* First copy all nodes preceeding the current bitpos.  */
5253       while (src != inner)
5254         {
5255           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5256                                    decl_piece_bitsize (*src), NULL_RTX);
5257           dest = &XEXP (*dest, 1);
5258           src = &XEXP (*src, 1);
5259         }
5260     }
5261   /* Add padding if needed.  */
5262   if (bitpos != piece_bitpos)
5263     {
5264       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5265                                copy ? NULL_RTX : *dest);
5266       dest = &XEXP (*dest, 1);
5267     }
5268   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5269     {
5270       gcc_assert (!copy);
5271       /* A piece with correct bitpos and bitsize already exist,
5272          just update the location for it and return.  */
5273       *decl_piece_varloc_ptr (*dest) = loc_note;
5274       return;
5275     }
5276   /* Add the piece that changed.  */
5277   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5278   dest = &XEXP (*dest, 1);
5279   /* Skip over pieces that overlap it.  */
5280   diff = bitpos - piece_bitpos + bitsize;
5281   if (!copy)
5282     src = dest;
5283   while (diff > 0 && *src)
5284     {
5285       rtx piece = *src;
5286       diff -= decl_piece_bitsize (piece);
5287       if (copy)
5288         src = &XEXP (piece, 1);
5289       else
5290         {
5291           *src = XEXP (piece, 1);
5292           free_EXPR_LIST_node (piece);
5293         }
5294     }
5295   /* Add padding if needed.  */
5296   if (diff < 0 && *src)
5297     {
5298       if (!copy)
5299         dest = src;
5300       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5301       dest = &XEXP (*dest, 1);
5302     }
5303   if (!copy)
5304     return;
5305   /* Finally copy all nodes following it.  */
5306   while (*src)
5307     {
5308       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5309                                decl_piece_bitsize (*src), NULL_RTX);
5310       dest = &XEXP (*dest, 1);
5311       src = &XEXP (*src, 1);
5312     }
5313 }
5314
5315 /* Add a variable location node to the linked list for DECL.  */
5316
5317 static struct var_loc_node *
5318 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5319 {
5320   unsigned int decl_id;
5321   var_loc_list *temp;
5322   void **slot;
5323   struct var_loc_node *loc = NULL;
5324   HOST_WIDE_INT bitsize = -1, bitpos = -1;
5325
5326   if (DECL_DEBUG_EXPR_IS_FROM (decl))
5327     {
5328       tree realdecl = DECL_DEBUG_EXPR (decl);
5329       if (realdecl && handled_component_p (realdecl))
5330         {
5331           HOST_WIDE_INT maxsize;
5332           tree innerdecl;
5333           innerdecl
5334             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
5335           if (!DECL_P (innerdecl)
5336               || DECL_IGNORED_P (innerdecl)
5337               || TREE_STATIC (innerdecl)
5338               || bitsize <= 0
5339               || bitpos + bitsize > 256
5340               || bitsize != maxsize)
5341             return NULL;
5342           decl = innerdecl;
5343         }
5344     }
5345
5346   decl_id = DECL_UID (decl);
5347   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5348   if (*slot == NULL)
5349     {
5350       temp = ggc_alloc_cleared_var_loc_list ();
5351       temp->decl_id = decl_id;
5352       *slot = temp;
5353     }
5354   else
5355     temp = (var_loc_list *) *slot;
5356
5357   /* For PARM_DECLs try to keep around the original incoming value,
5358      even if that means we'll emit a zero-range .debug_loc entry.  */
5359   if (temp->last
5360       && temp->first == temp->last
5361       && TREE_CODE (decl) == PARM_DECL
5362       && GET_CODE (temp->first->loc) == NOTE
5363       && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5364       && DECL_INCOMING_RTL (decl)
5365       && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5366       && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5367          == GET_CODE (DECL_INCOMING_RTL (decl))
5368       && prev_real_insn (temp->first->loc) == NULL_RTX
5369       && (bitsize != -1
5370           || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5371                            NOTE_VAR_LOCATION_LOC (loc_note))
5372           || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5373               != NOTE_VAR_LOCATION_STATUS (loc_note))))
5374     {
5375       loc = ggc_alloc_cleared_var_loc_node ();
5376       temp->first->next = loc;
5377       temp->last = loc;
5378       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5379     }
5380   else if (temp->last)
5381     {
5382       struct var_loc_node *last = temp->last, *unused = NULL;
5383       rtx *piece_loc = NULL, last_loc_note;
5384       int piece_bitpos = 0;
5385       if (last->next)
5386         {
5387           last = last->next;
5388           gcc_assert (last->next == NULL);
5389         }
5390       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5391         {
5392           piece_loc = &last->loc;
5393           do
5394             {
5395               int cur_bitsize = decl_piece_bitsize (*piece_loc);
5396               if (piece_bitpos + cur_bitsize > bitpos)
5397                 break;
5398               piece_bitpos += cur_bitsize;
5399               piece_loc = &XEXP (*piece_loc, 1);
5400             }
5401           while (*piece_loc);
5402         }
5403       /* TEMP->LAST here is either pointer to the last but one or
5404          last element in the chained list, LAST is pointer to the
5405          last element.  */
5406       if (label && strcmp (last->label, label) == 0)
5407         {
5408           /* For SRA optimized variables if there weren't any real
5409              insns since last note, just modify the last node.  */
5410           if (piece_loc != NULL)
5411             {
5412               adjust_piece_list (piece_loc, NULL, NULL,
5413                                  bitpos, piece_bitpos, bitsize, loc_note);
5414               return NULL;
5415             }
5416           /* If the last note doesn't cover any instructions, remove it.  */
5417           if (temp->last != last)
5418             {
5419               temp->last->next = NULL;
5420               unused = last;
5421               last = temp->last;
5422               gcc_assert (strcmp (last->label, label) != 0);
5423             }
5424           else
5425             {
5426               gcc_assert (temp->first == temp->last
5427                           || (temp->first->next == temp->last
5428                               && TREE_CODE (decl) == PARM_DECL));
5429               memset (temp->last, '\0', sizeof (*temp->last));
5430               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5431               return temp->last;
5432             }
5433         }
5434       if (bitsize == -1 && NOTE_P (last->loc))
5435         last_loc_note = last->loc;
5436       else if (piece_loc != NULL
5437                && *piece_loc != NULL_RTX
5438                && piece_bitpos == bitpos
5439                && decl_piece_bitsize (*piece_loc) == bitsize)
5440         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5441       else
5442         last_loc_note = NULL_RTX;
5443       /* If the current location is the same as the end of the list,
5444          and either both or neither of the locations is uninitialized,
5445          we have nothing to do.  */
5446       if (last_loc_note == NULL_RTX
5447           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5448                             NOTE_VAR_LOCATION_LOC (loc_note)))
5449           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5450                != NOTE_VAR_LOCATION_STATUS (loc_note))
5451               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5452                    == VAR_INIT_STATUS_UNINITIALIZED)
5453                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
5454                       == VAR_INIT_STATUS_UNINITIALIZED))))
5455         {
5456           /* Add LOC to the end of list and update LAST.  If the last
5457              element of the list has been removed above, reuse its
5458              memory for the new node, otherwise allocate a new one.  */
5459           if (unused)
5460             {
5461               loc = unused;
5462               memset (loc, '\0', sizeof (*loc));
5463             }
5464           else
5465             loc = ggc_alloc_cleared_var_loc_node ();
5466           if (bitsize == -1 || piece_loc == NULL)
5467             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5468           else
5469             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5470                                bitpos, piece_bitpos, bitsize, loc_note);
5471           last->next = loc;
5472           /* Ensure TEMP->LAST will point either to the new last but one
5473              element of the chain, or to the last element in it.  */
5474           if (last != temp->last)
5475             temp->last = last;
5476         }
5477       else if (unused)
5478         ggc_free (unused);
5479     }
5480   else
5481     {
5482       loc = ggc_alloc_cleared_var_loc_node ();
5483       temp->first = loc;
5484       temp->last = loc;
5485       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5486     }
5487   return loc;
5488 }
5489 \f
5490 /* Keep track of the number of spaces used to indent the
5491    output of the debugging routines that print the structure of
5492    the DIE internal representation.  */
5493 static int print_indent;
5494
5495 /* Indent the line the number of spaces given by print_indent.  */
5496
5497 static inline void
5498 print_spaces (FILE *outfile)
5499 {
5500   fprintf (outfile, "%*s", print_indent, "");
5501 }
5502
5503 /* Print a type signature in hex.  */
5504
5505 static inline void
5506 print_signature (FILE *outfile, char *sig)
5507 {
5508   int i;
5509
5510   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5511     fprintf (outfile, "%02x", sig[i] & 0xff);
5512 }
5513
5514 /* Print the information associated with a given DIE, and its children.
5515    This routine is a debugging aid only.  */
5516
5517 static void
5518 print_die (dw_die_ref die, FILE *outfile)
5519 {
5520   dw_attr_ref a;
5521   dw_die_ref c;
5522   unsigned ix;
5523
5524   print_spaces (outfile);
5525   fprintf (outfile, "DIE %4ld: %s (%p)\n",
5526            die->die_offset, dwarf_tag_name (die->die_tag),
5527            (void*) die);
5528   print_spaces (outfile);
5529   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5530   fprintf (outfile, " offset: %ld", die->die_offset);
5531   fprintf (outfile, " mark: %d\n", die->die_mark);
5532
5533   if (use_debug_types && die->die_id.die_type_node)
5534     {
5535       print_spaces (outfile);
5536       fprintf (outfile, "  signature: ");
5537       print_signature (outfile, die->die_id.die_type_node->signature);
5538       fprintf (outfile, "\n");
5539     }
5540
5541   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5542     {
5543       print_spaces (outfile);
5544       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5545
5546       switch (AT_class (a))
5547         {
5548         case dw_val_class_addr:
5549           fprintf (outfile, "address");
5550           break;
5551         case dw_val_class_offset:
5552           fprintf (outfile, "offset");
5553           break;
5554         case dw_val_class_loc:
5555           fprintf (outfile, "location descriptor");
5556           break;
5557         case dw_val_class_loc_list:
5558           fprintf (outfile, "location list -> label:%s",
5559                    AT_loc_list (a)->ll_symbol);
5560           break;
5561         case dw_val_class_range_list:
5562           fprintf (outfile, "range list");
5563           break;
5564         case dw_val_class_const:
5565           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5566           break;
5567         case dw_val_class_unsigned_const:
5568           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5569           break;
5570         case dw_val_class_const_double:
5571           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
5572                             HOST_WIDE_INT_PRINT_UNSIGNED")",
5573                    a->dw_attr_val.v.val_double.high,
5574                    a->dw_attr_val.v.val_double.low);
5575           break;
5576         case dw_val_class_vec:
5577           fprintf (outfile, "floating-point or vector constant");
5578           break;
5579         case dw_val_class_flag:
5580           fprintf (outfile, "%u", AT_flag (a));
5581           break;
5582         case dw_val_class_die_ref:
5583           if (AT_ref (a) != NULL)
5584             {
5585               if (use_debug_types && AT_ref (a)->die_id.die_type_node)
5586                 {
5587                   fprintf (outfile, "die -> signature: ");
5588                   print_signature (outfile,
5589                                    AT_ref (a)->die_id.die_type_node->signature);
5590                 }
5591               else if (! use_debug_types && AT_ref (a)->die_id.die_symbol)
5592                 fprintf (outfile, "die -> label: %s",
5593                          AT_ref (a)->die_id.die_symbol);
5594               else
5595                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
5596               fprintf (outfile, " (%p)", (void *) AT_ref (a));
5597             }
5598           else
5599             fprintf (outfile, "die -> <null>");
5600           break;
5601         case dw_val_class_vms_delta:
5602           fprintf (outfile, "delta: @slotcount(%s-%s)",
5603                    AT_vms_delta2 (a), AT_vms_delta1 (a));
5604           break;
5605         case dw_val_class_lbl_id:
5606         case dw_val_class_lineptr:
5607         case dw_val_class_macptr:
5608           fprintf (outfile, "label: %s", AT_lbl (a));
5609           break;
5610         case dw_val_class_str:
5611           if (AT_string (a) != NULL)
5612             fprintf (outfile, "\"%s\"", AT_string (a));
5613           else
5614             fprintf (outfile, "<null>");
5615           break;
5616         case dw_val_class_file:
5617           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
5618                    AT_file (a)->emitted_number);
5619           break;
5620         case dw_val_class_data8:
5621           {
5622             int i;
5623
5624             for (i = 0; i < 8; i++)
5625               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
5626             break;
5627           }
5628         default:
5629           break;
5630         }
5631
5632       fprintf (outfile, "\n");
5633     }
5634
5635   if (die->die_child != NULL)
5636     {
5637       print_indent += 4;
5638       FOR_EACH_CHILD (die, c, print_die (c, outfile));
5639       print_indent -= 4;
5640     }
5641   if (print_indent == 0)
5642     fprintf (outfile, "\n");
5643 }
5644
5645 /* Print the information collected for a given DIE.  */
5646
5647 DEBUG_FUNCTION void
5648 debug_dwarf_die (dw_die_ref die)
5649 {
5650   print_die (die, stderr);
5651 }
5652
5653 /* Print all DWARF information collected for the compilation unit.
5654    This routine is a debugging aid only.  */
5655
5656 DEBUG_FUNCTION void
5657 debug_dwarf (void)
5658 {
5659   print_indent = 0;
5660   print_die (comp_unit_die (), stderr);
5661 }
5662 \f
5663 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5664    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5665    DIE that marks the start of the DIEs for this include file.  */
5666
5667 static dw_die_ref
5668 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5669 {
5670   const char *filename = get_AT_string (bincl_die, DW_AT_name);
5671   dw_die_ref new_unit = gen_compile_unit_die (filename);
5672
5673   new_unit->die_sib = old_unit;
5674   return new_unit;
5675 }
5676
5677 /* Close an include-file CU and reopen the enclosing one.  */
5678
5679 static dw_die_ref
5680 pop_compile_unit (dw_die_ref old_unit)
5681 {
5682   dw_die_ref new_unit = old_unit->die_sib;
5683
5684   old_unit->die_sib = NULL;
5685   return new_unit;
5686 }
5687
5688 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5689 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5690
5691 /* Calculate the checksum of a location expression.  */
5692
5693 static inline void
5694 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5695 {
5696   int tem;
5697
5698   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5699   CHECKSUM (tem);
5700   CHECKSUM (loc->dw_loc_oprnd1);
5701   CHECKSUM (loc->dw_loc_oprnd2);
5702 }
5703
5704 /* Calculate the checksum of an attribute.  */
5705
5706 static void
5707 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5708 {
5709   dw_loc_descr_ref loc;
5710   rtx r;
5711
5712   CHECKSUM (at->dw_attr);
5713
5714   /* We don't care that this was compiled with a different compiler
5715      snapshot; if the output is the same, that's what matters.  */
5716   if (at->dw_attr == DW_AT_producer)
5717     return;
5718
5719   switch (AT_class (at))
5720     {
5721     case dw_val_class_const:
5722       CHECKSUM (at->dw_attr_val.v.val_int);
5723       break;
5724     case dw_val_class_unsigned_const:
5725       CHECKSUM (at->dw_attr_val.v.val_unsigned);
5726       break;
5727     case dw_val_class_const_double:
5728       CHECKSUM (at->dw_attr_val.v.val_double);
5729       break;
5730     case dw_val_class_vec:
5731       CHECKSUM (at->dw_attr_val.v.val_vec);
5732       break;
5733     case dw_val_class_flag:
5734       CHECKSUM (at->dw_attr_val.v.val_flag);
5735       break;
5736     case dw_val_class_str:
5737       CHECKSUM_STRING (AT_string (at));
5738       break;
5739
5740     case dw_val_class_addr:
5741       r = AT_addr (at);
5742       gcc_assert (GET_CODE (r) == SYMBOL_REF);
5743       CHECKSUM_STRING (XSTR (r, 0));
5744       break;
5745
5746     case dw_val_class_offset:
5747       CHECKSUM (at->dw_attr_val.v.val_offset);
5748       break;
5749
5750     case dw_val_class_loc:
5751       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5752         loc_checksum (loc, ctx);
5753       break;
5754
5755     case dw_val_class_die_ref:
5756       die_checksum (AT_ref (at), ctx, mark);
5757       break;
5758
5759     case dw_val_class_fde_ref:
5760     case dw_val_class_vms_delta:
5761     case dw_val_class_lbl_id:
5762     case dw_val_class_lineptr:
5763     case dw_val_class_macptr:
5764       break;
5765
5766     case dw_val_class_file:
5767       CHECKSUM_STRING (AT_file (at)->filename);
5768       break;
5769
5770     case dw_val_class_data8:
5771       CHECKSUM (at->dw_attr_val.v.val_data8);
5772       break;
5773
5774     default:
5775       break;
5776     }
5777 }
5778
5779 /* Calculate the checksum of a DIE.  */
5780
5781 static void
5782 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5783 {
5784   dw_die_ref c;
5785   dw_attr_ref a;
5786   unsigned ix;
5787
5788   /* To avoid infinite recursion.  */
5789   if (die->die_mark)
5790     {
5791       CHECKSUM (die->die_mark);
5792       return;
5793     }
5794   die->die_mark = ++(*mark);
5795
5796   CHECKSUM (die->die_tag);
5797
5798   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5799     attr_checksum (a, ctx, mark);
5800
5801   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
5802 }
5803
5804 #undef CHECKSUM
5805 #undef CHECKSUM_STRING
5806
5807 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
5808 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5809 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
5810 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
5811 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
5812 #define CHECKSUM_ATTR(FOO) \
5813   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
5814
5815 /* Calculate the checksum of a number in signed LEB128 format.  */
5816
5817 static void
5818 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
5819 {
5820   unsigned char byte;
5821   bool more;
5822
5823   while (1)
5824     {
5825       byte = (value & 0x7f);
5826       value >>= 7;
5827       more = !((value == 0 && (byte & 0x40) == 0)
5828                 || (value == -1 && (byte & 0x40) != 0));
5829       if (more)
5830         byte |= 0x80;
5831       CHECKSUM (byte);
5832       if (!more)
5833         break;
5834     }
5835 }
5836
5837 /* Calculate the checksum of a number in unsigned LEB128 format.  */
5838
5839 static void
5840 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
5841 {
5842   while (1)
5843     {
5844       unsigned char byte = (value & 0x7f);
5845       value >>= 7;
5846       if (value != 0)
5847         /* More bytes to follow.  */
5848         byte |= 0x80;
5849       CHECKSUM (byte);
5850       if (value == 0)
5851         break;
5852     }
5853 }
5854
5855 /* Checksum the context of the DIE.  This adds the names of any
5856    surrounding namespaces or structures to the checksum.  */
5857
5858 static void
5859 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
5860 {
5861   const char *name;
5862   dw_die_ref spec;
5863   int tag = die->die_tag;
5864
5865   if (tag != DW_TAG_namespace
5866       && tag != DW_TAG_structure_type
5867       && tag != DW_TAG_class_type)
5868     return;
5869
5870   name = get_AT_string (die, DW_AT_name);
5871
5872   spec = get_AT_ref (die, DW_AT_specification);
5873   if (spec != NULL)
5874     die = spec;
5875
5876   if (die->die_parent != NULL)
5877     checksum_die_context (die->die_parent, ctx);
5878
5879   CHECKSUM_ULEB128 ('C');
5880   CHECKSUM_ULEB128 (tag);
5881   if (name != NULL)
5882     CHECKSUM_STRING (name);
5883 }
5884
5885 /* Calculate the checksum of a location expression.  */
5886
5887 static inline void
5888 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5889 {
5890   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
5891      were emitted as a DW_FORM_sdata instead of a location expression.  */
5892   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
5893     {
5894       CHECKSUM_ULEB128 (DW_FORM_sdata);
5895       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
5896       return;
5897     }
5898
5899   /* Otherwise, just checksum the raw location expression.  */
5900   while (loc != NULL)
5901     {
5902       CHECKSUM_ULEB128 (loc->dw_loc_opc);
5903       CHECKSUM (loc->dw_loc_oprnd1);
5904       CHECKSUM (loc->dw_loc_oprnd2);
5905       loc = loc->dw_loc_next;
5906     }
5907 }
5908
5909 /* Calculate the checksum of an attribute.  */
5910
5911 static void
5912 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
5913                        struct md5_ctx *ctx, int *mark)
5914 {
5915   dw_loc_descr_ref loc;
5916   rtx r;
5917
5918   if (AT_class (at) == dw_val_class_die_ref)
5919     {
5920       dw_die_ref target_die = AT_ref (at);
5921
5922       /* For pointer and reference types, we checksum only the (qualified)
5923          name of the target type (if there is a name).  For friend entries,
5924          we checksum only the (qualified) name of the target type or function.
5925          This allows the checksum to remain the same whether the target type
5926          is complete or not.  */
5927       if ((at->dw_attr == DW_AT_type
5928            && (tag == DW_TAG_pointer_type
5929                || tag == DW_TAG_reference_type
5930                || tag == DW_TAG_rvalue_reference_type
5931                || tag == DW_TAG_ptr_to_member_type))
5932           || (at->dw_attr == DW_AT_friend
5933               && tag == DW_TAG_friend))
5934         {
5935           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
5936
5937           if (name_attr != NULL)
5938             {
5939               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5940
5941               if (decl == NULL)
5942                 decl = target_die;
5943               CHECKSUM_ULEB128 ('N');
5944               CHECKSUM_ULEB128 (at->dw_attr);
5945               if (decl->die_parent != NULL)
5946                 checksum_die_context (decl->die_parent, ctx);
5947               CHECKSUM_ULEB128 ('E');
5948               CHECKSUM_STRING (AT_string (name_attr));
5949               return;
5950             }
5951         }
5952
5953       /* For all other references to another DIE, we check to see if the
5954          target DIE has already been visited.  If it has, we emit a
5955          backward reference; if not, we descend recursively.  */
5956       if (target_die->die_mark > 0)
5957         {
5958           CHECKSUM_ULEB128 ('R');
5959           CHECKSUM_ULEB128 (at->dw_attr);
5960           CHECKSUM_ULEB128 (target_die->die_mark);
5961         }
5962       else
5963         {
5964           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5965
5966           if (decl == NULL)
5967             decl = target_die;
5968           target_die->die_mark = ++(*mark);
5969           CHECKSUM_ULEB128 ('T');
5970           CHECKSUM_ULEB128 (at->dw_attr);
5971           if (decl->die_parent != NULL)
5972             checksum_die_context (decl->die_parent, ctx);
5973           die_checksum_ordered (target_die, ctx, mark);
5974         }
5975       return;
5976     }
5977
5978   CHECKSUM_ULEB128 ('A');
5979   CHECKSUM_ULEB128 (at->dw_attr);
5980
5981   switch (AT_class (at))
5982     {
5983     case dw_val_class_const:
5984       CHECKSUM_ULEB128 (DW_FORM_sdata);
5985       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
5986       break;
5987
5988     case dw_val_class_unsigned_const:
5989       CHECKSUM_ULEB128 (DW_FORM_sdata);
5990       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
5991       break;
5992
5993     case dw_val_class_const_double:
5994       CHECKSUM_ULEB128 (DW_FORM_block);
5995       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
5996       CHECKSUM (at->dw_attr_val.v.val_double);
5997       break;
5998
5999     case dw_val_class_vec:
6000       CHECKSUM_ULEB128 (DW_FORM_block);
6001       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
6002       CHECKSUM (at->dw_attr_val.v.val_vec);
6003       break;
6004
6005     case dw_val_class_flag:
6006       CHECKSUM_ULEB128 (DW_FORM_flag);
6007       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6008       break;
6009
6010     case dw_val_class_str:
6011       CHECKSUM_ULEB128 (DW_FORM_string);
6012       CHECKSUM_STRING (AT_string (at));
6013       break;
6014
6015     case dw_val_class_addr:
6016       r = AT_addr (at);
6017       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6018       CHECKSUM_ULEB128 (DW_FORM_string);
6019       CHECKSUM_STRING (XSTR (r, 0));
6020       break;
6021
6022     case dw_val_class_offset:
6023       CHECKSUM_ULEB128 (DW_FORM_sdata);
6024       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6025       break;
6026
6027     case dw_val_class_loc:
6028       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6029         loc_checksum_ordered (loc, ctx);
6030       break;
6031
6032     case dw_val_class_fde_ref:
6033     case dw_val_class_lbl_id:
6034     case dw_val_class_lineptr:
6035     case dw_val_class_macptr:
6036       break;
6037
6038     case dw_val_class_file:
6039       CHECKSUM_ULEB128 (DW_FORM_string);
6040       CHECKSUM_STRING (AT_file (at)->filename);
6041       break;
6042
6043     case dw_val_class_data8:
6044       CHECKSUM (at->dw_attr_val.v.val_data8);
6045       break;
6046
6047     default:
6048       break;
6049     }
6050 }
6051
6052 struct checksum_attributes
6053 {
6054   dw_attr_ref at_name;
6055   dw_attr_ref at_type;
6056   dw_attr_ref at_friend;
6057   dw_attr_ref at_accessibility;
6058   dw_attr_ref at_address_class;
6059   dw_attr_ref at_allocated;
6060   dw_attr_ref at_artificial;
6061   dw_attr_ref at_associated;
6062   dw_attr_ref at_binary_scale;
6063   dw_attr_ref at_bit_offset;
6064   dw_attr_ref at_bit_size;
6065   dw_attr_ref at_bit_stride;
6066   dw_attr_ref at_byte_size;
6067   dw_attr_ref at_byte_stride;
6068   dw_attr_ref at_const_value;
6069   dw_attr_ref at_containing_type;
6070   dw_attr_ref at_count;
6071   dw_attr_ref at_data_location;
6072   dw_attr_ref at_data_member_location;
6073   dw_attr_ref at_decimal_scale;
6074   dw_attr_ref at_decimal_sign;
6075   dw_attr_ref at_default_value;
6076   dw_attr_ref at_digit_count;
6077   dw_attr_ref at_discr;
6078   dw_attr_ref at_discr_list;
6079   dw_attr_ref at_discr_value;
6080   dw_attr_ref at_encoding;
6081   dw_attr_ref at_endianity;
6082   dw_attr_ref at_explicit;
6083   dw_attr_ref at_is_optional;
6084   dw_attr_ref at_location;
6085   dw_attr_ref at_lower_bound;
6086   dw_attr_ref at_mutable;
6087   dw_attr_ref at_ordering;
6088   dw_attr_ref at_picture_string;
6089   dw_attr_ref at_prototyped;
6090   dw_attr_ref at_small;
6091   dw_attr_ref at_segment;
6092   dw_attr_ref at_string_length;
6093   dw_attr_ref at_threads_scaled;
6094   dw_attr_ref at_upper_bound;
6095   dw_attr_ref at_use_location;
6096   dw_attr_ref at_use_UTF8;
6097   dw_attr_ref at_variable_parameter;
6098   dw_attr_ref at_virtuality;
6099   dw_attr_ref at_visibility;
6100   dw_attr_ref at_vtable_elem_location;
6101 };
6102
6103 /* Collect the attributes that we will want to use for the checksum.  */
6104
6105 static void
6106 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6107 {
6108   dw_attr_ref a;
6109   unsigned ix;
6110
6111   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6112     {
6113       switch (a->dw_attr)
6114         {
6115         case DW_AT_name:
6116           attrs->at_name = a;
6117           break;
6118         case DW_AT_type:
6119           attrs->at_type = a;
6120           break;
6121         case DW_AT_friend:
6122           attrs->at_friend = a;
6123           break;
6124         case DW_AT_accessibility:
6125           attrs->at_accessibility = a;
6126           break;
6127         case DW_AT_address_class:
6128           attrs->at_address_class = a;
6129           break;
6130         case DW_AT_allocated:
6131           attrs->at_allocated = a;
6132           break;
6133         case DW_AT_artificial:
6134           attrs->at_artificial = a;
6135           break;
6136         case DW_AT_associated:
6137           attrs->at_associated = a;
6138           break;
6139         case DW_AT_binary_scale:
6140           attrs->at_binary_scale = a;
6141           break;
6142         case DW_AT_bit_offset:
6143           attrs->at_bit_offset = a;
6144           break;
6145         case DW_AT_bit_size:
6146           attrs->at_bit_size = a;
6147           break;
6148         case DW_AT_bit_stride:
6149           attrs->at_bit_stride = a;
6150           break;
6151         case DW_AT_byte_size:
6152           attrs->at_byte_size = a;
6153           break;
6154         case DW_AT_byte_stride:
6155           attrs->at_byte_stride = a;
6156           break;
6157         case DW_AT_const_value:
6158           attrs->at_const_value = a;
6159           break;
6160         case DW_AT_containing_type:
6161           attrs->at_containing_type = a;
6162           break;
6163         case DW_AT_count:
6164           attrs->at_count = a;
6165           break;
6166         case DW_AT_data_location:
6167           attrs->at_data_location = a;
6168           break;
6169         case DW_AT_data_member_location:
6170           attrs->at_data_member_location = a;
6171           break;
6172         case DW_AT_decimal_scale:
6173           attrs->at_decimal_scale = a;
6174           break;
6175         case DW_AT_decimal_sign:
6176           attrs->at_decimal_sign = a;
6177           break;
6178         case DW_AT_default_value:
6179           attrs->at_default_value = a;
6180           break;
6181         case DW_AT_digit_count:
6182           attrs->at_digit_count = a;
6183           break;
6184         case DW_AT_discr:
6185           attrs->at_discr = a;
6186           break;
6187         case DW_AT_discr_list:
6188           attrs->at_discr_list = a;
6189           break;
6190         case DW_AT_discr_value:
6191           attrs->at_discr_value = a;
6192           break;
6193         case DW_AT_encoding:
6194           attrs->at_encoding = a;
6195           break;
6196         case DW_AT_endianity:
6197           attrs->at_endianity = a;
6198           break;
6199         case DW_AT_explicit:
6200           attrs->at_explicit = a;
6201           break;
6202         case DW_AT_is_optional:
6203           attrs->at_is_optional = a;
6204           break;
6205         case DW_AT_location:
6206           attrs->at_location = a;
6207           break;
6208         case DW_AT_lower_bound:
6209           attrs->at_lower_bound = a;
6210           break;
6211         case DW_AT_mutable:
6212           attrs->at_mutable = a;
6213           break;
6214         case DW_AT_ordering:
6215           attrs->at_ordering = a;
6216           break;
6217         case DW_AT_picture_string:
6218           attrs->at_picture_string = a;
6219           break;
6220         case DW_AT_prototyped:
6221           attrs->at_prototyped = a;
6222           break;
6223         case DW_AT_small:
6224           attrs->at_small = a;
6225           break;
6226         case DW_AT_segment:
6227           attrs->at_segment = a;
6228           break;
6229         case DW_AT_string_length:
6230           attrs->at_string_length = a;
6231           break;
6232         case DW_AT_threads_scaled:
6233           attrs->at_threads_scaled = a;
6234           break;
6235         case DW_AT_upper_bound:
6236           attrs->at_upper_bound = a;
6237           break;
6238         case DW_AT_use_location:
6239           attrs->at_use_location = a;
6240           break;
6241         case DW_AT_use_UTF8:
6242           attrs->at_use_UTF8 = a;
6243           break;
6244         case DW_AT_variable_parameter:
6245           attrs->at_variable_parameter = a;
6246           break;
6247         case DW_AT_virtuality:
6248           attrs->at_virtuality = a;
6249           break;
6250         case DW_AT_visibility:
6251           attrs->at_visibility = a;
6252           break;
6253         case DW_AT_vtable_elem_location:
6254           attrs->at_vtable_elem_location = a;
6255           break;
6256         default:
6257           break;
6258         }
6259     }
6260 }
6261
6262 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
6263
6264 static void
6265 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6266 {
6267   dw_die_ref c;
6268   dw_die_ref decl;
6269   struct checksum_attributes attrs;
6270
6271   CHECKSUM_ULEB128 ('D');
6272   CHECKSUM_ULEB128 (die->die_tag);
6273
6274   memset (&attrs, 0, sizeof (attrs));
6275
6276   decl = get_AT_ref (die, DW_AT_specification);
6277   if (decl != NULL)
6278     collect_checksum_attributes (&attrs, decl);
6279   collect_checksum_attributes (&attrs, die);
6280
6281   CHECKSUM_ATTR (attrs.at_name);
6282   CHECKSUM_ATTR (attrs.at_accessibility);
6283   CHECKSUM_ATTR (attrs.at_address_class);
6284   CHECKSUM_ATTR (attrs.at_allocated);
6285   CHECKSUM_ATTR (attrs.at_artificial);
6286   CHECKSUM_ATTR (attrs.at_associated);
6287   CHECKSUM_ATTR (attrs.at_binary_scale);
6288   CHECKSUM_ATTR (attrs.at_bit_offset);
6289   CHECKSUM_ATTR (attrs.at_bit_size);
6290   CHECKSUM_ATTR (attrs.at_bit_stride);
6291   CHECKSUM_ATTR (attrs.at_byte_size);
6292   CHECKSUM_ATTR (attrs.at_byte_stride);
6293   CHECKSUM_ATTR (attrs.at_const_value);
6294   CHECKSUM_ATTR (attrs.at_containing_type);
6295   CHECKSUM_ATTR (attrs.at_count);
6296   CHECKSUM_ATTR (attrs.at_data_location);
6297   CHECKSUM_ATTR (attrs.at_data_member_location);
6298   CHECKSUM_ATTR (attrs.at_decimal_scale);
6299   CHECKSUM_ATTR (attrs.at_decimal_sign);
6300   CHECKSUM_ATTR (attrs.at_default_value);
6301   CHECKSUM_ATTR (attrs.at_digit_count);
6302   CHECKSUM_ATTR (attrs.at_discr);
6303   CHECKSUM_ATTR (attrs.at_discr_list);
6304   CHECKSUM_ATTR (attrs.at_discr_value);
6305   CHECKSUM_ATTR (attrs.at_encoding);
6306   CHECKSUM_ATTR (attrs.at_endianity);
6307   CHECKSUM_ATTR (attrs.at_explicit);
6308   CHECKSUM_ATTR (attrs.at_is_optional);
6309   CHECKSUM_ATTR (attrs.at_location);
6310   CHECKSUM_ATTR (attrs.at_lower_bound);
6311   CHECKSUM_ATTR (attrs.at_mutable);
6312   CHECKSUM_ATTR (attrs.at_ordering);
6313   CHECKSUM_ATTR (attrs.at_picture_string);
6314   CHECKSUM_ATTR (attrs.at_prototyped);
6315   CHECKSUM_ATTR (attrs.at_small);
6316   CHECKSUM_ATTR (attrs.at_segment);
6317   CHECKSUM_ATTR (attrs.at_string_length);
6318   CHECKSUM_ATTR (attrs.at_threads_scaled);
6319   CHECKSUM_ATTR (attrs.at_upper_bound);
6320   CHECKSUM_ATTR (attrs.at_use_location);
6321   CHECKSUM_ATTR (attrs.at_use_UTF8);
6322   CHECKSUM_ATTR (attrs.at_variable_parameter);
6323   CHECKSUM_ATTR (attrs.at_virtuality);
6324   CHECKSUM_ATTR (attrs.at_visibility);
6325   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6326   CHECKSUM_ATTR (attrs.at_type);
6327   CHECKSUM_ATTR (attrs.at_friend);
6328
6329   /* Checksum the child DIEs, except for nested types and member functions.  */
6330   c = die->die_child;
6331   if (c) do {
6332     dw_attr_ref name_attr;
6333
6334     c = c->die_sib;
6335     name_attr = get_AT (c, DW_AT_name);
6336     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
6337         && name_attr != NULL)
6338       {
6339         CHECKSUM_ULEB128 ('S');
6340         CHECKSUM_ULEB128 (c->die_tag);
6341         CHECKSUM_STRING (AT_string (name_attr));
6342       }
6343     else
6344       {
6345         /* Mark this DIE so it gets processed when unmarking.  */
6346         if (c->die_mark == 0)
6347           c->die_mark = -1;
6348         die_checksum_ordered (c, ctx, mark);
6349       }
6350   } while (c != die->die_child);
6351
6352   CHECKSUM_ULEB128 (0);
6353 }
6354
6355 #undef CHECKSUM
6356 #undef CHECKSUM_STRING
6357 #undef CHECKSUM_ATTR
6358 #undef CHECKSUM_LEB128
6359 #undef CHECKSUM_ULEB128
6360
6361 /* Generate the type signature for DIE.  This is computed by generating an
6362    MD5 checksum over the DIE's tag, its relevant attributes, and its
6363    children.  Attributes that are references to other DIEs are processed
6364    by recursion, using the MARK field to prevent infinite recursion.
6365    If the DIE is nested inside a namespace or another type, we also
6366    need to include that context in the signature.  The lower 64 bits
6367    of the resulting MD5 checksum comprise the signature.  */
6368
6369 static void
6370 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6371 {
6372   int mark;
6373   const char *name;
6374   unsigned char checksum[16];
6375   struct md5_ctx ctx;
6376   dw_die_ref decl;
6377
6378   name = get_AT_string (die, DW_AT_name);
6379   decl = get_AT_ref (die, DW_AT_specification);
6380
6381   /* First, compute a signature for just the type name (and its surrounding
6382      context, if any.  This is stored in the type unit DIE for link-time
6383      ODR (one-definition rule) checking.  */
6384
6385   if (is_cxx() && name != NULL)
6386     {
6387       md5_init_ctx (&ctx);
6388
6389       /* Checksum the names of surrounding namespaces and structures.  */
6390       if (decl != NULL && decl->die_parent != NULL)
6391         checksum_die_context (decl->die_parent, &ctx);
6392
6393       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
6394       md5_process_bytes (name, strlen (name) + 1, &ctx);
6395       md5_finish_ctx (&ctx, checksum);
6396
6397       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6398     }
6399
6400   /* Next, compute the complete type signature.  */
6401
6402   md5_init_ctx (&ctx);
6403   mark = 1;
6404   die->die_mark = mark;
6405
6406   /* Checksum the names of surrounding namespaces and structures.  */
6407   if (decl != NULL && decl->die_parent != NULL)
6408     checksum_die_context (decl->die_parent, &ctx);
6409
6410   /* Checksum the DIE and its children.  */
6411   die_checksum_ordered (die, &ctx, &mark);
6412   unmark_all_dies (die);
6413   md5_finish_ctx (&ctx, checksum);
6414
6415   /* Store the signature in the type node and link the type DIE and the
6416      type node together.  */
6417   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6418           DWARF_TYPE_SIGNATURE_SIZE);
6419   die->die_id.die_type_node = type_node;
6420   type_node->type_die = die;
6421
6422   /* If the DIE is a specification, link its declaration to the type node
6423      as well.  */
6424   if (decl != NULL)
6425     decl->die_id.die_type_node = type_node;
6426 }
6427
6428 /* Do the location expressions look same?  */
6429 static inline int
6430 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6431 {
6432   return loc1->dw_loc_opc == loc2->dw_loc_opc
6433          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6434          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6435 }
6436
6437 /* Do the values look the same?  */
6438 static int
6439 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6440 {
6441   dw_loc_descr_ref loc1, loc2;
6442   rtx r1, r2;
6443
6444   if (v1->val_class != v2->val_class)
6445     return 0;
6446
6447   switch (v1->val_class)
6448     {
6449     case dw_val_class_const:
6450       return v1->v.val_int == v2->v.val_int;
6451     case dw_val_class_unsigned_const:
6452       return v1->v.val_unsigned == v2->v.val_unsigned;
6453     case dw_val_class_const_double:
6454       return v1->v.val_double.high == v2->v.val_double.high
6455              && v1->v.val_double.low == v2->v.val_double.low;
6456     case dw_val_class_vec:
6457       if (v1->v.val_vec.length != v2->v.val_vec.length
6458           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6459         return 0;
6460       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6461                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
6462         return 0;
6463       return 1;
6464     case dw_val_class_flag:
6465       return v1->v.val_flag == v2->v.val_flag;
6466     case dw_val_class_str:
6467       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6468
6469     case dw_val_class_addr:
6470       r1 = v1->v.val_addr;
6471       r2 = v2->v.val_addr;
6472       if (GET_CODE (r1) != GET_CODE (r2))
6473         return 0;
6474       return !rtx_equal_p (r1, r2);
6475
6476     case dw_val_class_offset:
6477       return v1->v.val_offset == v2->v.val_offset;
6478
6479     case dw_val_class_loc:
6480       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6481            loc1 && loc2;
6482            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6483         if (!same_loc_p (loc1, loc2, mark))
6484           return 0;
6485       return !loc1 && !loc2;
6486
6487     case dw_val_class_die_ref:
6488       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6489
6490     case dw_val_class_fde_ref:
6491     case dw_val_class_vms_delta:
6492     case dw_val_class_lbl_id:
6493     case dw_val_class_lineptr:
6494     case dw_val_class_macptr:
6495       return 1;
6496
6497     case dw_val_class_file:
6498       return v1->v.val_file == v2->v.val_file;
6499
6500     case dw_val_class_data8:
6501       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6502
6503     default:
6504       return 1;
6505     }
6506 }
6507
6508 /* Do the attributes look the same?  */
6509
6510 static int
6511 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6512 {
6513   if (at1->dw_attr != at2->dw_attr)
6514     return 0;
6515
6516   /* We don't care that this was compiled with a different compiler
6517      snapshot; if the output is the same, that's what matters. */
6518   if (at1->dw_attr == DW_AT_producer)
6519     return 1;
6520
6521   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6522 }
6523
6524 /* Do the dies look the same?  */
6525
6526 static int
6527 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6528 {
6529   dw_die_ref c1, c2;
6530   dw_attr_ref a1;
6531   unsigned ix;
6532
6533   /* To avoid infinite recursion.  */
6534   if (die1->die_mark)
6535     return die1->die_mark == die2->die_mark;
6536   die1->die_mark = die2->die_mark = ++(*mark);
6537
6538   if (die1->die_tag != die2->die_tag)
6539     return 0;
6540
6541   if (VEC_length (dw_attr_node, die1->die_attr)
6542       != VEC_length (dw_attr_node, die2->die_attr))
6543     return 0;
6544
6545   FOR_EACH_VEC_ELT (dw_attr_node, die1->die_attr, ix, a1)
6546     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
6547       return 0;
6548
6549   c1 = die1->die_child;
6550   c2 = die2->die_child;
6551   if (! c1)
6552     {
6553       if (c2)
6554         return 0;
6555     }
6556   else
6557     for (;;)
6558       {
6559         if (!same_die_p (c1, c2, mark))
6560           return 0;
6561         c1 = c1->die_sib;
6562         c2 = c2->die_sib;
6563         if (c1 == die1->die_child)
6564           {
6565             if (c2 == die2->die_child)
6566               break;
6567             else
6568               return 0;
6569           }
6570     }
6571
6572   return 1;
6573 }
6574
6575 /* Do the dies look the same?  Wrapper around same_die_p.  */
6576
6577 static int
6578 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6579 {
6580   int mark = 0;
6581   int ret = same_die_p (die1, die2, &mark);
6582
6583   unmark_all_dies (die1);
6584   unmark_all_dies (die2);
6585
6586   return ret;
6587 }
6588
6589 /* The prefix to attach to symbols on DIEs in the current comdat debug
6590    info section.  */
6591 static char *comdat_symbol_id;
6592
6593 /* The index of the current symbol within the current comdat CU.  */
6594 static unsigned int comdat_symbol_number;
6595
6596 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6597    children, and set comdat_symbol_id accordingly.  */
6598
6599 static void
6600 compute_section_prefix (dw_die_ref unit_die)
6601 {
6602   const char *die_name = get_AT_string (unit_die, DW_AT_name);
6603   const char *base = die_name ? lbasename (die_name) : "anonymous";
6604   char *name = XALLOCAVEC (char, strlen (base) + 64);
6605   char *p;
6606   int i, mark;
6607   unsigned char checksum[16];
6608   struct md5_ctx ctx;
6609
6610   /* Compute the checksum of the DIE, then append part of it as hex digits to
6611      the name filename of the unit.  */
6612
6613   md5_init_ctx (&ctx);
6614   mark = 0;
6615   die_checksum (unit_die, &ctx, &mark);
6616   unmark_all_dies (unit_die);
6617   md5_finish_ctx (&ctx, checksum);
6618
6619   sprintf (name, "%s.", base);
6620   clean_symbol_name (name);
6621
6622   p = name + strlen (name);
6623   for (i = 0; i < 4; i++)
6624     {
6625       sprintf (p, "%.2x", checksum[i]);
6626       p += 2;
6627     }
6628
6629   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6630   comdat_symbol_number = 0;
6631 }
6632
6633 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6634
6635 static int
6636 is_type_die (dw_die_ref die)
6637 {
6638   switch (die->die_tag)
6639     {
6640     case DW_TAG_array_type:
6641     case DW_TAG_class_type:
6642     case DW_TAG_interface_type:
6643     case DW_TAG_enumeration_type:
6644     case DW_TAG_pointer_type:
6645     case DW_TAG_reference_type:
6646     case DW_TAG_rvalue_reference_type:
6647     case DW_TAG_string_type:
6648     case DW_TAG_structure_type:
6649     case DW_TAG_subroutine_type:
6650     case DW_TAG_union_type:
6651     case DW_TAG_ptr_to_member_type:
6652     case DW_TAG_set_type:
6653     case DW_TAG_subrange_type:
6654     case DW_TAG_base_type:
6655     case DW_TAG_const_type:
6656     case DW_TAG_file_type:
6657     case DW_TAG_packed_type:
6658     case DW_TAG_volatile_type:
6659     case DW_TAG_typedef:
6660       return 1;
6661     default:
6662       return 0;
6663     }
6664 }
6665
6666 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6667    Basically, we want to choose the bits that are likely to be shared between
6668    compilations (types) and leave out the bits that are specific to individual
6669    compilations (functions).  */
6670
6671 static int
6672 is_comdat_die (dw_die_ref c)
6673 {
6674   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6675      we do for stabs.  The advantage is a greater likelihood of sharing between
6676      objects that don't include headers in the same order (and therefore would
6677      put the base types in a different comdat).  jason 8/28/00 */
6678
6679   if (c->die_tag == DW_TAG_base_type)
6680     return 0;
6681
6682   if (c->die_tag == DW_TAG_pointer_type
6683       || c->die_tag == DW_TAG_reference_type
6684       || c->die_tag == DW_TAG_rvalue_reference_type
6685       || c->die_tag == DW_TAG_const_type
6686       || c->die_tag == DW_TAG_volatile_type)
6687     {
6688       dw_die_ref t = get_AT_ref (c, DW_AT_type);
6689
6690       return t ? is_comdat_die (t) : 0;
6691     }
6692
6693   return is_type_die (c);
6694 }
6695
6696 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6697    compilation unit.  */
6698
6699 static int
6700 is_symbol_die (dw_die_ref c)
6701 {
6702   return (is_type_die (c)
6703           || is_declaration_die (c)
6704           || c->die_tag == DW_TAG_namespace
6705           || c->die_tag == DW_TAG_module);
6706 }
6707
6708 /* Returns true iff C is a compile-unit DIE.  */
6709
6710 static inline bool
6711 is_cu_die (dw_die_ref c)
6712 {
6713   return c && c->die_tag == DW_TAG_compile_unit;
6714 }
6715
6716 static char *
6717 gen_internal_sym (const char *prefix)
6718 {
6719   char buf[256];
6720
6721   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6722   return xstrdup (buf);
6723 }
6724
6725 /* Assign symbols to all worthy DIEs under DIE.  */
6726
6727 static void
6728 assign_symbol_names (dw_die_ref die)
6729 {
6730   dw_die_ref c;
6731
6732   if (is_symbol_die (die))
6733     {
6734       if (comdat_symbol_id)
6735         {
6736           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
6737
6738           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6739                    comdat_symbol_id, comdat_symbol_number++);
6740           die->die_id.die_symbol = xstrdup (p);
6741         }
6742       else
6743         die->die_id.die_symbol = gen_internal_sym ("LDIE");
6744     }
6745
6746   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6747 }
6748
6749 struct cu_hash_table_entry
6750 {
6751   dw_die_ref cu;
6752   unsigned min_comdat_num, max_comdat_num;
6753   struct cu_hash_table_entry *next;
6754 };
6755
6756 /* Routines to manipulate hash table of CUs.  */
6757 static hashval_t
6758 htab_cu_hash (const void *of)
6759 {
6760   const struct cu_hash_table_entry *const entry =
6761     (const struct cu_hash_table_entry *) of;
6762
6763   return htab_hash_string (entry->cu->die_id.die_symbol);
6764 }
6765
6766 static int
6767 htab_cu_eq (const void *of1, const void *of2)
6768 {
6769   const struct cu_hash_table_entry *const entry1 =
6770     (const struct cu_hash_table_entry *) of1;
6771   const struct die_struct *const entry2 = (const struct die_struct *) of2;
6772
6773   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
6774 }
6775
6776 static void
6777 htab_cu_del (void *what)
6778 {
6779   struct cu_hash_table_entry *next,
6780     *entry = (struct cu_hash_table_entry *) what;
6781
6782   while (entry)
6783     {
6784       next = entry->next;
6785       free (entry);
6786       entry = next;
6787     }
6788 }
6789
6790 /* Check whether we have already seen this CU and set up SYM_NUM
6791    accordingly.  */
6792 static int
6793 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6794 {
6795   struct cu_hash_table_entry dummy;
6796   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6797
6798   dummy.max_comdat_num = 0;
6799
6800   slot = (struct cu_hash_table_entry **)
6801     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6802         INSERT);
6803   entry = *slot;
6804
6805   for (; entry; last = entry, entry = entry->next)
6806     {
6807       if (same_die_p_wrap (cu, entry->cu))
6808         break;
6809     }
6810
6811   if (entry)
6812     {
6813       *sym_num = entry->min_comdat_num;
6814       return 1;
6815     }
6816
6817   entry = XCNEW (struct cu_hash_table_entry);
6818   entry->cu = cu;
6819   entry->min_comdat_num = *sym_num = last->max_comdat_num;
6820   entry->next = *slot;
6821   *slot = entry;
6822
6823   return 0;
6824 }
6825
6826 /* Record SYM_NUM to record of CU in HTABLE.  */
6827 static void
6828 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6829 {
6830   struct cu_hash_table_entry **slot, *entry;
6831
6832   slot = (struct cu_hash_table_entry **)
6833     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6834         NO_INSERT);
6835   entry = *slot;
6836
6837   entry->max_comdat_num = sym_num;
6838 }
6839
6840 /* Traverse the DIE (which is always comp_unit_die), and set up
6841    additional compilation units for each of the include files we see
6842    bracketed by BINCL/EINCL.  */
6843
6844 static void
6845 break_out_includes (dw_die_ref die)
6846 {
6847   dw_die_ref c;
6848   dw_die_ref unit = NULL;
6849   limbo_die_node *node, **pnode;
6850   htab_t cu_hash_table;
6851
6852   c = die->die_child;
6853   if (c) do {
6854     dw_die_ref prev = c;
6855     c = c->die_sib;
6856     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6857            || (unit && is_comdat_die (c)))
6858       {
6859         dw_die_ref next = c->die_sib;
6860
6861         /* This DIE is for a secondary CU; remove it from the main one.  */
6862         remove_child_with_prev (c, prev);
6863
6864         if (c->die_tag == DW_TAG_GNU_BINCL)
6865           unit = push_new_compile_unit (unit, c);
6866         else if (c->die_tag == DW_TAG_GNU_EINCL)
6867           unit = pop_compile_unit (unit);
6868         else
6869           add_child_die (unit, c);
6870         c = next;
6871         if (c == die->die_child)
6872           break;
6873       }
6874   } while (c != die->die_child);
6875
6876 #if 0
6877   /* We can only use this in debugging, since the frontend doesn't check
6878      to make sure that we leave every include file we enter.  */
6879   gcc_assert (!unit);
6880 #endif
6881
6882   assign_symbol_names (die);
6883   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6884   for (node = limbo_die_list, pnode = &limbo_die_list;
6885        node;
6886        node = node->next)
6887     {
6888       int is_dupl;
6889
6890       compute_section_prefix (node->die);
6891       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6892                         &comdat_symbol_number);
6893       assign_symbol_names (node->die);
6894       if (is_dupl)
6895         *pnode = node->next;
6896       else
6897         {
6898           pnode = &node->next;
6899           record_comdat_symbol_number (node->die, cu_hash_table,
6900                 comdat_symbol_number);
6901         }
6902     }
6903   htab_delete (cu_hash_table);
6904 }
6905
6906 /* Return non-zero if this DIE is a declaration.  */
6907
6908 static int
6909 is_declaration_die (dw_die_ref die)
6910 {
6911   dw_attr_ref a;
6912   unsigned ix;
6913
6914   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6915     if (a->dw_attr == DW_AT_declaration)
6916       return 1;
6917
6918   return 0;
6919 }
6920
6921 /* Return non-zero if this DIE is nested inside a subprogram.  */
6922
6923 static int
6924 is_nested_in_subprogram (dw_die_ref die)
6925 {
6926   dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
6927
6928   if (decl == NULL)
6929     decl = die;
6930   return local_scope_p (decl);
6931 }
6932
6933 /* Return non-zero if this DIE contains a defining declaration of a
6934    subprogram.  */
6935
6936 static int
6937 contains_subprogram_definition (dw_die_ref die)
6938 {
6939   dw_die_ref c;
6940
6941   if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
6942     return 1;
6943   FOR_EACH_CHILD (die, c, if (contains_subprogram_definition(c)) return 1);
6944   return 0;
6945 }
6946
6947 /* Return non-zero if this is a type DIE that should be moved to a
6948    COMDAT .debug_types section.  */
6949
6950 static int
6951 should_move_die_to_comdat (dw_die_ref die)
6952 {
6953   switch (die->die_tag)
6954     {
6955     case DW_TAG_class_type:
6956     case DW_TAG_structure_type:
6957     case DW_TAG_enumeration_type:
6958     case DW_TAG_union_type:
6959       /* Don't move declarations, inlined instances, or types nested in a
6960          subprogram.  */
6961       if (is_declaration_die (die)
6962           || get_AT (die, DW_AT_abstract_origin)
6963           || is_nested_in_subprogram (die))
6964         return 0;
6965       /* A type definition should never contain a subprogram definition.  */
6966       gcc_assert (!contains_subprogram_definition (die));
6967       return 1;
6968     case DW_TAG_array_type:
6969     case DW_TAG_interface_type:
6970     case DW_TAG_pointer_type:
6971     case DW_TAG_reference_type:
6972     case DW_TAG_rvalue_reference_type:
6973     case DW_TAG_string_type:
6974     case DW_TAG_subroutine_type:
6975     case DW_TAG_ptr_to_member_type:
6976     case DW_TAG_set_type:
6977     case DW_TAG_subrange_type:
6978     case DW_TAG_base_type:
6979     case DW_TAG_const_type:
6980     case DW_TAG_file_type:
6981     case DW_TAG_packed_type:
6982     case DW_TAG_volatile_type:
6983     case DW_TAG_typedef:
6984     default:
6985       return 0;
6986     }
6987 }
6988
6989 /* Make a clone of DIE.  */
6990
6991 static dw_die_ref
6992 clone_die (dw_die_ref die)
6993 {
6994   dw_die_ref clone;
6995   dw_attr_ref a;
6996   unsigned ix;
6997
6998   clone = ggc_alloc_cleared_die_node ();
6999   clone->die_tag = die->die_tag;
7000
7001   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7002     add_dwarf_attr (clone, a);
7003
7004   return clone;
7005 }
7006
7007 /* Make a clone of the tree rooted at DIE.  */
7008
7009 static dw_die_ref
7010 clone_tree (dw_die_ref die)
7011 {
7012   dw_die_ref c;
7013   dw_die_ref clone = clone_die (die);
7014
7015   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
7016
7017   return clone;
7018 }
7019
7020 /* Make a clone of DIE as a declaration.  */
7021
7022 static dw_die_ref
7023 clone_as_declaration (dw_die_ref die)
7024 {
7025   dw_die_ref clone;
7026   dw_die_ref decl;
7027   dw_attr_ref a;
7028   unsigned ix;
7029
7030   /* If the DIE is already a declaration, just clone it.  */
7031   if (is_declaration_die (die))
7032     return clone_die (die);
7033
7034   /* If the DIE is a specification, just clone its declaration DIE.  */
7035   decl = get_AT_ref (die, DW_AT_specification);
7036   if (decl != NULL)
7037     return clone_die (decl);
7038
7039   clone = ggc_alloc_cleared_die_node ();
7040   clone->die_tag = die->die_tag;
7041
7042   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7043     {
7044       /* We don't want to copy over all attributes.
7045          For example we don't want DW_AT_byte_size because otherwise we will no
7046          longer have a declaration and GDB will treat it as a definition.  */
7047
7048       switch (a->dw_attr)
7049         {
7050         case DW_AT_artificial:
7051         case DW_AT_containing_type:
7052         case DW_AT_external:
7053         case DW_AT_name:
7054         case DW_AT_type:
7055         case DW_AT_virtuality:
7056         case DW_AT_linkage_name:
7057         case DW_AT_MIPS_linkage_name:
7058           add_dwarf_attr (clone, a);
7059           break;
7060         case DW_AT_byte_size:
7061         default:
7062           break;
7063         }
7064     }
7065
7066   if (die->die_id.die_type_node)
7067     add_AT_die_ref (clone, DW_AT_signature, die);
7068
7069   add_AT_flag (clone, DW_AT_declaration, 1);
7070   return clone;
7071 }
7072
7073 /* Copy the declaration context to the new compile unit DIE.  This includes
7074    any surrounding namespace or type declarations.  If the DIE has an
7075    AT_specification attribute, it also includes attributes and children
7076    attached to the specification.  */
7077
7078 static void
7079 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7080 {
7081   dw_die_ref decl;
7082   dw_die_ref new_decl;
7083
7084   decl = get_AT_ref (die, DW_AT_specification);
7085   if (decl == NULL)
7086     decl = die;
7087   else
7088     {
7089       unsigned ix;
7090       dw_die_ref c;
7091       dw_attr_ref a;
7092
7093       /* Copy the type node pointer from the new DIE to the original
7094          declaration DIE so we can forward references later.  */
7095       decl->die_id.die_type_node = die->die_id.die_type_node;
7096
7097       remove_AT (die, DW_AT_specification);
7098
7099       FOR_EACH_VEC_ELT (dw_attr_node, decl->die_attr, ix, a)
7100         {
7101           if (a->dw_attr != DW_AT_name
7102               && a->dw_attr != DW_AT_declaration
7103               && a->dw_attr != DW_AT_external)
7104             add_dwarf_attr (die, a);
7105         }
7106
7107       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
7108     }
7109
7110   if (decl->die_parent != NULL
7111       && decl->die_parent->die_tag != DW_TAG_compile_unit
7112       && decl->die_parent->die_tag != DW_TAG_type_unit)
7113     {
7114       new_decl = copy_ancestor_tree (unit, decl, NULL);
7115       if (new_decl != NULL)
7116         {
7117           remove_AT (new_decl, DW_AT_signature);
7118           add_AT_specification (die, new_decl);
7119         }
7120     }
7121 }
7122
7123 /* Generate the skeleton ancestor tree for the given NODE, then clone
7124    the DIE and add the clone into the tree.  */
7125
7126 static void
7127 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7128 {
7129   if (node->new_die != NULL)
7130     return;
7131
7132   node->new_die = clone_as_declaration (node->old_die);
7133
7134   if (node->parent != NULL)
7135     {
7136       generate_skeleton_ancestor_tree (node->parent);
7137       add_child_die (node->parent->new_die, node->new_die);
7138     }
7139 }
7140
7141 /* Generate a skeleton tree of DIEs containing any declarations that are
7142    found in the original tree.  We traverse the tree looking for declaration
7143    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
7144
7145 static void
7146 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7147 {
7148   skeleton_chain_node node;
7149   dw_die_ref c;
7150   dw_die_ref first;
7151   dw_die_ref prev = NULL;
7152   dw_die_ref next = NULL;
7153
7154   node.parent = parent;
7155
7156   first = c = parent->old_die->die_child;
7157   if (c)
7158     next = c->die_sib;
7159   if (c) do {
7160     if (prev == NULL || prev->die_sib == c)
7161       prev = c;
7162     c = next;
7163     next = (c == first ? NULL : c->die_sib);
7164     node.old_die = c;
7165     node.new_die = NULL;
7166     if (is_declaration_die (c))
7167       {
7168         /* Clone the existing DIE, move the original to the skeleton
7169            tree (which is in the main CU), and put the clone, with
7170            all the original's children, where the original came from.  */
7171         dw_die_ref clone = clone_die (c);
7172         move_all_children (c, clone);
7173
7174         replace_child (c, clone, prev);
7175         generate_skeleton_ancestor_tree (parent);
7176         add_child_die (parent->new_die, c);
7177         node.new_die = c;
7178         c = clone;
7179       }
7180     generate_skeleton_bottom_up (&node);
7181   } while (next != NULL);
7182 }
7183
7184 /* Wrapper function for generate_skeleton_bottom_up.  */
7185
7186 static dw_die_ref
7187 generate_skeleton (dw_die_ref die)
7188 {
7189   skeleton_chain_node node;
7190
7191   node.old_die = die;
7192   node.new_die = NULL;
7193   node.parent = NULL;
7194
7195   /* If this type definition is nested inside another type,
7196      always leave at least a declaration in its place.  */
7197   if (die->die_parent != NULL && is_type_die (die->die_parent))
7198     node.new_die = clone_as_declaration (die);
7199
7200   generate_skeleton_bottom_up (&node);
7201   return node.new_die;
7202 }
7203
7204 /* Remove the DIE from its parent, possibly replacing it with a cloned
7205    declaration.  The original DIE will be moved to a new compile unit
7206    so that existing references to it follow it to the new location.  If
7207    any of the original DIE's descendants is a declaration, we need to
7208    replace the original DIE with a skeleton tree and move the
7209    declarations back into the skeleton tree.  */
7210
7211 static dw_die_ref
7212 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
7213 {
7214   dw_die_ref skeleton;
7215
7216   skeleton = generate_skeleton (child);
7217   if (skeleton == NULL)
7218     remove_child_with_prev (child, prev);
7219   else
7220     {
7221       skeleton->die_id.die_type_node = child->die_id.die_type_node;
7222       replace_child (child, skeleton, prev);
7223     }
7224
7225   return skeleton;
7226 }
7227
7228 /* Traverse the DIE and set up additional .debug_types sections for each
7229    type worthy of being placed in a COMDAT section.  */
7230
7231 static void
7232 break_out_comdat_types (dw_die_ref die)
7233 {
7234   dw_die_ref c;
7235   dw_die_ref first;
7236   dw_die_ref prev = NULL;
7237   dw_die_ref next = NULL;
7238   dw_die_ref unit = NULL;
7239
7240   first = c = die->die_child;
7241   if (c)
7242     next = c->die_sib;
7243   if (c) do {
7244     if (prev == NULL || prev->die_sib == c)
7245       prev = c;
7246     c = next;
7247     next = (c == first ? NULL : c->die_sib);
7248     if (should_move_die_to_comdat (c))
7249       {
7250         dw_die_ref replacement;
7251         comdat_type_node_ref type_node;
7252
7253         /* Create a new type unit DIE as the root for the new tree, and
7254            add it to the list of comdat types.  */
7255         unit = new_die (DW_TAG_type_unit, NULL, NULL);
7256         add_AT_unsigned (unit, DW_AT_language,
7257                          get_AT_unsigned (comp_unit_die (), DW_AT_language));
7258         type_node = ggc_alloc_cleared_comdat_type_node ();
7259         type_node->root_die = unit;
7260         type_node->next = comdat_type_list;
7261         comdat_type_list = type_node;
7262
7263         /* Generate the type signature.  */
7264         generate_type_signature (c, type_node);
7265
7266         /* Copy the declaration context, attributes, and children of the
7267            declaration into the new compile unit DIE.  */
7268         copy_declaration_context (unit, c);
7269
7270         /* Remove this DIE from the main CU.  */
7271         replacement = remove_child_or_replace_with_skeleton (c, prev);
7272
7273         /* Break out nested types into their own type units.  */
7274         break_out_comdat_types (c);
7275
7276         /* Add the DIE to the new compunit.  */
7277         add_child_die (unit, c);
7278
7279         if (replacement != NULL)
7280           c = replacement;
7281       }
7282     else if (c->die_tag == DW_TAG_namespace
7283              || c->die_tag == DW_TAG_class_type
7284              || c->die_tag == DW_TAG_structure_type
7285              || c->die_tag == DW_TAG_union_type)
7286       {
7287         /* Look for nested types that can be broken out.  */
7288         break_out_comdat_types (c);
7289       }
7290   } while (next != NULL);
7291 }
7292
7293 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
7294
7295 struct decl_table_entry
7296 {
7297   dw_die_ref orig;
7298   dw_die_ref copy;
7299 };
7300
7301 /* Routines to manipulate hash table of copied declarations.  */
7302
7303 static hashval_t
7304 htab_decl_hash (const void *of)
7305 {
7306   const struct decl_table_entry *const entry =
7307     (const struct decl_table_entry *) of;
7308
7309   return htab_hash_pointer (entry->orig);
7310 }
7311
7312 static int
7313 htab_decl_eq (const void *of1, const void *of2)
7314 {
7315   const struct decl_table_entry *const entry1 =
7316     (const struct decl_table_entry *) of1;
7317   const struct die_struct *const entry2 = (const struct die_struct *) of2;
7318
7319   return entry1->orig == entry2;
7320 }
7321
7322 static void
7323 htab_decl_del (void *what)
7324 {
7325   struct decl_table_entry *entry = (struct decl_table_entry *) what;
7326
7327   free (entry);
7328 }
7329
7330 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7331    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
7332    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
7333    to check if the ancestor has already been copied into UNIT.  */
7334
7335 static dw_die_ref
7336 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7337 {
7338   dw_die_ref parent = die->die_parent;
7339   dw_die_ref new_parent = unit;
7340   dw_die_ref copy;
7341   void **slot = NULL;
7342   struct decl_table_entry *entry = NULL;
7343
7344   if (decl_table)
7345     {
7346       /* Check if the entry has already been copied to UNIT.  */
7347       slot = htab_find_slot_with_hash (decl_table, die,
7348                                        htab_hash_pointer (die), INSERT);
7349       if (*slot != HTAB_EMPTY_ENTRY)
7350         {
7351           entry = (struct decl_table_entry *) *slot;
7352           return entry->copy;
7353         }
7354
7355       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
7356       entry = XCNEW (struct decl_table_entry);
7357       entry->orig = die;
7358       entry->copy = NULL;
7359       *slot = entry;
7360     }
7361
7362   if (parent != NULL)
7363     {
7364       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7365       if (spec != NULL)
7366         parent = spec;
7367       if (parent->die_tag != DW_TAG_compile_unit
7368           && parent->die_tag != DW_TAG_type_unit)
7369         new_parent = copy_ancestor_tree (unit, parent, decl_table);
7370     }
7371
7372   copy = clone_as_declaration (die);
7373   add_child_die (new_parent, copy);
7374
7375   if (decl_table != NULL)
7376     {
7377       /* Record the pointer to the copy.  */
7378       entry->copy = copy;
7379     }
7380
7381   return copy;
7382 }
7383
7384 /* Walk the DIE and its children, looking for references to incomplete
7385    or trivial types that are unmarked (i.e., that are not in the current
7386    type_unit).  */
7387
7388 static void
7389 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7390 {
7391   dw_die_ref c;
7392   dw_attr_ref a;
7393   unsigned ix;
7394
7395   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7396     {
7397       if (AT_class (a) == dw_val_class_die_ref)
7398         {
7399           dw_die_ref targ = AT_ref (a);
7400           comdat_type_node_ref type_node = targ->die_id.die_type_node;
7401           void **slot;
7402           struct decl_table_entry *entry;
7403
7404           if (targ->die_mark != 0 || type_node != NULL)
7405             continue;
7406
7407           slot = htab_find_slot_with_hash (decl_table, targ,
7408                                            htab_hash_pointer (targ), INSERT);
7409
7410           if (*slot != HTAB_EMPTY_ENTRY)
7411             {
7412               /* TARG has already been copied, so we just need to
7413                  modify the reference to point to the copy.  */
7414               entry = (struct decl_table_entry *) *slot;
7415               a->dw_attr_val.v.val_die_ref.die = entry->copy;
7416             }
7417           else
7418             {
7419               dw_die_ref parent = unit;
7420               dw_die_ref copy = clone_tree (targ);
7421
7422               /* Make sure the cloned tree is marked as part of the
7423                  type unit.  */
7424               mark_dies (copy);
7425
7426               /* Record in DECL_TABLE that TARG has been copied.
7427                  Need to do this now, before the recursive call,
7428                  because DECL_TABLE may be expanded and SLOT
7429                  would no longer be a valid pointer.  */
7430               entry = XCNEW (struct decl_table_entry);
7431               entry->orig = targ;
7432               entry->copy = copy;
7433               *slot = entry;
7434
7435               /* If TARG has surrounding context, copy its ancestor tree
7436                  into the new type unit.  */
7437               if (targ->die_parent != NULL
7438                   && targ->die_parent->die_tag != DW_TAG_compile_unit
7439                   && targ->die_parent->die_tag != DW_TAG_type_unit)
7440                 parent = copy_ancestor_tree (unit, targ->die_parent,
7441                                              decl_table);
7442
7443               add_child_die (parent, copy);
7444               a->dw_attr_val.v.val_die_ref.die = copy;
7445
7446               /* Make sure the newly-copied DIE is walked.  If it was
7447                  installed in a previously-added context, it won't
7448                  get visited otherwise.  */
7449               if (parent != unit)
7450                 {
7451                   /* Find the highest point of the newly-added tree,
7452                      mark each node along the way, and walk from there.  */
7453                   parent->die_mark = 1;
7454                   while (parent->die_parent
7455                          && parent->die_parent->die_mark == 0)
7456                     {
7457                       parent = parent->die_parent;
7458                       parent->die_mark = 1;
7459                     }
7460                   copy_decls_walk (unit, parent, decl_table);
7461                 }
7462             }
7463         }
7464     }
7465
7466   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
7467 }
7468
7469 /* Copy declarations for "unworthy" types into the new comdat section.
7470    Incomplete types, modified types, and certain other types aren't broken
7471    out into comdat sections of their own, so they don't have a signature,
7472    and we need to copy the declaration into the same section so that we
7473    don't have an external reference.  */
7474
7475 static void
7476 copy_decls_for_unworthy_types (dw_die_ref unit)
7477 {
7478   htab_t decl_table;
7479
7480   mark_dies (unit);
7481   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
7482   copy_decls_walk (unit, unit, decl_table);
7483   htab_delete (decl_table);
7484   unmark_dies (unit);
7485 }
7486
7487 /* Traverse the DIE and add a sibling attribute if it may have the
7488    effect of speeding up access to siblings.  To save some space,
7489    avoid generating sibling attributes for DIE's without children.  */
7490
7491 static void
7492 add_sibling_attributes (dw_die_ref die)
7493 {
7494   dw_die_ref c;
7495
7496   if (! die->die_child)
7497     return;
7498
7499   if (die->die_parent && die != die->die_parent->die_child)
7500     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7501
7502   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7503 }
7504
7505 /* Output all location lists for the DIE and its children.  */
7506
7507 static void
7508 output_location_lists (dw_die_ref die)
7509 {
7510   dw_die_ref c;
7511   dw_attr_ref a;
7512   unsigned ix;
7513
7514   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7515     if (AT_class (a) == dw_val_class_loc_list)
7516       output_loc_list (AT_loc_list (a));
7517
7518   FOR_EACH_CHILD (die, c, output_location_lists (c));
7519 }
7520
7521 /* The format of each DIE (and its attribute value pairs) is encoded in an
7522    abbreviation table.  This routine builds the abbreviation table and assigns
7523    a unique abbreviation id for each abbreviation entry.  The children of each
7524    die are visited recursively.  */
7525
7526 static void
7527 build_abbrev_table (dw_die_ref die)
7528 {
7529   unsigned long abbrev_id;
7530   unsigned int n_alloc;
7531   dw_die_ref c;
7532   dw_attr_ref a;
7533   unsigned ix;
7534
7535   /* Scan the DIE references, and mark as external any that refer to
7536      DIEs from other CUs (i.e. those which are not marked).  */
7537   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7538     if (AT_class (a) == dw_val_class_die_ref
7539         && AT_ref (a)->die_mark == 0)
7540       {
7541         gcc_assert (use_debug_types || AT_ref (a)->die_id.die_symbol);
7542         set_AT_ref_external (a, 1);
7543       }
7544
7545   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7546     {
7547       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7548       dw_attr_ref die_a, abbrev_a;
7549       unsigned ix;
7550       bool ok = true;
7551
7552       if (abbrev->die_tag != die->die_tag)
7553         continue;
7554       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7555         continue;
7556
7557       if (VEC_length (dw_attr_node, abbrev->die_attr)
7558           != VEC_length (dw_attr_node, die->die_attr))
7559         continue;
7560
7561       FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, die_a)
7562         {
7563           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
7564           if ((abbrev_a->dw_attr != die_a->dw_attr)
7565               || (value_format (abbrev_a) != value_format (die_a)))
7566             {
7567               ok = false;
7568               break;
7569             }
7570         }
7571       if (ok)
7572         break;
7573     }
7574
7575   if (abbrev_id >= abbrev_die_table_in_use)
7576     {
7577       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7578         {
7579           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7580           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7581                                             n_alloc);
7582
7583           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7584                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7585           abbrev_die_table_allocated = n_alloc;
7586         }
7587
7588       ++abbrev_die_table_in_use;
7589       abbrev_die_table[abbrev_id] = die;
7590     }
7591
7592   die->die_abbrev = abbrev_id;
7593   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
7594 }
7595 \f
7596 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
7597
7598 static int
7599 constant_size (unsigned HOST_WIDE_INT value)
7600 {
7601   int log;
7602
7603   if (value == 0)
7604     log = 0;
7605   else
7606     log = floor_log2 (value);
7607
7608   log = log / 8;
7609   log = 1 << (floor_log2 (log) + 1);
7610
7611   return log;
7612 }
7613
7614 /* Return the size of a DIE as it is represented in the
7615    .debug_info section.  */
7616
7617 static unsigned long
7618 size_of_die (dw_die_ref die)
7619 {
7620   unsigned long size = 0;
7621   dw_attr_ref a;
7622   unsigned ix;
7623
7624   size += size_of_uleb128 (die->die_abbrev);
7625   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7626     {
7627       switch (AT_class (a))
7628         {
7629         case dw_val_class_addr:
7630           size += DWARF2_ADDR_SIZE;
7631           break;
7632         case dw_val_class_offset:
7633           size += DWARF_OFFSET_SIZE;
7634           break;
7635         case dw_val_class_loc:
7636           {
7637             unsigned long lsize = size_of_locs (AT_loc (a));
7638
7639             /* Block length.  */
7640             if (dwarf_version >= 4)
7641               size += size_of_uleb128 (lsize);
7642             else
7643               size += constant_size (lsize);
7644             size += lsize;
7645           }
7646           break;
7647         case dw_val_class_loc_list:
7648           size += DWARF_OFFSET_SIZE;
7649           break;
7650         case dw_val_class_range_list:
7651           size += DWARF_OFFSET_SIZE;
7652           break;
7653         case dw_val_class_const:
7654           size += size_of_sleb128 (AT_int (a));
7655           break;
7656         case dw_val_class_unsigned_const:
7657           {
7658             int csize = constant_size (AT_unsigned (a));
7659             if (dwarf_version == 3
7660                 && a->dw_attr == DW_AT_data_member_location
7661                 && csize >= 4)
7662               size += size_of_uleb128 (AT_unsigned (a));
7663             else
7664               size += csize;
7665           }
7666           break;
7667         case dw_val_class_const_double:
7668           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
7669           if (HOST_BITS_PER_WIDE_INT >= 64)
7670             size++; /* block */
7671           break;
7672         case dw_val_class_vec:
7673           size += constant_size (a->dw_attr_val.v.val_vec.length
7674                                  * a->dw_attr_val.v.val_vec.elt_size)
7675                   + a->dw_attr_val.v.val_vec.length
7676                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
7677           break;
7678         case dw_val_class_flag:
7679           if (dwarf_version >= 4)
7680             /* Currently all add_AT_flag calls pass in 1 as last argument,
7681                so DW_FORM_flag_present can be used.  If that ever changes,
7682                we'll need to use DW_FORM_flag and have some optimization
7683                in build_abbrev_table that will change those to
7684                DW_FORM_flag_present if it is set to 1 in all DIEs using
7685                the same abbrev entry.  */
7686             gcc_assert (a->dw_attr_val.v.val_flag == 1);
7687           else
7688             size += 1;
7689           break;
7690         case dw_val_class_die_ref:
7691           if (AT_ref_external (a))
7692             {
7693               /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
7694                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
7695                  is sized by target address length, whereas in DWARF3
7696                  it's always sized as an offset.  */
7697               if (use_debug_types)
7698                 size += DWARF_TYPE_SIGNATURE_SIZE;
7699               else if (dwarf_version == 2)
7700                 size += DWARF2_ADDR_SIZE;
7701               else
7702                 size += DWARF_OFFSET_SIZE;
7703             }
7704           else
7705             size += DWARF_OFFSET_SIZE;
7706           break;
7707         case dw_val_class_fde_ref:
7708           size += DWARF_OFFSET_SIZE;
7709           break;
7710         case dw_val_class_lbl_id:
7711           size += DWARF2_ADDR_SIZE;
7712           break;
7713         case dw_val_class_lineptr:
7714         case dw_val_class_macptr:
7715           size += DWARF_OFFSET_SIZE;
7716           break;
7717         case dw_val_class_str:
7718           if (AT_string_form (a) == DW_FORM_strp)
7719             size += DWARF_OFFSET_SIZE;
7720           else
7721             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
7722           break;
7723         case dw_val_class_file:
7724           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
7725           break;
7726         case dw_val_class_data8:
7727           size += 8;
7728           break;
7729         case dw_val_class_vms_delta:
7730           size += DWARF_OFFSET_SIZE;
7731           break;
7732         default:
7733           gcc_unreachable ();
7734         }
7735     }
7736
7737   return size;
7738 }
7739
7740 /* Size the debugging information associated with a given DIE.  Visits the
7741    DIE's children recursively.  Updates the global variable next_die_offset, on
7742    each time through.  Uses the current value of next_die_offset to update the
7743    die_offset field in each DIE.  */
7744
7745 static void
7746 calc_die_sizes (dw_die_ref die)
7747 {
7748   dw_die_ref c;
7749
7750   gcc_assert (die->die_offset == 0
7751               || (unsigned long int) die->die_offset == next_die_offset);
7752   die->die_offset = next_die_offset;
7753   next_die_offset += size_of_die (die);
7754
7755   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
7756
7757   if (die->die_child != NULL)
7758     /* Count the null byte used to terminate sibling lists.  */
7759     next_die_offset += 1;
7760 }
7761
7762 /* Size just the base type children at the start of the CU.
7763    This is needed because build_abbrev needs to size locs
7764    and sizing of type based stack ops needs to know die_offset
7765    values for the base types.  */
7766
7767 static void
7768 calc_base_type_die_sizes (void)
7769 {
7770   unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7771   unsigned int i;
7772   dw_die_ref base_type;
7773 #if ENABLE_ASSERT_CHECKING
7774   dw_die_ref prev = comp_unit_die ()->die_child;
7775 #endif
7776
7777   die_offset += size_of_die (comp_unit_die ());
7778   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
7779     {
7780 #if ENABLE_ASSERT_CHECKING
7781       gcc_assert (base_type->die_offset == 0
7782                   && prev->die_sib == base_type
7783                   && base_type->die_child == NULL
7784                   && base_type->die_abbrev);
7785       prev = base_type;
7786 #endif
7787       base_type->die_offset = die_offset;
7788       die_offset += size_of_die (base_type);
7789     }
7790 }
7791
7792 /* Set the marks for a die and its children.  We do this so
7793    that we know whether or not a reference needs to use FORM_ref_addr; only
7794    DIEs in the same CU will be marked.  We used to clear out the offset
7795    and use that as the flag, but ran into ordering problems.  */
7796
7797 static void
7798 mark_dies (dw_die_ref die)
7799 {
7800   dw_die_ref c;
7801
7802   gcc_assert (!die->die_mark);
7803
7804   die->die_mark = 1;
7805   FOR_EACH_CHILD (die, c, mark_dies (c));
7806 }
7807
7808 /* Clear the marks for a die and its children.  */
7809
7810 static void
7811 unmark_dies (dw_die_ref die)
7812 {
7813   dw_die_ref c;
7814
7815   if (! use_debug_types)
7816     gcc_assert (die->die_mark);
7817
7818   die->die_mark = 0;
7819   FOR_EACH_CHILD (die, c, unmark_dies (c));
7820 }
7821
7822 /* Clear the marks for a die, its children and referred dies.  */
7823
7824 static void
7825 unmark_all_dies (dw_die_ref die)
7826 {
7827   dw_die_ref c;
7828   dw_attr_ref a;
7829   unsigned ix;
7830
7831   if (!die->die_mark)
7832     return;
7833   die->die_mark = 0;
7834
7835   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
7836
7837   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7838     if (AT_class (a) == dw_val_class_die_ref)
7839       unmark_all_dies (AT_ref (a));
7840 }
7841
7842 /* Return the size of the .debug_pubnames or .debug_pubtypes table
7843    generated for the compilation unit.  */
7844
7845 static unsigned long
7846 size_of_pubnames (VEC (pubname_entry, gc) * names)
7847 {
7848   unsigned long size;
7849   unsigned i;
7850   pubname_ref p;
7851
7852   size = DWARF_PUBNAMES_HEADER_SIZE;
7853   FOR_EACH_VEC_ELT (pubname_entry, names, i, p)
7854     if (names != pubtype_table
7855         || p->die->die_offset != 0
7856         || !flag_eliminate_unused_debug_types)
7857       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
7858
7859   size += DWARF_OFFSET_SIZE;
7860   return size;
7861 }
7862
7863 /* Return the size of the information in the .debug_aranges section.  */
7864
7865 static unsigned long
7866 size_of_aranges (void)
7867 {
7868   unsigned long size;
7869
7870   size = DWARF_ARANGES_HEADER_SIZE;
7871
7872   /* Count the address/length pair for this compilation unit.  */
7873   if (text_section_used)
7874     size += 2 * DWARF2_ADDR_SIZE;
7875   if (cold_text_section_used)
7876     size += 2 * DWARF2_ADDR_SIZE;
7877   if (have_multiple_function_sections)
7878     {
7879       unsigned fde_idx;
7880       dw_fde_ref fde;
7881
7882       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
7883         {
7884           if (!fde->in_std_section)
7885             size += 2 * DWARF2_ADDR_SIZE;
7886           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
7887             size += 2 * DWARF2_ADDR_SIZE;
7888         }
7889     }
7890
7891   /* Count the two zero words used to terminated the address range table.  */
7892   size += 2 * DWARF2_ADDR_SIZE;
7893   return size;
7894 }
7895 \f
7896 /* Select the encoding of an attribute value.  */
7897
7898 static enum dwarf_form
7899 value_format (dw_attr_ref a)
7900 {
7901   switch (a->dw_attr_val.val_class)
7902     {
7903     case dw_val_class_addr:
7904       /* Only very few attributes allow DW_FORM_addr.  */
7905       switch (a->dw_attr)
7906         {
7907         case DW_AT_low_pc:
7908         case DW_AT_high_pc:
7909         case DW_AT_entry_pc:
7910         case DW_AT_trampoline:
7911           return DW_FORM_addr;
7912         default:
7913           break;
7914         }
7915       switch (DWARF2_ADDR_SIZE)
7916         {
7917         case 1:
7918           return DW_FORM_data1;
7919         case 2:
7920           return DW_FORM_data2;
7921         case 4:
7922           return DW_FORM_data4;
7923         case 8:
7924           return DW_FORM_data8;
7925         default:
7926           gcc_unreachable ();
7927         }
7928     case dw_val_class_range_list:
7929     case dw_val_class_loc_list:
7930       if (dwarf_version >= 4)
7931         return DW_FORM_sec_offset;
7932       /* FALLTHRU */
7933     case dw_val_class_vms_delta:
7934     case dw_val_class_offset:
7935       switch (DWARF_OFFSET_SIZE)
7936         {
7937         case 4:
7938           return DW_FORM_data4;
7939         case 8:
7940           return DW_FORM_data8;
7941         default:
7942           gcc_unreachable ();
7943         }
7944     case dw_val_class_loc:
7945       if (dwarf_version >= 4)
7946         return DW_FORM_exprloc;
7947       switch (constant_size (size_of_locs (AT_loc (a))))
7948         {
7949         case 1:
7950           return DW_FORM_block1;
7951         case 2:
7952           return DW_FORM_block2;
7953         default:
7954           gcc_unreachable ();
7955         }
7956     case dw_val_class_const:
7957       return DW_FORM_sdata;
7958     case dw_val_class_unsigned_const:
7959       switch (constant_size (AT_unsigned (a)))
7960         {
7961         case 1:
7962           return DW_FORM_data1;
7963         case 2:
7964           return DW_FORM_data2;
7965         case 4:
7966           /* In DWARF3 DW_AT_data_member_location with
7967              DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
7968              constant, so we need to use DW_FORM_udata if we need
7969              a large constant.  */
7970           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
7971             return DW_FORM_udata;
7972           return DW_FORM_data4;
7973         case 8:
7974           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
7975             return DW_FORM_udata;
7976           return DW_FORM_data8;
7977         default:
7978           gcc_unreachable ();
7979         }
7980     case dw_val_class_const_double:
7981       switch (HOST_BITS_PER_WIDE_INT)
7982         {
7983         case 8:
7984           return DW_FORM_data2;
7985         case 16:
7986           return DW_FORM_data4;
7987         case 32:
7988           return DW_FORM_data8;
7989         case 64:
7990         default:
7991           return DW_FORM_block1;
7992         }
7993     case dw_val_class_vec:
7994       switch (constant_size (a->dw_attr_val.v.val_vec.length
7995                              * a->dw_attr_val.v.val_vec.elt_size))
7996         {
7997         case 1:
7998           return DW_FORM_block1;
7999         case 2:
8000           return DW_FORM_block2;
8001         case 4:
8002           return DW_FORM_block4;
8003         default:
8004           gcc_unreachable ();
8005         }
8006     case dw_val_class_flag:
8007       if (dwarf_version >= 4)
8008         {
8009           /* Currently all add_AT_flag calls pass in 1 as last argument,
8010              so DW_FORM_flag_present can be used.  If that ever changes,
8011              we'll need to use DW_FORM_flag and have some optimization
8012              in build_abbrev_table that will change those to
8013              DW_FORM_flag_present if it is set to 1 in all DIEs using
8014              the same abbrev entry.  */
8015           gcc_assert (a->dw_attr_val.v.val_flag == 1);
8016           return DW_FORM_flag_present;
8017         }
8018       return DW_FORM_flag;
8019     case dw_val_class_die_ref:
8020       if (AT_ref_external (a))
8021         return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8022       else
8023         return DW_FORM_ref;
8024     case dw_val_class_fde_ref:
8025       return DW_FORM_data;
8026     case dw_val_class_lbl_id:
8027       return DW_FORM_addr;
8028     case dw_val_class_lineptr:
8029     case dw_val_class_macptr:
8030       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8031     case dw_val_class_str:
8032       return AT_string_form (a);
8033     case dw_val_class_file:
8034       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8035         {
8036         case 1:
8037           return DW_FORM_data1;
8038         case 2:
8039           return DW_FORM_data2;
8040         case 4:
8041           return DW_FORM_data4;
8042         default:
8043           gcc_unreachable ();
8044         }
8045
8046     case dw_val_class_data8:
8047       return DW_FORM_data8;
8048
8049     default:
8050       gcc_unreachable ();
8051     }
8052 }
8053
8054 /* Output the encoding of an attribute value.  */
8055
8056 static void
8057 output_value_format (dw_attr_ref a)
8058 {
8059   enum dwarf_form form = value_format (a);
8060
8061   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8062 }
8063
8064 /* Output the .debug_abbrev section which defines the DIE abbreviation
8065    table.  */
8066
8067 static void
8068 output_abbrev_section (void)
8069 {
8070   unsigned long abbrev_id;
8071
8072   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8073     {
8074       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
8075       unsigned ix;
8076       dw_attr_ref a_attr;
8077
8078       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8079       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8080                                    dwarf_tag_name (abbrev->die_tag));
8081
8082       if (abbrev->die_child != NULL)
8083         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8084       else
8085         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8086
8087       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
8088            ix++)
8089         {
8090           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8091                                        dwarf_attr_name (a_attr->dw_attr));
8092           output_value_format (a_attr);
8093         }
8094
8095       dw2_asm_output_data (1, 0, NULL);
8096       dw2_asm_output_data (1, 0, NULL);
8097     }
8098
8099   /* Terminate the table.  */
8100   dw2_asm_output_data (1, 0, NULL);
8101 }
8102
8103 /* Output a symbol we can use to refer to this DIE from another CU.  */
8104
8105 static inline void
8106 output_die_symbol (dw_die_ref die)
8107 {
8108   char *sym = die->die_id.die_symbol;
8109
8110   if (sym == 0)
8111     return;
8112
8113   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8114     /* We make these global, not weak; if the target doesn't support
8115        .linkonce, it doesn't support combining the sections, so debugging
8116        will break.  */
8117     targetm.asm_out.globalize_label (asm_out_file, sym);
8118
8119   ASM_OUTPUT_LABEL (asm_out_file, sym);
8120 }
8121
8122 /* Return a new location list, given the begin and end range, and the
8123    expression.  */
8124
8125 static inline dw_loc_list_ref
8126 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8127               const char *section)
8128 {
8129   dw_loc_list_ref retlist = ggc_alloc_cleared_dw_loc_list_node ();
8130
8131   retlist->begin = begin;
8132   retlist->end = end;
8133   retlist->expr = expr;
8134   retlist->section = section;
8135
8136   return retlist;
8137 }
8138
8139 /* Generate a new internal symbol for this location list node, if it
8140    hasn't got one yet.  */
8141
8142 static inline void
8143 gen_llsym (dw_loc_list_ref list)
8144 {
8145   gcc_assert (!list->ll_symbol);
8146   list->ll_symbol = gen_internal_sym ("LLST");
8147 }
8148
8149 /* Output the location list given to us.  */
8150
8151 static void
8152 output_loc_list (dw_loc_list_ref list_head)
8153 {
8154   dw_loc_list_ref curr = list_head;
8155
8156   if (list_head->emitted)
8157     return;
8158   list_head->emitted = true;
8159
8160   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8161
8162   /* Walk the location list, and output each range + expression.  */
8163   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8164     {
8165       unsigned long size;
8166       /* Don't output an entry that starts and ends at the same address.  */
8167       if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
8168         continue;
8169       if (!have_multiple_function_sections)
8170         {
8171           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8172                                 "Location list begin address (%s)",
8173                                 list_head->ll_symbol);
8174           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8175                                 "Location list end address (%s)",
8176                                 list_head->ll_symbol);
8177         }
8178       else
8179         {
8180           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8181                                "Location list begin address (%s)",
8182                                list_head->ll_symbol);
8183           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8184                                "Location list end address (%s)",
8185                                list_head->ll_symbol);
8186         }
8187       size = size_of_locs (curr->expr);
8188
8189       /* Output the block length for this list of location operations.  */
8190       gcc_assert (size <= 0xffff);
8191       dw2_asm_output_data (2, size, "%s", "Location expression size");
8192
8193       output_loc_sequence (curr->expr, -1);
8194     }
8195
8196   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8197                        "Location list terminator begin (%s)",
8198                        list_head->ll_symbol);
8199   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8200                        "Location list terminator end (%s)",
8201                        list_head->ll_symbol);
8202 }
8203
8204 /* Output a type signature.  */
8205
8206 static inline void
8207 output_signature (const char *sig, const char *name)
8208 {
8209   int i;
8210
8211   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8212     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
8213 }
8214
8215 /* Output the DIE and its attributes.  Called recursively to generate
8216    the definitions of each child DIE.  */
8217
8218 static void
8219 output_die (dw_die_ref die)
8220 {
8221   dw_attr_ref a;
8222   dw_die_ref c;
8223   unsigned long size;
8224   unsigned ix;
8225
8226   /* If someone in another CU might refer to us, set up a symbol for
8227      them to point to.  */
8228   if (! use_debug_types && die->die_id.die_symbol)
8229     output_die_symbol (die);
8230
8231   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
8232                                (unsigned long)die->die_offset,
8233                                dwarf_tag_name (die->die_tag));
8234
8235   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
8236     {
8237       const char *name = dwarf_attr_name (a->dw_attr);
8238
8239       switch (AT_class (a))
8240         {
8241         case dw_val_class_addr:
8242           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8243           break;
8244
8245         case dw_val_class_offset:
8246           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8247                                "%s", name);
8248           break;
8249
8250         case dw_val_class_range_list:
8251           {
8252             char *p = strchr (ranges_section_label, '\0');
8253
8254             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
8255                      a->dw_attr_val.v.val_offset);
8256             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8257                                    debug_ranges_section, "%s", name);
8258             *p = '\0';
8259           }
8260           break;
8261
8262         case dw_val_class_loc:
8263           size = size_of_locs (AT_loc (a));
8264
8265           /* Output the block length for this list of location operations.  */
8266           if (dwarf_version >= 4)
8267             dw2_asm_output_data_uleb128 (size, "%s", name);
8268           else
8269             dw2_asm_output_data (constant_size (size), size, "%s", name);
8270
8271           output_loc_sequence (AT_loc (a), -1);
8272           break;
8273
8274         case dw_val_class_const:
8275           /* ??? It would be slightly more efficient to use a scheme like is
8276              used for unsigned constants below, but gdb 4.x does not sign
8277              extend.  Gdb 5.x does sign extend.  */
8278           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8279           break;
8280
8281         case dw_val_class_unsigned_const:
8282           {
8283             int csize = constant_size (AT_unsigned (a));
8284             if (dwarf_version == 3
8285                 && a->dw_attr == DW_AT_data_member_location
8286                 && csize >= 4)
8287               dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
8288             else
8289               dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
8290           }
8291           break;
8292
8293         case dw_val_class_const_double:
8294           {
8295             unsigned HOST_WIDE_INT first, second;
8296
8297             if (HOST_BITS_PER_WIDE_INT >= 64)
8298               dw2_asm_output_data (1,
8299                                    2 * HOST_BITS_PER_WIDE_INT
8300                                    / HOST_BITS_PER_CHAR,
8301                                    NULL);
8302
8303             if (WORDS_BIG_ENDIAN)
8304               {
8305                 first = a->dw_attr_val.v.val_double.high;
8306                 second = a->dw_attr_val.v.val_double.low;
8307               }
8308             else
8309               {
8310                 first = a->dw_attr_val.v.val_double.low;
8311                 second = a->dw_attr_val.v.val_double.high;
8312               }
8313
8314             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8315                                  first, name);
8316             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8317                                  second, NULL);
8318           }
8319           break;
8320
8321         case dw_val_class_vec:
8322           {
8323             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8324             unsigned int len = a->dw_attr_val.v.val_vec.length;
8325             unsigned int i;
8326             unsigned char *p;
8327
8328             dw2_asm_output_data (constant_size (len * elt_size),
8329                                  len * elt_size, "%s", name);
8330             if (elt_size > sizeof (HOST_WIDE_INT))
8331               {
8332                 elt_size /= 2;
8333                 len *= 2;
8334               }
8335             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8336                  i < len;
8337                  i++, p += elt_size)
8338               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8339                                    "fp or vector constant word %u", i);
8340             break;
8341           }
8342
8343         case dw_val_class_flag:
8344           if (dwarf_version >= 4)
8345             {
8346               /* Currently all add_AT_flag calls pass in 1 as last argument,
8347                  so DW_FORM_flag_present can be used.  If that ever changes,
8348                  we'll need to use DW_FORM_flag and have some optimization
8349                  in build_abbrev_table that will change those to
8350                  DW_FORM_flag_present if it is set to 1 in all DIEs using
8351                  the same abbrev entry.  */
8352               gcc_assert (AT_flag (a) == 1);
8353               if (flag_debug_asm)
8354                 fprintf (asm_out_file, "\t\t\t%s %s\n",
8355                          ASM_COMMENT_START, name);
8356               break;
8357             }
8358           dw2_asm_output_data (1, AT_flag (a), "%s", name);
8359           break;
8360
8361         case dw_val_class_loc_list:
8362           {
8363             char *sym = AT_loc_list (a)->ll_symbol;
8364
8365             gcc_assert (sym);
8366             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8367                                    "%s", name);
8368           }
8369           break;
8370
8371         case dw_val_class_die_ref:
8372           if (AT_ref_external (a))
8373             {
8374               if (use_debug_types)
8375                 {
8376                   comdat_type_node_ref type_node =
8377                     AT_ref (a)->die_id.die_type_node;
8378
8379                   gcc_assert (type_node);
8380                   output_signature (type_node->signature, name);
8381                 }
8382               else
8383                 {
8384                   char *sym = AT_ref (a)->die_id.die_symbol;
8385                   int size;
8386
8387                   gcc_assert (sym);
8388                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
8389                      length, whereas in DWARF3 it's always sized as an
8390                      offset.  */
8391                   if (dwarf_version == 2)
8392                     size = DWARF2_ADDR_SIZE;
8393                   else
8394                     size = DWARF_OFFSET_SIZE;
8395                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
8396                                          name);
8397                 }
8398             }
8399           else
8400             {
8401               gcc_assert (AT_ref (a)->die_offset);
8402               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8403                                    "%s", name);
8404             }
8405           break;
8406
8407         case dw_val_class_fde_ref:
8408           {
8409             char l1[20];
8410
8411             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8412                                          a->dw_attr_val.v.val_fde_index * 2);
8413             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
8414                                    "%s", name);
8415           }
8416           break;
8417
8418         case dw_val_class_vms_delta:
8419           dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
8420                                     AT_vms_delta2 (a), AT_vms_delta1 (a),
8421                                     "%s", name);
8422           break;
8423
8424         case dw_val_class_lbl_id:
8425           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8426           break;
8427
8428         case dw_val_class_lineptr:
8429           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8430                                  debug_line_section, "%s", name);
8431           break;
8432
8433         case dw_val_class_macptr:
8434           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8435                                  debug_macinfo_section, "%s", name);
8436           break;
8437
8438         case dw_val_class_str:
8439           if (AT_string_form (a) == DW_FORM_strp)
8440             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
8441                                    a->dw_attr_val.v.val_str->label,
8442                                    debug_str_section,
8443                                    "%s: \"%s\"", name, AT_string (a));
8444           else
8445             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
8446           break;
8447
8448         case dw_val_class_file:
8449           {
8450             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
8451
8452             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
8453                                  a->dw_attr_val.v.val_file->filename);
8454             break;
8455           }
8456
8457         case dw_val_class_data8:
8458           {
8459             int i;
8460
8461             for (i = 0; i < 8; i++)
8462               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
8463                                    i == 0 ? "%s" : NULL, name);
8464             break;
8465           }
8466
8467         default:
8468           gcc_unreachable ();
8469         }
8470     }
8471
8472   FOR_EACH_CHILD (die, c, output_die (c));
8473
8474   /* Add null byte to terminate sibling list.  */
8475   if (die->die_child != NULL)
8476     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
8477                          (unsigned long) die->die_offset);
8478 }
8479
8480 /* Output the compilation unit that appears at the beginning of the
8481    .debug_info section, and precedes the DIE descriptions.  */
8482
8483 static void
8484 output_compilation_unit_header (void)
8485 {
8486   int ver = dwarf_version;
8487
8488   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8489     dw2_asm_output_data (4, 0xffffffff,
8490       "Initial length escape value indicating 64-bit DWARF extension");
8491   dw2_asm_output_data (DWARF_OFFSET_SIZE,
8492                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
8493                        "Length of Compilation Unit Info");
8494   dw2_asm_output_data (2, ver, "DWARF version number");
8495   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
8496                          debug_abbrev_section,
8497                          "Offset Into Abbrev. Section");
8498   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
8499 }
8500
8501 /* Output the compilation unit DIE and its children.  */
8502
8503 static void
8504 output_comp_unit (dw_die_ref die, int output_if_empty)
8505 {
8506   const char *secname;
8507   char *oldsym, *tmp;
8508
8509   /* Unless we are outputting main CU, we may throw away empty ones.  */
8510   if (!output_if_empty && die->die_child == NULL)
8511     return;
8512
8513   /* Even if there are no children of this DIE, we must output the information
8514      about the compilation unit.  Otherwise, on an empty translation unit, we
8515      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
8516      will then complain when examining the file.  First mark all the DIEs in
8517      this CU so we know which get local refs.  */
8518   mark_dies (die);
8519
8520   build_abbrev_table (die);
8521
8522   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8523   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8524   calc_die_sizes (die);
8525
8526   oldsym = die->die_id.die_symbol;
8527   if (oldsym)
8528     {
8529       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
8530
8531       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
8532       secname = tmp;
8533       die->die_id.die_symbol = NULL;
8534       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8535     }
8536   else
8537     {
8538       switch_to_section (debug_info_section);
8539       ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
8540       info_section_emitted = true;
8541     }
8542
8543   /* Output debugging information.  */
8544   output_compilation_unit_header ();
8545   output_die (die);
8546
8547   /* Leave the marks on the main CU, so we can check them in
8548      output_pubnames.  */
8549   if (oldsym)
8550     {
8551       unmark_dies (die);
8552       die->die_id.die_symbol = oldsym;
8553     }
8554 }
8555
8556 /* Output a comdat type unit DIE and its children.  */
8557
8558 static void
8559 output_comdat_type_unit (comdat_type_node *node)
8560 {
8561   const char *secname;
8562   char *tmp;
8563   int i;
8564 #if defined (OBJECT_FORMAT_ELF)
8565   tree comdat_key;
8566 #endif
8567
8568   /* First mark all the DIEs in this CU so we know which get local refs.  */
8569   mark_dies (node->root_die);
8570
8571   build_abbrev_table (node->root_die);
8572
8573   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8574   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
8575   calc_die_sizes (node->root_die);
8576
8577 #if defined (OBJECT_FORMAT_ELF)
8578   secname = ".debug_types";
8579   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8580   sprintf (tmp, "wt.");
8581   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8582     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
8583   comdat_key = get_identifier (tmp);
8584   targetm.asm_out.named_section (secname,
8585                                  SECTION_DEBUG | SECTION_LINKONCE,
8586                                  comdat_key);
8587 #else
8588   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8589   sprintf (tmp, ".gnu.linkonce.wt.");
8590   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8591     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
8592   secname = tmp;
8593   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8594 #endif
8595
8596   /* Output debugging information.  */
8597   output_compilation_unit_header ();
8598   output_signature (node->signature, "Type Signature");
8599   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
8600                        "Offset to Type DIE");
8601   output_die (node->root_die);
8602
8603   unmark_dies (node->root_die);
8604 }
8605
8606 /* Return the DWARF2/3 pubname associated with a decl.  */
8607
8608 static const char *
8609 dwarf2_name (tree decl, int scope)
8610 {
8611   if (DECL_NAMELESS (decl))
8612     return NULL;
8613   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
8614 }
8615
8616 /* Add a new entry to .debug_pubnames if appropriate.  */
8617
8618 static void
8619 add_pubname_string (const char *str, dw_die_ref die)
8620 {
8621   if (targetm.want_debug_pub_sections)
8622     {
8623       pubname_entry e;
8624
8625       e.die = die;
8626       e.name = xstrdup (str);
8627       VEC_safe_push (pubname_entry, gc, pubname_table, &e);
8628     }
8629 }
8630
8631 static void
8632 add_pubname (tree decl, dw_die_ref die)
8633 {
8634   if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl))
8635     {
8636       const char *name = dwarf2_name (decl, 1);
8637       if (name)
8638         add_pubname_string (name, die);
8639     }
8640 }
8641
8642 /* Add a new entry to .debug_pubtypes if appropriate.  */
8643
8644 static void
8645 add_pubtype (tree decl, dw_die_ref die)
8646 {
8647   pubname_entry e;
8648
8649   if (!targetm.want_debug_pub_sections)
8650     return;
8651
8652   e.name = NULL;
8653   if ((TREE_PUBLIC (decl)
8654        || is_cu_die (die->die_parent))
8655       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
8656     {
8657       e.die = die;
8658       if (TYPE_P (decl))
8659         {
8660           if (TYPE_NAME (decl))
8661             {
8662               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
8663                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
8664               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
8665                        && DECL_NAME (TYPE_NAME (decl)))
8666                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
8667               else
8668                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
8669             }
8670         }
8671       else
8672         {
8673           e.name = dwarf2_name (decl, 1);
8674           if (e.name)
8675             e.name = xstrdup (e.name);
8676         }
8677
8678       /* If we don't have a name for the type, there's no point in adding
8679          it to the table.  */
8680       if (e.name && e.name[0] != '\0')
8681         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
8682     }
8683 }
8684
8685 /* Output the public names table used to speed up access to externally
8686    visible names; or the public types table used to find type definitions.  */
8687
8688 static void
8689 output_pubnames (VEC (pubname_entry, gc) * names)
8690 {
8691   unsigned i;
8692   unsigned long pubnames_length = size_of_pubnames (names);
8693   pubname_ref pub;
8694
8695   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8696     dw2_asm_output_data (4, 0xffffffff,
8697       "Initial length escape value indicating 64-bit DWARF extension");
8698   if (names == pubname_table)
8699     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8700                          "Length of Public Names Info");
8701   else
8702     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8703                          "Length of Public Type Names Info");
8704   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
8705   dw2_asm_output_data (2, 2, "DWARF Version");
8706   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8707                          debug_info_section,
8708                          "Offset of Compilation Unit Info");
8709   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
8710                        "Compilation Unit Length");
8711
8712   FOR_EACH_VEC_ELT (pubname_entry, names, i, pub)
8713     {
8714       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
8715       if (names == pubname_table)
8716         gcc_assert (pub->die->die_mark);
8717
8718       if (names != pubtype_table
8719           || pub->die->die_offset != 0
8720           || !flag_eliminate_unused_debug_types)
8721         {
8722           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
8723                                "DIE offset");
8724
8725           dw2_asm_output_nstring (pub->name, -1, "external name");
8726         }
8727     }
8728
8729   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
8730 }
8731
8732 /* Output the information that goes into the .debug_aranges table.
8733    Namely, define the beginning and ending address range of the
8734    text section generated for this compilation unit.  */
8735
8736 static void
8737 output_aranges (unsigned long aranges_length)
8738 {
8739   unsigned i;
8740
8741   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8742     dw2_asm_output_data (4, 0xffffffff,
8743       "Initial length escape value indicating 64-bit DWARF extension");
8744   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
8745                        "Length of Address Ranges Info");
8746   /* Version number for aranges is still 2, even in DWARF3.  */
8747   dw2_asm_output_data (2, 2, "DWARF Version");
8748   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8749                          debug_info_section,
8750                          "Offset of Compilation Unit Info");
8751   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
8752   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
8753
8754   /* We need to align to twice the pointer size here.  */
8755   if (DWARF_ARANGES_PAD_SIZE)
8756     {
8757       /* Pad using a 2 byte words so that padding is correct for any
8758          pointer size.  */
8759       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
8760                            2 * DWARF2_ADDR_SIZE);
8761       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
8762         dw2_asm_output_data (2, 0, NULL);
8763     }
8764
8765   /* It is necessary not to output these entries if the sections were
8766      not used; if the sections were not used, the length will be 0 and
8767      the address may end up as 0 if the section is discarded by ld
8768      --gc-sections, leaving an invalid (0, 0) entry that can be
8769      confused with the terminator.  */
8770   if (text_section_used)
8771     {
8772       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
8773       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
8774                             text_section_label, "Length");
8775     }
8776   if (cold_text_section_used)
8777     {
8778       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
8779                            "Address");
8780       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
8781                             cold_text_section_label, "Length");
8782     }
8783
8784   if (have_multiple_function_sections)
8785     {
8786       unsigned fde_idx;
8787       dw_fde_ref fde;
8788
8789       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
8790         {
8791           if (!fde->in_std_section)
8792             {
8793               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
8794                                    "Address");
8795               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
8796                                     fde->dw_fde_begin, "Length");
8797             }
8798           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8799             {
8800               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
8801                                    "Address");
8802               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
8803                                     fde->dw_fde_second_begin, "Length");
8804             }
8805         }
8806     }
8807
8808   /* Output the terminator words.  */
8809   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8810   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8811 }
8812
8813 /* Add a new entry to .debug_ranges.  Return the offset at which it
8814    was placed.  */
8815
8816 static unsigned int
8817 add_ranges_num (int num)
8818 {
8819   unsigned int in_use = ranges_table_in_use;
8820
8821   if (in_use == ranges_table_allocated)
8822     {
8823       ranges_table_allocated += RANGES_TABLE_INCREMENT;
8824       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
8825                                     ranges_table_allocated);
8826       memset (ranges_table + ranges_table_in_use, 0,
8827               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
8828     }
8829
8830   ranges_table[in_use].num = num;
8831   ranges_table_in_use = in_use + 1;
8832
8833   return in_use * 2 * DWARF2_ADDR_SIZE;
8834 }
8835
8836 /* Add a new entry to .debug_ranges corresponding to a block, or a
8837    range terminator if BLOCK is NULL.  */
8838
8839 static unsigned int
8840 add_ranges (const_tree block)
8841 {
8842   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
8843 }
8844
8845 /* Add a new entry to .debug_ranges corresponding to a pair of
8846    labels.  */
8847
8848 static void
8849 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
8850                       bool *added)
8851 {
8852   unsigned int in_use = ranges_by_label_in_use;
8853   unsigned int offset;
8854
8855   if (in_use == ranges_by_label_allocated)
8856     {
8857       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
8858       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
8859                                        ranges_by_label,
8860                                        ranges_by_label_allocated);
8861       memset (ranges_by_label + ranges_by_label_in_use, 0,
8862               RANGES_TABLE_INCREMENT
8863               * sizeof (struct dw_ranges_by_label_struct));
8864     }
8865
8866   ranges_by_label[in_use].begin = begin;
8867   ranges_by_label[in_use].end = end;
8868   ranges_by_label_in_use = in_use + 1;
8869
8870   offset = add_ranges_num (-(int)in_use - 1);
8871   if (!*added)
8872     {
8873       add_AT_range_list (die, DW_AT_ranges, offset);
8874       *added = true;
8875     }
8876 }
8877
8878 static void
8879 output_ranges (void)
8880 {
8881   unsigned i;
8882   static const char *const start_fmt = "Offset %#x";
8883   const char *fmt = start_fmt;
8884
8885   for (i = 0; i < ranges_table_in_use; i++)
8886     {
8887       int block_num = ranges_table[i].num;
8888
8889       if (block_num > 0)
8890         {
8891           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
8892           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
8893
8894           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
8895           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
8896
8897           /* If all code is in the text section, then the compilation
8898              unit base address defaults to DW_AT_low_pc, which is the
8899              base of the text section.  */
8900           if (!have_multiple_function_sections)
8901             {
8902               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
8903                                     text_section_label,
8904                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
8905               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
8906                                     text_section_label, NULL);
8907             }
8908
8909           /* Otherwise, the compilation unit base address is zero,
8910              which allows us to use absolute addresses, and not worry
8911              about whether the target supports cross-section
8912              arithmetic.  */
8913           else
8914             {
8915               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
8916                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
8917               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
8918             }
8919
8920           fmt = NULL;
8921         }
8922
8923       /* Negative block_num stands for an index into ranges_by_label.  */
8924       else if (block_num < 0)
8925         {
8926           int lab_idx = - block_num - 1;
8927
8928           if (!have_multiple_function_sections)
8929             {
8930               gcc_unreachable ();
8931 #if 0
8932               /* If we ever use add_ranges_by_labels () for a single
8933                  function section, all we have to do is to take out
8934                  the #if 0 above.  */
8935               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8936                                     ranges_by_label[lab_idx].begin,
8937                                     text_section_label,
8938                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
8939               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8940                                     ranges_by_label[lab_idx].end,
8941                                     text_section_label, NULL);
8942 #endif
8943             }
8944           else
8945             {
8946               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8947                                    ranges_by_label[lab_idx].begin,
8948                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
8949               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8950                                    ranges_by_label[lab_idx].end,
8951                                    NULL);
8952             }
8953         }
8954       else
8955         {
8956           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8957           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8958           fmt = start_fmt;
8959         }
8960     }
8961 }
8962
8963 /* Data structure containing information about input files.  */
8964 struct file_info
8965 {
8966   const char *path;     /* Complete file name.  */
8967   const char *fname;    /* File name part.  */
8968   int length;           /* Length of entire string.  */
8969   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
8970   int dir_idx;          /* Index in directory table.  */
8971 };
8972
8973 /* Data structure containing information about directories with source
8974    files.  */
8975 struct dir_info
8976 {
8977   const char *path;     /* Path including directory name.  */
8978   int length;           /* Path length.  */
8979   int prefix;           /* Index of directory entry which is a prefix.  */
8980   int count;            /* Number of files in this directory.  */
8981   int dir_idx;          /* Index of directory used as base.  */
8982 };
8983
8984 /* Callback function for file_info comparison.  We sort by looking at
8985    the directories in the path.  */
8986
8987 static int
8988 file_info_cmp (const void *p1, const void *p2)
8989 {
8990   const struct file_info *const s1 = (const struct file_info *) p1;
8991   const struct file_info *const s2 = (const struct file_info *) p2;
8992   const unsigned char *cp1;
8993   const unsigned char *cp2;
8994
8995   /* Take care of file names without directories.  We need to make sure that
8996      we return consistent values to qsort since some will get confused if
8997      we return the same value when identical operands are passed in opposite
8998      orders.  So if neither has a directory, return 0 and otherwise return
8999      1 or -1 depending on which one has the directory.  */
9000   if ((s1->path == s1->fname || s2->path == s2->fname))
9001     return (s2->path == s2->fname) - (s1->path == s1->fname);
9002
9003   cp1 = (const unsigned char *) s1->path;
9004   cp2 = (const unsigned char *) s2->path;
9005
9006   while (1)
9007     {
9008       ++cp1;
9009       ++cp2;
9010       /* Reached the end of the first path?  If so, handle like above.  */
9011       if ((cp1 == (const unsigned char *) s1->fname)
9012           || (cp2 == (const unsigned char *) s2->fname))
9013         return ((cp2 == (const unsigned char *) s2->fname)
9014                 - (cp1 == (const unsigned char *) s1->fname));
9015
9016       /* Character of current path component the same?  */
9017       else if (*cp1 != *cp2)
9018         return *cp1 - *cp2;
9019     }
9020 }
9021
9022 struct file_name_acquire_data
9023 {
9024   struct file_info *files;
9025   int used_files;
9026   int max_files;
9027 };
9028
9029 /* Traversal function for the hash table.  */
9030
9031 static int
9032 file_name_acquire (void ** slot, void *data)
9033 {
9034   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
9035   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
9036   struct file_info *fi;
9037   const char *f;
9038
9039   gcc_assert (fnad->max_files >= d->emitted_number);
9040
9041   if (! d->emitted_number)
9042     return 1;
9043
9044   gcc_assert (fnad->max_files != fnad->used_files);
9045
9046   fi = fnad->files + fnad->used_files++;
9047
9048   /* Skip all leading "./".  */
9049   f = d->filename;
9050   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9051     f += 2;
9052
9053   /* Create a new array entry.  */
9054   fi->path = f;
9055   fi->length = strlen (f);
9056   fi->file_idx = d;
9057
9058   /* Search for the file name part.  */
9059   f = strrchr (f, DIR_SEPARATOR);
9060 #if defined (DIR_SEPARATOR_2)
9061   {
9062     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9063
9064     if (g != NULL)
9065       {
9066         if (f == NULL || f < g)
9067           f = g;
9068       }
9069   }
9070 #endif
9071
9072   fi->fname = f == NULL ? fi->path : f + 1;
9073   return 1;
9074 }
9075
9076 /* Output the directory table and the file name table.  We try to minimize
9077    the total amount of memory needed.  A heuristic is used to avoid large
9078    slowdowns with many input files.  */
9079
9080 static void
9081 output_file_names (void)
9082 {
9083   struct file_name_acquire_data fnad;
9084   int numfiles;
9085   struct file_info *files;
9086   struct dir_info *dirs;
9087   int *saved;
9088   int *savehere;
9089   int *backmap;
9090   int ndirs;
9091   int idx_offset;
9092   int i;
9093
9094   if (!last_emitted_file)
9095     {
9096       dw2_asm_output_data (1, 0, "End directory table");
9097       dw2_asm_output_data (1, 0, "End file name table");
9098       return;
9099     }
9100
9101   numfiles = last_emitted_file->emitted_number;
9102
9103   /* Allocate the various arrays we need.  */
9104   files = XALLOCAVEC (struct file_info, numfiles);
9105   dirs = XALLOCAVEC (struct dir_info, numfiles);
9106
9107   fnad.files = files;
9108   fnad.used_files = 0;
9109   fnad.max_files = numfiles;
9110   htab_traverse (file_table, file_name_acquire, &fnad);
9111   gcc_assert (fnad.used_files == fnad.max_files);
9112
9113   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9114
9115   /* Find all the different directories used.  */
9116   dirs[0].path = files[0].path;
9117   dirs[0].length = files[0].fname - files[0].path;
9118   dirs[0].prefix = -1;
9119   dirs[0].count = 1;
9120   dirs[0].dir_idx = 0;
9121   files[0].dir_idx = 0;
9122   ndirs = 1;
9123
9124   for (i = 1; i < numfiles; i++)
9125     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
9126         && memcmp (dirs[ndirs - 1].path, files[i].path,
9127                    dirs[ndirs - 1].length) == 0)
9128       {
9129         /* Same directory as last entry.  */
9130         files[i].dir_idx = ndirs - 1;
9131         ++dirs[ndirs - 1].count;
9132       }
9133     else
9134       {
9135         int j;
9136
9137         /* This is a new directory.  */
9138         dirs[ndirs].path = files[i].path;
9139         dirs[ndirs].length = files[i].fname - files[i].path;
9140         dirs[ndirs].count = 1;
9141         dirs[ndirs].dir_idx = ndirs;
9142         files[i].dir_idx = ndirs;
9143
9144         /* Search for a prefix.  */
9145         dirs[ndirs].prefix = -1;
9146         for (j = 0; j < ndirs; j++)
9147           if (dirs[j].length < dirs[ndirs].length
9148               && dirs[j].length > 1
9149               && (dirs[ndirs].prefix == -1
9150                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
9151               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
9152             dirs[ndirs].prefix = j;
9153
9154         ++ndirs;
9155       }
9156
9157   /* Now to the actual work.  We have to find a subset of the directories which
9158      allow expressing the file name using references to the directory table
9159      with the least amount of characters.  We do not do an exhaustive search
9160      where we would have to check out every combination of every single
9161      possible prefix.  Instead we use a heuristic which provides nearly optimal
9162      results in most cases and never is much off.  */
9163   saved = XALLOCAVEC (int, ndirs);
9164   savehere = XALLOCAVEC (int, ndirs);
9165
9166   memset (saved, '\0', ndirs * sizeof (saved[0]));
9167   for (i = 0; i < ndirs; i++)
9168     {
9169       int j;
9170       int total;
9171
9172       /* We can always save some space for the current directory.  But this
9173          does not mean it will be enough to justify adding the directory.  */
9174       savehere[i] = dirs[i].length;
9175       total = (savehere[i] - saved[i]) * dirs[i].count;
9176
9177       for (j = i + 1; j < ndirs; j++)
9178         {
9179           savehere[j] = 0;
9180           if (saved[j] < dirs[i].length)
9181             {
9182               /* Determine whether the dirs[i] path is a prefix of the
9183                  dirs[j] path.  */
9184               int k;
9185
9186               k = dirs[j].prefix;
9187               while (k != -1 && k != (int) i)
9188                 k = dirs[k].prefix;
9189
9190               if (k == (int) i)
9191                 {
9192                   /* Yes it is.  We can possibly save some memory by
9193                      writing the filenames in dirs[j] relative to
9194                      dirs[i].  */
9195                   savehere[j] = dirs[i].length;
9196                   total += (savehere[j] - saved[j]) * dirs[j].count;
9197                 }
9198             }
9199         }
9200
9201       /* Check whether we can save enough to justify adding the dirs[i]
9202          directory.  */
9203       if (total > dirs[i].length + 1)
9204         {
9205           /* It's worthwhile adding.  */
9206           for (j = i; j < ndirs; j++)
9207             if (savehere[j] > 0)
9208               {
9209                 /* Remember how much we saved for this directory so far.  */
9210                 saved[j] = savehere[j];
9211
9212                 /* Remember the prefix directory.  */
9213                 dirs[j].dir_idx = i;
9214               }
9215         }
9216     }
9217
9218   /* Emit the directory name table.  */
9219   idx_offset = dirs[0].length > 0 ? 1 : 0;
9220   for (i = 1 - idx_offset; i < ndirs; i++)
9221     dw2_asm_output_nstring (dirs[i].path,
9222                             dirs[i].length
9223                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
9224                             "Directory Entry: %#x", i + idx_offset);
9225
9226   dw2_asm_output_data (1, 0, "End directory table");
9227
9228   /* We have to emit them in the order of emitted_number since that's
9229      used in the debug info generation.  To do this efficiently we
9230      generate a back-mapping of the indices first.  */
9231   backmap = XALLOCAVEC (int, numfiles);
9232   for (i = 0; i < numfiles; i++)
9233     backmap[files[i].file_idx->emitted_number - 1] = i;
9234
9235   /* Now write all the file names.  */
9236   for (i = 0; i < numfiles; i++)
9237     {
9238       int file_idx = backmap[i];
9239       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
9240
9241 #ifdef VMS_DEBUGGING_INFO
9242 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
9243
9244       /* Setting these fields can lead to debugger miscomparisons,
9245          but VMS Debug requires them to be set correctly.  */
9246
9247       int ver;
9248       long long cdt;
9249       long siz;
9250       int maxfilelen = strlen (files[file_idx].path)
9251                                + dirs[dir_idx].length
9252                                + MAX_VMS_VERSION_LEN + 1;
9253       char *filebuf = XALLOCAVEC (char, maxfilelen);
9254
9255       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
9256       snprintf (filebuf, maxfilelen, "%s;%d",
9257                 files[file_idx].path + dirs[dir_idx].length, ver);
9258
9259       dw2_asm_output_nstring
9260         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
9261
9262       /* Include directory index.  */
9263       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9264
9265       /* Modification time.  */
9266       dw2_asm_output_data_uleb128
9267         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
9268           ? cdt : 0,
9269          NULL);
9270
9271       /* File length in bytes.  */
9272       dw2_asm_output_data_uleb128
9273         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
9274           ? siz : 0,
9275          NULL);
9276 #else
9277       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
9278                               "File Entry: %#x", (unsigned) i + 1);
9279
9280       /* Include directory index.  */
9281       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9282
9283       /* Modification time.  */
9284       dw2_asm_output_data_uleb128 (0, NULL);
9285
9286       /* File length in bytes.  */
9287       dw2_asm_output_data_uleb128 (0, NULL);
9288 #endif /* VMS_DEBUGGING_INFO */
9289     }
9290
9291   dw2_asm_output_data (1, 0, "End file name table");
9292 }
9293
9294
9295 /* Output one line number table into the .debug_line section.  */
9296
9297 static void
9298 output_one_line_info_table (dw_line_info_table *table)
9299 {
9300   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
9301   unsigned int current_line = 1;
9302   bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
9303   dw_line_info_entry *ent;
9304   size_t i;
9305
9306   FOR_EACH_VEC_ELT (dw_line_info_entry, table->entries, i, ent)
9307     {
9308       switch (ent->opcode)
9309         {
9310         case LI_set_address:
9311           /* ??? Unfortunately, we have little choice here currently, and
9312              must always use the most general form.  GCC does not know the
9313              address delta itself, so we can't use DW_LNS_advance_pc.  Many
9314              ports do have length attributes which will give an upper bound
9315              on the address range.  We could perhaps use length attributes
9316              to determine when it is safe to use DW_LNS_fixed_advance_pc.  */
9317           ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
9318
9319           /* This can handle any delta.  This takes
9320              4+DWARF2_ADDR_SIZE bytes.  */
9321           dw2_asm_output_data (1, 0, "set address %s", line_label);
9322           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9323           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9324           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9325           break;
9326
9327         case LI_set_line:
9328           if (ent->val == current_line)
9329             {
9330               /* We still need to start a new row, so output a copy insn.  */
9331               dw2_asm_output_data (1, DW_LNS_copy,
9332                                    "copy line %u", current_line);
9333             }
9334           else
9335             {
9336               int line_offset = ent->val - current_line;
9337               int line_delta = line_offset - DWARF_LINE_BASE;
9338
9339               current_line = ent->val;
9340               if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9341                 {
9342                   /* This can handle deltas from -10 to 234, using the current
9343                      definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
9344                      This takes 1 byte.  */
9345                   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9346                                        "line %u", current_line);
9347                 }
9348               else
9349                 {
9350                   /* This can handle any delta.  This takes at least 4 bytes,
9351                      depending on the value being encoded.  */
9352                   dw2_asm_output_data (1, DW_LNS_advance_line,
9353                                        "advance to line %u", current_line);
9354                   dw2_asm_output_data_sleb128 (line_offset, NULL);
9355                   dw2_asm_output_data (1, DW_LNS_copy, NULL);
9356                 }
9357             }
9358           break;
9359
9360         case LI_set_file:
9361           dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
9362           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9363           break;
9364
9365         case LI_set_column:
9366           dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
9367           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9368           break;
9369
9370         case LI_negate_stmt:
9371           current_is_stmt = !current_is_stmt;
9372           dw2_asm_output_data (1, DW_LNS_negate_stmt,
9373                                "is_stmt %d", current_is_stmt);
9374           break;
9375
9376         case LI_set_prologue_end:
9377           dw2_asm_output_data (1, DW_LNS_set_prologue_end,
9378                                "set prologue end");
9379           break;
9380           
9381         case LI_set_epilogue_begin:
9382           dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
9383                                "set epilogue begin");
9384           break;
9385
9386         case LI_set_discriminator:
9387           dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
9388           dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
9389           dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
9390           dw2_asm_output_data_uleb128 (ent->val, NULL);
9391           break;
9392         }
9393     }
9394
9395   /* Emit debug info for the address of the end of the table.  */
9396   dw2_asm_output_data (1, 0, "set address %s", table->end_label);
9397   dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9398   dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9399   dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
9400
9401   dw2_asm_output_data (1, 0, "end sequence");
9402   dw2_asm_output_data_uleb128 (1, NULL);
9403   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
9404 }
9405
9406 /* Output the source line number correspondence information.  This
9407    information goes into the .debug_line section.  */
9408
9409 static void
9410 output_line_info (void)
9411 {
9412   char l1[20], l2[20], p1[20], p2[20];
9413   int ver = dwarf_version;
9414   bool saw_one = false;
9415   int opc;
9416
9417   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
9418   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
9419   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
9420   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
9421
9422   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9423     dw2_asm_output_data (4, 0xffffffff,
9424       "Initial length escape value indicating 64-bit DWARF extension");
9425   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
9426                         "Length of Source Line Info");
9427   ASM_OUTPUT_LABEL (asm_out_file, l1);
9428
9429   dw2_asm_output_data (2, ver, "DWARF Version");
9430   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
9431   ASM_OUTPUT_LABEL (asm_out_file, p1);
9432
9433   /* Define the architecture-dependent minimum instruction length (in bytes).
9434      In this implementation of DWARF, this field is used for information
9435      purposes only.  Since GCC generates assembly language, we have no
9436      a priori knowledge of how many instruction bytes are generated for each
9437      source line, and therefore can use only the DW_LNE_set_address and
9438      DW_LNS_fixed_advance_pc line information commands.  Accordingly, we fix
9439      this as '1', which is "correct enough" for all architectures,
9440      and don't let the target override.  */
9441   dw2_asm_output_data (1, 1, "Minimum Instruction Length");
9442
9443   if (ver >= 4)
9444     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
9445                          "Maximum Operations Per Instruction");
9446   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
9447                        "Default is_stmt_start flag");
9448   dw2_asm_output_data (1, DWARF_LINE_BASE,
9449                        "Line Base Value (Special Opcodes)");
9450   dw2_asm_output_data (1, DWARF_LINE_RANGE,
9451                        "Line Range Value (Special Opcodes)");
9452   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
9453                        "Special Opcode Base");
9454
9455   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
9456     {
9457       int n_op_args;
9458       switch (opc)
9459         {
9460         case DW_LNS_advance_pc:
9461         case DW_LNS_advance_line:
9462         case DW_LNS_set_file:
9463         case DW_LNS_set_column:
9464         case DW_LNS_fixed_advance_pc:
9465         case DW_LNS_set_isa:
9466           n_op_args = 1;
9467           break;
9468         default:
9469           n_op_args = 0;
9470           break;
9471         }
9472
9473       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
9474                            opc, n_op_args);
9475     }
9476
9477   /* Write out the information about the files we use.  */
9478   output_file_names ();
9479   ASM_OUTPUT_LABEL (asm_out_file, p2);
9480
9481   if (separate_line_info)
9482     {
9483       dw_line_info_table *table;
9484       size_t i;
9485
9486       FOR_EACH_VEC_ELT (dw_line_info_table_p, separate_line_info, i, table)
9487         if (table->in_use)
9488           {
9489             output_one_line_info_table (table);
9490             saw_one = true;
9491           }
9492     }
9493   if (cold_text_section_line_info && cold_text_section_line_info->in_use)
9494     {
9495       output_one_line_info_table (cold_text_section_line_info);
9496       saw_one = true;
9497     }
9498
9499   /* ??? Some Darwin linkers crash on a .debug_line section with no
9500      sequences.  Further, merely a DW_LNE_end_sequence entry is not
9501      sufficient -- the address column must also be initialized.
9502      Make sure to output at least one set_address/end_sequence pair,
9503      choosing .text since that section is always present.  */
9504   if (text_section_line_info->in_use || !saw_one)
9505     output_one_line_info_table (text_section_line_info);
9506
9507   /* Output the marker for the end of the line number info.  */
9508   ASM_OUTPUT_LABEL (asm_out_file, l2);
9509 }
9510 \f
9511 /* Given a pointer to a tree node for some base type, return a pointer to
9512    a DIE that describes the given type.
9513
9514    This routine must only be called for GCC type nodes that correspond to
9515    Dwarf base (fundamental) types.  */
9516
9517 static dw_die_ref
9518 base_type_die (tree type)
9519 {
9520   dw_die_ref base_type_result;
9521   enum dwarf_type encoding;
9522
9523   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
9524     return 0;
9525
9526   /* If this is a subtype that should not be emitted as a subrange type,
9527      use the base type.  See subrange_type_for_debug_p.  */
9528   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
9529     type = TREE_TYPE (type);
9530
9531   switch (TREE_CODE (type))
9532     {
9533     case INTEGER_TYPE:
9534       if ((dwarf_version >= 4 || !dwarf_strict)
9535           && TYPE_NAME (type)
9536           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9537           && DECL_IS_BUILTIN (TYPE_NAME (type))
9538           && DECL_NAME (TYPE_NAME (type)))
9539         {
9540           const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
9541           if (strcmp (name, "char16_t") == 0
9542               || strcmp (name, "char32_t") == 0)
9543             {
9544               encoding = DW_ATE_UTF;
9545               break;
9546             }
9547         }
9548       if (TYPE_STRING_FLAG (type))
9549         {
9550           if (TYPE_UNSIGNED (type))
9551             encoding = DW_ATE_unsigned_char;
9552           else
9553             encoding = DW_ATE_signed_char;
9554         }
9555       else if (TYPE_UNSIGNED (type))
9556         encoding = DW_ATE_unsigned;
9557       else
9558         encoding = DW_ATE_signed;
9559       break;
9560
9561     case REAL_TYPE:
9562       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
9563         {
9564           if (dwarf_version >= 3 || !dwarf_strict)
9565             encoding = DW_ATE_decimal_float;
9566           else
9567             encoding = DW_ATE_lo_user;
9568         }
9569       else
9570         encoding = DW_ATE_float;
9571       break;
9572
9573     case FIXED_POINT_TYPE:
9574       if (!(dwarf_version >= 3 || !dwarf_strict))
9575         encoding = DW_ATE_lo_user;
9576       else if (TYPE_UNSIGNED (type))
9577         encoding = DW_ATE_unsigned_fixed;
9578       else
9579         encoding = DW_ATE_signed_fixed;
9580       break;
9581
9582       /* Dwarf2 doesn't know anything about complex ints, so use
9583          a user defined type for it.  */
9584     case COMPLEX_TYPE:
9585       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
9586         encoding = DW_ATE_complex_float;
9587       else
9588         encoding = DW_ATE_lo_user;
9589       break;
9590
9591     case BOOLEAN_TYPE:
9592       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
9593       encoding = DW_ATE_boolean;
9594       break;
9595
9596     default:
9597       /* No other TREE_CODEs are Dwarf fundamental types.  */
9598       gcc_unreachable ();
9599     }
9600
9601   base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
9602
9603   add_AT_unsigned (base_type_result, DW_AT_byte_size,
9604                    int_size_in_bytes (type));
9605   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
9606
9607   return base_type_result;
9608 }
9609
9610 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
9611    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
9612
9613 static inline int
9614 is_base_type (tree type)
9615 {
9616   switch (TREE_CODE (type))
9617     {
9618     case ERROR_MARK:
9619     case VOID_TYPE:
9620     case INTEGER_TYPE:
9621     case REAL_TYPE:
9622     case FIXED_POINT_TYPE:
9623     case COMPLEX_TYPE:
9624     case BOOLEAN_TYPE:
9625       return 1;
9626
9627     case ARRAY_TYPE:
9628     case RECORD_TYPE:
9629     case UNION_TYPE:
9630     case QUAL_UNION_TYPE:
9631     case ENUMERAL_TYPE:
9632     case FUNCTION_TYPE:
9633     case METHOD_TYPE:
9634     case POINTER_TYPE:
9635     case REFERENCE_TYPE:
9636     case NULLPTR_TYPE:
9637     case OFFSET_TYPE:
9638     case LANG_TYPE:
9639     case VECTOR_TYPE:
9640       return 0;
9641
9642     default:
9643       gcc_unreachable ();
9644     }
9645
9646   return 0;
9647 }
9648
9649 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
9650    node, return the size in bits for the type if it is a constant, or else
9651    return the alignment for the type if the type's size is not constant, or
9652    else return BITS_PER_WORD if the type actually turns out to be an
9653    ERROR_MARK node.  */
9654
9655 static inline unsigned HOST_WIDE_INT
9656 simple_type_size_in_bits (const_tree type)
9657 {
9658   if (TREE_CODE (type) == ERROR_MARK)
9659     return BITS_PER_WORD;
9660   else if (TYPE_SIZE (type) == NULL_TREE)
9661     return 0;
9662   else if (host_integerp (TYPE_SIZE (type), 1))
9663     return tree_low_cst (TYPE_SIZE (type), 1);
9664   else
9665     return TYPE_ALIGN (type);
9666 }
9667
9668 /* Similarly, but return a double_int instead of UHWI.  */
9669
9670 static inline double_int
9671 double_int_type_size_in_bits (const_tree type)
9672 {
9673   if (TREE_CODE (type) == ERROR_MARK)
9674     return uhwi_to_double_int (BITS_PER_WORD);
9675   else if (TYPE_SIZE (type) == NULL_TREE)
9676     return double_int_zero;
9677   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
9678     return tree_to_double_int (TYPE_SIZE (type));
9679   else
9680     return uhwi_to_double_int (TYPE_ALIGN (type));
9681 }
9682
9683 /*  Given a pointer to a tree node for a subrange type, return a pointer
9684     to a DIE that describes the given type.  */
9685
9686 static dw_die_ref
9687 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
9688 {
9689   dw_die_ref subrange_die;
9690   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
9691
9692   if (context_die == NULL)
9693     context_die = comp_unit_die ();
9694
9695   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
9696
9697   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
9698     {
9699       /* The size of the subrange type and its base type do not match,
9700          so we need to generate a size attribute for the subrange type.  */
9701       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
9702     }
9703
9704   if (low)
9705     add_bound_info (subrange_die, DW_AT_lower_bound, low);
9706   if (high)
9707     add_bound_info (subrange_die, DW_AT_upper_bound, high);
9708
9709   return subrange_die;
9710 }
9711
9712 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
9713    entry that chains various modifiers in front of the given type.  */
9714
9715 static dw_die_ref
9716 modified_type_die (tree type, int is_const_type, int is_volatile_type,
9717                    dw_die_ref context_die)
9718 {
9719   enum tree_code code = TREE_CODE (type);
9720   dw_die_ref mod_type_die;
9721   dw_die_ref sub_die = NULL;
9722   tree item_type = NULL;
9723   tree qualified_type;
9724   tree name, low, high;
9725
9726   if (code == ERROR_MARK)
9727     return NULL;
9728
9729   /* See if we already have the appropriately qualified variant of
9730      this type.  */
9731   qualified_type
9732     = get_qualified_type (type,
9733                           ((is_const_type ? TYPE_QUAL_CONST : 0)
9734                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
9735
9736   if (qualified_type == sizetype
9737       && TYPE_NAME (qualified_type)
9738       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
9739     {
9740       tree t = TREE_TYPE (TYPE_NAME (qualified_type));
9741
9742       gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
9743                            && TYPE_PRECISION (t)
9744                            == TYPE_PRECISION (qualified_type)
9745                            && TYPE_UNSIGNED (t)
9746                            == TYPE_UNSIGNED (qualified_type));
9747       qualified_type = t;
9748     }
9749
9750   /* If we do, then we can just use its DIE, if it exists.  */
9751   if (qualified_type)
9752     {
9753       mod_type_die = lookup_type_die (qualified_type);
9754       if (mod_type_die)
9755         return mod_type_die;
9756     }
9757
9758   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
9759
9760   /* Handle C typedef types.  */
9761   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
9762       && !DECL_ARTIFICIAL (name))
9763     {
9764       tree dtype = TREE_TYPE (name);
9765
9766       if (qualified_type == dtype)
9767         {
9768           /* For a named type, use the typedef.  */
9769           gen_type_die (qualified_type, context_die);
9770           return lookup_type_die (qualified_type);
9771         }
9772       else if (is_const_type < TYPE_READONLY (dtype)
9773                || is_volatile_type < TYPE_VOLATILE (dtype)
9774                || (is_const_type <= TYPE_READONLY (dtype)
9775                    && is_volatile_type <= TYPE_VOLATILE (dtype)
9776                    && DECL_ORIGINAL_TYPE (name) != type))
9777         /* cv-unqualified version of named type.  Just use the unnamed
9778            type to which it refers.  */
9779         return modified_type_die (DECL_ORIGINAL_TYPE (name),
9780                                   is_const_type, is_volatile_type,
9781                                   context_die);
9782       /* Else cv-qualified version of named type; fall through.  */
9783     }
9784
9785   if (is_const_type
9786       /* If both is_const_type and is_volatile_type, prefer the path
9787          which leads to a qualified type.  */
9788       && (!is_volatile_type
9789           || get_qualified_type (type, TYPE_QUAL_CONST) == NULL_TREE
9790           || get_qualified_type (type, TYPE_QUAL_VOLATILE) != NULL_TREE))
9791     {
9792       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die (), type);
9793       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
9794     }
9795   else if (is_volatile_type)
9796     {
9797       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die (), type);
9798       sub_die = modified_type_die (type, is_const_type, 0, context_die);
9799     }
9800   else if (code == POINTER_TYPE)
9801     {
9802       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die (), type);
9803       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9804                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
9805       item_type = TREE_TYPE (type);
9806       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9807         add_AT_unsigned (mod_type_die, DW_AT_address_class,
9808                          TYPE_ADDR_SPACE (item_type));
9809     }
9810   else if (code == REFERENCE_TYPE)
9811     {
9812       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
9813         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die (),
9814                                 type);
9815       else
9816         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die (), type);
9817       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9818                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
9819       item_type = TREE_TYPE (type);
9820       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9821         add_AT_unsigned (mod_type_die, DW_AT_address_class,
9822                          TYPE_ADDR_SPACE (item_type));
9823     }
9824   else if (code == INTEGER_TYPE
9825            && TREE_TYPE (type) != NULL_TREE
9826            && subrange_type_for_debug_p (type, &low, &high))
9827     {
9828       mod_type_die = subrange_type_die (type, low, high, context_die);
9829       item_type = TREE_TYPE (type);
9830     }
9831   else if (is_base_type (type))
9832     mod_type_die = base_type_die (type);
9833   else
9834     {
9835       gen_type_die (type, context_die);
9836
9837       /* We have to get the type_main_variant here (and pass that to the
9838          `lookup_type_die' routine) because the ..._TYPE node we have
9839          might simply be a *copy* of some original type node (where the
9840          copy was created to help us keep track of typedef names) and
9841          that copy might have a different TYPE_UID from the original
9842          ..._TYPE node.  */
9843       if (TREE_CODE (type) != VECTOR_TYPE)
9844         return lookup_type_die (type_main_variant (type));
9845       else
9846         /* Vectors have the debugging information in the type,
9847            not the main variant.  */
9848         return lookup_type_die (type);
9849     }
9850
9851   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
9852      don't output a DW_TAG_typedef, since there isn't one in the
9853      user's program; just attach a DW_AT_name to the type.
9854      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
9855      if the base type already has the same name.  */
9856   if (name
9857       && ((TREE_CODE (name) != TYPE_DECL
9858            && (qualified_type == TYPE_MAIN_VARIANT (type)
9859                || (!is_const_type && !is_volatile_type)))
9860           || (TREE_CODE (name) == TYPE_DECL
9861               && TREE_TYPE (name) == qualified_type
9862               && DECL_NAME (name))))
9863     {
9864       if (TREE_CODE (name) == TYPE_DECL)
9865         /* Could just call add_name_and_src_coords_attributes here,
9866            but since this is a builtin type it doesn't have any
9867            useful source coordinates anyway.  */
9868         name = DECL_NAME (name);
9869       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
9870       add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
9871       if (TYPE_ARTIFICIAL (type))
9872         add_AT_flag (mod_type_die, DW_AT_artificial, 1);
9873     }
9874   /* This probably indicates a bug.  */
9875   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
9876     {
9877       name = TYPE_NAME (type);
9878       if (name
9879           && TREE_CODE (name) == TYPE_DECL)
9880         name = DECL_NAME (name);
9881       add_name_attribute (mod_type_die,
9882                           name ? IDENTIFIER_POINTER (name) : "__unknown__");
9883     }
9884
9885   if (qualified_type)
9886     equate_type_number_to_die (qualified_type, mod_type_die);
9887
9888   if (item_type)
9889     /* We must do this after the equate_type_number_to_die call, in case
9890        this is a recursive type.  This ensures that the modified_type_die
9891        recursion will terminate even if the type is recursive.  Recursive
9892        types are possible in Ada.  */
9893     sub_die = modified_type_die (item_type,
9894                                  TYPE_READONLY (item_type),
9895                                  TYPE_VOLATILE (item_type),
9896                                  context_die);
9897
9898   if (sub_die != NULL)
9899     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
9900
9901   return mod_type_die;
9902 }
9903
9904 /* Generate DIEs for the generic parameters of T.
9905    T must be either a generic type or a generic function.
9906    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
9907
9908 static void
9909 gen_generic_params_dies (tree t)
9910 {
9911   tree parms, args;
9912   int parms_num, i;
9913   dw_die_ref die = NULL;
9914
9915   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
9916     return;
9917
9918   if (TYPE_P (t))
9919     die = lookup_type_die (t);
9920   else if (DECL_P (t))
9921     die = lookup_decl_die (t);
9922
9923   gcc_assert (die);
9924
9925   parms = lang_hooks.get_innermost_generic_parms (t);
9926   if (!parms)
9927     /* T has no generic parameter. It means T is neither a generic type
9928        or function. End of story.  */
9929     return;
9930
9931   parms_num = TREE_VEC_LENGTH (parms);
9932   args = lang_hooks.get_innermost_generic_args (t);
9933   for (i = 0; i < parms_num; i++)
9934     {
9935       tree parm, arg, arg_pack_elems;
9936
9937       parm = TREE_VEC_ELT (parms, i);
9938       arg = TREE_VEC_ELT (args, i);
9939       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
9940       gcc_assert (parm && TREE_VALUE (parm) && arg);
9941
9942       if (parm && TREE_VALUE (parm) && arg)
9943         {
9944           /* If PARM represents a template parameter pack,
9945              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
9946              by DW_TAG_template_*_parameter DIEs for the argument
9947              pack elements of ARG. Note that ARG would then be
9948              an argument pack.  */
9949           if (arg_pack_elems)
9950             template_parameter_pack_die (TREE_VALUE (parm),
9951                                          arg_pack_elems,
9952                                          die);
9953           else
9954             generic_parameter_die (TREE_VALUE (parm), arg,
9955                                    true /* Emit DW_AT_name */, die);
9956         }
9957     }
9958 }
9959
9960 /* Create and return a DIE for PARM which should be
9961    the representation of a generic type parameter.
9962    For instance, in the C++ front end, PARM would be a template parameter.
9963    ARG is the argument to PARM.
9964    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
9965    name of the PARM.
9966    PARENT_DIE is the parent DIE which the new created DIE should be added to,
9967    as a child node.  */
9968
9969 static dw_die_ref
9970 generic_parameter_die (tree parm, tree arg,
9971                        bool emit_name_p,
9972                        dw_die_ref parent_die)
9973 {
9974   dw_die_ref tmpl_die = NULL;
9975   const char *name = NULL;
9976
9977   if (!parm || !DECL_NAME (parm) || !arg)
9978     return NULL;
9979
9980   /* We support non-type generic parameters and arguments,
9981      type generic parameters and arguments, as well as
9982      generic generic parameters (a.k.a. template template parameters in C++)
9983      and arguments.  */
9984   if (TREE_CODE (parm) == PARM_DECL)
9985     /* PARM is a nontype generic parameter  */
9986     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
9987   else if (TREE_CODE (parm) == TYPE_DECL)
9988     /* PARM is a type generic parameter.  */
9989     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
9990   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
9991     /* PARM is a generic generic parameter.
9992        Its DIE is a GNU extension. It shall have a
9993        DW_AT_name attribute to represent the name of the template template
9994        parameter, and a DW_AT_GNU_template_name attribute to represent the
9995        name of the template template argument.  */
9996     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
9997                         parent_die, parm);
9998   else
9999     gcc_unreachable ();
10000
10001   if (tmpl_die)
10002     {
10003       tree tmpl_type;
10004
10005       /* If PARM is a generic parameter pack, it means we are
10006          emitting debug info for a template argument pack element.
10007          In other terms, ARG is a template argument pack element.
10008          In that case, we don't emit any DW_AT_name attribute for
10009          the die.  */
10010       if (emit_name_p)
10011         {
10012           name = IDENTIFIER_POINTER (DECL_NAME (parm));
10013           gcc_assert (name);
10014           add_AT_string (tmpl_die, DW_AT_name, name);
10015         }
10016
10017       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10018         {
10019           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
10020              TMPL_DIE should have a child DW_AT_type attribute that is set
10021              to the type of the argument to PARM, which is ARG.
10022              If PARM is a type generic parameter, TMPL_DIE should have a
10023              child DW_AT_type that is set to ARG.  */
10024           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
10025           add_type_attribute (tmpl_die, tmpl_type, 0,
10026                               TREE_THIS_VOLATILE (tmpl_type),
10027                               parent_die);
10028         }
10029       else
10030         {
10031           /* So TMPL_DIE is a DIE representing a
10032              a generic generic template parameter, a.k.a template template
10033              parameter in C++ and arg is a template.  */
10034
10035           /* The DW_AT_GNU_template_name attribute of the DIE must be set
10036              to the name of the argument.  */
10037           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
10038           if (name)
10039             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
10040         }
10041
10042       if (TREE_CODE (parm) == PARM_DECL)
10043         /* So PARM is a non-type generic parameter.
10044            DWARF3 5.6.8 says we must set a DW_AT_const_value child
10045            attribute of TMPL_DIE which value represents the value
10046            of ARG.
10047            We must be careful here:
10048            The value of ARG might reference some function decls.
10049            We might currently be emitting debug info for a generic
10050            type and types are emitted before function decls, we don't
10051            know if the function decls referenced by ARG will actually be
10052            emitted after cgraph computations.
10053            So must defer the generation of the DW_AT_const_value to
10054            after cgraph is ready.  */
10055         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
10056     }
10057
10058   return tmpl_die;
10059 }
10060
10061 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
10062    PARM_PACK must be a template parameter pack. The returned DIE
10063    will be child DIE of PARENT_DIE.  */
10064
10065 static dw_die_ref
10066 template_parameter_pack_die (tree parm_pack,
10067                              tree parm_pack_args,
10068                              dw_die_ref parent_die)
10069 {
10070   dw_die_ref die;
10071   int j;
10072
10073   gcc_assert (parent_die && parm_pack);
10074
10075   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
10076   add_name_and_src_coords_attributes (die, parm_pack);
10077   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
10078     generic_parameter_die (parm_pack,
10079                            TREE_VEC_ELT (parm_pack_args, j),
10080                            false /* Don't emit DW_AT_name */,
10081                            die);
10082   return die;
10083 }
10084
10085 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
10086    an enumerated type.  */
10087
10088 static inline int
10089 type_is_enum (const_tree type)
10090 {
10091   return TREE_CODE (type) == ENUMERAL_TYPE;
10092 }
10093
10094 /* Return the DBX register number described by a given RTL node.  */
10095
10096 static unsigned int
10097 dbx_reg_number (const_rtx rtl)
10098 {
10099   unsigned regno = REGNO (rtl);
10100
10101   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
10102
10103 #ifdef LEAF_REG_REMAP
10104   if (current_function_uses_only_leaf_regs)
10105     {
10106       int leaf_reg = LEAF_REG_REMAP (regno);
10107       if (leaf_reg != -1)
10108         regno = (unsigned) leaf_reg;
10109     }
10110 #endif
10111
10112   return DBX_REGISTER_NUMBER (regno);
10113 }
10114
10115 /* Optionally add a DW_OP_piece term to a location description expression.
10116    DW_OP_piece is only added if the location description expression already
10117    doesn't end with DW_OP_piece.  */
10118
10119 static void
10120 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
10121 {
10122   dw_loc_descr_ref loc;
10123
10124   if (*list_head != NULL)
10125     {
10126       /* Find the end of the chain.  */
10127       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
10128         ;
10129
10130       if (loc->dw_loc_opc != DW_OP_piece)
10131         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
10132     }
10133 }
10134
10135 /* Return a location descriptor that designates a machine register or
10136    zero if there is none.  */
10137
10138 static dw_loc_descr_ref
10139 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
10140 {
10141   rtx regs;
10142
10143   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
10144     return 0;
10145
10146   /* We only use "frame base" when we're sure we're talking about the
10147      post-prologue local stack frame.  We do this by *not* running
10148      register elimination until this point, and recognizing the special
10149      argument pointer and soft frame pointer rtx's.
10150      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
10151   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
10152       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
10153     {
10154       dw_loc_descr_ref result = NULL;
10155
10156       if (dwarf_version >= 4 || !dwarf_strict)
10157         {
10158           result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
10159                                        initialized);
10160           if (result)
10161             add_loc_descr (&result,
10162                            new_loc_descr (DW_OP_stack_value, 0, 0));
10163         }
10164       return result;
10165     }
10166
10167   regs = targetm.dwarf_register_span (rtl);
10168
10169   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
10170     return multiple_reg_loc_descriptor (rtl, regs, initialized);
10171   else
10172     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
10173 }
10174
10175 /* Return a location descriptor that designates a machine register for
10176    a given hard register number.  */
10177
10178 static dw_loc_descr_ref
10179 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
10180 {
10181   dw_loc_descr_ref reg_loc_descr;
10182
10183   if (regno <= 31)
10184     reg_loc_descr
10185       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
10186   else
10187     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
10188
10189   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10190     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10191
10192   return reg_loc_descr;
10193 }
10194
10195 /* Given an RTL of a register, return a location descriptor that
10196    designates a value that spans more than one register.  */
10197
10198 static dw_loc_descr_ref
10199 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
10200                              enum var_init_status initialized)
10201 {
10202   int nregs, size, i;
10203   unsigned reg;
10204   dw_loc_descr_ref loc_result = NULL;
10205
10206   reg = REGNO (rtl);
10207 #ifdef LEAF_REG_REMAP
10208   if (current_function_uses_only_leaf_regs)
10209     {
10210       int leaf_reg = LEAF_REG_REMAP (reg);
10211       if (leaf_reg != -1)
10212         reg = (unsigned) leaf_reg;
10213     }
10214 #endif
10215   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
10216   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
10217
10218   /* Simple, contiguous registers.  */
10219   if (regs == NULL_RTX)
10220     {
10221       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
10222
10223       loc_result = NULL;
10224       while (nregs--)
10225         {
10226           dw_loc_descr_ref t;
10227
10228           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
10229                                       VAR_INIT_STATUS_INITIALIZED);
10230           add_loc_descr (&loc_result, t);
10231           add_loc_descr_op_piece (&loc_result, size);
10232           ++reg;
10233         }
10234       return loc_result;
10235     }
10236
10237   /* Now onto stupid register sets in non contiguous locations.  */
10238
10239   gcc_assert (GET_CODE (regs) == PARALLEL);
10240
10241   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10242   loc_result = NULL;
10243
10244   for (i = 0; i < XVECLEN (regs, 0); ++i)
10245     {
10246       dw_loc_descr_ref t;
10247
10248       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
10249                                   VAR_INIT_STATUS_INITIALIZED);
10250       add_loc_descr (&loc_result, t);
10251       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10252       add_loc_descr_op_piece (&loc_result, size);
10253     }
10254
10255   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10256     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10257   return loc_result;
10258 }
10259
10260 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
10261
10262 /* Return a location descriptor that designates a constant i,
10263    as a compound operation from constant (i >> shift), constant shift
10264    and DW_OP_shl.  */
10265
10266 static dw_loc_descr_ref
10267 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10268 {
10269   dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
10270   add_loc_descr (&ret, int_loc_descriptor (shift));
10271   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
10272   return ret;
10273 }
10274
10275 /* Return a location descriptor that designates a constant.  */
10276
10277 static dw_loc_descr_ref
10278 int_loc_descriptor (HOST_WIDE_INT i)
10279 {
10280   enum dwarf_location_atom op;
10281
10282   /* Pick the smallest representation of a constant, rather than just
10283      defaulting to the LEB encoding.  */
10284   if (i >= 0)
10285     {
10286       int clz = clz_hwi (i);
10287       int ctz = ctz_hwi (i);
10288       if (i <= 31)
10289         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
10290       else if (i <= 0xff)
10291         op = DW_OP_const1u;
10292       else if (i <= 0xffff)
10293         op = DW_OP_const2u;
10294       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10295                && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10296         /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
10297            DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
10298            while DW_OP_const4u is 5 bytes.  */
10299         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
10300       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10301                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10302         /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
10303            while DW_OP_const4u is 5 bytes.  */
10304         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10305       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10306         op = DW_OP_const4u;
10307       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10308                && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10309         /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
10310            while DW_OP_constu of constant >= 0x100000000 takes at least
10311            6 bytes.  */
10312         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10313       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10314                && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
10315                   >= HOST_BITS_PER_WIDE_INT)
10316         /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
10317            DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
10318            while DW_OP_constu takes in this case at least 6 bytes.  */
10319         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
10320       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10321                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10322                && size_of_uleb128 (i) > 6)
10323         /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes.  */
10324         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
10325       else
10326         op = DW_OP_constu;
10327     }
10328   else
10329     {
10330       if (i >= -0x80)
10331         op = DW_OP_const1s;
10332       else if (i >= -0x8000)
10333         op = DW_OP_const2s;
10334       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10335         {
10336           if (size_of_int_loc_descriptor (i) < 5)
10337             {
10338               dw_loc_descr_ref ret = int_loc_descriptor (-i);
10339               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10340               return ret;
10341             }
10342           op = DW_OP_const4s;
10343         }
10344       else
10345         {
10346           if (size_of_int_loc_descriptor (i)
10347               < (unsigned long) 1 + size_of_sleb128 (i))
10348             {
10349               dw_loc_descr_ref ret = int_loc_descriptor (-i);
10350               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10351               return ret;
10352             }
10353           op = DW_OP_consts;
10354         }
10355     }
10356
10357   return new_loc_descr (op, i, 0);
10358 }
10359
10360 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
10361    without actually allocating it.  */
10362
10363 static unsigned long
10364 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10365 {
10366   return size_of_int_loc_descriptor (i >> shift)
10367          + size_of_int_loc_descriptor (shift)
10368          + 1;
10369 }
10370
10371 /* Return size_of_locs (int_loc_descriptor (i)) without
10372    actually allocating it.  */
10373
10374 static unsigned long
10375 size_of_int_loc_descriptor (HOST_WIDE_INT i)
10376 {
10377   unsigned long s;
10378
10379   if (i >= 0)
10380     {
10381       int clz, ctz;
10382       if (i <= 31)
10383         return 1;
10384       else if (i <= 0xff)
10385         return 2;
10386       else if (i <= 0xffff)
10387         return 3;
10388       clz = clz_hwi (i);
10389       ctz = ctz_hwi (i);
10390       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10391           && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10392         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10393                                                     - clz - 5);
10394       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10395                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10396         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10397                                                     - clz - 8);
10398       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10399         return 5;
10400       s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
10401       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10402           && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10403         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10404                                                     - clz - 8);
10405       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10406                && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
10407         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10408                                                     - clz - 16);
10409       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10410                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10411                && s > 6)
10412         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10413                                                     - clz - 32);
10414       else
10415         return 1 + s;
10416     }
10417   else
10418     {
10419       if (i >= -0x80)
10420         return 2;
10421       else if (i >= -0x8000)
10422         return 3;
10423       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10424         {
10425           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10426             {
10427               s = size_of_int_loc_descriptor (-i) + 1;
10428               if (s < 5)
10429                 return s;
10430             }
10431           return 5;
10432         }
10433       else
10434         {
10435           unsigned long r = 1 + size_of_sleb128 (i);
10436           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10437             {
10438               s = size_of_int_loc_descriptor (-i) + 1;
10439               if (s < r)
10440                 return s;
10441             }
10442           return r;
10443         }
10444     }
10445 }
10446
10447 /* Return loc description representing "address" of integer value.
10448    This can appear only as toplevel expression.  */
10449
10450 static dw_loc_descr_ref
10451 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
10452 {
10453   int litsize;
10454   dw_loc_descr_ref loc_result = NULL;
10455
10456   if (!(dwarf_version >= 4 || !dwarf_strict))
10457     return NULL;
10458
10459   litsize = size_of_int_loc_descriptor (i);
10460   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
10461      is more compact.  For DW_OP_stack_value we need:
10462      litsize + 1 (DW_OP_stack_value)
10463      and for DW_OP_implicit_value:
10464      1 (DW_OP_implicit_value) + 1 (length) + size.  */
10465   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
10466     {
10467       loc_result = int_loc_descriptor (i);
10468       add_loc_descr (&loc_result,
10469                      new_loc_descr (DW_OP_stack_value, 0, 0));
10470       return loc_result;
10471     }
10472
10473   loc_result = new_loc_descr (DW_OP_implicit_value,
10474                               size, 0);
10475   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
10476   loc_result->dw_loc_oprnd2.v.val_int = i;
10477   return loc_result;
10478 }
10479
10480 /* Return a location descriptor that designates a base+offset location.  */
10481
10482 static dw_loc_descr_ref
10483 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
10484                  enum var_init_status initialized)
10485 {
10486   unsigned int regno;
10487   dw_loc_descr_ref result;
10488   dw_fde_ref fde = cfun->fde;
10489
10490   /* We only use "frame base" when we're sure we're talking about the
10491      post-prologue local stack frame.  We do this by *not* running
10492      register elimination until this point, and recognizing the special
10493      argument pointer and soft frame pointer rtx's.  */
10494   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
10495     {
10496       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10497
10498       if (elim != reg)
10499         {
10500           if (GET_CODE (elim) == PLUS)
10501             {
10502               offset += INTVAL (XEXP (elim, 1));
10503               elim = XEXP (elim, 0);
10504             }
10505           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
10506                        && (elim == hard_frame_pointer_rtx
10507                            || elim == stack_pointer_rtx))
10508                       || elim == (frame_pointer_needed
10509                                   ? hard_frame_pointer_rtx
10510                                   : stack_pointer_rtx));
10511
10512           /* If drap register is used to align stack, use frame
10513              pointer + offset to access stack variables.  If stack
10514              is aligned without drap, use stack pointer + offset to
10515              access stack variables.  */
10516           if (crtl->stack_realign_tried
10517               && reg == frame_pointer_rtx)
10518             {
10519               int base_reg
10520                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
10521                                       ? HARD_FRAME_POINTER_REGNUM
10522                                       : REGNO (elim));
10523               return new_reg_loc_descr (base_reg, offset);
10524             }
10525
10526           gcc_assert (frame_pointer_fb_offset_valid);
10527           offset += frame_pointer_fb_offset;
10528           return new_loc_descr (DW_OP_fbreg, offset, 0);
10529         }
10530     }
10531
10532   regno = DWARF_FRAME_REGNUM (REGNO (reg));
10533
10534   if (!optimize && fde
10535       && (fde->drap_reg == regno || fde->vdrap_reg == regno))
10536     {
10537       /* Use cfa+offset to represent the location of arguments passed
10538          on the stack when drap is used to align stack.
10539          Only do this when not optimizing, for optimized code var-tracking
10540          is supposed to track where the arguments live and the register
10541          used as vdrap or drap in some spot might be used for something
10542          else in other part of the routine.  */
10543       return new_loc_descr (DW_OP_fbreg, offset, 0);
10544     }
10545
10546   if (regno <= 31)
10547     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
10548                             offset, 0);
10549   else
10550     result = new_loc_descr (DW_OP_bregx, regno, offset);
10551
10552   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10553     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10554
10555   return result;
10556 }
10557
10558 /* Return true if this RTL expression describes a base+offset calculation.  */
10559
10560 static inline int
10561 is_based_loc (const_rtx rtl)
10562 {
10563   return (GET_CODE (rtl) == PLUS
10564           && ((REG_P (XEXP (rtl, 0))
10565                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
10566                && CONST_INT_P (XEXP (rtl, 1)))));
10567 }
10568
10569 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
10570    failed.  */
10571
10572 static dw_loc_descr_ref
10573 tls_mem_loc_descriptor (rtx mem)
10574 {
10575   tree base;
10576   dw_loc_descr_ref loc_result;
10577
10578   if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
10579     return NULL;
10580
10581   base = get_base_address (MEM_EXPR (mem));
10582   if (base == NULL
10583       || TREE_CODE (base) != VAR_DECL
10584       || !DECL_THREAD_LOCAL_P (base))
10585     return NULL;
10586
10587   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
10588   if (loc_result == NULL)
10589     return NULL;
10590
10591   if (MEM_OFFSET (mem))
10592     loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
10593
10594   return loc_result;
10595 }
10596
10597 /* Output debug info about reason why we failed to expand expression as dwarf
10598    expression.  */
10599
10600 static void
10601 expansion_failed (tree expr, rtx rtl, char const *reason)
10602 {
10603   if (dump_file && (dump_flags & TDF_DETAILS))
10604     {
10605       fprintf (dump_file, "Failed to expand as dwarf: ");
10606       if (expr)
10607         print_generic_expr (dump_file, expr, dump_flags);
10608       if (rtl)
10609         {
10610           fprintf (dump_file, "\n");
10611           print_rtl (dump_file, rtl);
10612         }
10613       fprintf (dump_file, "\nReason: %s\n", reason);
10614     }
10615 }
10616
10617 /* Helper function for const_ok_for_output, called either directly
10618    or via for_each_rtx.  */
10619
10620 static int
10621 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
10622 {
10623   rtx rtl = *rtlp;
10624
10625   if (GET_CODE (rtl) == UNSPEC)
10626     {
10627       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
10628          we can't express it in the debug info.  */
10629 #ifdef ENABLE_CHECKING
10630       /* Don't complain about TLS UNSPECs, those are just too hard to
10631          delegitimize.  */
10632       if (XVECLEN (rtl, 0) != 1
10633           || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
10634           || SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0)) == NULL
10635           || TREE_CODE (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))) != VAR_DECL
10636           || !DECL_THREAD_LOCAL_P (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))))
10637         inform (current_function_decl
10638                 ? DECL_SOURCE_LOCATION (current_function_decl)
10639                 : UNKNOWN_LOCATION,
10640 #if NUM_UNSPEC_VALUES > 0
10641                 "non-delegitimized UNSPEC %s (%d) found in variable location",
10642                 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
10643                  ? unspec_strings[XINT (rtl, 1)] : "unknown"),
10644                 XINT (rtl, 1));
10645 #else
10646                 "non-delegitimized UNSPEC %d found in variable location",
10647                 XINT (rtl, 1));
10648 #endif
10649 #endif
10650       expansion_failed (NULL_TREE, rtl,
10651                         "UNSPEC hasn't been delegitimized.\n");
10652       return 1;
10653     }
10654
10655   if (GET_CODE (rtl) != SYMBOL_REF)
10656     return 0;
10657
10658   if (CONSTANT_POOL_ADDRESS_P (rtl))
10659     {
10660       bool marked;
10661       get_pool_constant_mark (rtl, &marked);
10662       /* If all references to this pool constant were optimized away,
10663          it was not output and thus we can't represent it.  */
10664       if (!marked)
10665         {
10666           expansion_failed (NULL_TREE, rtl,
10667                             "Constant was removed from constant pool.\n");
10668           return 1;
10669         }
10670     }
10671
10672   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
10673     return 1;
10674
10675   /* Avoid references to external symbols in debug info, on several targets
10676      the linker might even refuse to link when linking a shared library,
10677      and in many other cases the relocations for .debug_info/.debug_loc are
10678      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
10679      to be defined within the same shared library or executable are fine.  */
10680   if (SYMBOL_REF_EXTERNAL_P (rtl))
10681     {
10682       tree decl = SYMBOL_REF_DECL (rtl);
10683
10684       if (decl == NULL || !targetm.binds_local_p (decl))
10685         {
10686           expansion_failed (NULL_TREE, rtl,
10687                             "Symbol not defined in current TU.\n");
10688           return 1;
10689         }
10690     }
10691
10692   return 0;
10693 }
10694
10695 /* Return true if constant RTL can be emitted in DW_OP_addr or
10696    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
10697    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
10698
10699 static bool
10700 const_ok_for_output (rtx rtl)
10701 {
10702   if (GET_CODE (rtl) == SYMBOL_REF)
10703     return const_ok_for_output_1 (&rtl, NULL) == 0;
10704
10705   if (GET_CODE (rtl) == CONST)
10706     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
10707
10708   return true;
10709 }
10710
10711 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
10712    if possible, NULL otherwise.  */
10713
10714 static dw_die_ref
10715 base_type_for_mode (enum machine_mode mode, bool unsignedp)
10716 {
10717   dw_die_ref type_die;
10718   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
10719
10720   if (type == NULL)
10721     return NULL;
10722   switch (TREE_CODE (type))
10723     {
10724     case INTEGER_TYPE:
10725     case REAL_TYPE:
10726       break;
10727     default:
10728       return NULL;
10729     }
10730   type_die = lookup_type_die (type);
10731   if (!type_die)
10732     type_die = modified_type_die (type, false, false, comp_unit_die ());
10733   if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
10734     return NULL;
10735   return type_die;
10736 }
10737
10738 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
10739    type matching MODE, or, if MODE is narrower than or as wide as
10740    DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
10741    possible.  */
10742
10743 static dw_loc_descr_ref
10744 convert_descriptor_to_mode (enum machine_mode mode, dw_loc_descr_ref op)
10745 {
10746   enum machine_mode outer_mode = mode;
10747   dw_die_ref type_die;
10748   dw_loc_descr_ref cvt;
10749
10750   if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
10751     {
10752       add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
10753       return op;
10754     }
10755   type_die = base_type_for_mode (outer_mode, 1);
10756   if (type_die == NULL)
10757     return NULL;
10758   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10759   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10760   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10761   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10762   add_loc_descr (&op, cvt);
10763   return op;
10764 }
10765
10766 /* Return location descriptor for comparison OP with operands OP0 and OP1.  */
10767
10768 static dw_loc_descr_ref
10769 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
10770                         dw_loc_descr_ref op1)
10771 {
10772   dw_loc_descr_ref ret = op0;
10773   add_loc_descr (&ret, op1);
10774   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
10775   if (STORE_FLAG_VALUE != 1)
10776     {
10777       add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
10778       add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
10779     }
10780   return ret;
10781 }
10782
10783 /* Return location descriptor for signed comparison OP RTL.  */
10784
10785 static dw_loc_descr_ref
10786 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10787                          enum machine_mode mem_mode)
10788 {
10789   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10790   dw_loc_descr_ref op0, op1;
10791   int shift;
10792
10793   if (op_mode == VOIDmode)
10794     op_mode = GET_MODE (XEXP (rtl, 1));
10795   if (op_mode == VOIDmode)
10796     return NULL;
10797
10798   if (dwarf_strict
10799       && (GET_MODE_CLASS (op_mode) != MODE_INT
10800           || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
10801     return NULL;
10802
10803   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10804                             VAR_INIT_STATUS_INITIALIZED);
10805   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10806                             VAR_INIT_STATUS_INITIALIZED);
10807
10808   if (op0 == NULL || op1 == NULL)
10809     return NULL;
10810
10811   if (GET_MODE_CLASS (op_mode) != MODE_INT
10812       || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10813     return compare_loc_descriptor (op, op0, op1);
10814
10815   if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10816     {
10817       dw_die_ref type_die = base_type_for_mode (op_mode, 0);
10818       dw_loc_descr_ref cvt;
10819
10820       if (type_die == NULL)
10821         return NULL;
10822       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10823       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10824       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10825       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10826       add_loc_descr (&op0, cvt);
10827       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10828       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10829       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10830       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10831       add_loc_descr (&op1, cvt);
10832       return compare_loc_descriptor (op, op0, op1);
10833     }
10834
10835   shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
10836   /* For eq/ne, if the operands are known to be zero-extended,
10837      there is no need to do the fancy shifting up.  */
10838   if (op == DW_OP_eq || op == DW_OP_ne)
10839     {
10840       dw_loc_descr_ref last0, last1;
10841       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10842         ;
10843       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10844         ;
10845       /* deref_size zero extends, and for constants we can check
10846          whether they are zero extended or not.  */
10847       if (((last0->dw_loc_opc == DW_OP_deref_size
10848             && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10849            || (CONST_INT_P (XEXP (rtl, 0))
10850                && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
10851                   == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
10852           && ((last1->dw_loc_opc == DW_OP_deref_size
10853                && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10854               || (CONST_INT_P (XEXP (rtl, 1))
10855                   && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
10856                      == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
10857         return compare_loc_descriptor (op, op0, op1);
10858
10859       /* EQ/NE comparison against constant in narrower type than
10860          DWARF2_ADDR_SIZE can be performed either as
10861          DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
10862          DW_OP_{eq,ne}
10863          or
10864          DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
10865          DW_OP_{eq,ne}.  Pick whatever is shorter.  */
10866       if (CONST_INT_P (XEXP (rtl, 1))
10867           && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
10868           && (size_of_int_loc_descriptor (shift) + 1
10869               + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
10870               >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
10871                  + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10872                                                & GET_MODE_MASK (op_mode))))
10873         {
10874           add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
10875           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10876           op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10877                                     & GET_MODE_MASK (op_mode));
10878           return compare_loc_descriptor (op, op0, op1);
10879         }
10880     }
10881   add_loc_descr (&op0, int_loc_descriptor (shift));
10882   add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
10883   if (CONST_INT_P (XEXP (rtl, 1)))
10884     op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
10885   else
10886     {
10887       add_loc_descr (&op1, int_loc_descriptor (shift));
10888       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
10889     }
10890   return compare_loc_descriptor (op, op0, op1);
10891 }
10892
10893 /* Return location descriptor for unsigned comparison OP RTL.  */
10894
10895 static dw_loc_descr_ref
10896 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10897                          enum machine_mode mem_mode)
10898 {
10899   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10900   dw_loc_descr_ref op0, op1;
10901
10902   if (op_mode == VOIDmode)
10903     op_mode = GET_MODE (XEXP (rtl, 1));
10904   if (op_mode == VOIDmode)
10905     return NULL;
10906   if (GET_MODE_CLASS (op_mode) != MODE_INT)
10907     return NULL;
10908
10909   if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10910     return NULL;
10911
10912   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10913                             VAR_INIT_STATUS_INITIALIZED);
10914   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10915                             VAR_INIT_STATUS_INITIALIZED);
10916
10917   if (op0 == NULL || op1 == NULL)
10918     return NULL;
10919
10920   if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
10921     {
10922       HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
10923       dw_loc_descr_ref last0, last1;
10924       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10925         ;
10926       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10927         ;
10928       if (CONST_INT_P (XEXP (rtl, 0)))
10929         op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
10930       /* deref_size zero extends, so no need to mask it again.  */
10931       else if (last0->dw_loc_opc != DW_OP_deref_size
10932                || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10933         {
10934           add_loc_descr (&op0, int_loc_descriptor (mask));
10935           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10936         }
10937       if (CONST_INT_P (XEXP (rtl, 1)))
10938         op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
10939       /* deref_size zero extends, so no need to mask it again.  */
10940       else if (last1->dw_loc_opc != DW_OP_deref_size
10941                || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10942         {
10943           add_loc_descr (&op1, int_loc_descriptor (mask));
10944           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10945         }
10946     }
10947   else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10948     {
10949       HOST_WIDE_INT bias = 1;
10950       bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
10951       add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10952       if (CONST_INT_P (XEXP (rtl, 1)))
10953         op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
10954                                   + INTVAL (XEXP (rtl, 1)));
10955       else
10956         add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
10957                                             bias, 0));
10958     }
10959   return compare_loc_descriptor (op, op0, op1);
10960 }
10961
10962 /* Return location descriptor for {U,S}{MIN,MAX}.  */
10963
10964 static dw_loc_descr_ref
10965 minmax_loc_descriptor (rtx rtl, enum machine_mode mode,
10966                        enum machine_mode mem_mode)
10967 {
10968   enum dwarf_location_atom op;
10969   dw_loc_descr_ref op0, op1, ret;
10970   dw_loc_descr_ref bra_node, drop_node;
10971
10972   if (dwarf_strict
10973       && (GET_MODE_CLASS (mode) != MODE_INT
10974           || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
10975     return NULL;
10976
10977   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
10978                             VAR_INIT_STATUS_INITIALIZED);
10979   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
10980                             VAR_INIT_STATUS_INITIALIZED);
10981
10982   if (op0 == NULL || op1 == NULL)
10983     return NULL;
10984
10985   add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
10986   add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
10987   add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
10988   if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
10989     {
10990       if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
10991         {
10992           HOST_WIDE_INT mask = GET_MODE_MASK (mode);
10993           add_loc_descr (&op0, int_loc_descriptor (mask));
10994           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10995           add_loc_descr (&op1, int_loc_descriptor (mask));
10996           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10997         }
10998       else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
10999         {
11000           HOST_WIDE_INT bias = 1;
11001           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
11002           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11003           add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11004         }
11005     }
11006   else if (GET_MODE_CLASS (mode) == MODE_INT
11007            && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11008     {
11009       int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
11010       add_loc_descr (&op0, int_loc_descriptor (shift));
11011       add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11012       add_loc_descr (&op1, int_loc_descriptor (shift));
11013       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11014     }
11015   else if (GET_MODE_CLASS (mode) == MODE_INT
11016            && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11017     {
11018       dw_die_ref type_die = base_type_for_mode (mode, 0);
11019       dw_loc_descr_ref cvt;
11020       if (type_die == NULL)
11021         return NULL;
11022       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11023       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11024       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11025       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11026       add_loc_descr (&op0, cvt);
11027       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11028       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11029       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11030       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11031       add_loc_descr (&op1, cvt);
11032     }
11033
11034   if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
11035     op = DW_OP_lt;
11036   else
11037     op = DW_OP_gt;
11038   ret = op0;
11039   add_loc_descr (&ret, op1);
11040   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11041   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11042   add_loc_descr (&ret, bra_node);
11043   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11044   drop_node = new_loc_descr (DW_OP_drop, 0, 0);
11045   add_loc_descr (&ret, drop_node);
11046   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11047   bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
11048   if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
11049       && GET_MODE_CLASS (mode) == MODE_INT
11050       && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11051     ret = convert_descriptor_to_mode (mode, ret);
11052   return ret;
11053 }
11054
11055 /* Helper function for mem_loc_descriptor.  Perform OP binary op,
11056    but after converting arguments to type_die, afterwards
11057    convert back to unsigned.  */
11058
11059 static dw_loc_descr_ref
11060 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
11061              enum machine_mode mode, enum machine_mode mem_mode)
11062 {
11063   dw_loc_descr_ref cvt, op0, op1;
11064
11065   if (type_die == NULL)
11066     return NULL;
11067   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11068                             VAR_INIT_STATUS_INITIALIZED);
11069   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11070                             VAR_INIT_STATUS_INITIALIZED);
11071   if (op0 == NULL || op1 == NULL)
11072     return NULL;
11073   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11074   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11075   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11076   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11077   add_loc_descr (&op0, cvt);
11078   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11079   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11080   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11081   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11082   add_loc_descr (&op1, cvt);
11083   add_loc_descr (&op0, op1);
11084   add_loc_descr (&op0, new_loc_descr (op, 0, 0));
11085   return convert_descriptor_to_mode (mode, op0);
11086 }
11087
11088 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
11089    const0 is DW_OP_lit0 or corresponding typed constant,
11090    const1 is DW_OP_lit1 or corresponding typed constant
11091    and constMSB is constant with just the MSB bit set
11092    for the mode):
11093        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11094    L1: const0 DW_OP_swap
11095    L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
11096        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11097    L3: DW_OP_drop
11098    L4: DW_OP_nop
11099
11100    CTZ is similar:
11101        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11102    L1: const0 DW_OP_swap
11103    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11104        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11105    L3: DW_OP_drop
11106    L4: DW_OP_nop
11107
11108    FFS is similar:
11109        DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
11110    L1: const1 DW_OP_swap
11111    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11112        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11113    L3: DW_OP_drop
11114    L4: DW_OP_nop  */
11115
11116 static dw_loc_descr_ref
11117 clz_loc_descriptor (rtx rtl, enum machine_mode mode,
11118                     enum machine_mode mem_mode)
11119 {
11120   dw_loc_descr_ref op0, ret, tmp;
11121   HOST_WIDE_INT valv;
11122   dw_loc_descr_ref l1jump, l1label;
11123   dw_loc_descr_ref l2jump, l2label;
11124   dw_loc_descr_ref l3jump, l3label;
11125   dw_loc_descr_ref l4jump, l4label;
11126   rtx msb;
11127
11128   if (GET_MODE_CLASS (mode) != MODE_INT
11129       || GET_MODE (XEXP (rtl, 0)) != mode
11130       || (GET_CODE (rtl) == CLZ
11131           && GET_MODE_BITSIZE (mode) > 2 * HOST_BITS_PER_WIDE_INT))
11132     return NULL;
11133
11134   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11135                             VAR_INIT_STATUS_INITIALIZED);
11136   if (op0 == NULL)
11137     return NULL;
11138   ret = op0;
11139   if (GET_CODE (rtl) == CLZ)
11140     {
11141       if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11142         valv = GET_MODE_BITSIZE (mode);
11143     }
11144   else if (GET_CODE (rtl) == FFS)
11145     valv = 0;
11146   else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11147     valv = GET_MODE_BITSIZE (mode);
11148   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11149   l1jump = new_loc_descr (DW_OP_bra, 0, 0);
11150   add_loc_descr (&ret, l1jump);
11151   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11152   tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
11153                             VAR_INIT_STATUS_INITIALIZED);
11154   if (tmp == NULL)
11155     return NULL;
11156   add_loc_descr (&ret, tmp);
11157   l4jump = new_loc_descr (DW_OP_skip, 0, 0);
11158   add_loc_descr (&ret, l4jump);
11159   l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
11160                                 ? const1_rtx : const0_rtx,
11161                                 mode, mem_mode,
11162                                 VAR_INIT_STATUS_INITIALIZED);
11163   if (l1label == NULL)
11164     return NULL;
11165   add_loc_descr (&ret, l1label);
11166   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11167   l2label = new_loc_descr (DW_OP_dup, 0, 0);
11168   add_loc_descr (&ret, l2label);
11169   if (GET_CODE (rtl) != CLZ)
11170     msb = const1_rtx;
11171   else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
11172     msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
11173                    << (GET_MODE_BITSIZE (mode) - 1));
11174   else
11175     msb = immed_double_const (0, (unsigned HOST_WIDE_INT) 1
11176                                   << (GET_MODE_BITSIZE (mode)
11177                                       - HOST_BITS_PER_WIDE_INT - 1), mode);
11178   if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
11179     tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11180                          ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
11181                          ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
11182   else
11183     tmp = mem_loc_descriptor (msb, mode, mem_mode,
11184                               VAR_INIT_STATUS_INITIALIZED);
11185   if (tmp == NULL)
11186     return NULL;
11187   add_loc_descr (&ret, tmp);
11188   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11189   l3jump = new_loc_descr (DW_OP_bra, 0, 0);
11190   add_loc_descr (&ret, l3jump);
11191   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11192                             VAR_INIT_STATUS_INITIALIZED);
11193   if (tmp == NULL)
11194     return NULL;
11195   add_loc_descr (&ret, tmp);
11196   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
11197                                       ? DW_OP_shl : DW_OP_shr, 0, 0));
11198   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11199   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
11200   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11201   l2jump = new_loc_descr (DW_OP_skip, 0, 0);
11202   add_loc_descr (&ret, l2jump);
11203   l3label = new_loc_descr (DW_OP_drop, 0, 0);
11204   add_loc_descr (&ret, l3label);
11205   l4label = new_loc_descr (DW_OP_nop, 0, 0);
11206   add_loc_descr (&ret, l4label);
11207   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11208   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11209   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11210   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11211   l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11212   l3jump->dw_loc_oprnd1.v.val_loc = l3label;
11213   l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11214   l4jump->dw_loc_oprnd1.v.val_loc = l4label;
11215   return ret;
11216 }
11217
11218 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
11219    const1 is DW_OP_lit1 or corresponding typed constant):
11220        const0 DW_OP_swap
11221    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11222        DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11223    L2: DW_OP_drop
11224
11225    PARITY is similar:
11226    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11227        DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11228    L2: DW_OP_drop  */
11229
11230 static dw_loc_descr_ref
11231 popcount_loc_descriptor (rtx rtl, enum machine_mode mode,
11232                          enum machine_mode mem_mode)
11233 {
11234   dw_loc_descr_ref op0, ret, tmp;
11235   dw_loc_descr_ref l1jump, l1label;
11236   dw_loc_descr_ref l2jump, l2label;
11237
11238   if (GET_MODE_CLASS (mode) != MODE_INT
11239       || GET_MODE (XEXP (rtl, 0)) != mode)
11240     return NULL;
11241
11242   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11243                             VAR_INIT_STATUS_INITIALIZED);
11244   if (op0 == NULL)
11245     return NULL;
11246   ret = op0;
11247   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11248                             VAR_INIT_STATUS_INITIALIZED);
11249   if (tmp == NULL)
11250     return NULL;
11251   add_loc_descr (&ret, tmp);
11252   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11253   l1label = new_loc_descr (DW_OP_dup, 0, 0);
11254   add_loc_descr (&ret, l1label);
11255   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11256   add_loc_descr (&ret, l2jump);
11257   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11258   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11259   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11260                             VAR_INIT_STATUS_INITIALIZED);
11261   if (tmp == NULL)
11262     return NULL;
11263   add_loc_descr (&ret, tmp);
11264   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11265   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
11266                                       ? DW_OP_plus : DW_OP_xor, 0, 0));
11267   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11268   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11269                             VAR_INIT_STATUS_INITIALIZED);
11270   add_loc_descr (&ret, tmp);
11271   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11272   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11273   add_loc_descr (&ret, l1jump);
11274   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11275   add_loc_descr (&ret, l2label);
11276   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11277   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11278   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11279   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11280   return ret;
11281 }
11282
11283 /* BSWAP (constS is initial shift count, either 56 or 24):
11284        constS const0
11285    L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
11286        const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
11287        DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
11288        DW_OP_minus DW_OP_swap DW_OP_skip <L1>
11289    L2: DW_OP_drop DW_OP_swap DW_OP_drop  */
11290
11291 static dw_loc_descr_ref
11292 bswap_loc_descriptor (rtx rtl, enum machine_mode mode,
11293                       enum machine_mode mem_mode)
11294 {
11295   dw_loc_descr_ref op0, ret, tmp;
11296   dw_loc_descr_ref l1jump, l1label;
11297   dw_loc_descr_ref l2jump, l2label;
11298
11299   if (GET_MODE_CLASS (mode) != MODE_INT
11300       || BITS_PER_UNIT != 8
11301       || (GET_MODE_BITSIZE (mode) != 32
11302           &&  GET_MODE_BITSIZE (mode) != 64))
11303     return NULL;
11304
11305   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11306                             VAR_INIT_STATUS_INITIALIZED);
11307   if (op0 == NULL)
11308     return NULL;
11309
11310   ret = op0;
11311   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11312                             mode, mem_mode,
11313                             VAR_INIT_STATUS_INITIALIZED);
11314   if (tmp == NULL)
11315     return NULL;
11316   add_loc_descr (&ret, tmp);
11317   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11318                             VAR_INIT_STATUS_INITIALIZED);
11319   if (tmp == NULL)
11320     return NULL;
11321   add_loc_descr (&ret, tmp);
11322   l1label = new_loc_descr (DW_OP_pick, 2, 0);
11323   add_loc_descr (&ret, l1label);
11324   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11325                             mode, mem_mode,
11326                             VAR_INIT_STATUS_INITIALIZED);
11327   add_loc_descr (&ret, tmp);
11328   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
11329   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11330   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11331   tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
11332                             VAR_INIT_STATUS_INITIALIZED);
11333   if (tmp == NULL)
11334     return NULL;
11335   add_loc_descr (&ret, tmp);
11336   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11337   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
11338   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11339   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11340   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11341   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11342   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11343                             VAR_INIT_STATUS_INITIALIZED);
11344   add_loc_descr (&ret, tmp);
11345   add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
11346   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11347   add_loc_descr (&ret, l2jump);
11348   tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
11349                             VAR_INIT_STATUS_INITIALIZED);
11350   add_loc_descr (&ret, tmp);
11351   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11352   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11353   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11354   add_loc_descr (&ret, l1jump);
11355   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11356   add_loc_descr (&ret, l2label);
11357   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11358   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11359   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11360   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11361   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11362   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11363   return ret;
11364 }
11365
11366 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
11367    DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11368    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
11369    DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
11370
11371    ROTATERT is similar:
11372    DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
11373    DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11374    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or  */
11375
11376 static dw_loc_descr_ref
11377 rotate_loc_descriptor (rtx rtl, enum machine_mode mode,
11378                        enum machine_mode mem_mode)
11379 {
11380   rtx rtlop1 = XEXP (rtl, 1);
11381   dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
11382   int i;
11383
11384   if (GET_MODE_CLASS (mode) != MODE_INT)
11385     return NULL;
11386
11387   if (GET_MODE (rtlop1) != VOIDmode
11388       && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
11389     rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11390   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11391                             VAR_INIT_STATUS_INITIALIZED);
11392   op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11393                             VAR_INIT_STATUS_INITIALIZED);
11394   if (op0 == NULL || op1 == NULL)
11395     return NULL;
11396   if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11397     for (i = 0; i < 2; i++)
11398       {
11399         if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
11400           mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
11401                                         mode, mem_mode,
11402                                         VAR_INIT_STATUS_INITIALIZED);
11403         else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
11404           mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11405                                    ? DW_OP_const4u
11406                                    : HOST_BITS_PER_WIDE_INT == 64
11407                                    ? DW_OP_const8u : DW_OP_constu,
11408                                    GET_MODE_MASK (mode), 0);
11409         else
11410           mask[i] = NULL;
11411         if (mask[i] == NULL)
11412           return NULL;
11413         add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
11414       }
11415   ret = op0;
11416   add_loc_descr (&ret, op1);
11417   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11418   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11419   if (GET_CODE (rtl) == ROTATERT)
11420     {
11421       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11422       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11423                                           GET_MODE_BITSIZE (mode), 0));
11424     }
11425   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11426   if (mask[0] != NULL)
11427     add_loc_descr (&ret, mask[0]);
11428   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11429   if (mask[1] != NULL)
11430     {
11431       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11432       add_loc_descr (&ret, mask[1]);
11433       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11434     }
11435   if (GET_CODE (rtl) == ROTATE)
11436     {
11437       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11438       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11439                                           GET_MODE_BITSIZE (mode), 0));
11440     }
11441   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11442   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11443   return ret;
11444 }
11445
11446 /* Helper function for mem_loc_descriptor.  Return DW_OP_GNU_parameter_ref
11447    for DEBUG_PARAMETER_REF RTL.  */
11448
11449 static dw_loc_descr_ref
11450 parameter_ref_descriptor (rtx rtl)
11451 {
11452   dw_loc_descr_ref ret;
11453   dw_die_ref ref;
11454
11455   if (dwarf_strict)
11456     return NULL;
11457   gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
11458   ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
11459   ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
11460   if (ref)
11461     {
11462       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11463       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
11464       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
11465     }
11466   else
11467     {
11468       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
11469       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
11470     }
11471   return ret;
11472 }
11473
11474 /* Helper function to get mode of MEM's address.  */
11475
11476 enum machine_mode
11477 get_address_mode (rtx mem)
11478 {
11479   enum machine_mode mode = GET_MODE (XEXP (mem, 0));
11480   if (mode != VOIDmode)
11481     return mode;
11482   return targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
11483 }
11484
11485 /* The following routine converts the RTL for a variable or parameter
11486    (resident in memory) into an equivalent Dwarf representation of a
11487    mechanism for getting the address of that same variable onto the top of a
11488    hypothetical "address evaluation" stack.
11489
11490    When creating memory location descriptors, we are effectively transforming
11491    the RTL for a memory-resident object into its Dwarf postfix expression
11492    equivalent.  This routine recursively descends an RTL tree, turning
11493    it into Dwarf postfix code as it goes.
11494
11495    MODE is the mode that should be assumed for the rtl if it is VOIDmode.
11496
11497    MEM_MODE is the mode of the memory reference, needed to handle some
11498    autoincrement addressing modes.
11499
11500    Return 0 if we can't represent the location.  */
11501
11502 dw_loc_descr_ref
11503 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
11504                     enum machine_mode mem_mode,
11505                     enum var_init_status initialized)
11506 {
11507   dw_loc_descr_ref mem_loc_result = NULL;
11508   enum dwarf_location_atom op;
11509   dw_loc_descr_ref op0, op1;
11510
11511   if (mode == VOIDmode)
11512     mode = GET_MODE (rtl);
11513
11514   /* Note that for a dynamically sized array, the location we will generate a
11515      description of here will be the lowest numbered location which is
11516      actually within the array.  That's *not* necessarily the same as the
11517      zeroth element of the array.  */
11518
11519   rtl = targetm.delegitimize_address (rtl);
11520
11521   if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
11522     return NULL;
11523
11524   switch (GET_CODE (rtl))
11525     {
11526     case POST_INC:
11527     case POST_DEC:
11528     case POST_MODIFY:
11529       return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
11530
11531     case SUBREG:
11532       /* The case of a subreg may arise when we have a local (register)
11533          variable or a formal (register) parameter which doesn't quite fill
11534          up an entire register.  For now, just assume that it is
11535          legitimate to make the Dwarf info refer to the whole register which
11536          contains the given subreg.  */
11537       if (!subreg_lowpart_p (rtl))
11538         break;
11539       if (GET_MODE_CLASS (mode) == MODE_INT
11540           && GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) == MODE_INT
11541           && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11542 #ifdef POINTERS_EXTEND_UNSIGNED
11543               || (mode == Pmode && mem_mode != VOIDmode)
11544 #endif
11545              )
11546           && GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) <= DWARF2_ADDR_SIZE)
11547         {
11548           mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11549                                                GET_MODE (SUBREG_REG (rtl)),
11550                                                mem_mode, initialized);
11551           break;
11552         }
11553       if (dwarf_strict)
11554         break;
11555       if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11556         break;
11557       if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl)))
11558           && (GET_MODE_CLASS (mode) != MODE_INT
11559               || GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) != MODE_INT))
11560         break;
11561       else
11562         {
11563           dw_die_ref type_die;
11564           dw_loc_descr_ref cvt;
11565
11566           mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11567                                                GET_MODE (SUBREG_REG (rtl)),
11568                                                mem_mode, initialized);
11569           if (mem_loc_result == NULL)
11570             break;
11571           type_die = base_type_for_mode (mode,
11572                                          GET_MODE_CLASS (mode) == MODE_INT);
11573           if (type_die == NULL)
11574             {
11575               mem_loc_result = NULL;
11576               break;
11577             }
11578           if (GET_MODE_SIZE (mode)
11579               != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11580             cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11581           else
11582             cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
11583           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11584           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11585           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11586           add_loc_descr (&mem_loc_result, cvt);
11587         }
11588       break;
11589
11590     case REG:
11591       if (GET_MODE_CLASS (mode) != MODE_INT
11592           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11593 #ifdef POINTERS_EXTEND_UNSIGNED
11594               && (mode != Pmode || mem_mode == VOIDmode)
11595 #endif
11596               ))
11597         {
11598           dw_die_ref type_die;
11599
11600           if (dwarf_strict)
11601             break;
11602           if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
11603             break;
11604           type_die = base_type_for_mode (mode,
11605                                          GET_MODE_CLASS (mode) == MODE_INT);
11606           if (type_die == NULL)
11607             break;
11608           mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
11609                                           dbx_reg_number (rtl), 0);
11610           mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11611           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11612           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
11613           break;
11614         }
11615       /* Whenever a register number forms a part of the description of the
11616          method for calculating the (dynamic) address of a memory resident
11617          object, DWARF rules require the register number be referred to as
11618          a "base register".  This distinction is not based in any way upon
11619          what category of register the hardware believes the given register
11620          belongs to.  This is strictly DWARF terminology we're dealing with
11621          here. Note that in cases where the location of a memory-resident
11622          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
11623          OP_CONST (0)) the actual DWARF location descriptor that we generate
11624          may just be OP_BASEREG (basereg).  This may look deceptively like
11625          the object in question was allocated to a register (rather than in
11626          memory) so DWARF consumers need to be aware of the subtle
11627          distinction between OP_REG and OP_BASEREG.  */
11628       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
11629         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
11630       else if (stack_realign_drap
11631                && crtl->drap_reg
11632                && crtl->args.internal_arg_pointer == rtl
11633                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
11634         {
11635           /* If RTL is internal_arg_pointer, which has been optimized
11636              out, use DRAP instead.  */
11637           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
11638                                             VAR_INIT_STATUS_INITIALIZED);
11639         }
11640       break;
11641
11642     case SIGN_EXTEND:
11643     case ZERO_EXTEND:
11644       if (GET_MODE_CLASS (mode) != MODE_INT)
11645         break;
11646       op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
11647                                 mem_mode, VAR_INIT_STATUS_INITIALIZED);
11648       if (op0 == 0)
11649         break;
11650       else if (GET_CODE (rtl) == ZERO_EXTEND
11651                && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11652                && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
11653                   < HOST_BITS_PER_WIDE_INT
11654                /* If DW_OP_const{1,2,4}u won't be used, it is shorter
11655                   to expand zero extend as two shifts instead of
11656                   masking.  */
11657                && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
11658         {
11659           enum machine_mode imode = GET_MODE (XEXP (rtl, 0));
11660           mem_loc_result = op0;
11661           add_loc_descr (&mem_loc_result,
11662                          int_loc_descriptor (GET_MODE_MASK (imode)));
11663           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
11664         }
11665       else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11666         {
11667           int shift = DWARF2_ADDR_SIZE
11668                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
11669           shift *= BITS_PER_UNIT;
11670           if (GET_CODE (rtl) == SIGN_EXTEND)
11671             op = DW_OP_shra;
11672           else
11673             op = DW_OP_shr;
11674           mem_loc_result = op0;
11675           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11676           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
11677           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11678           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11679         }
11680       else if (!dwarf_strict)
11681         {
11682           dw_die_ref type_die1, type_die2;
11683           dw_loc_descr_ref cvt;
11684
11685           type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
11686                                           GET_CODE (rtl) == ZERO_EXTEND);
11687           if (type_die1 == NULL)
11688             break;
11689           type_die2 = base_type_for_mode (mode, 1);
11690           if (type_die2 == NULL)
11691             break;
11692           mem_loc_result = op0;
11693           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11694           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11695           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
11696           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11697           add_loc_descr (&mem_loc_result, cvt);
11698           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11699           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11700           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
11701           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11702           add_loc_descr (&mem_loc_result, cvt);
11703         }
11704       break;
11705
11706     case MEM:
11707       {
11708         rtx new_rtl = avoid_constant_pool_reference (rtl);
11709         if (new_rtl != rtl)
11710           {
11711             mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
11712                                                  initialized);
11713             if (mem_loc_result != NULL)
11714               return mem_loc_result;
11715           }
11716       }
11717       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
11718                                            get_address_mode (rtl), mode,
11719                                            VAR_INIT_STATUS_INITIALIZED);
11720       if (mem_loc_result == NULL)
11721         mem_loc_result = tls_mem_loc_descriptor (rtl);
11722       if (mem_loc_result != NULL)
11723         {
11724           if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11725               || GET_MODE_CLASS (mode) != MODE_INT)
11726             {
11727               dw_die_ref type_die;
11728               dw_loc_descr_ref deref;
11729
11730               if (dwarf_strict)
11731                 return NULL;
11732               type_die
11733                 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
11734               if (type_die == NULL)
11735                 return NULL;
11736               deref = new_loc_descr (DW_OP_GNU_deref_type,
11737                                      GET_MODE_SIZE (mode), 0);
11738               deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11739               deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11740               deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
11741               add_loc_descr (&mem_loc_result, deref);
11742             }
11743           else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11744             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
11745           else
11746             add_loc_descr (&mem_loc_result,
11747                            new_loc_descr (DW_OP_deref_size,
11748                                           GET_MODE_SIZE (mode), 0));
11749         }
11750       break;
11751
11752     case LO_SUM:
11753       return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
11754
11755     case LABEL_REF:
11756       /* Some ports can transform a symbol ref into a label ref, because
11757          the symbol ref is too far away and has to be dumped into a constant
11758          pool.  */
11759     case CONST:
11760     case SYMBOL_REF:
11761       if (GET_MODE_CLASS (mode) != MODE_INT
11762           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11763 #ifdef POINTERS_EXTEND_UNSIGNED
11764               && (mode != Pmode || mem_mode == VOIDmode)
11765 #endif
11766               ))
11767         break;
11768       if (GET_CODE (rtl) == SYMBOL_REF
11769           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11770         {
11771           dw_loc_descr_ref temp;
11772
11773           /* If this is not defined, we have no way to emit the data.  */
11774           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
11775             break;
11776
11777           /* We used to emit DW_OP_addr here, but that's wrong, since
11778              DW_OP_addr should be relocated by the debug info consumer,
11779              while DW_OP_GNU_push_tls_address operand should not.  */
11780           temp = new_loc_descr (DWARF2_ADDR_SIZE == 4
11781                                 ? DW_OP_const4u : DW_OP_const8u, 0, 0);
11782           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
11783           temp->dw_loc_oprnd1.v.val_addr = rtl;
11784           temp->dtprel = true;
11785
11786           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
11787           add_loc_descr (&mem_loc_result, temp);
11788
11789           break;
11790         }
11791
11792       if (!const_ok_for_output (rtl))
11793         break;
11794
11795     symref:
11796       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
11797       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
11798       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
11799       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
11800       break;
11801
11802     case CONCAT:
11803     case CONCATN:
11804     case VAR_LOCATION:
11805     case DEBUG_IMPLICIT_PTR:
11806       expansion_failed (NULL_TREE, rtl,
11807                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
11808       return 0;
11809
11810     case ENTRY_VALUE:
11811       if (dwarf_strict)
11812         return NULL;
11813       if (REG_P (ENTRY_VALUE_EXP (rtl)))
11814         {
11815           if (GET_MODE_CLASS (mode) != MODE_INT
11816               || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11817             op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11818                                       VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11819           else
11820             op0
11821               = one_reg_loc_descriptor (dbx_reg_number (ENTRY_VALUE_EXP (rtl)),
11822                                         VAR_INIT_STATUS_INITIALIZED);
11823         }
11824       else if (MEM_P (ENTRY_VALUE_EXP (rtl))
11825                && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
11826         {
11827           op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11828                                     VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11829           if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
11830             return NULL;
11831         }
11832       else
11833         gcc_unreachable ();
11834       if (op0 == NULL)
11835         return NULL;
11836       mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
11837       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
11838       mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
11839       break;
11840
11841     case DEBUG_PARAMETER_REF:
11842       mem_loc_result = parameter_ref_descriptor (rtl);
11843       break;
11844
11845     case PRE_MODIFY:
11846       /* Extract the PLUS expression nested inside and fall into
11847          PLUS code below.  */
11848       rtl = XEXP (rtl, 1);
11849       goto plus;
11850
11851     case PRE_INC:
11852     case PRE_DEC:
11853       /* Turn these into a PLUS expression and fall into the PLUS code
11854          below.  */
11855       rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
11856                           GEN_INT (GET_CODE (rtl) == PRE_INC
11857                                    ? GET_MODE_UNIT_SIZE (mem_mode)
11858                                    : -GET_MODE_UNIT_SIZE (mem_mode)));
11859
11860       /* ... fall through ...  */
11861
11862     case PLUS:
11863     plus:
11864       if (is_based_loc (rtl)
11865           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11866           && GET_MODE_CLASS (mode) == MODE_INT)
11867         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
11868                                           INTVAL (XEXP (rtl, 1)),
11869                                           VAR_INIT_STATUS_INITIALIZED);
11870       else
11871         {
11872           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11873                                                VAR_INIT_STATUS_INITIALIZED);
11874           if (mem_loc_result == 0)
11875             break;
11876
11877           if (CONST_INT_P (XEXP (rtl, 1))
11878               && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11879             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
11880           else
11881             {
11882               op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11883                                         VAR_INIT_STATUS_INITIALIZED);
11884               if (op1 == 0)
11885                 break;
11886               add_loc_descr (&mem_loc_result, op1);
11887               add_loc_descr (&mem_loc_result,
11888                              new_loc_descr (DW_OP_plus, 0, 0));
11889             }
11890         }
11891       break;
11892
11893     /* If a pseudo-reg is optimized away, it is possible for it to
11894        be replaced with a MEM containing a multiply or shift.  */
11895     case MINUS:
11896       op = DW_OP_minus;
11897       goto do_binop;
11898
11899     case MULT:
11900       op = DW_OP_mul;
11901       goto do_binop;
11902
11903     case DIV:
11904       if (!dwarf_strict
11905           && GET_MODE_CLASS (mode) == MODE_INT
11906           && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11907         {
11908           mem_loc_result = typed_binop (DW_OP_div, rtl,
11909                                         base_type_for_mode (mode, 0),
11910                                         mode, mem_mode);
11911           break;
11912         }
11913       op = DW_OP_div;
11914       goto do_binop;
11915
11916     case UMOD:
11917       op = DW_OP_mod;
11918       goto do_binop;
11919
11920     case ASHIFT:
11921       op = DW_OP_shl;
11922       goto do_shift;
11923
11924     case ASHIFTRT:
11925       op = DW_OP_shra;
11926       goto do_shift;
11927
11928     case LSHIFTRT:
11929       op = DW_OP_shr;
11930       goto do_shift;
11931
11932     do_shift:
11933       if (GET_MODE_CLASS (mode) != MODE_INT)
11934         break;
11935       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11936                                 VAR_INIT_STATUS_INITIALIZED);
11937       {
11938         rtx rtlop1 = XEXP (rtl, 1);
11939         if (GET_MODE (rtlop1) != VOIDmode
11940             && GET_MODE_BITSIZE (GET_MODE (rtlop1))
11941                < GET_MODE_BITSIZE (mode))
11942           rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11943         op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11944                                   VAR_INIT_STATUS_INITIALIZED);
11945       }
11946
11947       if (op0 == 0 || op1 == 0)
11948         break;
11949
11950       mem_loc_result = op0;
11951       add_loc_descr (&mem_loc_result, op1);
11952       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11953       break;
11954
11955     case AND:
11956       op = DW_OP_and;
11957       goto do_binop;
11958
11959     case IOR:
11960       op = DW_OP_or;
11961       goto do_binop;
11962
11963     case XOR:
11964       op = DW_OP_xor;
11965       goto do_binop;
11966
11967     do_binop:
11968       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11969                                 VAR_INIT_STATUS_INITIALIZED);
11970       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11971                                 VAR_INIT_STATUS_INITIALIZED);
11972
11973       if (op0 == 0 || op1 == 0)
11974         break;
11975
11976       mem_loc_result = op0;
11977       add_loc_descr (&mem_loc_result, op1);
11978       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11979       break;
11980
11981     case MOD:
11982       if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
11983         {
11984           mem_loc_result = typed_binop (DW_OP_mod, rtl,
11985                                         base_type_for_mode (mode, 0),
11986                                         mode, mem_mode);
11987           break;
11988         }
11989
11990       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11991                                 VAR_INIT_STATUS_INITIALIZED);
11992       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11993                                 VAR_INIT_STATUS_INITIALIZED);
11994
11995       if (op0 == 0 || op1 == 0)
11996         break;
11997
11998       mem_loc_result = op0;
11999       add_loc_descr (&mem_loc_result, op1);
12000       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
12001       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
12002       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
12003       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
12004       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
12005       break;
12006
12007     case UDIV:
12008       if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
12009         {
12010           if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
12011             {
12012               op = DW_OP_div;
12013               goto do_binop;
12014             }
12015           mem_loc_result = typed_binop (DW_OP_div, rtl,
12016                                         base_type_for_mode (mode, 1),
12017                                         mode, mem_mode);
12018         }
12019       break;
12020
12021     case NOT:
12022       op = DW_OP_not;
12023       goto do_unop;
12024
12025     case ABS:
12026       op = DW_OP_abs;
12027       goto do_unop;
12028
12029     case NEG:
12030       op = DW_OP_neg;
12031       goto do_unop;
12032
12033     do_unop:
12034       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12035                                 VAR_INIT_STATUS_INITIALIZED);
12036
12037       if (op0 == 0)
12038         break;
12039
12040       mem_loc_result = op0;
12041       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12042       break;
12043
12044     case CONST_INT:
12045       if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12046 #ifdef POINTERS_EXTEND_UNSIGNED
12047           || (mode == Pmode
12048               && mem_mode != VOIDmode
12049               && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
12050 #endif
12051           )
12052         {
12053           mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12054           break;
12055         }
12056       if (!dwarf_strict
12057           && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
12058               || GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_WIDE_INT))
12059         {
12060           dw_die_ref type_die = base_type_for_mode (mode, 1);
12061           enum machine_mode amode;
12062           if (type_die == NULL)
12063             return NULL;
12064           amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
12065                                  MODE_INT, 0);
12066           if (INTVAL (rtl) >= 0
12067               && amode != BLKmode
12068               && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
12069               /* const DW_OP_GNU_convert <XXX> vs.
12070                  DW_OP_GNU_const_type <XXX, 1, const>.  */
12071               && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
12072                  < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
12073             {
12074               mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12075               op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12076               op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12077               op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12078               op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
12079               add_loc_descr (&mem_loc_result, op0);
12080               return mem_loc_result;
12081             }
12082           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
12083                                           INTVAL (rtl));
12084           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12085           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12086           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12087           if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12088             mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12089           else
12090             {
12091               mem_loc_result->dw_loc_oprnd2.val_class
12092                 = dw_val_class_const_double;
12093               mem_loc_result->dw_loc_oprnd2.v.val_double
12094                 = shwi_to_double_int (INTVAL (rtl));
12095             }
12096         }
12097       break;
12098
12099     case CONST_DOUBLE:
12100       if (!dwarf_strict)
12101         {
12102           dw_die_ref type_die;
12103
12104           /* Note that a CONST_DOUBLE rtx could represent either an integer
12105              or a floating-point constant.  A CONST_DOUBLE is used whenever
12106              the constant requires more than one word in order to be
12107              adequately represented.  We output CONST_DOUBLEs as blocks.  */
12108           if (mode == VOIDmode
12109               || (GET_MODE (rtl) == VOIDmode
12110                   && GET_MODE_BITSIZE (mode) != 2 * HOST_BITS_PER_WIDE_INT))
12111             break;
12112           type_die = base_type_for_mode (mode,
12113                                          GET_MODE_CLASS (mode) == MODE_INT);
12114           if (type_die == NULL)
12115             return NULL;
12116           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
12117           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12118           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12119           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12120           if (SCALAR_FLOAT_MODE_P (mode))
12121             {
12122               unsigned int length = GET_MODE_SIZE (mode);
12123               unsigned char *array
12124                   = (unsigned char*) ggc_alloc_atomic (length);
12125
12126               insert_float (rtl, array);
12127               mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12128               mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12129               mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12130               mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12131             }
12132           else
12133             {
12134               mem_loc_result->dw_loc_oprnd2.val_class
12135                 = dw_val_class_const_double;
12136               mem_loc_result->dw_loc_oprnd2.v.val_double
12137                 = rtx_to_double_int (rtl);
12138             }
12139         }
12140       break;
12141
12142     case EQ:
12143       mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
12144       break;
12145
12146     case GE:
12147       mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12148       break;
12149
12150     case GT:
12151       mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12152       break;
12153
12154     case LE:
12155       mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12156       break;
12157
12158     case LT:
12159       mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12160       break;
12161
12162     case NE:
12163       mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
12164       break;
12165
12166     case GEU:
12167       mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12168       break;
12169
12170     case GTU:
12171       mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12172       break;
12173
12174     case LEU:
12175       mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12176       break;
12177
12178     case LTU:
12179       mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12180       break;
12181
12182     case UMIN:
12183     case UMAX:
12184       if (GET_MODE_CLASS (mode) != MODE_INT)
12185         break;
12186       /* FALLTHRU */
12187     case SMIN:
12188     case SMAX:
12189       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
12190       break;
12191
12192     case ZERO_EXTRACT:
12193     case SIGN_EXTRACT:
12194       if (CONST_INT_P (XEXP (rtl, 1))
12195           && CONST_INT_P (XEXP (rtl, 2))
12196           && ((unsigned) INTVAL (XEXP (rtl, 1))
12197               + (unsigned) INTVAL (XEXP (rtl, 2))
12198               <= GET_MODE_BITSIZE (mode))
12199           && GET_MODE_CLASS (mode) == MODE_INT
12200           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12201           && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
12202         {
12203           int shift, size;
12204           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12205                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
12206           if (op0 == 0)
12207             break;
12208           if (GET_CODE (rtl) == SIGN_EXTRACT)
12209             op = DW_OP_shra;
12210           else
12211             op = DW_OP_shr;
12212           mem_loc_result = op0;
12213           size = INTVAL (XEXP (rtl, 1));
12214           shift = INTVAL (XEXP (rtl, 2));
12215           if (BITS_BIG_ENDIAN)
12216             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12217                     - shift - size;
12218           if (shift + size != (int) DWARF2_ADDR_SIZE)
12219             {
12220               add_loc_descr (&mem_loc_result,
12221                              int_loc_descriptor (DWARF2_ADDR_SIZE
12222                                                  - shift - size));
12223               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12224             }
12225           if (size != (int) DWARF2_ADDR_SIZE)
12226             {
12227               add_loc_descr (&mem_loc_result,
12228                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
12229               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12230             }
12231         }
12232       break;
12233
12234     case IF_THEN_ELSE:
12235       {
12236         dw_loc_descr_ref op2, bra_node, drop_node;
12237         op0 = mem_loc_descriptor (XEXP (rtl, 0),
12238                                   GET_MODE (XEXP (rtl, 0)) == VOIDmode
12239                                   ? word_mode : GET_MODE (XEXP (rtl, 0)),
12240                                   mem_mode, VAR_INIT_STATUS_INITIALIZED);
12241         op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12242                                   VAR_INIT_STATUS_INITIALIZED);
12243         op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
12244                                   VAR_INIT_STATUS_INITIALIZED);
12245         if (op0 == NULL || op1 == NULL || op2 == NULL)
12246           break;
12247
12248         mem_loc_result = op1;
12249         add_loc_descr (&mem_loc_result, op2);
12250         add_loc_descr (&mem_loc_result, op0);
12251         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12252         add_loc_descr (&mem_loc_result, bra_node);
12253         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
12254         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12255         add_loc_descr (&mem_loc_result, drop_node);
12256         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12257         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12258       }
12259       break;
12260
12261     case FLOAT_EXTEND:
12262     case FLOAT_TRUNCATE:
12263     case FLOAT:
12264     case UNSIGNED_FLOAT:
12265     case FIX:
12266     case UNSIGNED_FIX:
12267       if (!dwarf_strict)
12268         {
12269           dw_die_ref type_die;
12270           dw_loc_descr_ref cvt;
12271
12272           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12273                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
12274           if (op0 == NULL)
12275             break;
12276           if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
12277               && (GET_CODE (rtl) == FLOAT
12278                   || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
12279                      <= DWARF2_ADDR_SIZE))
12280             {
12281               type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12282                                              GET_CODE (rtl) == UNSIGNED_FLOAT);
12283               if (type_die == NULL)
12284                 break;
12285               cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12286               cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12287               cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12288               cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12289               add_loc_descr (&op0, cvt);
12290             }
12291           type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
12292           if (type_die == NULL)
12293             break;
12294           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12295           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12296           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12297           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12298           add_loc_descr (&op0, cvt);
12299           if (GET_MODE_CLASS (mode) == MODE_INT
12300               && (GET_CODE (rtl) == FIX
12301                   || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
12302             {
12303               op0 = convert_descriptor_to_mode (mode, op0);
12304               if (op0 == NULL)
12305                 break;
12306             }
12307           mem_loc_result = op0;
12308         }
12309       break;
12310
12311     case CLZ:
12312     case CTZ:
12313     case FFS:
12314       mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
12315       break;
12316
12317     case POPCOUNT:
12318     case PARITY:
12319       mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
12320       break;
12321
12322     case BSWAP:
12323       mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
12324       break;
12325
12326     case ROTATE:
12327     case ROTATERT:
12328       mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
12329       break;
12330
12331     case COMPARE:
12332     case TRUNCATE:
12333       /* In theory, we could implement the above.  */
12334       /* DWARF cannot represent the unsigned compare operations
12335          natively.  */
12336     case SS_MULT:
12337     case US_MULT:
12338     case SS_DIV:
12339     case US_DIV:
12340     case SS_PLUS:
12341     case US_PLUS:
12342     case SS_MINUS:
12343     case US_MINUS:
12344     case SS_NEG:
12345     case US_NEG:
12346     case SS_ABS:
12347     case SS_ASHIFT:
12348     case US_ASHIFT:
12349     case SS_TRUNCATE:
12350     case US_TRUNCATE:
12351     case UNORDERED:
12352     case ORDERED:
12353     case UNEQ:
12354     case UNGE:
12355     case UNGT:
12356     case UNLE:
12357     case UNLT:
12358     case LTGT:
12359     case FRACT_CONVERT:
12360     case UNSIGNED_FRACT_CONVERT:
12361     case SAT_FRACT:
12362     case UNSIGNED_SAT_FRACT:
12363     case SQRT:
12364     case ASM_OPERANDS:
12365     case VEC_MERGE:
12366     case VEC_SELECT:
12367     case VEC_CONCAT:
12368     case VEC_DUPLICATE:
12369     case UNSPEC:
12370     case HIGH:
12371     case FMA:
12372     case STRICT_LOW_PART:
12373     case CONST_VECTOR:
12374     case CONST_FIXED:
12375     case CLRSB:
12376       /* If delegitimize_address couldn't do anything with the UNSPEC, we
12377          can't express it in the debug info.  This can happen e.g. with some
12378          TLS UNSPECs.  */
12379       break;
12380
12381     case CONST_STRING:
12382       resolve_one_addr (&rtl, NULL);
12383       goto symref;
12384
12385     default:
12386 #ifdef ENABLE_CHECKING
12387       print_rtl (stderr, rtl);
12388       gcc_unreachable ();
12389 #else
12390       break;
12391 #endif
12392     }
12393
12394   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12395     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12396
12397   return mem_loc_result;
12398 }
12399
12400 /* Return a descriptor that describes the concatenation of two locations.
12401    This is typically a complex variable.  */
12402
12403 static dw_loc_descr_ref
12404 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
12405 {
12406   dw_loc_descr_ref cc_loc_result = NULL;
12407   dw_loc_descr_ref x0_ref
12408     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12409   dw_loc_descr_ref x1_ref
12410     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12411
12412   if (x0_ref == 0 || x1_ref == 0)
12413     return 0;
12414
12415   cc_loc_result = x0_ref;
12416   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
12417
12418   add_loc_descr (&cc_loc_result, x1_ref);
12419   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
12420
12421   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12422     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12423
12424   return cc_loc_result;
12425 }
12426
12427 /* Return a descriptor that describes the concatenation of N
12428    locations.  */
12429
12430 static dw_loc_descr_ref
12431 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
12432 {
12433   unsigned int i;
12434   dw_loc_descr_ref cc_loc_result = NULL;
12435   unsigned int n = XVECLEN (concatn, 0);
12436
12437   for (i = 0; i < n; ++i)
12438     {
12439       dw_loc_descr_ref ref;
12440       rtx x = XVECEXP (concatn, 0, i);
12441
12442       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12443       if (ref == NULL)
12444         return NULL;
12445
12446       add_loc_descr (&cc_loc_result, ref);
12447       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
12448     }
12449
12450   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12451     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12452
12453   return cc_loc_result;
12454 }
12455
12456 /* Helper function for loc_descriptor.  Return DW_OP_GNU_implicit_pointer
12457    for DEBUG_IMPLICIT_PTR RTL.  */
12458
12459 static dw_loc_descr_ref
12460 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
12461 {
12462   dw_loc_descr_ref ret;
12463   dw_die_ref ref;
12464
12465   if (dwarf_strict)
12466     return NULL;
12467   gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
12468               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
12469               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
12470   ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
12471   ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
12472   ret->dw_loc_oprnd2.val_class = dw_val_class_const;
12473   if (ref)
12474     {
12475       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12476       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12477       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12478     }
12479   else
12480     {
12481       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12482       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
12483     }
12484   return ret;
12485 }
12486
12487 /* Output a proper Dwarf location descriptor for a variable or parameter
12488    which is either allocated in a register or in a memory location.  For a
12489    register, we just generate an OP_REG and the register number.  For a
12490    memory location we provide a Dwarf postfix expression describing how to
12491    generate the (dynamic) address of the object onto the address stack.
12492
12493    MODE is mode of the decl if this loc_descriptor is going to be used in
12494    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
12495    allowed, VOIDmode otherwise.
12496
12497    If we don't know how to describe it, return 0.  */
12498
12499 static dw_loc_descr_ref
12500 loc_descriptor (rtx rtl, enum machine_mode mode,
12501                 enum var_init_status initialized)
12502 {
12503   dw_loc_descr_ref loc_result = NULL;
12504
12505   switch (GET_CODE (rtl))
12506     {
12507     case SUBREG:
12508       /* The case of a subreg may arise when we have a local (register)
12509          variable or a formal (register) parameter which doesn't quite fill
12510          up an entire register.  For now, just assume that it is
12511          legitimate to make the Dwarf info refer to the whole register which
12512          contains the given subreg.  */
12513       if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
12514         loc_result = loc_descriptor (SUBREG_REG (rtl),
12515                                      GET_MODE (SUBREG_REG (rtl)), initialized);
12516       else
12517         goto do_default;
12518       break;
12519
12520     case REG:
12521       loc_result = reg_loc_descriptor (rtl, initialized);
12522       break;
12523
12524     case MEM:
12525       loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
12526                                        GET_MODE (rtl), initialized);
12527       if (loc_result == NULL)
12528         loc_result = tls_mem_loc_descriptor (rtl);
12529       if (loc_result == NULL)
12530         {
12531           rtx new_rtl = avoid_constant_pool_reference (rtl);
12532           if (new_rtl != rtl)
12533             loc_result = loc_descriptor (new_rtl, mode, initialized);
12534         }
12535       break;
12536
12537     case CONCAT:
12538       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
12539                                           initialized);
12540       break;
12541
12542     case CONCATN:
12543       loc_result = concatn_loc_descriptor (rtl, initialized);
12544       break;
12545
12546     case VAR_LOCATION:
12547       /* Single part.  */
12548       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
12549         {
12550           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
12551           if (GET_CODE (loc) == EXPR_LIST)
12552             loc = XEXP (loc, 0);
12553           loc_result = loc_descriptor (loc, mode, initialized);
12554           break;
12555         }
12556
12557       rtl = XEXP (rtl, 1);
12558       /* FALLTHRU */
12559
12560     case PARALLEL:
12561       {
12562         rtvec par_elems = XVEC (rtl, 0);
12563         int num_elem = GET_NUM_ELEM (par_elems);
12564         enum machine_mode mode;
12565         int i;
12566
12567         /* Create the first one, so we have something to add to.  */
12568         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
12569                                      VOIDmode, initialized);
12570         if (loc_result == NULL)
12571           return NULL;
12572         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
12573         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12574         for (i = 1; i < num_elem; i++)
12575           {
12576             dw_loc_descr_ref temp;
12577
12578             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
12579                                    VOIDmode, initialized);
12580             if (temp == NULL)
12581               return NULL;
12582             add_loc_descr (&loc_result, temp);
12583             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
12584             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12585           }
12586       }
12587       break;
12588
12589     case CONST_INT:
12590       if (mode != VOIDmode && mode != BLKmode)
12591         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
12592                                                     INTVAL (rtl));
12593       break;
12594
12595     case CONST_DOUBLE:
12596       if (mode == VOIDmode)
12597         mode = GET_MODE (rtl);
12598
12599       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12600         {
12601           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12602
12603           /* Note that a CONST_DOUBLE rtx could represent either an integer
12604              or a floating-point constant.  A CONST_DOUBLE is used whenever
12605              the constant requires more than one word in order to be
12606              adequately represented.  We output CONST_DOUBLEs as blocks.  */
12607           loc_result = new_loc_descr (DW_OP_implicit_value,
12608                                       GET_MODE_SIZE (mode), 0);
12609           if (SCALAR_FLOAT_MODE_P (mode))
12610             {
12611               unsigned int length = GET_MODE_SIZE (mode);
12612               unsigned char *array
12613                   = (unsigned char*) ggc_alloc_atomic (length);
12614
12615               insert_float (rtl, array);
12616               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12617               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12618               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12619               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12620             }
12621           else
12622             {
12623               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
12624               loc_result->dw_loc_oprnd2.v.val_double
12625                 = rtx_to_double_int (rtl);
12626             }
12627         }
12628       break;
12629
12630     case CONST_VECTOR:
12631       if (mode == VOIDmode)
12632         mode = GET_MODE (rtl);
12633
12634       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12635         {
12636           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
12637           unsigned int length = CONST_VECTOR_NUNITS (rtl);
12638           unsigned char *array = (unsigned char *)
12639             ggc_alloc_atomic (length * elt_size);
12640           unsigned int i;
12641           unsigned char *p;
12642
12643           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12644           switch (GET_MODE_CLASS (mode))
12645             {
12646             case MODE_VECTOR_INT:
12647               for (i = 0, p = array; i < length; i++, p += elt_size)
12648                 {
12649                   rtx elt = CONST_VECTOR_ELT (rtl, i);
12650                   double_int val = rtx_to_double_int (elt);
12651
12652                   if (elt_size <= sizeof (HOST_WIDE_INT))
12653                     insert_int (double_int_to_shwi (val), elt_size, p);
12654                   else
12655                     {
12656                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
12657                       insert_double (val, p);
12658                     }
12659                 }
12660               break;
12661
12662             case MODE_VECTOR_FLOAT:
12663               for (i = 0, p = array; i < length; i++, p += elt_size)
12664                 {
12665                   rtx elt = CONST_VECTOR_ELT (rtl, i);
12666                   insert_float (elt, p);
12667                 }
12668               break;
12669
12670             default:
12671               gcc_unreachable ();
12672             }
12673
12674           loc_result = new_loc_descr (DW_OP_implicit_value,
12675                                       length * elt_size, 0);
12676           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12677           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
12678           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
12679           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12680         }
12681       break;
12682
12683     case CONST:
12684       if (mode == VOIDmode
12685           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
12686           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
12687           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
12688         {
12689           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
12690           break;
12691         }
12692       /* FALLTHROUGH */
12693     case SYMBOL_REF:
12694       if (!const_ok_for_output (rtl))
12695         break;
12696     case LABEL_REF:
12697       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
12698           && (dwarf_version >= 4 || !dwarf_strict))
12699         {
12700           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
12701           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
12702           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
12703           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
12704           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
12705         }
12706       break;
12707
12708     case DEBUG_IMPLICIT_PTR:
12709       loc_result = implicit_ptr_descriptor (rtl, 0);
12710       break;
12711
12712     case PLUS:
12713       if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
12714           && CONST_INT_P (XEXP (rtl, 1)))
12715         {
12716           loc_result
12717             = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
12718           break;
12719         }
12720       /* FALLTHRU */
12721     do_default:
12722     default:
12723       if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
12724            && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
12725            && dwarf_version >= 4)
12726           || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
12727         {
12728           /* Value expression.  */
12729           loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
12730           if (loc_result)
12731             add_loc_descr (&loc_result,
12732                            new_loc_descr (DW_OP_stack_value, 0, 0));
12733         }
12734       break;
12735     }
12736
12737   return loc_result;
12738 }
12739
12740 /* We need to figure out what section we should use as the base for the
12741    address ranges where a given location is valid.
12742    1. If this particular DECL has a section associated with it, use that.
12743    2. If this function has a section associated with it, use that.
12744    3. Otherwise, use the text section.
12745    XXX: If you split a variable across multiple sections, we won't notice.  */
12746
12747 static const char *
12748 secname_for_decl (const_tree decl)
12749 {
12750   const char *secname;
12751
12752   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
12753     {
12754       tree sectree = DECL_SECTION_NAME (decl);
12755       secname = TREE_STRING_POINTER (sectree);
12756     }
12757   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
12758     {
12759       tree sectree = DECL_SECTION_NAME (current_function_decl);
12760       secname = TREE_STRING_POINTER (sectree);
12761     }
12762   else if (cfun && in_cold_section_p)
12763     secname = crtl->subsections.cold_section_label;
12764   else
12765     secname = text_section_label;
12766
12767   return secname;
12768 }
12769
12770 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
12771
12772 static bool
12773 decl_by_reference_p (tree decl)
12774 {
12775   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
12776            || TREE_CODE (decl) == VAR_DECL)
12777           && DECL_BY_REFERENCE (decl));
12778 }
12779
12780 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12781    for VARLOC.  */
12782
12783 static dw_loc_descr_ref
12784 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
12785                enum var_init_status initialized)
12786 {
12787   int have_address = 0;
12788   dw_loc_descr_ref descr;
12789   enum machine_mode mode;
12790
12791   if (want_address != 2)
12792     {
12793       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
12794       /* Single part.  */
12795       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12796         {
12797           varloc = PAT_VAR_LOCATION_LOC (varloc);
12798           if (GET_CODE (varloc) == EXPR_LIST)
12799             varloc = XEXP (varloc, 0);
12800           mode = GET_MODE (varloc);
12801           if (MEM_P (varloc))
12802             {
12803               rtx addr = XEXP (varloc, 0);
12804               descr = mem_loc_descriptor (addr, get_address_mode (varloc),
12805                                           mode, initialized);
12806               if (descr)
12807                 have_address = 1;
12808               else
12809                 {
12810                   rtx x = avoid_constant_pool_reference (varloc);
12811                   if (x != varloc)
12812                     descr = mem_loc_descriptor (x, mode, VOIDmode,
12813                                                 initialized);
12814                 }
12815             }
12816           else
12817             descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
12818         }
12819       else
12820         return 0;
12821     }
12822   else
12823     {
12824       if (GET_CODE (varloc) == VAR_LOCATION)
12825         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
12826       else
12827         mode = DECL_MODE (loc);
12828       descr = loc_descriptor (varloc, mode, initialized);
12829       have_address = 1;
12830     }
12831
12832   if (!descr)
12833     return 0;
12834
12835   if (want_address == 2 && !have_address
12836       && (dwarf_version >= 4 || !dwarf_strict))
12837     {
12838       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
12839         {
12840           expansion_failed (loc, NULL_RTX,
12841                             "DWARF address size mismatch");
12842           return 0;
12843         }
12844       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
12845       have_address = 1;
12846     }
12847   /* Show if we can't fill the request for an address.  */
12848   if (want_address && !have_address)
12849     {
12850       expansion_failed (loc, NULL_RTX,
12851                         "Want address and only have value");
12852       return 0;
12853     }
12854
12855   /* If we've got an address and don't want one, dereference.  */
12856   if (!want_address && have_address)
12857     {
12858       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
12859       enum dwarf_location_atom op;
12860
12861       if (size > DWARF2_ADDR_SIZE || size == -1)
12862         {
12863           expansion_failed (loc, NULL_RTX,
12864                             "DWARF address size mismatch");
12865           return 0;
12866         }
12867       else if (size == DWARF2_ADDR_SIZE)
12868         op = DW_OP_deref;
12869       else
12870         op = DW_OP_deref_size;
12871
12872       add_loc_descr (&descr, new_loc_descr (op, size, 0));
12873     }
12874
12875   return descr;
12876 }
12877
12878 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
12879    if it is not possible.  */
12880
12881 static dw_loc_descr_ref
12882 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
12883 {
12884   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
12885     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
12886   else if (dwarf_version >= 3 || !dwarf_strict)
12887     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
12888   else
12889     return NULL;
12890 }
12891
12892 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12893    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
12894
12895 static dw_loc_descr_ref
12896 dw_sra_loc_expr (tree decl, rtx loc)
12897 {
12898   rtx p;
12899   unsigned int padsize = 0;
12900   dw_loc_descr_ref descr, *descr_tail;
12901   unsigned HOST_WIDE_INT decl_size;
12902   rtx varloc;
12903   enum var_init_status initialized;
12904
12905   if (DECL_SIZE (decl) == NULL
12906       || !host_integerp (DECL_SIZE (decl), 1))
12907     return NULL;
12908
12909   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
12910   descr = NULL;
12911   descr_tail = &descr;
12912
12913   for (p = loc; p; p = XEXP (p, 1))
12914     {
12915       unsigned int bitsize = decl_piece_bitsize (p);
12916       rtx loc_note = *decl_piece_varloc_ptr (p);
12917       dw_loc_descr_ref cur_descr;
12918       dw_loc_descr_ref *tail, last = NULL;
12919       unsigned int opsize = 0;
12920
12921       if (loc_note == NULL_RTX
12922           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
12923         {
12924           padsize += bitsize;
12925           continue;
12926         }
12927       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
12928       varloc = NOTE_VAR_LOCATION (loc_note);
12929       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
12930       if (cur_descr == NULL)
12931         {
12932           padsize += bitsize;
12933           continue;
12934         }
12935
12936       /* Check that cur_descr either doesn't use
12937          DW_OP_*piece operations, or their sum is equal
12938          to bitsize.  Otherwise we can't embed it.  */
12939       for (tail = &cur_descr; *tail != NULL;
12940            tail = &(*tail)->dw_loc_next)
12941         if ((*tail)->dw_loc_opc == DW_OP_piece)
12942           {
12943             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
12944                       * BITS_PER_UNIT;
12945             last = *tail;
12946           }
12947         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
12948           {
12949             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
12950             last = *tail;
12951           }
12952
12953       if (last != NULL && opsize != bitsize)
12954         {
12955           padsize += bitsize;
12956           continue;
12957         }
12958
12959       /* If there is a hole, add DW_OP_*piece after empty DWARF
12960          expression, which means that those bits are optimized out.  */
12961       if (padsize)
12962         {
12963           if (padsize > decl_size)
12964             return NULL;
12965           decl_size -= padsize;
12966           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
12967           if (*descr_tail == NULL)
12968             return NULL;
12969           descr_tail = &(*descr_tail)->dw_loc_next;
12970           padsize = 0;
12971         }
12972       *descr_tail = cur_descr;
12973       descr_tail = tail;
12974       if (bitsize > decl_size)
12975         return NULL;
12976       decl_size -= bitsize;
12977       if (last == NULL)
12978         {
12979           HOST_WIDE_INT offset = 0;
12980           if (GET_CODE (varloc) == VAR_LOCATION
12981               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12982             {
12983               varloc = PAT_VAR_LOCATION_LOC (varloc);
12984               if (GET_CODE (varloc) == EXPR_LIST)
12985                 varloc = XEXP (varloc, 0);
12986             }
12987           do 
12988             {
12989               if (GET_CODE (varloc) == CONST
12990                   || GET_CODE (varloc) == SIGN_EXTEND
12991                   || GET_CODE (varloc) == ZERO_EXTEND)
12992                 varloc = XEXP (varloc, 0);
12993               else if (GET_CODE (varloc) == SUBREG)
12994                 varloc = SUBREG_REG (varloc);
12995               else
12996                 break;
12997             }
12998           while (1);
12999           /* DW_OP_bit_size offset should be zero for register
13000              or implicit location descriptions and empty location
13001              descriptions, but for memory addresses needs big endian
13002              adjustment.  */
13003           if (MEM_P (varloc))
13004             {
13005               unsigned HOST_WIDE_INT memsize
13006                 = MEM_SIZE (varloc) * BITS_PER_UNIT;
13007               if (memsize != bitsize)
13008                 {
13009                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
13010                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
13011                     return NULL;
13012                   if (memsize < bitsize)
13013                     return NULL;
13014                   if (BITS_BIG_ENDIAN)
13015                     offset = memsize - bitsize;
13016                 }
13017             }
13018
13019           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
13020           if (*descr_tail == NULL)
13021             return NULL;
13022           descr_tail = &(*descr_tail)->dw_loc_next;
13023         }
13024     }
13025
13026   /* If there were any non-empty expressions, add padding till the end of
13027      the decl.  */
13028   if (descr != NULL && decl_size != 0)
13029     {
13030       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
13031       if (*descr_tail == NULL)
13032         return NULL;
13033     }
13034   return descr;
13035 }
13036
13037 /* Return the dwarf representation of the location list LOC_LIST of
13038    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
13039    function.  */
13040
13041 static dw_loc_list_ref
13042 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
13043 {
13044   const char *endname, *secname;
13045   rtx varloc;
13046   enum var_init_status initialized;
13047   struct var_loc_node *node;
13048   dw_loc_descr_ref descr;
13049   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13050   dw_loc_list_ref list = NULL;
13051   dw_loc_list_ref *listp = &list;
13052
13053   /* Now that we know what section we are using for a base,
13054      actually construct the list of locations.
13055      The first location information is what is passed to the
13056      function that creates the location list, and the remaining
13057      locations just get added on to that list.
13058      Note that we only know the start address for a location
13059      (IE location changes), so to build the range, we use
13060      the range [current location start, next location start].
13061      This means we have to special case the last node, and generate
13062      a range of [last location start, end of function label].  */
13063
13064   secname = secname_for_decl (decl);
13065
13066   for (node = loc_list->first; node; node = node->next)
13067     if (GET_CODE (node->loc) == EXPR_LIST
13068         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
13069       {
13070         if (GET_CODE (node->loc) == EXPR_LIST)
13071           {
13072             /* This requires DW_OP_{,bit_}piece, which is not usable
13073                inside DWARF expressions.  */
13074             if (want_address != 2)
13075               continue;
13076             descr = dw_sra_loc_expr (decl, node->loc);
13077             if (descr == NULL)
13078               continue;
13079           }
13080         else
13081           {
13082             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13083             varloc = NOTE_VAR_LOCATION (node->loc);
13084             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13085           }
13086         if (descr)
13087           {
13088             bool range_across_switch = false;
13089             /* If section switch happens in between node->label
13090                and node->next->label (or end of function) and
13091                we can't emit it as a single entry list,
13092                emit two ranges, first one ending at the end
13093                of first partition and second one starting at the
13094                beginning of second partition.  */
13095             if (node == loc_list->last_before_switch
13096                 && (node != loc_list->first || loc_list->first->next)
13097                 && current_function_decl)
13098               {
13099                 endname = cfun->fde->dw_fde_end;
13100                 range_across_switch = true;
13101               }
13102             /* The variable has a location between NODE->LABEL and
13103                NODE->NEXT->LABEL.  */
13104             else if (node->next)
13105               endname = node->next->label;
13106             /* If the variable has a location at the last label
13107                it keeps its location until the end of function.  */
13108             else if (!current_function_decl)
13109               endname = text_end_label;
13110             else
13111               {
13112                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
13113                                              current_function_funcdef_no);
13114                 endname = ggc_strdup (label_id);
13115               }
13116
13117             *listp = new_loc_list (descr, node->label, endname, secname);
13118             if (TREE_CODE (decl) == PARM_DECL
13119                 && node == loc_list->first
13120                 && GET_CODE (node->loc) == NOTE
13121                 && strcmp (node->label, endname) == 0)
13122               (*listp)->force = true;
13123             listp = &(*listp)->dw_loc_next;
13124
13125             if (range_across_switch)
13126               {
13127                 if (GET_CODE (node->loc) == EXPR_LIST)
13128                   descr = dw_sra_loc_expr (decl, node->loc);
13129                 else
13130                   {
13131                     initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13132                     varloc = NOTE_VAR_LOCATION (node->loc);
13133                     descr = dw_loc_list_1 (decl, varloc, want_address,
13134                                            initialized);
13135                   }
13136                 gcc_assert (descr);
13137                 /* The variable has a location between NODE->LABEL and
13138                    NODE->NEXT->LABEL.  */
13139                 if (node->next)
13140                   endname = node->next->label;
13141                 else
13142                   endname = cfun->fde->dw_fde_second_end;
13143                 *listp = new_loc_list (descr,
13144                                        cfun->fde->dw_fde_second_begin,
13145                                        endname, secname);
13146                 listp = &(*listp)->dw_loc_next;
13147               }
13148           }
13149       }
13150
13151   /* Try to avoid the overhead of a location list emitting a location
13152      expression instead, but only if we didn't have more than one
13153      location entry in the first place.  If some entries were not
13154      representable, we don't want to pretend a single entry that was
13155      applies to the entire scope in which the variable is
13156      available.  */
13157   if (list && loc_list->first->next)
13158     gen_llsym (list);
13159
13160   return list;
13161 }
13162
13163 /* Return if the loc_list has only single element and thus can be represented
13164    as location description.   */
13165
13166 static bool
13167 single_element_loc_list_p (dw_loc_list_ref list)
13168 {
13169   gcc_assert (!list->dw_loc_next || list->ll_symbol);
13170   return !list->ll_symbol;
13171 }
13172
13173 /* To each location in list LIST add loc descr REF.  */
13174
13175 static void
13176 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
13177 {
13178   dw_loc_descr_ref copy;
13179   add_loc_descr (&list->expr, ref);
13180   list = list->dw_loc_next;
13181   while (list)
13182     {
13183       copy = ggc_alloc_dw_loc_descr_node ();
13184       memcpy (copy, ref, sizeof (dw_loc_descr_node));
13185       add_loc_descr (&list->expr, copy);
13186       while (copy->dw_loc_next)
13187         {
13188           dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node ();
13189           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
13190           copy->dw_loc_next = new_copy;
13191           copy = new_copy;
13192         }
13193       list = list->dw_loc_next;
13194     }
13195 }
13196
13197 /* Given two lists RET and LIST
13198    produce location list that is result of adding expression in LIST
13199    to expression in RET on each possition in program.
13200    Might be destructive on both RET and LIST.
13201
13202    TODO: We handle only simple cases of RET or LIST having at most one
13203    element. General case would inolve sorting the lists in program order
13204    and merging them that will need some additional work.
13205    Adding that will improve quality of debug info especially for SRA-ed
13206    structures.  */
13207
13208 static void
13209 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
13210 {
13211   if (!list)
13212     return;
13213   if (!*ret)
13214     {
13215       *ret = list;
13216       return;
13217     }
13218   if (!list->dw_loc_next)
13219     {
13220       add_loc_descr_to_each (*ret, list->expr);
13221       return;
13222     }
13223   if (!(*ret)->dw_loc_next)
13224     {
13225       add_loc_descr_to_each (list, (*ret)->expr);
13226       *ret = list;
13227       return;
13228     }
13229   expansion_failed (NULL_TREE, NULL_RTX,
13230                     "Don't know how to merge two non-trivial"
13231                     " location lists.\n");
13232   *ret = NULL;
13233   return;
13234 }
13235
13236 /* LOC is constant expression.  Try a luck, look it up in constant
13237    pool and return its loc_descr of its address.  */
13238
13239 static dw_loc_descr_ref
13240 cst_pool_loc_descr (tree loc)
13241 {
13242   /* Get an RTL for this, if something has been emitted.  */
13243   rtx rtl = lookup_constant_def (loc);
13244
13245   if (!rtl || !MEM_P (rtl))
13246     {
13247       gcc_assert (!rtl);
13248       return 0;
13249     }
13250   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
13251
13252   /* TODO: We might get more coverage if we was actually delaying expansion
13253      of all expressions till end of compilation when constant pools are fully
13254      populated.  */
13255   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
13256     {
13257       expansion_failed (loc, NULL_RTX,
13258                         "CST value in contant pool but not marked.");
13259       return 0;
13260     }
13261   return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13262                              GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
13263 }
13264
13265 /* Return dw_loc_list representing address of addr_expr LOC
13266    by looking for innder INDIRECT_REF expression and turing it
13267    into simple arithmetics.  */
13268
13269 static dw_loc_list_ref
13270 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
13271 {
13272   tree obj, offset;
13273   HOST_WIDE_INT bitsize, bitpos, bytepos;
13274   enum machine_mode mode;
13275   int volatilep;
13276   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13277   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13278
13279   obj = get_inner_reference (TREE_OPERAND (loc, 0),
13280                              &bitsize, &bitpos, &offset, &mode,
13281                              &unsignedp, &volatilep, false);
13282   STRIP_NOPS (obj);
13283   if (bitpos % BITS_PER_UNIT)
13284     {
13285       expansion_failed (loc, NULL_RTX, "bitfield access");
13286       return 0;
13287     }
13288   if (!INDIRECT_REF_P (obj))
13289     {
13290       expansion_failed (obj,
13291                         NULL_RTX, "no indirect ref in inner refrence");
13292       return 0;
13293     }
13294   if (!offset && !bitpos)
13295     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
13296   else if (toplev
13297            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
13298            && (dwarf_version >= 4 || !dwarf_strict))
13299     {
13300       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
13301       if (!list_ret)
13302         return 0;
13303       if (offset)
13304         {
13305           /* Variable offset.  */
13306           list_ret1 = loc_list_from_tree (offset, 0);
13307           if (list_ret1 == 0)
13308             return 0;
13309           add_loc_list (&list_ret, list_ret1);
13310           if (!list_ret)
13311             return 0;
13312           add_loc_descr_to_each (list_ret,
13313                                  new_loc_descr (DW_OP_plus, 0, 0));
13314         }
13315       bytepos = bitpos / BITS_PER_UNIT;
13316       if (bytepos > 0)
13317         add_loc_descr_to_each (list_ret,
13318                                new_loc_descr (DW_OP_plus_uconst,
13319                                               bytepos, 0));
13320       else if (bytepos < 0)
13321         loc_list_plus_const (list_ret, bytepos);
13322       add_loc_descr_to_each (list_ret,
13323                              new_loc_descr (DW_OP_stack_value, 0, 0));
13324     }
13325   return list_ret;
13326 }
13327
13328
13329 /* Generate Dwarf location list representing LOC.
13330    If WANT_ADDRESS is false, expression computing LOC will be computed
13331    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
13332    if WANT_ADDRESS is 2, expression computing address useable in location
13333      will be returned (i.e. DW_OP_reg can be used
13334      to refer to register values).  */
13335
13336 static dw_loc_list_ref
13337 loc_list_from_tree (tree loc, int want_address)
13338 {
13339   dw_loc_descr_ref ret = NULL, ret1 = NULL;
13340   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13341   int have_address = 0;
13342   enum dwarf_location_atom op;
13343
13344   /* ??? Most of the time we do not take proper care for sign/zero
13345      extending the values properly.  Hopefully this won't be a real
13346      problem...  */
13347
13348   switch (TREE_CODE (loc))
13349     {
13350     case ERROR_MARK:
13351       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
13352       return 0;
13353
13354     case PLACEHOLDER_EXPR:
13355       /* This case involves extracting fields from an object to determine the
13356          position of other fields.  We don't try to encode this here.  The
13357          only user of this is Ada, which encodes the needed information using
13358          the names of types.  */
13359       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
13360       return 0;
13361
13362     case CALL_EXPR:
13363       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
13364       /* There are no opcodes for these operations.  */
13365       return 0;
13366
13367     case PREINCREMENT_EXPR:
13368     case PREDECREMENT_EXPR:
13369     case POSTINCREMENT_EXPR:
13370     case POSTDECREMENT_EXPR:
13371       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
13372       /* There are no opcodes for these operations.  */
13373       return 0;
13374
13375     case ADDR_EXPR:
13376       /* If we already want an address, see if there is INDIRECT_REF inside
13377          e.g. for &this->field.  */
13378       if (want_address)
13379         {
13380           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
13381                        (loc, want_address == 2);
13382           if (list_ret)
13383             have_address = 1;
13384           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
13385                    && (ret = cst_pool_loc_descr (loc)))
13386             have_address = 1;
13387         }
13388         /* Otherwise, process the argument and look for the address.  */
13389       if (!list_ret && !ret)
13390         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
13391       else
13392         {
13393           if (want_address)
13394             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
13395           return NULL;
13396         }
13397       break;
13398
13399     case VAR_DECL:
13400       if (DECL_THREAD_LOCAL_P (loc))
13401         {
13402           rtx rtl;
13403           enum dwarf_location_atom first_op;
13404           enum dwarf_location_atom second_op;
13405           bool dtprel = false;
13406
13407           if (targetm.have_tls)
13408             {
13409               /* If this is not defined, we have no way to emit the
13410                  data.  */
13411               if (!targetm.asm_out.output_dwarf_dtprel)
13412                 return 0;
13413
13414                /* The way DW_OP_GNU_push_tls_address is specified, we
13415                   can only look up addresses of objects in the current
13416                   module.  We used DW_OP_addr as first op, but that's
13417                   wrong, because DW_OP_addr is relocated by the debug
13418                   info consumer, while DW_OP_GNU_push_tls_address
13419                   operand shouldn't be.  */
13420               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
13421                 return 0;
13422               first_op = DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u;
13423               dtprel = true;
13424               second_op = DW_OP_GNU_push_tls_address;
13425             }
13426           else
13427             {
13428               if (!targetm.emutls.debug_form_tls_address
13429                   || !(dwarf_version >= 3 || !dwarf_strict))
13430                 return 0;
13431               /* We stuffed the control variable into the DECL_VALUE_EXPR
13432                  to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
13433                  no longer appear in gimple code.  We used the control
13434                  variable in specific so that we could pick it up here.  */
13435               loc = DECL_VALUE_EXPR (loc);
13436               first_op = DW_OP_addr;
13437               second_op = DW_OP_form_tls_address;
13438             }
13439
13440           rtl = rtl_for_decl_location (loc);
13441           if (rtl == NULL_RTX)
13442             return 0;
13443
13444           if (!MEM_P (rtl))
13445             return 0;
13446           rtl = XEXP (rtl, 0);
13447           if (! CONSTANT_P (rtl))
13448             return 0;
13449
13450           ret = new_loc_descr (first_op, 0, 0);
13451           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13452           ret->dw_loc_oprnd1.v.val_addr = rtl;
13453           ret->dtprel = dtprel;
13454
13455           ret1 = new_loc_descr (second_op, 0, 0);
13456           add_loc_descr (&ret, ret1);
13457
13458           have_address = 1;
13459           break;
13460         }
13461       /* FALLTHRU */
13462
13463     case PARM_DECL:
13464     case RESULT_DECL:
13465       if (DECL_HAS_VALUE_EXPR_P (loc))
13466         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
13467                                    want_address);
13468       /* FALLTHRU */
13469
13470     case FUNCTION_DECL:
13471       {
13472         rtx rtl;
13473         var_loc_list *loc_list = lookup_decl_loc (loc);
13474
13475         if (loc_list && loc_list->first)
13476           {
13477             list_ret = dw_loc_list (loc_list, loc, want_address);
13478             have_address = want_address != 0;
13479             break;
13480           }
13481         rtl = rtl_for_decl_location (loc);
13482         if (rtl == NULL_RTX)
13483           {
13484             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
13485             return 0;
13486           }
13487         else if (CONST_INT_P (rtl))
13488           {
13489             HOST_WIDE_INT val = INTVAL (rtl);
13490             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13491               val &= GET_MODE_MASK (DECL_MODE (loc));
13492             ret = int_loc_descriptor (val);
13493           }
13494         else if (GET_CODE (rtl) == CONST_STRING)
13495           {
13496             expansion_failed (loc, NULL_RTX, "CONST_STRING");
13497             return 0;
13498           }
13499         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
13500           {
13501             ret = new_loc_descr (DW_OP_addr, 0, 0);
13502             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13503             ret->dw_loc_oprnd1.v.val_addr = rtl;
13504           }
13505         else
13506           {
13507             enum machine_mode mode, mem_mode;
13508
13509             /* Certain constructs can only be represented at top-level.  */
13510             if (want_address == 2)
13511               {
13512                 ret = loc_descriptor (rtl, VOIDmode,
13513                                       VAR_INIT_STATUS_INITIALIZED);
13514                 have_address = 1;
13515               }
13516             else
13517               {
13518                 mode = GET_MODE (rtl);
13519                 mem_mode = VOIDmode;
13520                 if (MEM_P (rtl))
13521                   {
13522                     mem_mode = mode;
13523                     mode = get_address_mode (rtl);
13524                     rtl = XEXP (rtl, 0);
13525                     have_address = 1;
13526                   }
13527                 ret = mem_loc_descriptor (rtl, mode, mem_mode,
13528                                           VAR_INIT_STATUS_INITIALIZED);
13529               }
13530             if (!ret)
13531               expansion_failed (loc, rtl,
13532                                 "failed to produce loc descriptor for rtl");
13533           }
13534       }
13535       break;
13536
13537     case MEM_REF:
13538       /* ??? FIXME.  */
13539       if (!integer_zerop (TREE_OPERAND (loc, 1)))
13540         return 0;
13541       /* Fallthru.  */
13542     case INDIRECT_REF:
13543       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13544       have_address = 1;
13545       break;
13546
13547     case COMPOUND_EXPR:
13548       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
13549
13550     CASE_CONVERT:
13551     case VIEW_CONVERT_EXPR:
13552     case SAVE_EXPR:
13553     case MODIFY_EXPR:
13554       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
13555
13556     case COMPONENT_REF:
13557     case BIT_FIELD_REF:
13558     case ARRAY_REF:
13559     case ARRAY_RANGE_REF:
13560     case REALPART_EXPR:
13561     case IMAGPART_EXPR:
13562       {
13563         tree obj, offset;
13564         HOST_WIDE_INT bitsize, bitpos, bytepos;
13565         enum machine_mode mode;
13566         int volatilep;
13567         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13568
13569         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
13570                                    &unsignedp, &volatilep, false);
13571
13572         gcc_assert (obj != loc);
13573
13574         list_ret = loc_list_from_tree (obj,
13575                                        want_address == 2
13576                                        && !bitpos && !offset ? 2 : 1);
13577         /* TODO: We can extract value of the small expression via shifting even
13578            for nonzero bitpos.  */
13579         if (list_ret == 0)
13580           return 0;
13581         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
13582           {
13583             expansion_failed (loc, NULL_RTX,
13584                               "bitfield access");
13585             return 0;
13586           }
13587
13588         if (offset != NULL_TREE)
13589           {
13590             /* Variable offset.  */
13591             list_ret1 = loc_list_from_tree (offset, 0);
13592             if (list_ret1 == 0)
13593               return 0;
13594             add_loc_list (&list_ret, list_ret1);
13595             if (!list_ret)
13596               return 0;
13597             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
13598           }
13599
13600         bytepos = bitpos / BITS_PER_UNIT;
13601         if (bytepos > 0)
13602           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
13603         else if (bytepos < 0)
13604           loc_list_plus_const (list_ret, bytepos);
13605
13606         have_address = 1;
13607         break;
13608       }
13609
13610     case INTEGER_CST:
13611       if ((want_address || !host_integerp (loc, 0))
13612           && (ret = cst_pool_loc_descr (loc)))
13613         have_address = 1;
13614       else if (want_address == 2
13615                && host_integerp (loc, 0)
13616                && (ret = address_of_int_loc_descriptor
13617                            (int_size_in_bytes (TREE_TYPE (loc)),
13618                             tree_low_cst (loc, 0))))
13619         have_address = 1;
13620       else if (host_integerp (loc, 0))
13621         ret = int_loc_descriptor (tree_low_cst (loc, 0));
13622       else
13623         {
13624           expansion_failed (loc, NULL_RTX,
13625                             "Integer operand is not host integer");
13626           return 0;
13627         }
13628       break;
13629
13630     case CONSTRUCTOR:
13631     case REAL_CST:
13632     case STRING_CST:
13633     case COMPLEX_CST:
13634       if ((ret = cst_pool_loc_descr (loc)))
13635         have_address = 1;
13636       else
13637       /* We can construct small constants here using int_loc_descriptor.  */
13638         expansion_failed (loc, NULL_RTX,
13639                           "constructor or constant not in constant pool");
13640       break;
13641
13642     case TRUTH_AND_EXPR:
13643     case TRUTH_ANDIF_EXPR:
13644     case BIT_AND_EXPR:
13645       op = DW_OP_and;
13646       goto do_binop;
13647
13648     case TRUTH_XOR_EXPR:
13649     case BIT_XOR_EXPR:
13650       op = DW_OP_xor;
13651       goto do_binop;
13652
13653     case TRUTH_OR_EXPR:
13654     case TRUTH_ORIF_EXPR:
13655     case BIT_IOR_EXPR:
13656       op = DW_OP_or;
13657       goto do_binop;
13658
13659     case FLOOR_DIV_EXPR:
13660     case CEIL_DIV_EXPR:
13661     case ROUND_DIV_EXPR:
13662     case TRUNC_DIV_EXPR:
13663       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13664         return 0;
13665       op = DW_OP_div;
13666       goto do_binop;
13667
13668     case MINUS_EXPR:
13669       op = DW_OP_minus;
13670       goto do_binop;
13671
13672     case FLOOR_MOD_EXPR:
13673     case CEIL_MOD_EXPR:
13674     case ROUND_MOD_EXPR:
13675     case TRUNC_MOD_EXPR:
13676       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13677         {
13678           op = DW_OP_mod;
13679           goto do_binop;
13680         }
13681       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13682       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13683       if (list_ret == 0 || list_ret1 == 0)
13684         return 0;
13685
13686       add_loc_list (&list_ret, list_ret1);
13687       if (list_ret == 0)
13688         return 0;
13689       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13690       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13691       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
13692       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
13693       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
13694       break;
13695
13696     case MULT_EXPR:
13697       op = DW_OP_mul;
13698       goto do_binop;
13699
13700     case LSHIFT_EXPR:
13701       op = DW_OP_shl;
13702       goto do_binop;
13703
13704     case RSHIFT_EXPR:
13705       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
13706       goto do_binop;
13707
13708     case POINTER_PLUS_EXPR:
13709     case PLUS_EXPR:
13710       if (host_integerp (TREE_OPERAND (loc, 1), 0))
13711         {
13712           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13713           if (list_ret == 0)
13714             return 0;
13715
13716           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
13717           break;
13718         }
13719
13720       op = DW_OP_plus;
13721       goto do_binop;
13722
13723     case LE_EXPR:
13724       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13725         return 0;
13726
13727       op = DW_OP_le;
13728       goto do_binop;
13729
13730     case GE_EXPR:
13731       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13732         return 0;
13733
13734       op = DW_OP_ge;
13735       goto do_binop;
13736
13737     case LT_EXPR:
13738       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13739         return 0;
13740
13741       op = DW_OP_lt;
13742       goto do_binop;
13743
13744     case GT_EXPR:
13745       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13746         return 0;
13747
13748       op = DW_OP_gt;
13749       goto do_binop;
13750
13751     case EQ_EXPR:
13752       op = DW_OP_eq;
13753       goto do_binop;
13754
13755     case NE_EXPR:
13756       op = DW_OP_ne;
13757       goto do_binop;
13758
13759     do_binop:
13760       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13761       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13762       if (list_ret == 0 || list_ret1 == 0)
13763         return 0;
13764
13765       add_loc_list (&list_ret, list_ret1);
13766       if (list_ret == 0)
13767         return 0;
13768       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13769       break;
13770
13771     case TRUTH_NOT_EXPR:
13772     case BIT_NOT_EXPR:
13773       op = DW_OP_not;
13774       goto do_unop;
13775
13776     case ABS_EXPR:
13777       op = DW_OP_abs;
13778       goto do_unop;
13779
13780     case NEGATE_EXPR:
13781       op = DW_OP_neg;
13782       goto do_unop;
13783
13784     do_unop:
13785       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13786       if (list_ret == 0)
13787         return 0;
13788
13789       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13790       break;
13791
13792     case MIN_EXPR:
13793     case MAX_EXPR:
13794       {
13795         const enum tree_code code =
13796           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
13797
13798         loc = build3 (COND_EXPR, TREE_TYPE (loc),
13799                       build2 (code, integer_type_node,
13800                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
13801                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
13802       }
13803
13804       /* ... fall through ...  */
13805
13806     case COND_EXPR:
13807       {
13808         dw_loc_descr_ref lhs
13809           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
13810         dw_loc_list_ref rhs
13811           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
13812         dw_loc_descr_ref bra_node, jump_node, tmp;
13813
13814         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13815         if (list_ret == 0 || lhs == 0 || rhs == 0)
13816           return 0;
13817
13818         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13819         add_loc_descr_to_each (list_ret, bra_node);
13820
13821         add_loc_list (&list_ret, rhs);
13822         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
13823         add_loc_descr_to_each (list_ret, jump_node);
13824
13825         add_loc_descr_to_each (list_ret, lhs);
13826         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13827         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
13828
13829         /* ??? Need a node to point the skip at.  Use a nop.  */
13830         tmp = new_loc_descr (DW_OP_nop, 0, 0);
13831         add_loc_descr_to_each (list_ret, tmp);
13832         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13833         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
13834       }
13835       break;
13836
13837     case FIX_TRUNC_EXPR:
13838       return 0;
13839
13840     default:
13841       /* Leave front-end specific codes as simply unknown.  This comes
13842          up, for instance, with the C STMT_EXPR.  */
13843       if ((unsigned int) TREE_CODE (loc)
13844           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
13845         {
13846           expansion_failed (loc, NULL_RTX,
13847                             "language specific tree node");
13848           return 0;
13849         }
13850
13851 #ifdef ENABLE_CHECKING
13852       /* Otherwise this is a generic code; we should just lists all of
13853          these explicitly.  We forgot one.  */
13854       gcc_unreachable ();
13855 #else
13856       /* In a release build, we want to degrade gracefully: better to
13857          generate incomplete debugging information than to crash.  */
13858       return NULL;
13859 #endif
13860     }
13861
13862   if (!ret && !list_ret)
13863     return 0;
13864
13865   if (want_address == 2 && !have_address
13866       && (dwarf_version >= 4 || !dwarf_strict))
13867     {
13868       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13869         {
13870           expansion_failed (loc, NULL_RTX,
13871                             "DWARF address size mismatch");
13872           return 0;
13873         }
13874       if (ret)
13875         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
13876       else
13877         add_loc_descr_to_each (list_ret,
13878                                new_loc_descr (DW_OP_stack_value, 0, 0));
13879       have_address = 1;
13880     }
13881   /* Show if we can't fill the request for an address.  */
13882   if (want_address && !have_address)
13883     {
13884       expansion_failed (loc, NULL_RTX,
13885                         "Want address and only have value");
13886       return 0;
13887     }
13888
13889   gcc_assert (!ret || !list_ret);
13890
13891   /* If we've got an address and don't want one, dereference.  */
13892   if (!want_address && have_address)
13893     {
13894       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13895
13896       if (size > DWARF2_ADDR_SIZE || size == -1)
13897         {
13898           expansion_failed (loc, NULL_RTX,
13899                             "DWARF address size mismatch");
13900           return 0;
13901         }
13902       else if (size == DWARF2_ADDR_SIZE)
13903         op = DW_OP_deref;
13904       else
13905         op = DW_OP_deref_size;
13906
13907       if (ret)
13908         add_loc_descr (&ret, new_loc_descr (op, size, 0));
13909       else
13910         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
13911     }
13912   if (ret)
13913     list_ret = new_loc_list (ret, NULL, NULL, NULL);
13914
13915   return list_ret;
13916 }
13917
13918 /* Same as above but return only single location expression.  */
13919 static dw_loc_descr_ref
13920 loc_descriptor_from_tree (tree loc, int want_address)
13921 {
13922   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
13923   if (!ret)
13924     return NULL;
13925   if (ret->dw_loc_next)
13926     {
13927       expansion_failed (loc, NULL_RTX,
13928                         "Location list where only loc descriptor needed");
13929       return NULL;
13930     }
13931   return ret->expr;
13932 }
13933
13934 /* Given a value, round it up to the lowest multiple of `boundary'
13935    which is not less than the value itself.  */
13936
13937 static inline HOST_WIDE_INT
13938 ceiling (HOST_WIDE_INT value, unsigned int boundary)
13939 {
13940   return (((value + boundary - 1) / boundary) * boundary);
13941 }
13942
13943 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
13944    pointer to the declared type for the relevant field variable, or return
13945    `integer_type_node' if the given node turns out to be an
13946    ERROR_MARK node.  */
13947
13948 static inline tree
13949 field_type (const_tree decl)
13950 {
13951   tree type;
13952
13953   if (TREE_CODE (decl) == ERROR_MARK)
13954     return integer_type_node;
13955
13956   type = DECL_BIT_FIELD_TYPE (decl);
13957   if (type == NULL_TREE)
13958     type = TREE_TYPE (decl);
13959
13960   return type;
13961 }
13962
13963 /* Given a pointer to a tree node, return the alignment in bits for
13964    it, or else return BITS_PER_WORD if the node actually turns out to
13965    be an ERROR_MARK node.  */
13966
13967 static inline unsigned
13968 simple_type_align_in_bits (const_tree type)
13969 {
13970   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
13971 }
13972
13973 static inline unsigned
13974 simple_decl_align_in_bits (const_tree decl)
13975 {
13976   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
13977 }
13978
13979 /* Return the result of rounding T up to ALIGN.  */
13980
13981 static inline double_int
13982 round_up_to_align (double_int t, unsigned int align)
13983 {
13984   double_int alignd = uhwi_to_double_int (align);
13985   t = double_int_add (t, alignd);
13986   t = double_int_add (t, double_int_minus_one);
13987   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
13988   t = double_int_mul (t, alignd);
13989   return t;
13990 }
13991
13992 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
13993    lowest addressed byte of the "containing object" for the given FIELD_DECL,
13994    or return 0 if we are unable to determine what that offset is, either
13995    because the argument turns out to be a pointer to an ERROR_MARK node, or
13996    because the offset is actually variable.  (We can't handle the latter case
13997    just yet).  */
13998
13999 static HOST_WIDE_INT
14000 field_byte_offset (const_tree decl)
14001 {
14002   double_int object_offset_in_bits;
14003   double_int object_offset_in_bytes;
14004   double_int bitpos_int;
14005
14006   if (TREE_CODE (decl) == ERROR_MARK)
14007     return 0;
14008
14009   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14010
14011   /* We cannot yet cope with fields whose positions are variable, so
14012      for now, when we see such things, we simply return 0.  Someday, we may
14013      be able to handle such cases, but it will be damn difficult.  */
14014   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
14015     return 0;
14016
14017   bitpos_int = tree_to_double_int (bit_position (decl));
14018
14019 #ifdef PCC_BITFIELD_TYPE_MATTERS
14020   if (PCC_BITFIELD_TYPE_MATTERS)
14021     {
14022       tree type;
14023       tree field_size_tree;
14024       double_int deepest_bitpos;
14025       double_int field_size_in_bits;
14026       unsigned int type_align_in_bits;
14027       unsigned int decl_align_in_bits;
14028       double_int type_size_in_bits;
14029
14030       type = field_type (decl);
14031       type_size_in_bits = double_int_type_size_in_bits (type);
14032       type_align_in_bits = simple_type_align_in_bits (type);
14033
14034       field_size_tree = DECL_SIZE (decl);
14035
14036       /* The size could be unspecified if there was an error, or for
14037          a flexible array member.  */
14038       if (!field_size_tree)
14039         field_size_tree = bitsize_zero_node;
14040
14041       /* If the size of the field is not constant, use the type size.  */
14042       if (TREE_CODE (field_size_tree) == INTEGER_CST)
14043         field_size_in_bits = tree_to_double_int (field_size_tree);
14044       else
14045         field_size_in_bits = type_size_in_bits;
14046
14047       decl_align_in_bits = simple_decl_align_in_bits (decl);
14048
14049       /* The GCC front-end doesn't make any attempt to keep track of the
14050          starting bit offset (relative to the start of the containing
14051          structure type) of the hypothetical "containing object" for a
14052          bit-field.  Thus, when computing the byte offset value for the
14053          start of the "containing object" of a bit-field, we must deduce
14054          this information on our own. This can be rather tricky to do in
14055          some cases.  For example, handling the following structure type
14056          definition when compiling for an i386/i486 target (which only
14057          aligns long long's to 32-bit boundaries) can be very tricky:
14058
14059          struct S { int field1; long long field2:31; };
14060
14061          Fortunately, there is a simple rule-of-thumb which can be used
14062          in such cases.  When compiling for an i386/i486, GCC will
14063          allocate 8 bytes for the structure shown above.  It decides to
14064          do this based upon one simple rule for bit-field allocation.
14065          GCC allocates each "containing object" for each bit-field at
14066          the first (i.e. lowest addressed) legitimate alignment boundary
14067          (based upon the required minimum alignment for the declared
14068          type of the field) which it can possibly use, subject to the
14069          condition that there is still enough available space remaining
14070          in the containing object (when allocated at the selected point)
14071          to fully accommodate all of the bits of the bit-field itself.
14072
14073          This simple rule makes it obvious why GCC allocates 8 bytes for
14074          each object of the structure type shown above.  When looking
14075          for a place to allocate the "containing object" for `field2',
14076          the compiler simply tries to allocate a 64-bit "containing
14077          object" at each successive 32-bit boundary (starting at zero)
14078          until it finds a place to allocate that 64- bit field such that
14079          at least 31 contiguous (and previously unallocated) bits remain
14080          within that selected 64 bit field.  (As it turns out, for the
14081          example above, the compiler finds it is OK to allocate the
14082          "containing object" 64-bit field at bit-offset zero within the
14083          structure type.)
14084
14085          Here we attempt to work backwards from the limited set of facts
14086          we're given, and we try to deduce from those facts, where GCC
14087          must have believed that the containing object started (within
14088          the structure type). The value we deduce is then used (by the
14089          callers of this routine) to generate DW_AT_location and
14090          DW_AT_bit_offset attributes for fields (both bit-fields and, in
14091          the case of DW_AT_location, regular fields as well).  */
14092
14093       /* Figure out the bit-distance from the start of the structure to
14094          the "deepest" bit of the bit-field.  */
14095       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
14096
14097       /* This is the tricky part.  Use some fancy footwork to deduce
14098          where the lowest addressed bit of the containing object must
14099          be.  */
14100       object_offset_in_bits
14101         = double_int_sub (deepest_bitpos, type_size_in_bits);
14102
14103       /* Round up to type_align by default.  This works best for
14104          bitfields.  */
14105       object_offset_in_bits
14106         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14107
14108       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
14109         {
14110           object_offset_in_bits
14111             = double_int_sub (deepest_bitpos, type_size_in_bits);
14112
14113           /* Round up to decl_align instead.  */
14114           object_offset_in_bits
14115             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14116         }
14117     }
14118   else
14119 #endif /* PCC_BITFIELD_TYPE_MATTERS */
14120     object_offset_in_bits = bitpos_int;
14121
14122   object_offset_in_bytes
14123     = double_int_div (object_offset_in_bits,
14124                       uhwi_to_double_int (BITS_PER_UNIT), true,
14125                       TRUNC_DIV_EXPR);
14126   return double_int_to_shwi (object_offset_in_bytes);
14127 }
14128 \f
14129 /* The following routines define various Dwarf attributes and any data
14130    associated with them.  */
14131
14132 /* Add a location description attribute value to a DIE.
14133
14134    This emits location attributes suitable for whole variables and
14135    whole parameters.  Note that the location attributes for struct fields are
14136    generated by the routine `data_member_location_attribute' below.  */
14137
14138 static inline void
14139 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14140                              dw_loc_list_ref descr)
14141 {
14142   if (descr == 0)
14143     return;
14144   if (single_element_loc_list_p (descr))
14145     add_AT_loc (die, attr_kind, descr->expr);
14146   else
14147     add_AT_loc_list (die, attr_kind, descr);
14148 }
14149
14150 /* Add DW_AT_accessibility attribute to DIE if needed.  */
14151
14152 static void
14153 add_accessibility_attribute (dw_die_ref die, tree decl)
14154 {
14155   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
14156      children, otherwise the default is DW_ACCESS_public.  In DWARF2
14157      the default has always been DW_ACCESS_public.  */
14158   if (TREE_PROTECTED (decl))
14159     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
14160   else if (TREE_PRIVATE (decl))
14161     {
14162       if (dwarf_version == 2
14163           || die->die_parent == NULL
14164           || die->die_parent->die_tag != DW_TAG_class_type)
14165         add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
14166     }
14167   else if (dwarf_version > 2
14168            && die->die_parent
14169            && die->die_parent->die_tag == DW_TAG_class_type)
14170     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
14171 }
14172
14173 /* Attach the specialized form of location attribute used for data members of
14174    struct and union types.  In the special case of a FIELD_DECL node which
14175    represents a bit-field, the "offset" part of this special location
14176    descriptor must indicate the distance in bytes from the lowest-addressed
14177    byte of the containing struct or union type to the lowest-addressed byte of
14178    the "containing object" for the bit-field.  (See the `field_byte_offset'
14179    function above).
14180
14181    For any given bit-field, the "containing object" is a hypothetical object
14182    (of some integral or enum type) within which the given bit-field lives.  The
14183    type of this hypothetical "containing object" is always the same as the
14184    declared type of the individual bit-field itself (for GCC anyway... the
14185    DWARF spec doesn't actually mandate this).  Note that it is the size (in
14186    bytes) of the hypothetical "containing object" which will be given in the
14187    DW_AT_byte_size attribute for this bit-field.  (See the
14188    `byte_size_attribute' function below.)  It is also used when calculating the
14189    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
14190    function below.)  */
14191
14192 static void
14193 add_data_member_location_attribute (dw_die_ref die, tree decl)
14194 {
14195   HOST_WIDE_INT offset;
14196   dw_loc_descr_ref loc_descr = 0;
14197
14198   if (TREE_CODE (decl) == TREE_BINFO)
14199     {
14200       /* We're working on the TAG_inheritance for a base class.  */
14201       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
14202         {
14203           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
14204              aren't at a fixed offset from all (sub)objects of the same
14205              type.  We need to extract the appropriate offset from our
14206              vtable.  The following dwarf expression means
14207
14208                BaseAddr = ObAddr + *((*ObAddr) - Offset)
14209
14210              This is specific to the V3 ABI, of course.  */
14211
14212           dw_loc_descr_ref tmp;
14213
14214           /* Make a copy of the object address.  */
14215           tmp = new_loc_descr (DW_OP_dup, 0, 0);
14216           add_loc_descr (&loc_descr, tmp);
14217
14218           /* Extract the vtable address.  */
14219           tmp = new_loc_descr (DW_OP_deref, 0, 0);
14220           add_loc_descr (&loc_descr, tmp);
14221
14222           /* Calculate the address of the offset.  */
14223           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
14224           gcc_assert (offset < 0);
14225
14226           tmp = int_loc_descriptor (-offset);
14227           add_loc_descr (&loc_descr, tmp);
14228           tmp = new_loc_descr (DW_OP_minus, 0, 0);
14229           add_loc_descr (&loc_descr, tmp);
14230
14231           /* Extract the offset.  */
14232           tmp = new_loc_descr (DW_OP_deref, 0, 0);
14233           add_loc_descr (&loc_descr, tmp);
14234
14235           /* Add it to the object address.  */
14236           tmp = new_loc_descr (DW_OP_plus, 0, 0);
14237           add_loc_descr (&loc_descr, tmp);
14238         }
14239       else
14240         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
14241     }
14242   else
14243     offset = field_byte_offset (decl);
14244
14245   if (! loc_descr)
14246     {
14247       if (dwarf_version > 2)
14248         {
14249           /* Don't need to output a location expression, just the constant. */
14250           if (offset < 0)
14251             add_AT_int (die, DW_AT_data_member_location, offset);
14252           else
14253             add_AT_unsigned (die, DW_AT_data_member_location, offset);
14254           return;
14255         }
14256       else
14257         {
14258           enum dwarf_location_atom op;
14259
14260           /* The DWARF2 standard says that we should assume that the structure
14261              address is already on the stack, so we can specify a structure
14262              field address by using DW_OP_plus_uconst.  */
14263
14264 #ifdef MIPS_DEBUGGING_INFO
14265           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
14266              operator correctly.  It works only if we leave the offset on the
14267              stack.  */
14268           op = DW_OP_constu;
14269 #else
14270           op = DW_OP_plus_uconst;
14271 #endif
14272
14273           loc_descr = new_loc_descr (op, offset, 0);
14274         }
14275     }
14276
14277   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
14278 }
14279
14280 /* Writes integer values to dw_vec_const array.  */
14281
14282 static void
14283 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
14284 {
14285   while (size != 0)
14286     {
14287       *dest++ = val & 0xff;
14288       val >>= 8;
14289       --size;
14290     }
14291 }
14292
14293 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
14294
14295 static HOST_WIDE_INT
14296 extract_int (const unsigned char *src, unsigned int size)
14297 {
14298   HOST_WIDE_INT val = 0;
14299
14300   src += size;
14301   while (size != 0)
14302     {
14303       val <<= 8;
14304       val |= *--src & 0xff;
14305       --size;
14306     }
14307   return val;
14308 }
14309
14310 /* Writes double_int values to dw_vec_const array.  */
14311
14312 static void
14313 insert_double (double_int val, unsigned char *dest)
14314 {
14315   unsigned char *p0 = dest;
14316   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
14317
14318   if (WORDS_BIG_ENDIAN)
14319     {
14320       p0 = p1;
14321       p1 = dest;
14322     }
14323
14324   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
14325   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
14326 }
14327
14328 /* Writes floating point values to dw_vec_const array.  */
14329
14330 static void
14331 insert_float (const_rtx rtl, unsigned char *array)
14332 {
14333   REAL_VALUE_TYPE rv;
14334   long val[4];
14335   int i;
14336
14337   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
14338   real_to_target (val, &rv, GET_MODE (rtl));
14339
14340   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
14341   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
14342     {
14343       insert_int (val[i], 4, array);
14344       array += 4;
14345     }
14346 }
14347
14348 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
14349    does not have a "location" either in memory or in a register.  These
14350    things can arise in GNU C when a constant is passed as an actual parameter
14351    to an inlined function.  They can also arise in C++ where declared
14352    constants do not necessarily get memory "homes".  */
14353
14354 static bool
14355 add_const_value_attribute (dw_die_ref die, rtx rtl)
14356 {
14357   switch (GET_CODE (rtl))
14358     {
14359     case CONST_INT:
14360       {
14361         HOST_WIDE_INT val = INTVAL (rtl);
14362
14363         if (val < 0)
14364           add_AT_int (die, DW_AT_const_value, val);
14365         else
14366           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
14367       }
14368       return true;
14369
14370     case CONST_DOUBLE:
14371       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
14372          floating-point constant.  A CONST_DOUBLE is used whenever the
14373          constant requires more than one word in order to be adequately
14374          represented.  */
14375       {
14376         enum machine_mode mode = GET_MODE (rtl);
14377
14378         if (SCALAR_FLOAT_MODE_P (mode))
14379           {
14380             unsigned int length = GET_MODE_SIZE (mode);
14381             unsigned char *array = (unsigned char *) ggc_alloc_atomic (length);
14382
14383             insert_float (rtl, array);
14384             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
14385           }
14386         else
14387           add_AT_double (die, DW_AT_const_value,
14388                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
14389       }
14390       return true;
14391
14392     case CONST_VECTOR:
14393       {
14394         enum machine_mode mode = GET_MODE (rtl);
14395         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
14396         unsigned int length = CONST_VECTOR_NUNITS (rtl);
14397         unsigned char *array = (unsigned char *) ggc_alloc_atomic
14398           (length * elt_size);
14399         unsigned int i;
14400         unsigned char *p;
14401
14402         switch (GET_MODE_CLASS (mode))
14403           {
14404           case MODE_VECTOR_INT:
14405             for (i = 0, p = array; i < length; i++, p += elt_size)
14406               {
14407                 rtx elt = CONST_VECTOR_ELT (rtl, i);
14408                 double_int val = rtx_to_double_int (elt);
14409
14410                 if (elt_size <= sizeof (HOST_WIDE_INT))
14411                   insert_int (double_int_to_shwi (val), elt_size, p);
14412                 else
14413                   {
14414                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14415                     insert_double (val, p);
14416                   }
14417               }
14418             break;
14419
14420           case MODE_VECTOR_FLOAT:
14421             for (i = 0, p = array; i < length; i++, p += elt_size)
14422               {
14423                 rtx elt = CONST_VECTOR_ELT (rtl, i);
14424                 insert_float (elt, p);
14425               }
14426             break;
14427
14428           default:
14429             gcc_unreachable ();
14430           }
14431
14432         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
14433       }
14434       return true;
14435
14436     case CONST_STRING:
14437       if (dwarf_version >= 4 || !dwarf_strict)
14438         {
14439           dw_loc_descr_ref loc_result;
14440           resolve_one_addr (&rtl, NULL);
14441         rtl_addr:
14442           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14443           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14444           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14445           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14446           add_AT_loc (die, DW_AT_location, loc_result);
14447           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14448           return true;
14449         }
14450       return false;
14451
14452     case CONST:
14453       if (CONSTANT_P (XEXP (rtl, 0)))
14454         return add_const_value_attribute (die, XEXP (rtl, 0));
14455       /* FALLTHROUGH */
14456     case SYMBOL_REF:
14457       if (!const_ok_for_output (rtl))
14458         return false;
14459     case LABEL_REF:
14460       if (dwarf_version >= 4 || !dwarf_strict)
14461         goto rtl_addr;
14462       return false;
14463
14464     case PLUS:
14465       /* In cases where an inlined instance of an inline function is passed
14466          the address of an `auto' variable (which is local to the caller) we
14467          can get a situation where the DECL_RTL of the artificial local
14468          variable (for the inlining) which acts as a stand-in for the
14469          corresponding formal parameter (of the inline function) will look
14470          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
14471          exactly a compile-time constant expression, but it isn't the address
14472          of the (artificial) local variable either.  Rather, it represents the
14473          *value* which the artificial local variable always has during its
14474          lifetime.  We currently have no way to represent such quasi-constant
14475          values in Dwarf, so for now we just punt and generate nothing.  */
14476       return false;
14477
14478     case HIGH:
14479     case CONST_FIXED:
14480       return false;
14481
14482     case MEM:
14483       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
14484           && MEM_READONLY_P (rtl)
14485           && GET_MODE (rtl) == BLKmode)
14486         {
14487           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
14488           return true;
14489         }
14490       return false;
14491
14492     default:
14493       /* No other kinds of rtx should be possible here.  */
14494       gcc_unreachable ();
14495     }
14496   return false;
14497 }
14498
14499 /* Determine whether the evaluation of EXPR references any variables
14500    or functions which aren't otherwise used (and therefore may not be
14501    output).  */
14502 static tree
14503 reference_to_unused (tree * tp, int * walk_subtrees,
14504                      void * data ATTRIBUTE_UNUSED)
14505 {
14506   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
14507     *walk_subtrees = 0;
14508
14509   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
14510       && ! TREE_ASM_WRITTEN (*tp))
14511     return *tp;
14512   /* ???  The C++ FE emits debug information for using decls, so
14513      putting gcc_unreachable here falls over.  See PR31899.  For now
14514      be conservative.  */
14515   else if (!cgraph_global_info_ready
14516            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
14517     return *tp;
14518   else if (TREE_CODE (*tp) == VAR_DECL)
14519     {
14520       struct varpool_node *node = varpool_get_node (*tp);
14521       if (!node || !node->needed)
14522         return *tp;
14523     }
14524   else if (TREE_CODE (*tp) == FUNCTION_DECL
14525            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
14526     {
14527       /* The call graph machinery must have finished analyzing,
14528          optimizing and gimplifying the CU by now.
14529          So if *TP has no call graph node associated
14530          to it, it means *TP will not be emitted.  */
14531       if (!cgraph_get_node (*tp))
14532         return *tp;
14533     }
14534   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
14535     return *tp;
14536
14537   return NULL_TREE;
14538 }
14539
14540 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
14541    for use in a later add_const_value_attribute call.  */
14542
14543 static rtx
14544 rtl_for_decl_init (tree init, tree type)
14545 {
14546   rtx rtl = NULL_RTX;
14547
14548   STRIP_NOPS (init);
14549
14550   /* If a variable is initialized with a string constant without embedded
14551      zeros, build CONST_STRING.  */
14552   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
14553     {
14554       tree enttype = TREE_TYPE (type);
14555       tree domain = TYPE_DOMAIN (type);
14556       enum machine_mode mode = TYPE_MODE (enttype);
14557
14558       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
14559           && domain
14560           && integer_zerop (TYPE_MIN_VALUE (domain))
14561           && compare_tree_int (TYPE_MAX_VALUE (domain),
14562                                TREE_STRING_LENGTH (init) - 1) == 0
14563           && ((size_t) TREE_STRING_LENGTH (init)
14564               == strlen (TREE_STRING_POINTER (init)) + 1))
14565         {
14566           rtl = gen_rtx_CONST_STRING (VOIDmode,
14567                                       ggc_strdup (TREE_STRING_POINTER (init)));
14568           rtl = gen_rtx_MEM (BLKmode, rtl);
14569           MEM_READONLY_P (rtl) = 1;
14570         }
14571     }
14572   /* Other aggregates, and complex values, could be represented using
14573      CONCAT: FIXME!  */
14574   else if (AGGREGATE_TYPE_P (type)
14575            || (TREE_CODE (init) == VIEW_CONVERT_EXPR
14576                && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
14577            || TREE_CODE (type) == COMPLEX_TYPE)
14578     ;
14579   /* Vectors only work if their mode is supported by the target.
14580      FIXME: generic vectors ought to work too.  */
14581   else if (TREE_CODE (type) == VECTOR_TYPE
14582            && !VECTOR_MODE_P (TYPE_MODE (type)))
14583     ;
14584   /* If the initializer is something that we know will expand into an
14585      immediate RTL constant, expand it now.  We must be careful not to
14586      reference variables which won't be output.  */
14587   else if (initializer_constant_valid_p (init, type)
14588            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
14589     {
14590       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
14591          possible.  */
14592       if (TREE_CODE (type) == VECTOR_TYPE)
14593         switch (TREE_CODE (init))
14594           {
14595           case VECTOR_CST:
14596             break;
14597           case CONSTRUCTOR:
14598             if (TREE_CONSTANT (init))
14599               {
14600                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
14601                 bool constant_p = true;
14602                 tree value;
14603                 unsigned HOST_WIDE_INT ix;
14604
14605                 /* Even when ctor is constant, it might contain non-*_CST
14606                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
14607                    belong into VECTOR_CST nodes.  */
14608                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
14609                   if (!CONSTANT_CLASS_P (value))
14610                     {
14611                       constant_p = false;
14612                       break;
14613                     }
14614
14615                 if (constant_p)
14616                   {
14617                     init = build_vector_from_ctor (type, elts);
14618                     break;
14619                   }
14620               }
14621             /* FALLTHRU */
14622
14623           default:
14624             return NULL;
14625           }
14626
14627       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
14628
14629       /* If expand_expr returns a MEM, it wasn't immediate.  */
14630       gcc_assert (!rtl || !MEM_P (rtl));
14631     }
14632
14633   return rtl;
14634 }
14635
14636 /* Generate RTL for the variable DECL to represent its location.  */
14637
14638 static rtx
14639 rtl_for_decl_location (tree decl)
14640 {
14641   rtx rtl;
14642
14643   /* Here we have to decide where we are going to say the parameter "lives"
14644      (as far as the debugger is concerned).  We only have a couple of
14645      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
14646
14647      DECL_RTL normally indicates where the parameter lives during most of the
14648      activation of the function.  If optimization is enabled however, this
14649      could be either NULL or else a pseudo-reg.  Both of those cases indicate
14650      that the parameter doesn't really live anywhere (as far as the code
14651      generation parts of GCC are concerned) during most of the function's
14652      activation.  That will happen (for example) if the parameter is never
14653      referenced within the function.
14654
14655      We could just generate a location descriptor here for all non-NULL
14656      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
14657      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
14658      where DECL_RTL is NULL or is a pseudo-reg.
14659
14660      Note however that we can only get away with using DECL_INCOMING_RTL as
14661      a backup substitute for DECL_RTL in certain limited cases.  In cases
14662      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
14663      we can be sure that the parameter was passed using the same type as it is
14664      declared to have within the function, and that its DECL_INCOMING_RTL
14665      points us to a place where a value of that type is passed.
14666
14667      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
14668      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
14669      because in these cases DECL_INCOMING_RTL points us to a value of some
14670      type which is *different* from the type of the parameter itself.  Thus,
14671      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
14672      such cases, the debugger would end up (for example) trying to fetch a
14673      `float' from a place which actually contains the first part of a
14674      `double'.  That would lead to really incorrect and confusing
14675      output at debug-time.
14676
14677      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
14678      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
14679      are a couple of exceptions however.  On little-endian machines we can
14680      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
14681      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
14682      an integral type that is smaller than TREE_TYPE (decl). These cases arise
14683      when (on a little-endian machine) a non-prototyped function has a
14684      parameter declared to be of type `short' or `char'.  In such cases,
14685      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
14686      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
14687      passed `int' value.  If the debugger then uses that address to fetch
14688      a `short' or a `char' (on a little-endian machine) the result will be
14689      the correct data, so we allow for such exceptional cases below.
14690
14691      Note that our goal here is to describe the place where the given formal
14692      parameter lives during most of the function's activation (i.e. between the
14693      end of the prologue and the start of the epilogue).  We'll do that as best
14694      as we can. Note however that if the given formal parameter is modified
14695      sometime during the execution of the function, then a stack backtrace (at
14696      debug-time) will show the function as having been called with the *new*
14697      value rather than the value which was originally passed in.  This happens
14698      rarely enough that it is not a major problem, but it *is* a problem, and
14699      I'd like to fix it.
14700
14701      A future version of dwarf2out.c may generate two additional attributes for
14702      any given DW_TAG_formal_parameter DIE which will describe the "passed
14703      type" and the "passed location" for the given formal parameter in addition
14704      to the attributes we now generate to indicate the "declared type" and the
14705      "active location" for each parameter.  This additional set of attributes
14706      could be used by debuggers for stack backtraces. Separately, note that
14707      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
14708      This happens (for example) for inlined-instances of inline function formal
14709      parameters which are never referenced.  This really shouldn't be
14710      happening.  All PARM_DECL nodes should get valid non-NULL
14711      DECL_INCOMING_RTL values.  FIXME.  */
14712
14713   /* Use DECL_RTL as the "location" unless we find something better.  */
14714   rtl = DECL_RTL_IF_SET (decl);
14715
14716   /* When generating abstract instances, ignore everything except
14717      constants, symbols living in memory, and symbols living in
14718      fixed registers.  */
14719   if (! reload_completed)
14720     {
14721       if (rtl
14722           && (CONSTANT_P (rtl)
14723               || (MEM_P (rtl)
14724                   && CONSTANT_P (XEXP (rtl, 0)))
14725               || (REG_P (rtl)
14726                   && TREE_CODE (decl) == VAR_DECL
14727                   && TREE_STATIC (decl))))
14728         {
14729           rtl = targetm.delegitimize_address (rtl);
14730           return rtl;
14731         }
14732       rtl = NULL_RTX;
14733     }
14734   else if (TREE_CODE (decl) == PARM_DECL)
14735     {
14736       if (rtl == NULL_RTX
14737           || is_pseudo_reg (rtl)
14738           || (MEM_P (rtl)
14739               && is_pseudo_reg (XEXP (rtl, 0))
14740               && DECL_INCOMING_RTL (decl)
14741               && MEM_P (DECL_INCOMING_RTL (decl))
14742               && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
14743         {
14744           tree declared_type = TREE_TYPE (decl);
14745           tree passed_type = DECL_ARG_TYPE (decl);
14746           enum machine_mode dmode = TYPE_MODE (declared_type);
14747           enum machine_mode pmode = TYPE_MODE (passed_type);
14748
14749           /* This decl represents a formal parameter which was optimized out.
14750              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
14751              all cases where (rtl == NULL_RTX) just below.  */
14752           if (dmode == pmode)
14753             rtl = DECL_INCOMING_RTL (decl);
14754           else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
14755                    && SCALAR_INT_MODE_P (dmode)
14756                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
14757                    && DECL_INCOMING_RTL (decl))
14758             {
14759               rtx inc = DECL_INCOMING_RTL (decl);
14760               if (REG_P (inc))
14761                 rtl = inc;
14762               else if (MEM_P (inc))
14763                 {
14764                   if (BYTES_BIG_ENDIAN)
14765                     rtl = adjust_address_nv (inc, dmode,
14766                                              GET_MODE_SIZE (pmode)
14767                                              - GET_MODE_SIZE (dmode));
14768                   else
14769                     rtl = inc;
14770                 }
14771             }
14772         }
14773
14774       /* If the parm was passed in registers, but lives on the stack, then
14775          make a big endian correction if the mode of the type of the
14776          parameter is not the same as the mode of the rtl.  */
14777       /* ??? This is the same series of checks that are made in dbxout.c before
14778          we reach the big endian correction code there.  It isn't clear if all
14779          of these checks are necessary here, but keeping them all is the safe
14780          thing to do.  */
14781       else if (MEM_P (rtl)
14782                && XEXP (rtl, 0) != const0_rtx
14783                && ! CONSTANT_P (XEXP (rtl, 0))
14784                /* Not passed in memory.  */
14785                && !MEM_P (DECL_INCOMING_RTL (decl))
14786                /* Not passed by invisible reference.  */
14787                && (!REG_P (XEXP (rtl, 0))
14788                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
14789                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
14790 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
14791                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
14792 #endif
14793                      )
14794                /* Big endian correction check.  */
14795                && BYTES_BIG_ENDIAN
14796                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
14797                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
14798                    < UNITS_PER_WORD))
14799         {
14800           int offset = (UNITS_PER_WORD
14801                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
14802
14803           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14804                              plus_constant (XEXP (rtl, 0), offset));
14805         }
14806     }
14807   else if (TREE_CODE (decl) == VAR_DECL
14808            && rtl
14809            && MEM_P (rtl)
14810            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
14811            && BYTES_BIG_ENDIAN)
14812     {
14813       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
14814       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
14815
14816       /* If a variable is declared "register" yet is smaller than
14817          a register, then if we store the variable to memory, it
14818          looks like we're storing a register-sized value, when in
14819          fact we are not.  We need to adjust the offset of the
14820          storage location to reflect the actual value's bytes,
14821          else gdb will not be able to display it.  */
14822       if (rsize > dsize)
14823         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14824                            plus_constant (XEXP (rtl, 0), rsize-dsize));
14825     }
14826
14827   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
14828      and will have been substituted directly into all expressions that use it.
14829      C does not have such a concept, but C++ and other languages do.  */
14830   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
14831     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
14832
14833   if (rtl)
14834     rtl = targetm.delegitimize_address (rtl);
14835
14836   /* If we don't look past the constant pool, we risk emitting a
14837      reference to a constant pool entry that isn't referenced from
14838      code, and thus is not emitted.  */
14839   if (rtl)
14840     rtl = avoid_constant_pool_reference (rtl);
14841
14842   /* Try harder to get a rtl.  If this symbol ends up not being emitted
14843      in the current CU, resolve_addr will remove the expression referencing
14844      it.  */
14845   if (rtl == NULL_RTX
14846       && TREE_CODE (decl) == VAR_DECL
14847       && !DECL_EXTERNAL (decl)
14848       && TREE_STATIC (decl)
14849       && DECL_NAME (decl)
14850       && !DECL_HARD_REGISTER (decl)
14851       && DECL_MODE (decl) != VOIDmode)
14852     {
14853       rtl = make_decl_rtl_for_debug (decl);
14854       if (!MEM_P (rtl)
14855           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
14856           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
14857         rtl = NULL_RTX;
14858     }
14859
14860   return rtl;
14861 }
14862
14863 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
14864    returned.  If so, the decl for the COMMON block is returned, and the
14865    value is the offset into the common block for the symbol.  */
14866
14867 static tree
14868 fortran_common (tree decl, HOST_WIDE_INT *value)
14869 {
14870   tree val_expr, cvar;
14871   enum machine_mode mode;
14872   HOST_WIDE_INT bitsize, bitpos;
14873   tree offset;
14874   int volatilep = 0, unsignedp = 0;
14875
14876   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
14877      it does not have a value (the offset into the common area), or if it
14878      is thread local (as opposed to global) then it isn't common, and shouldn't
14879      be handled as such.  */
14880   if (TREE_CODE (decl) != VAR_DECL
14881       || !TREE_STATIC (decl)
14882       || !DECL_HAS_VALUE_EXPR_P (decl)
14883       || !is_fortran ())
14884     return NULL_TREE;
14885
14886   val_expr = DECL_VALUE_EXPR (decl);
14887   if (TREE_CODE (val_expr) != COMPONENT_REF)
14888     return NULL_TREE;
14889
14890   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
14891                               &mode, &unsignedp, &volatilep, true);
14892
14893   if (cvar == NULL_TREE
14894       || TREE_CODE (cvar) != VAR_DECL
14895       || DECL_ARTIFICIAL (cvar)
14896       || !TREE_PUBLIC (cvar))
14897     return NULL_TREE;
14898
14899   *value = 0;
14900   if (offset != NULL)
14901     {
14902       if (!host_integerp (offset, 0))
14903         return NULL_TREE;
14904       *value = tree_low_cst (offset, 0);
14905     }
14906   if (bitpos != 0)
14907     *value += bitpos / BITS_PER_UNIT;
14908
14909   return cvar;
14910 }
14911
14912 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
14913    data attribute for a variable or a parameter.  We generate the
14914    DW_AT_const_value attribute only in those cases where the given variable
14915    or parameter does not have a true "location" either in memory or in a
14916    register.  This can happen (for example) when a constant is passed as an
14917    actual argument in a call to an inline function.  (It's possible that
14918    these things can crop up in other ways also.)  Note that one type of
14919    constant value which can be passed into an inlined function is a constant
14920    pointer.  This can happen for example if an actual argument in an inlined
14921    function call evaluates to a compile-time constant address.
14922
14923    CACHE_P is true if it is worth caching the location list for DECL,
14924    so that future calls can reuse it rather than regenerate it from scratch.
14925    This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
14926    since we will need to refer to them each time the function is inlined.  */
14927
14928 static bool
14929 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
14930                                        enum dwarf_attribute attr)
14931 {
14932   rtx rtl;
14933   dw_loc_list_ref list;
14934   var_loc_list *loc_list;
14935   cached_dw_loc_list *cache;
14936   void **slot;
14937
14938   if (TREE_CODE (decl) == ERROR_MARK)
14939     return false;
14940
14941   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
14942               || TREE_CODE (decl) == RESULT_DECL);
14943
14944   /* Try to get some constant RTL for this decl, and use that as the value of
14945      the location.  */
14946
14947   rtl = rtl_for_decl_location (decl);
14948   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14949       && add_const_value_attribute (die, rtl))
14950     return true;
14951
14952   /* See if we have single element location list that is equivalent to
14953      a constant value.  That way we are better to use add_const_value_attribute
14954      rather than expanding constant value equivalent.  */
14955   loc_list = lookup_decl_loc (decl);
14956   if (loc_list
14957       && loc_list->first
14958       && loc_list->first->next == NULL
14959       && NOTE_P (loc_list->first->loc)
14960       && NOTE_VAR_LOCATION (loc_list->first->loc)
14961       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
14962     {
14963       struct var_loc_node *node;
14964
14965       node = loc_list->first;
14966       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
14967       if (GET_CODE (rtl) == EXPR_LIST)
14968         rtl = XEXP (rtl, 0);
14969       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14970           && add_const_value_attribute (die, rtl))
14971          return true;
14972     }
14973   /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
14974      list several times.  See if we've already cached the contents.  */
14975   list = NULL;
14976   if (loc_list == NULL || cached_dw_loc_list_table == NULL)
14977     cache_p = false;
14978   if (cache_p)
14979     {
14980       cache = (cached_dw_loc_list *)
14981         htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
14982       if (cache)
14983         list = cache->loc_list;
14984     }
14985   if (list == NULL)
14986     {
14987       list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
14988       /* It is usually worth caching this result if the decl is from
14989          BLOCK_NONLOCALIZED_VARS and if the list has at least two elements.  */
14990       if (cache_p && list && list->dw_loc_next)
14991         {
14992           slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
14993                                            DECL_UID (decl), INSERT);
14994           cache = ggc_alloc_cleared_cached_dw_loc_list ();
14995           cache->decl_id = DECL_UID (decl);
14996           cache->loc_list = list;
14997           *slot = cache;
14998         }
14999     }
15000   if (list)
15001     {
15002       add_AT_location_description (die, attr, list);
15003       return true;
15004     }
15005   /* None of that worked, so it must not really have a location;
15006      try adding a constant value attribute from the DECL_INITIAL.  */
15007   return tree_add_const_value_attribute_for_decl (die, decl);
15008 }
15009
15010 /* Add VARIABLE and DIE into deferred locations list.  */
15011
15012 static void
15013 defer_location (tree variable, dw_die_ref die)
15014 {
15015   deferred_locations entry;
15016   entry.variable = variable;
15017   entry.die = die;
15018   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15019 }
15020
15021 /* Helper function for tree_add_const_value_attribute.  Natively encode
15022    initializer INIT into an array.  Return true if successful.  */
15023
15024 static bool
15025 native_encode_initializer (tree init, unsigned char *array, int size)
15026 {
15027   tree type;
15028
15029   if (init == NULL_TREE)
15030     return false;
15031
15032   STRIP_NOPS (init);
15033   switch (TREE_CODE (init))
15034     {
15035     case STRING_CST:
15036       type = TREE_TYPE (init);
15037       if (TREE_CODE (type) == ARRAY_TYPE)
15038         {
15039           tree enttype = TREE_TYPE (type);
15040           enum machine_mode mode = TYPE_MODE (enttype);
15041
15042           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15043             return false;
15044           if (int_size_in_bytes (type) != size)
15045             return false;
15046           if (size > TREE_STRING_LENGTH (init))
15047             {
15048               memcpy (array, TREE_STRING_POINTER (init),
15049                       TREE_STRING_LENGTH (init));
15050               memset (array + TREE_STRING_LENGTH (init),
15051                       '\0', size - TREE_STRING_LENGTH (init));
15052             }
15053           else
15054             memcpy (array, TREE_STRING_POINTER (init), size);
15055           return true;
15056         }
15057       return false;
15058     case CONSTRUCTOR:
15059       type = TREE_TYPE (init);
15060       if (int_size_in_bytes (type) != size)
15061         return false;
15062       if (TREE_CODE (type) == ARRAY_TYPE)
15063         {
15064           HOST_WIDE_INT min_index;
15065           unsigned HOST_WIDE_INT cnt;
15066           int curpos = 0, fieldsize;
15067           constructor_elt *ce;
15068
15069           if (TYPE_DOMAIN (type) == NULL_TREE
15070               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15071             return false;
15072
15073           fieldsize = int_size_in_bytes (TREE_TYPE (type));
15074           if (fieldsize <= 0)
15075             return false;
15076
15077           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15078           memset (array, '\0', size);
15079           FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15080             {
15081               tree val = ce->value;
15082               tree index = ce->index;
15083               int pos = curpos;
15084               if (index && TREE_CODE (index) == RANGE_EXPR)
15085                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15086                       * fieldsize;
15087               else if (index)
15088                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15089
15090               if (val)
15091                 {
15092                   STRIP_NOPS (val);
15093                   if (!native_encode_initializer (val, array + pos, fieldsize))
15094                     return false;
15095                 }
15096               curpos = pos + fieldsize;
15097               if (index && TREE_CODE (index) == RANGE_EXPR)
15098                 {
15099                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15100                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
15101                   while (count-- > 0)
15102                     {
15103                       if (val)
15104                         memcpy (array + curpos, array + pos, fieldsize);
15105                       curpos += fieldsize;
15106                     }
15107                 }
15108               gcc_assert (curpos <= size);
15109             }
15110           return true;
15111         }
15112       else if (TREE_CODE (type) == RECORD_TYPE
15113                || TREE_CODE (type) == UNION_TYPE)
15114         {
15115           tree field = NULL_TREE;
15116           unsigned HOST_WIDE_INT cnt;
15117           constructor_elt *ce;
15118
15119           if (int_size_in_bytes (type) != size)
15120             return false;
15121
15122           if (TREE_CODE (type) == RECORD_TYPE)
15123             field = TYPE_FIELDS (type);
15124
15125           FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15126             {
15127               tree val = ce->value;
15128               int pos, fieldsize;
15129
15130               if (ce->index != 0)
15131                 field = ce->index;
15132
15133               if (val)
15134                 STRIP_NOPS (val);
15135
15136               if (field == NULL_TREE || DECL_BIT_FIELD (field))
15137                 return false;
15138
15139               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15140                   && TYPE_DOMAIN (TREE_TYPE (field))
15141                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15142                 return false;
15143               else if (DECL_SIZE_UNIT (field) == NULL_TREE
15144                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
15145                 return false;
15146               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15147               pos = int_byte_position (field);
15148               gcc_assert (pos + fieldsize <= size);
15149               if (val
15150                   && !native_encode_initializer (val, array + pos, fieldsize))
15151                 return false;
15152             }
15153           return true;
15154         }
15155       return false;
15156     case VIEW_CONVERT_EXPR:
15157     case NON_LVALUE_EXPR:
15158       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15159     default:
15160       return native_encode_expr (init, array, size) == size;
15161     }
15162 }
15163
15164 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15165    attribute is the const value T.  */
15166
15167 static bool
15168 tree_add_const_value_attribute (dw_die_ref die, tree t)
15169 {
15170   tree init;
15171   tree type = TREE_TYPE (t);
15172   rtx rtl;
15173
15174   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15175     return false;
15176
15177   init = t;
15178   gcc_assert (!DECL_P (init));
15179
15180   rtl = rtl_for_decl_init (init, type);
15181   if (rtl)
15182     return add_const_value_attribute (die, rtl);
15183   /* If the host and target are sane, try harder.  */
15184   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15185            && initializer_constant_valid_p (init, type))
15186     {
15187       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15188       if (size > 0 && (int) size == size)
15189         {
15190           unsigned char *array = (unsigned char *)
15191             ggc_alloc_cleared_atomic (size);
15192
15193           if (native_encode_initializer (init, array, size))
15194             {
15195               add_AT_vec (die, DW_AT_const_value, size, 1, array);
15196               return true;
15197             }
15198         }
15199     }
15200   return false;
15201 }
15202
15203 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
15204    attribute is the const value of T, where T is an integral constant
15205    variable with static storage duration
15206    (so it can't be a PARM_DECL or a RESULT_DECL).  */
15207
15208 static bool
15209 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
15210 {
15211
15212   if (!decl
15213       || (TREE_CODE (decl) != VAR_DECL
15214           && TREE_CODE (decl) != CONST_DECL)
15215       || (TREE_CODE (decl) == VAR_DECL
15216           && !TREE_STATIC (decl)))
15217     return false;
15218
15219     if (TREE_READONLY (decl)
15220         && ! TREE_THIS_VOLATILE (decl)
15221         && DECL_INITIAL (decl))
15222       /* OK */;
15223     else
15224       return false;
15225
15226   /* Don't add DW_AT_const_value if abstract origin already has one.  */
15227   if (get_AT (var_die, DW_AT_const_value))
15228     return false;
15229
15230   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
15231 }
15232
15233 /* Convert the CFI instructions for the current function into a
15234    location list.  This is used for DW_AT_frame_base when we targeting
15235    a dwarf2 consumer that does not support the dwarf3
15236    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
15237    expressions.  */
15238
15239 static dw_loc_list_ref
15240 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
15241 {
15242   int ix;
15243   dw_fde_ref fde;
15244   dw_loc_list_ref list, *list_tail;
15245   dw_cfi_ref cfi;
15246   dw_cfa_location last_cfa, next_cfa;
15247   const char *start_label, *last_label, *section;
15248   dw_cfa_location remember;
15249
15250   fde = cfun->fde;
15251   gcc_assert (fde != NULL);
15252
15253   section = secname_for_decl (current_function_decl);
15254   list_tail = &list;
15255   list = NULL;
15256
15257   memset (&next_cfa, 0, sizeof (next_cfa));
15258   next_cfa.reg = INVALID_REGNUM;
15259   remember = next_cfa;
15260
15261   start_label = fde->dw_fde_begin;
15262
15263   /* ??? Bald assumption that the CIE opcode list does not contain
15264      advance opcodes.  */
15265   FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, ix, cfi)
15266     lookup_cfa_1 (cfi, &next_cfa, &remember);
15267
15268   last_cfa = next_cfa;
15269   last_label = start_label;
15270
15271   if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
15272     {
15273       /* If the first partition contained no CFI adjustments, the
15274          CIE opcodes apply to the whole first partition.  */
15275       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15276                                  fde->dw_fde_begin, fde->dw_fde_end, section);
15277       list_tail =&(*list_tail)->dw_loc_next;
15278       start_label = last_label = fde->dw_fde_second_begin;
15279     }
15280
15281   FOR_EACH_VEC_ELT (dw_cfi_ref, fde->dw_fde_cfi, ix, cfi)
15282     {
15283       switch (cfi->dw_cfi_opc)
15284         {
15285         case DW_CFA_set_loc:
15286         case DW_CFA_advance_loc1:
15287         case DW_CFA_advance_loc2:
15288         case DW_CFA_advance_loc4:
15289           if (!cfa_equal_p (&last_cfa, &next_cfa))
15290             {
15291               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15292                                          start_label, last_label, section);
15293
15294               list_tail = &(*list_tail)->dw_loc_next;
15295               last_cfa = next_cfa;
15296               start_label = last_label;
15297             }
15298           last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
15299           break;
15300
15301         case DW_CFA_advance_loc:
15302           /* The encoding is complex enough that we should never emit this.  */
15303           gcc_unreachable ();
15304
15305         default:
15306           lookup_cfa_1 (cfi, &next_cfa, &remember);
15307           break;
15308         }
15309       if (ix + 1 == fde->dw_fde_switch_cfi_index)
15310         {
15311           if (!cfa_equal_p (&last_cfa, &next_cfa))
15312             {
15313               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15314                                          start_label, last_label, section);
15315
15316               list_tail = &(*list_tail)->dw_loc_next;
15317               last_cfa = next_cfa;
15318               start_label = last_label;
15319             }
15320           *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15321                                      start_label, fde->dw_fde_end, section);
15322           list_tail = &(*list_tail)->dw_loc_next;
15323           start_label = last_label = fde->dw_fde_second_begin;
15324         }
15325     }
15326
15327   if (!cfa_equal_p (&last_cfa, &next_cfa))
15328     {
15329       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15330                                  start_label, last_label, section);
15331       list_tail = &(*list_tail)->dw_loc_next;
15332       start_label = last_label;
15333     }
15334
15335   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
15336                              start_label,
15337                              fde->dw_fde_second_begin
15338                              ? fde->dw_fde_second_end : fde->dw_fde_end,
15339                              section);
15340
15341   if (list && list->dw_loc_next)
15342     gen_llsym (list);
15343
15344   return list;
15345 }
15346
15347 /* Compute a displacement from the "steady-state frame pointer" to the
15348    frame base (often the same as the CFA), and store it in
15349    frame_pointer_fb_offset.  OFFSET is added to the displacement
15350    before the latter is negated.  */
15351
15352 static void
15353 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
15354 {
15355   rtx reg, elim;
15356
15357 #ifdef FRAME_POINTER_CFA_OFFSET
15358   reg = frame_pointer_rtx;
15359   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
15360 #else
15361   reg = arg_pointer_rtx;
15362   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
15363 #endif
15364
15365   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
15366   if (GET_CODE (elim) == PLUS)
15367     {
15368       offset += INTVAL (XEXP (elim, 1));
15369       elim = XEXP (elim, 0);
15370     }
15371
15372   frame_pointer_fb_offset = -offset;
15373
15374   /* ??? AVR doesn't set up valid eliminations when there is no stack frame
15375      in which to eliminate.  This is because it's stack pointer isn't 
15376      directly accessible as a register within the ISA.  To work around
15377      this, assume that while we cannot provide a proper value for
15378      frame_pointer_fb_offset, we won't need one either.  */
15379   frame_pointer_fb_offset_valid
15380     = ((SUPPORTS_STACK_ALIGNMENT
15381         && (elim == hard_frame_pointer_rtx
15382             || elim == stack_pointer_rtx))
15383        || elim == (frame_pointer_needed
15384                    ? hard_frame_pointer_rtx
15385                    : stack_pointer_rtx));
15386 }
15387
15388 /* Generate a DW_AT_name attribute given some string value to be included as
15389    the value of the attribute.  */
15390
15391 static void
15392 add_name_attribute (dw_die_ref die, const char *name_string)
15393 {
15394   if (name_string != NULL && *name_string != 0)
15395     {
15396       if (demangle_name_func)
15397         name_string = (*demangle_name_func) (name_string);
15398
15399       add_AT_string (die, DW_AT_name, name_string);
15400     }
15401 }
15402
15403 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
15404    DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
15405    of TYPE accordingly.
15406
15407    ??? This is a temporary measure until after we're able to generate
15408    regular DWARF for the complex Ada type system.  */
15409
15410 static void 
15411 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
15412                                      dw_die_ref context_die)
15413 {
15414   tree dtype;
15415   dw_die_ref dtype_die;
15416
15417   if (!lang_hooks.types.descriptive_type)
15418     return;
15419
15420   dtype = lang_hooks.types.descriptive_type (type);
15421   if (!dtype)
15422     return;
15423
15424   dtype_die = lookup_type_die (dtype);
15425   if (!dtype_die)
15426     {
15427       /* The descriptive type indirectly references TYPE if this is also the
15428          case for TYPE itself.  Do not deal with the circularity here.  */
15429       TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1;
15430       gen_type_die (dtype, context_die);
15431       TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 0;
15432       dtype_die = lookup_type_die (dtype);
15433       gcc_assert (dtype_die);
15434     }
15435
15436   add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
15437 }
15438
15439 /* Generate a DW_AT_comp_dir attribute for DIE.  */
15440
15441 static void
15442 add_comp_dir_attribute (dw_die_ref die)
15443 {
15444   const char *wd = get_src_pwd ();
15445   char *wd1;
15446
15447   if (wd == NULL)
15448     return;
15449
15450   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
15451     {
15452       int wdlen;
15453
15454       wdlen = strlen (wd);
15455       wd1 = (char *) ggc_alloc_atomic (wdlen + 2);
15456       strcpy (wd1, wd);
15457       wd1 [wdlen] = DIR_SEPARATOR;
15458       wd1 [wdlen + 1] = 0;
15459       wd = wd1;
15460     }
15461
15462     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
15463 }
15464
15465 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
15466    default.  */
15467
15468 static int
15469 lower_bound_default (void)
15470 {
15471   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
15472     {
15473     case DW_LANG_C:
15474     case DW_LANG_C89:
15475     case DW_LANG_C99:
15476     case DW_LANG_C_plus_plus:
15477     case DW_LANG_ObjC:
15478     case DW_LANG_ObjC_plus_plus:
15479     case DW_LANG_Java:
15480       return 0;
15481     case DW_LANG_Fortran77:
15482     case DW_LANG_Fortran90:
15483     case DW_LANG_Fortran95:
15484       return 1;
15485     case DW_LANG_UPC:
15486     case DW_LANG_D:
15487     case DW_LANG_Python:
15488       return dwarf_version >= 4 ? 0 : -1;
15489     case DW_LANG_Ada95:
15490     case DW_LANG_Ada83:
15491     case DW_LANG_Cobol74:
15492     case DW_LANG_Cobol85:
15493     case DW_LANG_Pascal83:
15494     case DW_LANG_Modula2:
15495     case DW_LANG_PLI:
15496       return dwarf_version >= 4 ? 1 : -1;
15497     default:
15498       return -1;
15499     }
15500 }
15501
15502 /* Given a tree node describing an array bound (either lower or upper) output
15503    a representation for that bound.  */
15504
15505 static void
15506 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
15507 {
15508   switch (TREE_CODE (bound))
15509     {
15510     case ERROR_MARK:
15511       return;
15512
15513     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
15514     case INTEGER_CST:
15515       {
15516         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
15517         int dflt;
15518
15519         /* Use the default if possible.  */
15520         if (bound_attr == DW_AT_lower_bound
15521             && host_integerp (bound, 0)
15522             && (dflt = lower_bound_default ()) != -1
15523             && tree_low_cst (bound, 0) == dflt)
15524           ;
15525
15526         /* Otherwise represent the bound as an unsigned value with the
15527            precision of its type.  The precision and signedness of the
15528            type will be necessary to re-interpret it unambiguously.  */
15529         else if (prec < HOST_BITS_PER_WIDE_INT)
15530           {
15531             unsigned HOST_WIDE_INT mask
15532               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
15533             add_AT_unsigned (subrange_die, bound_attr,
15534                              TREE_INT_CST_LOW (bound) & mask);
15535           }
15536         else if (prec == HOST_BITS_PER_WIDE_INT
15537                  || TREE_INT_CST_HIGH (bound) == 0)
15538           add_AT_unsigned (subrange_die, bound_attr,
15539                            TREE_INT_CST_LOW (bound));
15540         else
15541           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
15542                          TREE_INT_CST_LOW (bound));
15543       }
15544       break;
15545
15546     CASE_CONVERT:
15547     case VIEW_CONVERT_EXPR:
15548       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
15549       break;
15550
15551     case SAVE_EXPR:
15552       break;
15553
15554     case VAR_DECL:
15555     case PARM_DECL:
15556     case RESULT_DECL:
15557       {
15558         dw_die_ref decl_die = lookup_decl_die (bound);
15559
15560         /* ??? Can this happen, or should the variable have been bound
15561            first?  Probably it can, since I imagine that we try to create
15562            the types of parameters in the order in which they exist in
15563            the list, and won't have created a forward reference to a
15564            later parameter.  */
15565         if (decl_die != NULL)
15566           {
15567             add_AT_die_ref (subrange_die, bound_attr, decl_die);
15568             break;
15569           }
15570       }
15571       /* FALLTHRU */
15572
15573     default:
15574       {
15575         /* Otherwise try to create a stack operation procedure to
15576            evaluate the value of the array bound.  */
15577
15578         dw_die_ref ctx, decl_die;
15579         dw_loc_list_ref list;
15580
15581         list = loc_list_from_tree (bound, 2);
15582         if (list == NULL || single_element_loc_list_p (list))
15583           {
15584             /* If DW_AT_*bound is not a reference nor constant, it is
15585                a DWARF expression rather than location description.
15586                For that loc_list_from_tree (bound, 0) is needed.
15587                If that fails to give a single element list,
15588                fall back to outputting this as a reference anyway.  */
15589             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
15590             if (list2 && single_element_loc_list_p (list2))
15591               {
15592                 add_AT_loc (subrange_die, bound_attr, list2->expr);
15593                 break;
15594               }
15595           }
15596         if (list == NULL)
15597           break;
15598
15599         if (current_function_decl == 0)
15600           ctx = comp_unit_die ();
15601         else
15602           ctx = lookup_decl_die (current_function_decl);
15603
15604         decl_die = new_die (DW_TAG_variable, ctx, bound);
15605         add_AT_flag (decl_die, DW_AT_artificial, 1);
15606         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
15607         add_AT_location_description (decl_die, DW_AT_location, list);
15608         add_AT_die_ref (subrange_die, bound_attr, decl_die);
15609         break;
15610       }
15611     }
15612 }
15613
15614 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
15615    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
15616    Note that the block of subscript information for an array type also
15617    includes information about the element type of the given array type.  */
15618
15619 static void
15620 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
15621 {
15622   unsigned dimension_number;
15623   tree lower, upper;
15624   dw_die_ref subrange_die;
15625
15626   for (dimension_number = 0;
15627        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
15628        type = TREE_TYPE (type), dimension_number++)
15629     {
15630       tree domain = TYPE_DOMAIN (type);
15631
15632       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
15633         break;
15634
15635       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
15636          and (in GNU C only) variable bounds.  Handle all three forms
15637          here.  */
15638       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
15639       if (domain)
15640         {
15641           /* We have an array type with specified bounds.  */
15642           lower = TYPE_MIN_VALUE (domain);
15643           upper = TYPE_MAX_VALUE (domain);
15644
15645           /* Define the index type.  */
15646           if (TREE_TYPE (domain))
15647             {
15648               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
15649                  TREE_TYPE field.  We can't emit debug info for this
15650                  because it is an unnamed integral type.  */
15651               if (TREE_CODE (domain) == INTEGER_TYPE
15652                   && TYPE_NAME (domain) == NULL_TREE
15653                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
15654                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
15655                 ;
15656               else
15657                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
15658                                     type_die);
15659             }
15660
15661           /* ??? If upper is NULL, the array has unspecified length,
15662              but it does have a lower bound.  This happens with Fortran
15663                dimension arr(N:*)
15664              Since the debugger is definitely going to need to know N
15665              to produce useful results, go ahead and output the lower
15666              bound solo, and hope the debugger can cope.  */
15667
15668           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
15669           if (upper)
15670             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
15671         }
15672
15673       /* Otherwise we have an array type with an unspecified length.  The
15674          DWARF-2 spec does not say how to handle this; let's just leave out the
15675          bounds.  */
15676     }
15677 }
15678
15679 static void
15680 add_byte_size_attribute (dw_die_ref die, tree tree_node)
15681 {
15682   unsigned size;
15683
15684   switch (TREE_CODE (tree_node))
15685     {
15686     case ERROR_MARK:
15687       size = 0;
15688       break;
15689     case ENUMERAL_TYPE:
15690     case RECORD_TYPE:
15691     case UNION_TYPE:
15692     case QUAL_UNION_TYPE:
15693       size = int_size_in_bytes (tree_node);
15694       break;
15695     case FIELD_DECL:
15696       /* For a data member of a struct or union, the DW_AT_byte_size is
15697          generally given as the number of bytes normally allocated for an
15698          object of the *declared* type of the member itself.  This is true
15699          even for bit-fields.  */
15700       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
15701       break;
15702     default:
15703       gcc_unreachable ();
15704     }
15705
15706   /* Note that `size' might be -1 when we get to this point.  If it is, that
15707      indicates that the byte size of the entity in question is variable.  We
15708      have no good way of expressing this fact in Dwarf at the present time,
15709      so just let the -1 pass on through.  */
15710   add_AT_unsigned (die, DW_AT_byte_size, size);
15711 }
15712
15713 /* For a FIELD_DECL node which represents a bit-field, output an attribute
15714    which specifies the distance in bits from the highest order bit of the
15715    "containing object" for the bit-field to the highest order bit of the
15716    bit-field itself.
15717
15718    For any given bit-field, the "containing object" is a hypothetical object
15719    (of some integral or enum type) within which the given bit-field lives.  The
15720    type of this hypothetical "containing object" is always the same as the
15721    declared type of the individual bit-field itself.  The determination of the
15722    exact location of the "containing object" for a bit-field is rather
15723    complicated.  It's handled by the `field_byte_offset' function (above).
15724
15725    Note that it is the size (in bytes) of the hypothetical "containing object"
15726    which will be given in the DW_AT_byte_size attribute for this bit-field.
15727    (See `byte_size_attribute' above).  */
15728
15729 static inline void
15730 add_bit_offset_attribute (dw_die_ref die, tree decl)
15731 {
15732   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
15733   tree type = DECL_BIT_FIELD_TYPE (decl);
15734   HOST_WIDE_INT bitpos_int;
15735   HOST_WIDE_INT highest_order_object_bit_offset;
15736   HOST_WIDE_INT highest_order_field_bit_offset;
15737   HOST_WIDE_INT bit_offset;
15738
15739   /* Must be a field and a bit field.  */
15740   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
15741
15742   /* We can't yet handle bit-fields whose offsets are variable, so if we
15743      encounter such things, just return without generating any attribute
15744      whatsoever.  Likewise for variable or too large size.  */
15745   if (! host_integerp (bit_position (decl), 0)
15746       || ! host_integerp (DECL_SIZE (decl), 1))
15747     return;
15748
15749   bitpos_int = int_bit_position (decl);
15750
15751   /* Note that the bit offset is always the distance (in bits) from the
15752      highest-order bit of the "containing object" to the highest-order bit of
15753      the bit-field itself.  Since the "high-order end" of any object or field
15754      is different on big-endian and little-endian machines, the computation
15755      below must take account of these differences.  */
15756   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
15757   highest_order_field_bit_offset = bitpos_int;
15758
15759   if (! BYTES_BIG_ENDIAN)
15760     {
15761       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
15762       highest_order_object_bit_offset += simple_type_size_in_bits (type);
15763     }
15764
15765   bit_offset
15766     = (! BYTES_BIG_ENDIAN
15767        ? highest_order_object_bit_offset - highest_order_field_bit_offset
15768        : highest_order_field_bit_offset - highest_order_object_bit_offset);
15769
15770   if (bit_offset < 0)
15771     add_AT_int (die, DW_AT_bit_offset, bit_offset);
15772   else
15773     add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
15774 }
15775
15776 /* For a FIELD_DECL node which represents a bit field, output an attribute
15777    which specifies the length in bits of the given field.  */
15778
15779 static inline void
15780 add_bit_size_attribute (dw_die_ref die, tree decl)
15781 {
15782   /* Must be a field and a bit field.  */
15783   gcc_assert (TREE_CODE (decl) == FIELD_DECL
15784               && DECL_BIT_FIELD_TYPE (decl));
15785
15786   if (host_integerp (DECL_SIZE (decl), 1))
15787     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
15788 }
15789
15790 /* If the compiled language is ANSI C, then add a 'prototyped'
15791    attribute, if arg types are given for the parameters of a function.  */
15792
15793 static inline void
15794 add_prototyped_attribute (dw_die_ref die, tree func_type)
15795 {
15796   if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
15797       && prototype_p (func_type))
15798     add_AT_flag (die, DW_AT_prototyped, 1);
15799 }
15800
15801 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
15802    by looking in either the type declaration or object declaration
15803    equate table.  */
15804
15805 static inline dw_die_ref
15806 add_abstract_origin_attribute (dw_die_ref die, tree origin)
15807 {
15808   dw_die_ref origin_die = NULL;
15809
15810   if (TREE_CODE (origin) != FUNCTION_DECL)
15811     {
15812       /* We may have gotten separated from the block for the inlined
15813          function, if we're in an exception handler or some such; make
15814          sure that the abstract function has been written out.
15815
15816          Doing this for nested functions is wrong, however; functions are
15817          distinct units, and our context might not even be inline.  */
15818       tree fn = origin;
15819
15820       if (TYPE_P (fn))
15821         fn = TYPE_STUB_DECL (fn);
15822
15823       fn = decl_function_context (fn);
15824       if (fn)
15825         dwarf2out_abstract_function (fn);
15826     }
15827
15828   if (DECL_P (origin))
15829     origin_die = lookup_decl_die (origin);
15830   else if (TYPE_P (origin))
15831     origin_die = lookup_type_die (origin);
15832
15833   /* XXX: Functions that are never lowered don't always have correct block
15834      trees (in the case of java, they simply have no block tree, in some other
15835      languages).  For these functions, there is nothing we can really do to
15836      output correct debug info for inlined functions in all cases.  Rather
15837      than die, we'll just produce deficient debug info now, in that we will
15838      have variables without a proper abstract origin.  In the future, when all
15839      functions are lowered, we should re-add a gcc_assert (origin_die)
15840      here.  */
15841
15842   if (origin_die)
15843     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
15844   return origin_die;
15845 }
15846
15847 /* We do not currently support the pure_virtual attribute.  */
15848
15849 static inline void
15850 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
15851 {
15852   if (DECL_VINDEX (func_decl))
15853     {
15854       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
15855
15856       if (host_integerp (DECL_VINDEX (func_decl), 0))
15857         add_AT_loc (die, DW_AT_vtable_elem_location,
15858                     new_loc_descr (DW_OP_constu,
15859                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
15860                                    0));
15861
15862       /* GNU extension: Record what type this method came from originally.  */
15863       if (debug_info_level > DINFO_LEVEL_TERSE
15864           && DECL_CONTEXT (func_decl))
15865         add_AT_die_ref (die, DW_AT_containing_type,
15866                         lookup_type_die (DECL_CONTEXT (func_decl)));
15867     }
15868 }
15869 \f
15870 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
15871    given decl.  This used to be a vendor extension until after DWARF 4
15872    standardized it.  */
15873
15874 static void
15875 add_linkage_attr (dw_die_ref die, tree decl)
15876 {
15877   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
15878
15879   /* Mimic what assemble_name_raw does with a leading '*'.  */
15880   if (name[0] == '*')
15881     name = &name[1];
15882
15883   if (dwarf_version >= 4)
15884     add_AT_string (die, DW_AT_linkage_name, name);
15885   else
15886     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
15887 }
15888
15889 /* Add source coordinate attributes for the given decl.  */
15890
15891 static void
15892 add_src_coords_attributes (dw_die_ref die, tree decl)
15893 {
15894   expanded_location s;
15895
15896   if (DECL_SOURCE_LOCATION (decl) == UNKNOWN_LOCATION)
15897     return;
15898   s = expand_location (DECL_SOURCE_LOCATION (decl));
15899   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
15900   add_AT_unsigned (die, DW_AT_decl_line, s.line);
15901 }
15902
15903 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
15904
15905 static void
15906 add_linkage_name (dw_die_ref die, tree decl)
15907 {
15908   if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
15909        && TREE_PUBLIC (decl)
15910        && !DECL_ABSTRACT (decl)
15911        && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
15912        && die->die_tag != DW_TAG_member)
15913     {
15914       /* Defer until we have an assembler name set.  */
15915       if (!DECL_ASSEMBLER_NAME_SET_P (decl))
15916         {
15917           limbo_die_node *asm_name;
15918
15919           asm_name = ggc_alloc_cleared_limbo_die_node ();
15920           asm_name->die = die;
15921           asm_name->created_for = decl;
15922           asm_name->next = deferred_asm_name;
15923           deferred_asm_name = asm_name;
15924         }
15925       else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
15926         add_linkage_attr (die, decl);
15927     }
15928 }
15929
15930 /* Add a DW_AT_name attribute and source coordinate attribute for the
15931    given decl, but only if it actually has a name.  */
15932
15933 static void
15934 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
15935 {
15936   tree decl_name;
15937
15938   decl_name = DECL_NAME (decl);
15939   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
15940     {
15941       const char *name = dwarf2_name (decl, 0);
15942       if (name)
15943         add_name_attribute (die, name);
15944       if (! DECL_ARTIFICIAL (decl))
15945         add_src_coords_attributes (die, decl);
15946
15947       add_linkage_name (die, decl);
15948     }
15949
15950 #ifdef VMS_DEBUGGING_INFO
15951   /* Get the function's name, as described by its RTL.  This may be different
15952      from the DECL_NAME name used in the source file.  */
15953   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
15954     {
15955       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
15956                    XEXP (DECL_RTL (decl), 0));
15957       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
15958     }
15959 #endif /* VMS_DEBUGGING_INFO */
15960 }
15961
15962 #ifdef VMS_DEBUGGING_INFO
15963 /* Output the debug main pointer die for VMS */
15964
15965 void
15966 dwarf2out_vms_debug_main_pointer (void)
15967 {
15968   char label[MAX_ARTIFICIAL_LABEL_BYTES];
15969   dw_die_ref die;
15970
15971   /* Allocate the VMS debug main subprogram die.  */
15972   die = ggc_alloc_cleared_die_node ();
15973   die->die_tag = DW_TAG_subprogram;
15974   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
15975   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
15976                                current_function_funcdef_no);
15977   add_AT_lbl_id (die, DW_AT_entry_pc, label);
15978
15979   /* Make it the first child of comp_unit_die ().  */
15980   die->die_parent = comp_unit_die ();
15981   if (comp_unit_die ()->die_child)
15982     {
15983       die->die_sib = comp_unit_die ()->die_child->die_sib;
15984       comp_unit_die ()->die_child->die_sib = die;
15985     }
15986   else
15987     {
15988       die->die_sib = die;
15989       comp_unit_die ()->die_child = die;
15990     }
15991 }
15992 #endif /* VMS_DEBUGGING_INFO */
15993
15994 /* Push a new declaration scope.  */
15995
15996 static void
15997 push_decl_scope (tree scope)
15998 {
15999   VEC_safe_push (tree, gc, decl_scope_table, scope);
16000 }
16001
16002 /* Pop a declaration scope.  */
16003
16004 static inline void
16005 pop_decl_scope (void)
16006 {
16007   VEC_pop (tree, decl_scope_table);
16008 }
16009
16010 /* Return the DIE for the scope that immediately contains this type.
16011    Non-named types get global scope.  Named types nested in other
16012    types get their containing scope if it's open, or global scope
16013    otherwise.  All other types (i.e. function-local named types) get
16014    the current active scope.  */
16015
16016 static dw_die_ref
16017 scope_die_for (tree t, dw_die_ref context_die)
16018 {
16019   dw_die_ref scope_die = NULL;
16020   tree containing_scope;
16021   int i;
16022
16023   /* Non-types always go in the current scope.  */
16024   gcc_assert (TYPE_P (t));
16025
16026   containing_scope = TYPE_CONTEXT (t);
16027
16028   /* Use the containing namespace if it was passed in (for a declaration).  */
16029   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16030     {
16031       if (context_die == lookup_decl_die (containing_scope))
16032         /* OK */;
16033       else
16034         containing_scope = NULL_TREE;
16035     }
16036
16037   /* Ignore function type "scopes" from the C frontend.  They mean that
16038      a tagged type is local to a parmlist of a function declarator, but
16039      that isn't useful to DWARF.  */
16040   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16041     containing_scope = NULL_TREE;
16042
16043   if (SCOPE_FILE_SCOPE_P (containing_scope))
16044     scope_die = comp_unit_die ();
16045   else if (TYPE_P (containing_scope))
16046     {
16047       /* For types, we can just look up the appropriate DIE.  But
16048          first we check to see if we're in the middle of emitting it
16049          so we know where the new DIE should go.  */
16050       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16051         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16052           break;
16053
16054       if (i < 0)
16055         {
16056           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16057                       || TREE_ASM_WRITTEN (containing_scope));
16058           /*We are not in the middle of emitting the type
16059             CONTAINING_SCOPE. Let's see if it's emitted already.  */
16060           scope_die = lookup_type_die (containing_scope);
16061
16062           /* If none of the current dies are suitable, we get file scope.  */
16063           if (scope_die == NULL)
16064             scope_die = comp_unit_die ();
16065         }
16066       else
16067         scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
16068     }
16069   else
16070     scope_die = context_die;
16071
16072   return scope_die;
16073 }
16074
16075 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16076
16077 static inline int
16078 local_scope_p (dw_die_ref context_die)
16079 {
16080   for (; context_die; context_die = context_die->die_parent)
16081     if (context_die->die_tag == DW_TAG_inlined_subroutine
16082         || context_die->die_tag == DW_TAG_subprogram)
16083       return 1;
16084
16085   return 0;
16086 }
16087
16088 /* Returns nonzero if CONTEXT_DIE is a class.  */
16089
16090 static inline int
16091 class_scope_p (dw_die_ref context_die)
16092 {
16093   return (context_die
16094           && (context_die->die_tag == DW_TAG_structure_type
16095               || context_die->die_tag == DW_TAG_class_type
16096               || context_die->die_tag == DW_TAG_interface_type
16097               || context_die->die_tag == DW_TAG_union_type));
16098 }
16099
16100 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16101    whether or not to treat a DIE in this context as a declaration.  */
16102
16103 static inline int
16104 class_or_namespace_scope_p (dw_die_ref context_die)
16105 {
16106   return (class_scope_p (context_die)
16107           || (context_die && context_die->die_tag == DW_TAG_namespace));
16108 }
16109
16110 /* Many forms of DIEs require a "type description" attribute.  This
16111    routine locates the proper "type descriptor" die for the type given
16112    by 'type', and adds a DW_AT_type attribute below the given die.  */
16113
16114 static void
16115 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16116                     int decl_volatile, dw_die_ref context_die)
16117 {
16118   enum tree_code code  = TREE_CODE (type);
16119   dw_die_ref type_die  = NULL;
16120
16121   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16122      or fixed-point type, use the inner type.  This is because we have no
16123      support for unnamed types in base_type_die.  This can happen if this is
16124      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16125   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16126       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16127     type = TREE_TYPE (type), code = TREE_CODE (type);
16128
16129   if (code == ERROR_MARK
16130       /* Handle a special case.  For functions whose return type is void, we
16131          generate *no* type attribute.  (Note that no object may have type
16132          `void', so this only applies to function return types).  */
16133       || code == VOID_TYPE)
16134     return;
16135
16136   type_die = modified_type_die (type,
16137                                 decl_const || TYPE_READONLY (type),
16138                                 decl_volatile || TYPE_VOLATILE (type),
16139                                 context_die);
16140
16141   if (type_die != NULL)
16142     add_AT_die_ref (object_die, DW_AT_type, type_die);
16143 }
16144
16145 /* Given an object die, add the calling convention attribute for the
16146    function call type.  */
16147 static void
16148 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16149 {
16150   enum dwarf_calling_convention value = DW_CC_normal;
16151
16152   value = ((enum dwarf_calling_convention)
16153            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16154
16155   if (is_fortran ()
16156       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16157     {
16158       /* DWARF 2 doesn't provide a way to identify a program's source-level
16159         entry point.  DW_AT_calling_convention attributes are only meant
16160         to describe functions' calling conventions.  However, lacking a
16161         better way to signal the Fortran main program, we used this for 
16162         a long time, following existing custom.  Now, DWARF 4 has 
16163         DW_AT_main_subprogram, which we add below, but some tools still
16164         rely on the old way, which we thus keep.  */
16165       value = DW_CC_program;
16166
16167       if (dwarf_version >= 4 || !dwarf_strict)
16168         add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
16169     }
16170
16171   /* Only add the attribute if the backend requests it, and
16172      is not DW_CC_normal.  */
16173   if (value && (value != DW_CC_normal))
16174     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16175 }
16176
16177 /* Given a tree pointer to a struct, class, union, or enum type node, return
16178    a pointer to the (string) tag name for the given type, or zero if the type
16179    was declared without a tag.  */
16180
16181 static const char *
16182 type_tag (const_tree type)
16183 {
16184   const char *name = 0;
16185
16186   if (TYPE_NAME (type) != 0)
16187     {
16188       tree t = 0;
16189
16190       /* Find the IDENTIFIER_NODE for the type name.  */
16191       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
16192           && !TYPE_NAMELESS (type))
16193         t = TYPE_NAME (type);
16194
16195       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16196          a TYPE_DECL node, regardless of whether or not a `typedef' was
16197          involved.  */
16198       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16199                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16200         {
16201           /* We want to be extra verbose.  Don't call dwarf_name if
16202              DECL_NAME isn't set.  The default hook for decl_printable_name
16203              doesn't like that, and in this context it's correct to return
16204              0, instead of "<anonymous>" or the like.  */
16205           if (DECL_NAME (TYPE_NAME (type))
16206               && !DECL_NAMELESS (TYPE_NAME (type)))
16207             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16208         }
16209
16210       /* Now get the name as a string, or invent one.  */
16211       if (!name && t != 0)
16212         name = IDENTIFIER_POINTER (t);
16213     }
16214
16215   return (name == 0 || *name == '\0') ? 0 : name;
16216 }
16217
16218 /* Return the type associated with a data member, make a special check
16219    for bit field types.  */
16220
16221 static inline tree
16222 member_declared_type (const_tree member)
16223 {
16224   return (DECL_BIT_FIELD_TYPE (member)
16225           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16226 }
16227
16228 /* Get the decl's label, as described by its RTL. This may be different
16229    from the DECL_NAME name used in the source file.  */
16230
16231 #if 0
16232 static const char *
16233 decl_start_label (tree decl)
16234 {
16235   rtx x;
16236   const char *fnname;
16237
16238   x = DECL_RTL (decl);
16239   gcc_assert (MEM_P (x));
16240
16241   x = XEXP (x, 0);
16242   gcc_assert (GET_CODE (x) == SYMBOL_REF);
16243
16244   fnname = XSTR (x, 0);
16245   return fnname;
16246 }
16247 #endif
16248 \f
16249 /* These routines generate the internal representation of the DIE's for
16250    the compilation unit.  Debugging information is collected by walking
16251    the declaration trees passed in from dwarf2out_decl().  */
16252
16253 static void
16254 gen_array_type_die (tree type, dw_die_ref context_die)
16255 {
16256   dw_die_ref scope_die = scope_die_for (type, context_die);
16257   dw_die_ref array_die;
16258
16259   /* GNU compilers represent multidimensional array types as sequences of one
16260      dimensional array types whose element types are themselves array types.
16261      We sometimes squish that down to a single array_type DIE with multiple
16262      subscripts in the Dwarf debugging info.  The draft Dwarf specification
16263      say that we are allowed to do this kind of compression in C, because
16264      there is no difference between an array of arrays and a multidimensional
16265      array.  We don't do this for Ada to remain as close as possible to the
16266      actual representation, which is especially important against the language
16267      flexibilty wrt arrays of variable size.  */
16268
16269   bool collapse_nested_arrays = !is_ada ();
16270   tree element_type;
16271
16272   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16273      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
16274   if (TYPE_STRING_FLAG (type)
16275       && TREE_CODE (type) == ARRAY_TYPE
16276       && is_fortran ()
16277       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16278     {
16279       HOST_WIDE_INT size;
16280
16281       array_die = new_die (DW_TAG_string_type, scope_die, type);
16282       add_name_attribute (array_die, type_tag (type));
16283       equate_type_number_to_die (type, array_die);
16284       size = int_size_in_bytes (type);
16285       if (size >= 0)
16286         add_AT_unsigned (array_die, DW_AT_byte_size, size);
16287       else if (TYPE_DOMAIN (type) != NULL_TREE
16288                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16289                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16290         {
16291           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16292           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16293
16294           size = int_size_in_bytes (TREE_TYPE (szdecl));
16295           if (loc && size > 0)
16296             {
16297               add_AT_location_description (array_die, DW_AT_string_length, loc);
16298               if (size != DWARF2_ADDR_SIZE)
16299                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16300             }
16301         }
16302       return;
16303     }
16304
16305   /* ??? The SGI dwarf reader fails for array of array of enum types
16306      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16307      array type comes before the outer array type.  We thus call gen_type_die
16308      before we new_die and must prevent nested array types collapsing for this
16309      target.  */
16310
16311 #ifdef MIPS_DEBUGGING_INFO
16312   gen_type_die (TREE_TYPE (type), context_die);
16313   collapse_nested_arrays = false;
16314 #endif
16315
16316   array_die = new_die (DW_TAG_array_type, scope_die, type);
16317   add_name_attribute (array_die, type_tag (type));
16318   add_gnat_descriptive_type_attribute (array_die, type, context_die);
16319   if (TYPE_ARTIFICIAL (type))
16320     add_AT_flag (array_die, DW_AT_artificial, 1);
16321   equate_type_number_to_die (type, array_die);
16322
16323   if (TREE_CODE (type) == VECTOR_TYPE)
16324     add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16325
16326   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16327   if (is_fortran ()
16328       && TREE_CODE (type) == ARRAY_TYPE
16329       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16330       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16331     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16332
16333 #if 0
16334   /* We default the array ordering.  SDB will probably do
16335      the right things even if DW_AT_ordering is not present.  It's not even
16336      an issue until we start to get into multidimensional arrays anyway.  If
16337      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16338      then we'll have to put the DW_AT_ordering attribute back in.  (But if
16339      and when we find out that we need to put these in, we will only do so
16340      for multidimensional arrays.  */
16341   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16342 #endif
16343
16344 #ifdef MIPS_DEBUGGING_INFO
16345   /* The SGI compilers handle arrays of unknown bound by setting
16346      AT_declaration and not emitting any subrange DIEs.  */
16347   if (TREE_CODE (type) == ARRAY_TYPE
16348       && ! TYPE_DOMAIN (type))
16349     add_AT_flag (array_die, DW_AT_declaration, 1);
16350   else
16351 #endif
16352   if (TREE_CODE (type) == VECTOR_TYPE)
16353     {
16354       /* For VECTOR_TYPEs we use an array die with appropriate bounds.  */
16355       dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
16356       add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node);
16357       add_bound_info (subrange_die, DW_AT_upper_bound,
16358                       size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
16359     }
16360   else
16361     add_subscript_info (array_die, type, collapse_nested_arrays);
16362
16363   /* Add representation of the type of the elements of this array type and
16364      emit the corresponding DIE if we haven't done it already.  */
16365   element_type = TREE_TYPE (type);
16366   if (collapse_nested_arrays)
16367     while (TREE_CODE (element_type) == ARRAY_TYPE)
16368       {
16369         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16370           break;
16371         element_type = TREE_TYPE (element_type);
16372       }
16373
16374 #ifndef MIPS_DEBUGGING_INFO
16375   gen_type_die (element_type, context_die);
16376 #endif
16377
16378   add_type_attribute (array_die, element_type, 0, 0, context_die);
16379
16380   if (get_AT (array_die, DW_AT_name))
16381     add_pubtype (type, array_die);
16382 }
16383
16384 static dw_loc_descr_ref
16385 descr_info_loc (tree val, tree base_decl)
16386 {
16387   HOST_WIDE_INT size;
16388   dw_loc_descr_ref loc, loc2;
16389   enum dwarf_location_atom op;
16390
16391   if (val == base_decl)
16392     return new_loc_descr (DW_OP_push_object_address, 0, 0);
16393
16394   switch (TREE_CODE (val))
16395     {
16396     CASE_CONVERT:
16397       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16398     case VAR_DECL:
16399       return loc_descriptor_from_tree (val, 0);
16400     case INTEGER_CST:
16401       if (host_integerp (val, 0))
16402         return int_loc_descriptor (tree_low_cst (val, 0));
16403       break;
16404     case INDIRECT_REF:
16405       size = int_size_in_bytes (TREE_TYPE (val));
16406       if (size < 0)
16407         break;
16408       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16409       if (!loc)
16410         break;
16411       if (size == DWARF2_ADDR_SIZE)
16412         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
16413       else
16414         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
16415       return loc;
16416     case POINTER_PLUS_EXPR:
16417     case PLUS_EXPR:
16418       if (host_integerp (TREE_OPERAND (val, 1), 1)
16419           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
16420              < 16384)
16421         {
16422           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16423           if (!loc)
16424             break;
16425           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
16426         }
16427       else
16428         {
16429           op = DW_OP_plus;
16430         do_binop:
16431           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16432           if (!loc)
16433             break;
16434           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
16435           if (!loc2)
16436             break;
16437           add_loc_descr (&loc, loc2);
16438           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
16439         }
16440       return loc;
16441     case MINUS_EXPR:
16442       op = DW_OP_minus;
16443       goto do_binop;
16444     case MULT_EXPR:
16445       op = DW_OP_mul;
16446       goto do_binop;
16447     case EQ_EXPR:
16448       op = DW_OP_eq;
16449       goto do_binop;
16450     case NE_EXPR:
16451       op = DW_OP_ne;
16452       goto do_binop;
16453     default:
16454       break;
16455     }
16456   return NULL;
16457 }
16458
16459 static void
16460 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
16461                       tree val, tree base_decl)
16462 {
16463   dw_loc_descr_ref loc;
16464
16465   if (host_integerp (val, 0))
16466     {
16467       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
16468       return;
16469     }
16470
16471   loc = descr_info_loc (val, base_decl);
16472   if (!loc)
16473     return;
16474
16475   add_AT_loc (die, attr, loc);
16476 }
16477
16478 /* This routine generates DIE for array with hidden descriptor, details
16479    are filled into *info by a langhook.  */
16480
16481 static void
16482 gen_descr_array_type_die (tree type, struct array_descr_info *info,
16483                           dw_die_ref context_die)
16484 {
16485   dw_die_ref scope_die = scope_die_for (type, context_die);
16486   dw_die_ref array_die;
16487   int dim;
16488
16489   array_die = new_die (DW_TAG_array_type, scope_die, type);
16490   add_name_attribute (array_die, type_tag (type));
16491   equate_type_number_to_die (type, array_die);
16492
16493   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16494   if (is_fortran ()
16495       && info->ndimensions >= 2)
16496     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16497
16498   if (info->data_location)
16499     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
16500                           info->base_decl);
16501   if (info->associated)
16502     add_descr_info_field (array_die, DW_AT_associated, info->associated,
16503                           info->base_decl);
16504   if (info->allocated)
16505     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
16506                           info->base_decl);
16507
16508   for (dim = 0; dim < info->ndimensions; dim++)
16509     {
16510       dw_die_ref subrange_die
16511         = new_die (DW_TAG_subrange_type, array_die, NULL);
16512
16513       if (info->dimen[dim].lower_bound)
16514         {
16515           /* If it is the default value, omit it.  */
16516           int dflt;
16517
16518           if (host_integerp (info->dimen[dim].lower_bound, 0)
16519               && (dflt = lower_bound_default ()) != -1
16520               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
16521             ;
16522           else
16523             add_descr_info_field (subrange_die, DW_AT_lower_bound,
16524                                   info->dimen[dim].lower_bound,
16525                                   info->base_decl);
16526         }
16527       if (info->dimen[dim].upper_bound)
16528         add_descr_info_field (subrange_die, DW_AT_upper_bound,
16529                               info->dimen[dim].upper_bound,
16530                               info->base_decl);
16531       if (info->dimen[dim].stride)
16532         add_descr_info_field (subrange_die, DW_AT_byte_stride,
16533                               info->dimen[dim].stride,
16534                               info->base_decl);
16535     }
16536
16537   gen_type_die (info->element_type, context_die);
16538   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
16539
16540   if (get_AT (array_die, DW_AT_name))
16541     add_pubtype (type, array_die);
16542 }
16543
16544 #if 0
16545 static void
16546 gen_entry_point_die (tree decl, dw_die_ref context_die)
16547 {
16548   tree origin = decl_ultimate_origin (decl);
16549   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
16550
16551   if (origin != NULL)
16552     add_abstract_origin_attribute (decl_die, origin);
16553   else
16554     {
16555       add_name_and_src_coords_attributes (decl_die, decl);
16556       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
16557                           0, 0, context_die);
16558     }
16559
16560   if (DECL_ABSTRACT (decl))
16561     equate_decl_number_to_die (decl, decl_die);
16562   else
16563     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
16564 }
16565 #endif
16566
16567 /* Walk through the list of incomplete types again, trying once more to
16568    emit full debugging info for them.  */
16569
16570 static void
16571 retry_incomplete_types (void)
16572 {
16573   int i;
16574
16575   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
16576     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
16577                                   DINFO_USAGE_DIR_USE))
16578       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die ());
16579 }
16580
16581 /* Determine what tag to use for a record type.  */
16582
16583 static enum dwarf_tag
16584 record_type_tag (tree type)
16585 {
16586   if (! lang_hooks.types.classify_record)
16587     return DW_TAG_structure_type;
16588
16589   switch (lang_hooks.types.classify_record (type))
16590     {
16591     case RECORD_IS_STRUCT:
16592       return DW_TAG_structure_type;
16593
16594     case RECORD_IS_CLASS:
16595       return DW_TAG_class_type;
16596
16597     case RECORD_IS_INTERFACE:
16598       if (dwarf_version >= 3 || !dwarf_strict)
16599         return DW_TAG_interface_type;
16600       return DW_TAG_structure_type;
16601
16602     default:
16603       gcc_unreachable ();
16604     }
16605 }
16606
16607 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
16608    include all of the information about the enumeration values also. Each
16609    enumerated type name/value is listed as a child of the enumerated type
16610    DIE.  */
16611
16612 static dw_die_ref
16613 gen_enumeration_type_die (tree type, dw_die_ref context_die)
16614 {
16615   dw_die_ref type_die = lookup_type_die (type);
16616
16617   if (type_die == NULL)
16618     {
16619       type_die = new_die (DW_TAG_enumeration_type,
16620                           scope_die_for (type, context_die), type);
16621       equate_type_number_to_die (type, type_die);
16622       add_name_attribute (type_die, type_tag (type));
16623       add_gnat_descriptive_type_attribute (type_die, type, context_die);
16624       if (TYPE_ARTIFICIAL (type))
16625         add_AT_flag (type_die, DW_AT_artificial, 1);
16626       if (dwarf_version >= 4 || !dwarf_strict)
16627         {
16628           if (ENUM_IS_SCOPED (type))
16629             add_AT_flag (type_die, DW_AT_enum_class, 1);
16630           if (ENUM_IS_OPAQUE (type))
16631             add_AT_flag (type_die, DW_AT_declaration, 1);
16632         }
16633     }
16634   else if (! TYPE_SIZE (type))
16635     return type_die;
16636   else
16637     remove_AT (type_die, DW_AT_declaration);
16638
16639   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
16640      given enum type is incomplete, do not generate the DW_AT_byte_size
16641      attribute or the DW_AT_element_list attribute.  */
16642   if (TYPE_SIZE (type))
16643     {
16644       tree link;
16645
16646       TREE_ASM_WRITTEN (type) = 1;
16647       add_byte_size_attribute (type_die, type);
16648       if (TYPE_STUB_DECL (type) != NULL_TREE)
16649         {
16650           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
16651           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
16652         }
16653
16654       /* If the first reference to this type was as the return type of an
16655          inline function, then it may not have a parent.  Fix this now.  */
16656       if (type_die->die_parent == NULL)
16657         add_child_die (scope_die_for (type, context_die), type_die);
16658
16659       for (link = TYPE_VALUES (type);
16660            link != NULL; link = TREE_CHAIN (link))
16661         {
16662           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
16663           tree value = TREE_VALUE (link);
16664
16665           add_name_attribute (enum_die,
16666                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
16667
16668           if (TREE_CODE (value) == CONST_DECL)
16669             value = DECL_INITIAL (value);
16670
16671           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
16672             /* DWARF2 does not provide a way of indicating whether or
16673                not enumeration constants are signed or unsigned.  GDB
16674                always assumes the values are signed, so we output all
16675                values as if they were signed.  That means that
16676                enumeration constants with very large unsigned values
16677                will appear to have negative values in the debugger.  */
16678             add_AT_int (enum_die, DW_AT_const_value,
16679                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
16680         }
16681     }
16682   else
16683     add_AT_flag (type_die, DW_AT_declaration, 1);
16684
16685   if (get_AT (type_die, DW_AT_name))
16686     add_pubtype (type, type_die);
16687
16688   return type_die;
16689 }
16690
16691 /* Generate a DIE to represent either a real live formal parameter decl or to
16692    represent just the type of some formal parameter position in some function
16693    type.
16694
16695    Note that this routine is a bit unusual because its argument may be a
16696    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
16697    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
16698    node.  If it's the former then this function is being called to output a
16699    DIE to represent a formal parameter object (or some inlining thereof).  If
16700    it's the latter, then this function is only being called to output a
16701    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
16702    argument type of some subprogram type.
16703    If EMIT_NAME_P is true, name and source coordinate attributes
16704    are emitted.  */
16705
16706 static dw_die_ref
16707 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
16708                           dw_die_ref context_die)
16709 {
16710   tree node_or_origin = node ? node : origin;
16711   tree ultimate_origin;
16712   dw_die_ref parm_die
16713     = new_die (DW_TAG_formal_parameter, context_die, node);
16714
16715   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
16716     {
16717     case tcc_declaration:
16718       ultimate_origin = decl_ultimate_origin (node_or_origin);
16719       if (node || ultimate_origin)
16720         origin = ultimate_origin;
16721       if (origin != NULL)
16722         add_abstract_origin_attribute (parm_die, origin);
16723       else if (emit_name_p)
16724         add_name_and_src_coords_attributes (parm_die, node);
16725       if (origin == NULL
16726           || (! DECL_ABSTRACT (node_or_origin)
16727               && variably_modified_type_p (TREE_TYPE (node_or_origin),
16728                                            decl_function_context
16729                                                             (node_or_origin))))
16730         {
16731           tree type = TREE_TYPE (node_or_origin);
16732           if (decl_by_reference_p (node_or_origin))
16733             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
16734                                 context_die);
16735           else
16736             add_type_attribute (parm_die, type,
16737                                 TREE_READONLY (node_or_origin),
16738                                 TREE_THIS_VOLATILE (node_or_origin),
16739                                 context_die);
16740         }
16741       if (origin == NULL && DECL_ARTIFICIAL (node))
16742         add_AT_flag (parm_die, DW_AT_artificial, 1);
16743
16744       if (node && node != origin)
16745         equate_decl_number_to_die (node, parm_die);
16746       if (! DECL_ABSTRACT (node_or_origin))
16747         add_location_or_const_value_attribute (parm_die, node_or_origin,
16748                                                node == NULL, DW_AT_location);
16749
16750       break;
16751
16752     case tcc_type:
16753       /* We were called with some kind of a ..._TYPE node.  */
16754       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
16755       break;
16756
16757     default:
16758       gcc_unreachable ();
16759     }
16760
16761   return parm_die;
16762 }
16763
16764 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
16765    children DW_TAG_formal_parameter DIEs representing the arguments of the
16766    parameter pack.
16767
16768    PARM_PACK must be a function parameter pack.
16769    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
16770    must point to the subsequent arguments of the function PACK_ARG belongs to.
16771    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
16772    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
16773    following the last one for which a DIE was generated.  */
16774
16775 static dw_die_ref
16776 gen_formal_parameter_pack_die  (tree parm_pack,
16777                                 tree pack_arg,
16778                                 dw_die_ref subr_die,
16779                                 tree *next_arg)
16780 {
16781   tree arg;
16782   dw_die_ref parm_pack_die;
16783
16784   gcc_assert (parm_pack
16785               && lang_hooks.function_parameter_pack_p (parm_pack)
16786               && subr_die);
16787
16788   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
16789   add_src_coords_attributes (parm_pack_die, parm_pack);
16790
16791   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
16792     {
16793       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
16794                                                                  parm_pack))
16795         break;
16796       gen_formal_parameter_die (arg, NULL,
16797                                 false /* Don't emit name attribute.  */,
16798                                 parm_pack_die);
16799     }
16800   if (next_arg)
16801     *next_arg = arg;
16802   return parm_pack_die;
16803 }
16804
16805 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
16806    at the end of an (ANSI prototyped) formal parameters list.  */
16807
16808 static void
16809 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
16810 {
16811   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
16812 }
16813
16814 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
16815    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
16816    parameters as specified in some function type specification (except for
16817    those which appear as part of a function *definition*).  */
16818
16819 static void
16820 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
16821 {
16822   tree link;
16823   tree formal_type = NULL;
16824   tree first_parm_type;
16825   tree arg;
16826
16827   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
16828     {
16829       arg = DECL_ARGUMENTS (function_or_method_type);
16830       function_or_method_type = TREE_TYPE (function_or_method_type);
16831     }
16832   else
16833     arg = NULL_TREE;
16834
16835   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
16836
16837   /* Make our first pass over the list of formal parameter types and output a
16838      DW_TAG_formal_parameter DIE for each one.  */
16839   for (link = first_parm_type; link; )
16840     {
16841       dw_die_ref parm_die;
16842
16843       formal_type = TREE_VALUE (link);
16844       if (formal_type == void_type_node)
16845         break;
16846
16847       /* Output a (nameless) DIE to represent the formal parameter itself.  */
16848       parm_die = gen_formal_parameter_die (formal_type, NULL,
16849                                            true /* Emit name attribute.  */,
16850                                            context_die);
16851       if (TREE_CODE (function_or_method_type) == METHOD_TYPE
16852           && link == first_parm_type)
16853         {
16854           add_AT_flag (parm_die, DW_AT_artificial, 1);
16855           if (dwarf_version >= 3 || !dwarf_strict)
16856             add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
16857         }
16858       else if (arg && DECL_ARTIFICIAL (arg))
16859         add_AT_flag (parm_die, DW_AT_artificial, 1);
16860
16861       link = TREE_CHAIN (link);
16862       if (arg)
16863         arg = DECL_CHAIN (arg);
16864     }
16865
16866   /* If this function type has an ellipsis, add a
16867      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
16868   if (formal_type != void_type_node)
16869     gen_unspecified_parameters_die (function_or_method_type, context_die);
16870
16871   /* Make our second (and final) pass over the list of formal parameter types
16872      and output DIEs to represent those types (as necessary).  */
16873   for (link = TYPE_ARG_TYPES (function_or_method_type);
16874        link && TREE_VALUE (link);
16875        link = TREE_CHAIN (link))
16876     gen_type_die (TREE_VALUE (link), context_die);
16877 }
16878
16879 /* We want to generate the DIE for TYPE so that we can generate the
16880    die for MEMBER, which has been defined; we will need to refer back
16881    to the member declaration nested within TYPE.  If we're trying to
16882    generate minimal debug info for TYPE, processing TYPE won't do the
16883    trick; we need to attach the member declaration by hand.  */
16884
16885 static void
16886 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
16887 {
16888   gen_type_die (type, context_die);
16889
16890   /* If we're trying to avoid duplicate debug info, we may not have
16891      emitted the member decl for this function.  Emit it now.  */
16892   if (TYPE_STUB_DECL (type)
16893       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
16894       && ! lookup_decl_die (member))
16895     {
16896       dw_die_ref type_die;
16897       gcc_assert (!decl_ultimate_origin (member));
16898
16899       push_decl_scope (type);
16900       type_die = lookup_type_die_strip_naming_typedef (type);
16901       if (TREE_CODE (member) == FUNCTION_DECL)
16902         gen_subprogram_die (member, type_die);
16903       else if (TREE_CODE (member) == FIELD_DECL)
16904         {
16905           /* Ignore the nameless fields that are used to skip bits but handle
16906              C++ anonymous unions and structs.  */
16907           if (DECL_NAME (member) != NULL_TREE
16908               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
16909               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
16910             {
16911               gen_type_die (member_declared_type (member), type_die);
16912               gen_field_die (member, type_die);
16913             }
16914         }
16915       else
16916         gen_variable_die (member, NULL_TREE, type_die);
16917
16918       pop_decl_scope ();
16919     }
16920 }
16921
16922 /* Generate the DWARF2 info for the "abstract" instance of a function which we
16923    may later generate inlined and/or out-of-line instances of.  */
16924
16925 static void
16926 dwarf2out_abstract_function (tree decl)
16927 {
16928   dw_die_ref old_die;
16929   tree save_fn;
16930   tree context;
16931   int was_abstract;
16932   htab_t old_decl_loc_table;
16933   htab_t old_cached_dw_loc_list_table;
16934   int old_call_site_count, old_tail_call_site_count;
16935   struct call_arg_loc_node *old_call_arg_locations;
16936
16937   /* Make sure we have the actual abstract inline, not a clone.  */
16938   decl = DECL_ORIGIN (decl);
16939
16940   old_die = lookup_decl_die (decl);
16941   if (old_die && get_AT (old_die, DW_AT_inline))
16942     /* We've already generated the abstract instance.  */
16943     return;
16944
16945   /* We can be called while recursively when seeing block defining inlined subroutine
16946      DIE.  Be sure to not clobber the outer location table nor use it or we would
16947      get locations in abstract instantces.  */
16948   old_decl_loc_table = decl_loc_table;
16949   decl_loc_table = NULL;
16950   old_cached_dw_loc_list_table = cached_dw_loc_list_table;
16951   cached_dw_loc_list_table = NULL;
16952   old_call_arg_locations = call_arg_locations;
16953   call_arg_locations = NULL;
16954   old_call_site_count = call_site_count;
16955   call_site_count = -1;
16956   old_tail_call_site_count = tail_call_site_count;
16957   tail_call_site_count = -1;
16958
16959   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
16960      we don't get confused by DECL_ABSTRACT.  */
16961   if (debug_info_level > DINFO_LEVEL_TERSE)
16962     {
16963       context = decl_class_context (decl);
16964       if (context)
16965         gen_type_die_for_member
16966           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
16967     }
16968
16969   /* Pretend we've just finished compiling this function.  */
16970   save_fn = current_function_decl;
16971   current_function_decl = decl;
16972   push_cfun (DECL_STRUCT_FUNCTION (decl));
16973
16974   was_abstract = DECL_ABSTRACT (decl);
16975   set_decl_abstract_flags (decl, 1);
16976   dwarf2out_decl (decl);
16977   if (! was_abstract)
16978     set_decl_abstract_flags (decl, 0);
16979
16980   current_function_decl = save_fn;
16981   decl_loc_table = old_decl_loc_table;
16982   cached_dw_loc_list_table = old_cached_dw_loc_list_table;
16983   call_arg_locations = old_call_arg_locations;
16984   call_site_count = old_call_site_count;
16985   tail_call_site_count = old_tail_call_site_count;
16986   pop_cfun ();
16987 }
16988
16989 /* Helper function of premark_used_types() which gets called through
16990    htab_traverse.
16991
16992    Marks the DIE of a given type in *SLOT as perennial, so it never gets
16993    marked as unused by prune_unused_types.  */
16994
16995 static int
16996 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
16997 {
16998   tree type;
16999   dw_die_ref die;
17000
17001   type = (tree) *slot;
17002   die = lookup_type_die (type);
17003   if (die != NULL)
17004     die->die_perennial_p = 1;
17005   return 1;
17006 }
17007
17008 /* Helper function of premark_types_used_by_global_vars which gets called
17009    through htab_traverse.
17010
17011    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17012    marked as unused by prune_unused_types. The DIE of the type is marked
17013    only if the global variable using the type will actually be emitted.  */
17014
17015 static int
17016 premark_types_used_by_global_vars_helper (void **slot,
17017                                           void *data ATTRIBUTE_UNUSED)
17018 {
17019   struct types_used_by_vars_entry *entry;
17020   dw_die_ref die;
17021
17022   entry = (struct types_used_by_vars_entry *) *slot;
17023   gcc_assert (entry->type != NULL
17024               && entry->var_decl != NULL);
17025   die = lookup_type_die (entry->type);
17026   if (die)
17027     {
17028       /* Ask cgraph if the global variable really is to be emitted.
17029          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17030       struct varpool_node *node = varpool_get_node (entry->var_decl);
17031       if (node && node->needed)
17032         {
17033           die->die_perennial_p = 1;
17034           /* Keep the parent DIEs as well.  */
17035           while ((die = die->die_parent) && die->die_perennial_p == 0)
17036             die->die_perennial_p = 1;
17037         }
17038     }
17039   return 1;
17040 }
17041
17042 /* Mark all members of used_types_hash as perennial.  */
17043
17044 static void
17045 premark_used_types (void)
17046 {
17047   if (cfun && cfun->used_types_hash)
17048     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17049 }
17050
17051 /* Mark all members of types_used_by_vars_entry as perennial.  */
17052
17053 static void
17054 premark_types_used_by_global_vars (void)
17055 {
17056   if (types_used_by_vars_hash)
17057     htab_traverse (types_used_by_vars_hash,
17058                    premark_types_used_by_global_vars_helper, NULL);
17059 }
17060
17061 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
17062    for CA_LOC call arg loc node.  */
17063
17064 static dw_die_ref
17065 gen_call_site_die (tree decl, dw_die_ref subr_die,
17066                    struct call_arg_loc_node *ca_loc)
17067 {
17068   dw_die_ref stmt_die = NULL, die;
17069   tree block = ca_loc->block;
17070
17071   while (block
17072          && block != DECL_INITIAL (decl)
17073          && TREE_CODE (block) == BLOCK)
17074     {
17075       if (VEC_length (dw_die_ref, block_map) > BLOCK_NUMBER (block))
17076         stmt_die = VEC_index (dw_die_ref, block_map, BLOCK_NUMBER (block));
17077       if (stmt_die)
17078         break;
17079       block = BLOCK_SUPERCONTEXT (block);
17080     }
17081   if (stmt_die == NULL)
17082     stmt_die = subr_die;
17083   die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
17084   add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
17085   if (ca_loc->tail_call_p)
17086     add_AT_flag (die, DW_AT_GNU_tail_call, 1);
17087   if (ca_loc->symbol_ref)
17088     {
17089       dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
17090       if (tdie)
17091         add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
17092       else
17093         add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref);
17094     }
17095   return die;
17096 }
17097
17098 /* Generate a DIE to represent a declared function (either file-scope or
17099    block-local).  */
17100
17101 static void
17102 gen_subprogram_die (tree decl, dw_die_ref context_die)
17103 {
17104   tree origin = decl_ultimate_origin (decl);
17105   dw_die_ref subr_die;
17106   tree outer_scope;
17107   dw_die_ref old_die = lookup_decl_die (decl);
17108   int declaration = (current_function_decl != decl
17109                      || class_or_namespace_scope_p (context_die));
17110
17111   premark_used_types ();
17112
17113   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17114      started to generate the abstract instance of an inline, decided to output
17115      its containing class, and proceeded to emit the declaration of the inline
17116      from the member list for the class.  If so, DECLARATION takes priority;
17117      we'll get back to the abstract instance when done with the class.  */
17118
17119   /* The class-scope declaration DIE must be the primary DIE.  */
17120   if (origin && declaration && class_or_namespace_scope_p (context_die))
17121     {
17122       origin = NULL;
17123       gcc_assert (!old_die);
17124     }
17125
17126   /* Now that the C++ front end lazily declares artificial member fns, we
17127      might need to retrofit the declaration into its class.  */
17128   if (!declaration && !origin && !old_die
17129       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17130       && !class_or_namespace_scope_p (context_die)
17131       && debug_info_level > DINFO_LEVEL_TERSE)
17132     old_die = force_decl_die (decl);
17133
17134   if (origin != NULL)
17135     {
17136       gcc_assert (!declaration || local_scope_p (context_die));
17137
17138       /* Fixup die_parent for the abstract instance of a nested
17139          inline function.  */
17140       if (old_die && old_die->die_parent == NULL)
17141         add_child_die (context_die, old_die);
17142
17143       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17144       add_abstract_origin_attribute (subr_die, origin);
17145       /*  This is where the actual code for a cloned function is.
17146           Let's emit linkage name attribute for it.  This helps
17147           debuggers to e.g, set breakpoints into
17148           constructors/destructors when the user asks "break
17149           K::K".  */
17150       add_linkage_name (subr_die, decl);
17151     }
17152   else if (old_die)
17153     {
17154       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17155       struct dwarf_file_data * file_index = lookup_filename (s.file);
17156
17157       if (!get_AT_flag (old_die, DW_AT_declaration)
17158           /* We can have a normal definition following an inline one in the
17159              case of redefinition of GNU C extern inlines.
17160              It seems reasonable to use AT_specification in this case.  */
17161           && !get_AT (old_die, DW_AT_inline))
17162         {
17163           /* Detect and ignore this case, where we are trying to output
17164              something we have already output.  */
17165           return;
17166         }
17167
17168       /* If the definition comes from the same place as the declaration,
17169          maybe use the old DIE.  We always want the DIE for this function
17170          that has the *_pc attributes to be under comp_unit_die so the
17171          debugger can find it.  We also need to do this for abstract
17172          instances of inlines, since the spec requires the out-of-line copy
17173          to have the same parent.  For local class methods, this doesn't
17174          apply; we just use the old DIE.  */
17175       if ((is_cu_die (old_die->die_parent) || context_die == NULL)
17176           && (DECL_ARTIFICIAL (decl)
17177               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17178                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17179                       == (unsigned) s.line))))
17180         {
17181           subr_die = old_die;
17182
17183           /* Clear out the declaration attribute and the formal parameters.
17184              Do not remove all children, because it is possible that this
17185              declaration die was forced using force_decl_die(). In such
17186              cases die that forced declaration die (e.g. TAG_imported_module)
17187              is one of the children that we do not want to remove.  */
17188           remove_AT (subr_die, DW_AT_declaration);
17189           remove_AT (subr_die, DW_AT_object_pointer);
17190           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17191         }
17192       else
17193         {
17194           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17195           add_AT_specification (subr_die, old_die);
17196           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17197             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17198           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17199             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17200         }
17201     }
17202   else
17203     {
17204       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17205
17206       if (TREE_PUBLIC (decl))
17207         add_AT_flag (subr_die, DW_AT_external, 1);
17208
17209       add_name_and_src_coords_attributes (subr_die, decl);
17210       if (debug_info_level > DINFO_LEVEL_TERSE)
17211         {
17212           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17213           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17214                               0, 0, context_die);
17215         }
17216
17217       add_pure_or_virtual_attribute (subr_die, decl);
17218       if (DECL_ARTIFICIAL (decl))
17219         add_AT_flag (subr_die, DW_AT_artificial, 1);
17220
17221       add_accessibility_attribute (subr_die, decl);
17222     }
17223
17224   if (declaration)
17225     {
17226       if (!old_die || !get_AT (old_die, DW_AT_inline))
17227         {
17228           add_AT_flag (subr_die, DW_AT_declaration, 1);
17229
17230           /* If this is an explicit function declaration then generate
17231              a DW_AT_explicit attribute.  */
17232           if (lang_hooks.decls.function_decl_explicit_p (decl)
17233               && (dwarf_version >= 3 || !dwarf_strict))
17234             add_AT_flag (subr_die, DW_AT_explicit, 1);
17235
17236           /* The first time we see a member function, it is in the context of
17237              the class to which it belongs.  We make sure of this by emitting
17238              the class first.  The next time is the definition, which is
17239              handled above.  The two may come from the same source text.
17240
17241              Note that force_decl_die() forces function declaration die. It is
17242              later reused to represent definition.  */
17243           equate_decl_number_to_die (decl, subr_die);
17244         }
17245     }
17246   else if (DECL_ABSTRACT (decl))
17247     {
17248       if (DECL_DECLARED_INLINE_P (decl))
17249         {
17250           if (cgraph_function_possibly_inlined_p (decl))
17251             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17252           else
17253             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17254         }
17255       else
17256         {
17257           if (cgraph_function_possibly_inlined_p (decl))
17258             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17259           else
17260             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17261         }
17262
17263       if (DECL_DECLARED_INLINE_P (decl)
17264           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17265         add_AT_flag (subr_die, DW_AT_artificial, 1);
17266
17267       equate_decl_number_to_die (decl, subr_die);
17268     }
17269   else if (!DECL_EXTERNAL (decl))
17270     {
17271       HOST_WIDE_INT cfa_fb_offset;
17272
17273       if (!old_die || !get_AT (old_die, DW_AT_inline))
17274         equate_decl_number_to_die (decl, subr_die);
17275
17276       if (!flag_reorder_blocks_and_partition)
17277         {
17278           dw_fde_ref fde = cfun->fde;
17279           if (fde->dw_fde_begin)
17280             {
17281               /* We have already generated the labels.  */
17282               add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17283               add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17284             }
17285           else
17286             {
17287               /* Create start/end labels and add the range.  */
17288               char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17289               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17290                                            current_function_funcdef_no);
17291               add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17292               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17293                                            current_function_funcdef_no);
17294               add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17295             }
17296
17297 #if VMS_DEBUGGING_INFO
17298       /* HP OpenVMS Industry Standard 64: DWARF Extensions
17299          Section 2.3 Prologue and Epilogue Attributes:
17300          When a breakpoint is set on entry to a function, it is generally
17301          desirable for execution to be suspended, not on the very first
17302          instruction of the function, but rather at a point after the
17303          function's frame has been set up, after any language defined local
17304          declaration processing has been completed, and before execution of
17305          the first statement of the function begins. Debuggers generally
17306          cannot properly determine where this point is.  Similarly for a
17307          breakpoint set on exit from a function. The prologue and epilogue
17308          attributes allow a compiler to communicate the location(s) to use.  */
17309
17310       {
17311         if (fde->dw_fde_vms_end_prologue)
17312           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
17313             fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
17314
17315         if (fde->dw_fde_vms_begin_epilogue)
17316           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
17317             fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
17318       }
17319 #endif
17320
17321           add_pubname (decl, subr_die);
17322         }
17323       else
17324         {
17325           /* Generate pubnames entries for the split function code ranges.  */
17326           dw_fde_ref fde = cfun->fde;
17327
17328           if (fde->dw_fde_second_begin)
17329             {
17330               if (dwarf_version >= 3 || !dwarf_strict)
17331                 {
17332                   /* We should use ranges for non-contiguous code section 
17333                      addresses.  Use the actual code range for the initial
17334                      section, since the HOT/COLD labels might precede an 
17335                      alignment offset.  */
17336                   bool range_list_added = false;
17337                   add_ranges_by_labels (subr_die, fde->dw_fde_begin,
17338                                         fde->dw_fde_end, &range_list_added);
17339                   add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
17340                                         fde->dw_fde_second_end,
17341                                         &range_list_added);
17342                   add_pubname (decl, subr_die);
17343                   if (range_list_added)
17344                     add_ranges (NULL);
17345                 }
17346               else
17347                 {
17348                   /* There is no real support in DW2 for this .. so we make
17349                      a work-around.  First, emit the pub name for the segment
17350                      containing the function label.  Then make and emit a
17351                      simplified subprogram DIE for the second segment with the
17352                      name pre-fixed by __hot/cold_sect_of_.  We use the same
17353                      linkage name for the second die so that gdb will find both
17354                      sections when given "b foo".  */
17355                   const char *name = NULL;
17356                   tree decl_name = DECL_NAME (decl);
17357                   dw_die_ref seg_die;
17358
17359                   /* Do the 'primary' section.   */
17360                   add_AT_lbl_id (subr_die, DW_AT_low_pc,
17361                                  fde->dw_fde_begin);
17362                   add_AT_lbl_id (subr_die, DW_AT_high_pc,
17363                                  fde->dw_fde_end);
17364                   /* Add it.   */
17365                   add_pubname (decl, subr_die);
17366
17367                   /* Build a minimal DIE for the secondary section.  */
17368                   seg_die = new_die (DW_TAG_subprogram,
17369                                      subr_die->die_parent, decl);
17370
17371                   if (TREE_PUBLIC (decl))
17372                     add_AT_flag (seg_die, DW_AT_external, 1);
17373
17374                   if (decl_name != NULL 
17375                       && IDENTIFIER_POINTER (decl_name) != NULL)
17376                     {
17377                       name = dwarf2_name (decl, 1);
17378                       if (! DECL_ARTIFICIAL (decl))
17379                         add_src_coords_attributes (seg_die, decl);
17380
17381                       add_linkage_name (seg_die, decl);
17382                     }
17383                   gcc_assert (name != NULL);
17384                   add_pure_or_virtual_attribute (seg_die, decl);
17385                   if (DECL_ARTIFICIAL (decl))
17386                     add_AT_flag (seg_die, DW_AT_artificial, 1);
17387
17388                   name = concat ("__second_sect_of_", name, NULL); 
17389                   add_AT_lbl_id (seg_die, DW_AT_low_pc,
17390                                  fde->dw_fde_second_begin);
17391                   add_AT_lbl_id (seg_die, DW_AT_high_pc,
17392                                  fde->dw_fde_second_end);
17393                   add_name_attribute (seg_die, name);
17394                   add_pubname_string (name, seg_die);
17395                 }
17396             }
17397           else
17398             {
17399               add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17400               add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17401               add_pubname (decl, subr_die);
17402             }
17403         }
17404
17405 #ifdef MIPS_DEBUGGING_INFO
17406       /* Add a reference to the FDE for this routine.  */
17407       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, cfun->fde->fde_index);
17408 #endif
17409
17410       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17411
17412       /* We define the "frame base" as the function's CFA.  This is more
17413          convenient for several reasons: (1) It's stable across the prologue
17414          and epilogue, which makes it better than just a frame pointer,
17415          (2) With dwarf3, there exists a one-byte encoding that allows us
17416          to reference the .debug_frame data by proxy, but failing that,
17417          (3) We can at least reuse the code inspection and interpretation
17418          code that determines the CFA position at various points in the
17419          function.  */
17420       if (dwarf_version >= 3)
17421         {
17422           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17423           add_AT_loc (subr_die, DW_AT_frame_base, op);
17424         }
17425       else
17426         {
17427           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17428           if (list->dw_loc_next)
17429             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17430           else
17431             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17432         }
17433
17434       /* Compute a displacement from the "steady-state frame pointer" to
17435          the CFA.  The former is what all stack slots and argument slots
17436          will reference in the rtl; the later is what we've told the
17437          debugger about.  We'll need to adjust all frame_base references
17438          by this displacement.  */
17439       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17440
17441       if (cfun->static_chain_decl)
17442         add_AT_location_description (subr_die, DW_AT_static_link,
17443                  loc_list_from_tree (cfun->static_chain_decl, 2));
17444     }
17445
17446   /* Generate child dies for template paramaters.  */
17447   if (debug_info_level > DINFO_LEVEL_TERSE)
17448     gen_generic_params_dies (decl);
17449
17450   /* Now output descriptions of the arguments for this function. This gets
17451      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17452      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17453      `...' at the end of the formal parameter list.  In order to find out if
17454      there was a trailing ellipsis or not, we must instead look at the type
17455      associated with the FUNCTION_DECL.  This will be a node of type
17456      FUNCTION_TYPE. If the chain of type nodes hanging off of this
17457      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17458      an ellipsis at the end.  */
17459
17460   /* In the case where we are describing a mere function declaration, all we
17461      need to do here (and all we *can* do here) is to describe the *types* of
17462      its formal parameters.  */
17463   if (debug_info_level <= DINFO_LEVEL_TERSE)
17464     ;
17465   else if (declaration)
17466     gen_formal_types_die (decl, subr_die);
17467   else
17468     {
17469       /* Generate DIEs to represent all known formal parameters.  */
17470       tree parm = DECL_ARGUMENTS (decl);
17471       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17472       tree generic_decl_parm = generic_decl
17473                                 ? DECL_ARGUMENTS (generic_decl)
17474                                 : NULL;
17475
17476       /* Now we want to walk the list of parameters of the function and
17477          emit their relevant DIEs.
17478
17479          We consider the case of DECL being an instance of a generic function
17480          as well as it being a normal function.
17481
17482          If DECL is an instance of a generic function we walk the
17483          parameters of the generic function declaration _and_ the parameters of
17484          DECL itself. This is useful because we want to emit specific DIEs for
17485          function parameter packs and those are declared as part of the
17486          generic function declaration. In that particular case,
17487          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17488          That DIE has children DIEs representing the set of arguments
17489          of the pack. Note that the set of pack arguments can be empty.
17490          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17491          children DIE.
17492
17493          Otherwise, we just consider the parameters of DECL.  */
17494       while (generic_decl_parm || parm)
17495         {
17496           if (generic_decl_parm
17497               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17498             gen_formal_parameter_pack_die (generic_decl_parm,
17499                                            parm, subr_die,
17500                                            &parm);
17501           else if (parm)
17502             {
17503               dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
17504
17505               if (parm == DECL_ARGUMENTS (decl)
17506                   && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
17507                   && parm_die
17508                   && (dwarf_version >= 3 || !dwarf_strict))
17509                 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
17510
17511               parm = DECL_CHAIN (parm);
17512             }
17513
17514           if (generic_decl_parm)
17515             generic_decl_parm = DECL_CHAIN (generic_decl_parm);
17516         }
17517
17518       /* Decide whether we need an unspecified_parameters DIE at the end.
17519          There are 2 more cases to do this for: 1) the ansi ... declaration -
17520          this is detectable when the end of the arg list is not a
17521          void_type_node 2) an unprototyped function declaration (not a
17522          definition).  This just means that we have no info about the
17523          parameters at all.  */
17524       if (prototype_p (TREE_TYPE (decl)))
17525         {
17526           /* This is the prototyped case, check for....  */
17527           if (stdarg_p (TREE_TYPE (decl)))
17528             gen_unspecified_parameters_die (decl, subr_die);
17529         }
17530       else if (DECL_INITIAL (decl) == NULL_TREE)
17531         gen_unspecified_parameters_die (decl, subr_die);
17532     }
17533
17534   /* Output Dwarf info for all of the stuff within the body of the function
17535      (if it has one - it may be just a declaration).  */
17536   outer_scope = DECL_INITIAL (decl);
17537
17538   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17539      a function.  This BLOCK actually represents the outermost binding contour
17540      for the function, i.e. the contour in which the function's formal
17541      parameters and labels get declared. Curiously, it appears that the front
17542      end doesn't actually put the PARM_DECL nodes for the current function onto
17543      the BLOCK_VARS list for this outer scope, but are strung off of the
17544      DECL_ARGUMENTS list for the function instead.
17545
17546      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17547      the LABEL_DECL nodes for the function however, and we output DWARF info
17548      for those in decls_for_scope.  Just within the `outer_scope' there will be
17549      a BLOCK node representing the function's outermost pair of curly braces,
17550      and any blocks used for the base and member initializers of a C++
17551      constructor function.  */
17552   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17553     {
17554       int call_site_note_count = 0;
17555       int tail_call_site_note_count = 0;
17556
17557       /* Emit a DW_TAG_variable DIE for a named return value.  */
17558       if (DECL_NAME (DECL_RESULT (decl)))
17559         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17560
17561       current_function_has_inlines = 0;
17562       decls_for_scope (outer_scope, subr_die, 0);
17563
17564       if (call_arg_locations && !dwarf_strict)
17565         {
17566           struct call_arg_loc_node *ca_loc;
17567           for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
17568             {
17569               dw_die_ref die = NULL;
17570               rtx tloc = NULL_RTX, tlocc = NULL_RTX;
17571               rtx arg, next_arg;
17572
17573               for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
17574                    arg; arg = next_arg)
17575                 {
17576                   dw_loc_descr_ref reg, val;
17577                   enum machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
17578                   dw_die_ref cdie, tdie = NULL;
17579
17580                   next_arg = XEXP (arg, 1);
17581                   if (REG_P (XEXP (XEXP (arg, 0), 0))
17582                       && next_arg
17583                       && MEM_P (XEXP (XEXP (next_arg, 0), 0))
17584                       && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
17585                       && REGNO (XEXP (XEXP (arg, 0), 0))
17586                          == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
17587                     next_arg = XEXP (next_arg, 1);
17588                   if (mode == VOIDmode)
17589                     {
17590                       mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
17591                       if (mode == VOIDmode)
17592                         mode = GET_MODE (XEXP (arg, 0));
17593                     }
17594                   if (mode == VOIDmode || mode == BLKmode)
17595                     continue;
17596                   if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
17597                     {
17598                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17599                       tloc = XEXP (XEXP (arg, 0), 1);
17600                       continue;
17601                     }
17602                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
17603                            && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
17604                     {
17605                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17606                       tlocc = XEXP (XEXP (arg, 0), 1);
17607                       continue;
17608                     }
17609                   reg = NULL;
17610                   if (REG_P (XEXP (XEXP (arg, 0), 0)))
17611                     reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
17612                                               VAR_INIT_STATUS_INITIALIZED);
17613                   else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
17614                     {
17615                       rtx mem = XEXP (XEXP (arg, 0), 0);
17616                       reg = mem_loc_descriptor (XEXP (mem, 0),
17617                                                 get_address_mode (mem),
17618                                                 GET_MODE (mem),
17619                                                 VAR_INIT_STATUS_INITIALIZED);
17620                     }
17621                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
17622                            == DEBUG_PARAMETER_REF)
17623                     {
17624                       tree tdecl
17625                         = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
17626                       tdie = lookup_decl_die (tdecl);
17627                       if (tdie == NULL)
17628                         continue;
17629                     }
17630                   else
17631                     continue;
17632                   if (reg == NULL
17633                       && GET_CODE (XEXP (XEXP (arg, 0), 0))
17634                          != DEBUG_PARAMETER_REF)
17635                     continue;
17636                   val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
17637                                             VOIDmode,
17638                                             VAR_INIT_STATUS_INITIALIZED);
17639                   if (val == NULL)
17640                     continue;
17641                   if (die == NULL)
17642                     die = gen_call_site_die (decl, subr_die, ca_loc);
17643                   cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
17644                                   NULL_TREE);
17645                   if (reg != NULL)
17646                     add_AT_loc (cdie, DW_AT_location, reg);
17647                   else if (tdie != NULL)
17648                     add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
17649                   add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
17650                   if (next_arg != XEXP (arg, 1))
17651                     {
17652                       mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
17653                       if (mode == VOIDmode)
17654                         mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
17655                       val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
17656                                                             0), 1),
17657                                                 mode, VOIDmode,
17658                                                 VAR_INIT_STATUS_INITIALIZED);
17659                       if (val != NULL)
17660                         add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
17661                     }
17662                 }
17663               if (die == NULL
17664                   && (ca_loc->symbol_ref || tloc))
17665                 die = gen_call_site_die (decl, subr_die, ca_loc);
17666               if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
17667                 {
17668                   dw_loc_descr_ref tval = NULL;
17669
17670                   if (tloc != NULL_RTX)
17671                     tval = mem_loc_descriptor (tloc,
17672                                                GET_MODE (tloc) == VOIDmode
17673                                                ? Pmode : GET_MODE (tloc),
17674                                                VOIDmode,
17675                                                VAR_INIT_STATUS_INITIALIZED);
17676                   if (tval)
17677                     add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
17678                   else if (tlocc != NULL_RTX)
17679                     {
17680                       tval = mem_loc_descriptor (tlocc,
17681                                                  GET_MODE (tlocc) == VOIDmode
17682                                                  ? Pmode : GET_MODE (tlocc),
17683                                                  VOIDmode,
17684                                                  VAR_INIT_STATUS_INITIALIZED);
17685                       if (tval)
17686                         add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
17687                                     tval);
17688                     }
17689                 }
17690               if (die != NULL)
17691                 {
17692                   call_site_note_count++;
17693                   if (ca_loc->tail_call_p)
17694                     tail_call_site_note_count++;
17695                 }
17696             }
17697         }
17698       call_arg_locations = NULL;
17699       call_arg_loc_last = NULL;
17700       if (tail_call_site_count >= 0
17701           && tail_call_site_count == tail_call_site_note_count
17702           && !dwarf_strict)
17703         {
17704           if (call_site_count >= 0
17705               && call_site_count == call_site_note_count)
17706             add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
17707           else
17708             add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
17709         }
17710       call_site_count = -1;
17711       tail_call_site_count = -1;
17712     }
17713   /* Add the calling convention attribute if requested.  */
17714   add_calling_convention_attribute (subr_die, decl);
17715
17716 }
17717
17718 /* Returns a hash value for X (which really is a die_struct).  */
17719
17720 static hashval_t
17721 common_block_die_table_hash (const void *x)
17722 {
17723   const_dw_die_ref d = (const_dw_die_ref) x;
17724   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17725 }
17726
17727 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17728    as decl_id and die_parent of die_struct Y.  */
17729
17730 static int
17731 common_block_die_table_eq (const void *x, const void *y)
17732 {
17733   const_dw_die_ref d = (const_dw_die_ref) x;
17734   const_dw_die_ref e = (const_dw_die_ref) y;
17735   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
17736 }
17737
17738 /* Generate a DIE to represent a declared data object.
17739    Either DECL or ORIGIN must be non-null.  */
17740
17741 static void
17742 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
17743 {
17744   HOST_WIDE_INT off;
17745   tree com_decl;
17746   tree decl_or_origin = decl ? decl : origin;
17747   tree ultimate_origin;
17748   dw_die_ref var_die;
17749   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
17750   dw_die_ref origin_die;
17751   bool declaration = (DECL_EXTERNAL (decl_or_origin)
17752                       || class_or_namespace_scope_p (context_die));
17753   bool specialization_p = false;
17754
17755   ultimate_origin = decl_ultimate_origin (decl_or_origin);
17756   if (decl || ultimate_origin)
17757     origin = ultimate_origin;
17758   com_decl = fortran_common (decl_or_origin, &off);
17759
17760   /* Symbol in common gets emitted as a child of the common block, in the form
17761      of a data member.  */
17762   if (com_decl)
17763     {
17764       dw_die_ref com_die;
17765       dw_loc_list_ref loc;
17766       die_node com_die_arg;
17767
17768       var_die = lookup_decl_die (decl_or_origin);
17769       if (var_die)
17770         {
17771           if (get_AT (var_die, DW_AT_location) == NULL)
17772             {
17773               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
17774               if (loc)
17775                 {
17776                   if (off)
17777                     {
17778                       /* Optimize the common case.  */
17779                       if (single_element_loc_list_p (loc)
17780                           && loc->expr->dw_loc_opc == DW_OP_addr
17781                           && loc->expr->dw_loc_next == NULL
17782                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
17783                              == SYMBOL_REF)
17784                         loc->expr->dw_loc_oprnd1.v.val_addr
17785                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17786                         else
17787                           loc_list_plus_const (loc, off);
17788                     }
17789                   add_AT_location_description (var_die, DW_AT_location, loc);
17790                   remove_AT (var_die, DW_AT_declaration);
17791                 }
17792             }
17793           return;
17794         }
17795
17796       if (common_block_die_table == NULL)
17797         common_block_die_table
17798           = htab_create_ggc (10, common_block_die_table_hash,
17799                              common_block_die_table_eq, NULL);
17800
17801       com_die_arg.decl_id = DECL_UID (com_decl);
17802       com_die_arg.die_parent = context_die;
17803       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
17804       loc = loc_list_from_tree (com_decl, 2);
17805       if (com_die == NULL)
17806         {
17807           const char *cnam
17808             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
17809           void **slot;
17810
17811           com_die = new_die (DW_TAG_common_block, context_die, decl);
17812           add_name_and_src_coords_attributes (com_die, com_decl);
17813           if (loc)
17814             {
17815               add_AT_location_description (com_die, DW_AT_location, loc);
17816               /* Avoid sharing the same loc descriptor between
17817                  DW_TAG_common_block and DW_TAG_variable.  */
17818               loc = loc_list_from_tree (com_decl, 2);
17819             }
17820           else if (DECL_EXTERNAL (decl))
17821             add_AT_flag (com_die, DW_AT_declaration, 1);
17822           add_pubname_string (cnam, com_die); /* ??? needed? */
17823           com_die->decl_id = DECL_UID (com_decl);
17824           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
17825           *slot = (void *) com_die;
17826         }
17827       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
17828         {
17829           add_AT_location_description (com_die, DW_AT_location, loc);
17830           loc = loc_list_from_tree (com_decl, 2);
17831           remove_AT (com_die, DW_AT_declaration);
17832         }
17833       var_die = new_die (DW_TAG_variable, com_die, decl);
17834       add_name_and_src_coords_attributes (var_die, decl);
17835       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
17836                           TREE_THIS_VOLATILE (decl), context_die);
17837       add_AT_flag (var_die, DW_AT_external, 1);
17838       if (loc)
17839         {
17840           if (off)
17841             {
17842               /* Optimize the common case.  */
17843               if (single_element_loc_list_p (loc)
17844                   && loc->expr->dw_loc_opc == DW_OP_addr
17845                   && loc->expr->dw_loc_next == NULL
17846                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
17847                 loc->expr->dw_loc_oprnd1.v.val_addr
17848                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17849               else
17850                 loc_list_plus_const (loc, off);
17851             }
17852           add_AT_location_description (var_die, DW_AT_location, loc);
17853         }
17854       else if (DECL_EXTERNAL (decl))
17855         add_AT_flag (var_die, DW_AT_declaration, 1);
17856       equate_decl_number_to_die (decl, var_die);
17857       return;
17858     }
17859
17860   /* If the compiler emitted a definition for the DECL declaration
17861      and if we already emitted a DIE for it, don't emit a second
17862      DIE for it again. Allow re-declarations of DECLs that are
17863      inside functions, though.  */
17864   if (old_die && declaration && !local_scope_p (context_die))
17865     return;
17866
17867   /* For static data members, the declaration in the class is supposed
17868      to have DW_TAG_member tag; the specification should still be
17869      DW_TAG_variable referencing the DW_TAG_member DIE.  */
17870   if (declaration && class_scope_p (context_die))
17871     var_die = new_die (DW_TAG_member, context_die, decl);
17872   else
17873     var_die = new_die (DW_TAG_variable, context_die, decl);
17874
17875   origin_die = NULL;
17876   if (origin != NULL)
17877     origin_die = add_abstract_origin_attribute (var_die, origin);
17878
17879   /* Loop unrolling can create multiple blocks that refer to the same
17880      static variable, so we must test for the DW_AT_declaration flag.
17881
17882      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
17883      copy decls and set the DECL_ABSTRACT flag on them instead of
17884      sharing them.
17885
17886      ??? Duplicated blocks have been rewritten to use .debug_ranges.
17887
17888      ??? The declare_in_namespace support causes us to get two DIEs for one
17889      variable, both of which are declarations.  We want to avoid considering
17890      one to be a specification, so we must test that this DIE is not a
17891      declaration.  */
17892   else if (old_die && TREE_STATIC (decl) && ! declaration
17893            && get_AT_flag (old_die, DW_AT_declaration) == 1)
17894     {
17895       /* This is a definition of a C++ class level static.  */
17896       add_AT_specification (var_die, old_die);
17897       specialization_p = true;
17898       if (DECL_NAME (decl))
17899         {
17900           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17901           struct dwarf_file_data * file_index = lookup_filename (s.file);
17902
17903           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17904             add_AT_file (var_die, DW_AT_decl_file, file_index);
17905
17906           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17907             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
17908
17909           if (old_die->die_tag == DW_TAG_member)
17910             add_linkage_name (var_die, decl);
17911         }
17912     }
17913   else
17914     add_name_and_src_coords_attributes (var_die, decl);
17915
17916   if ((origin == NULL && !specialization_p)
17917       || (origin != NULL
17918           && !DECL_ABSTRACT (decl_or_origin)
17919           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
17920                                        decl_function_context
17921                                                         (decl_or_origin))))
17922     {
17923       tree type = TREE_TYPE (decl_or_origin);
17924
17925       if (decl_by_reference_p (decl_or_origin))
17926         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
17927       else
17928         add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
17929                             TREE_THIS_VOLATILE (decl_or_origin), context_die);
17930     }
17931
17932   if (origin == NULL && !specialization_p)
17933     {
17934       if (TREE_PUBLIC (decl))
17935         add_AT_flag (var_die, DW_AT_external, 1);
17936
17937       if (DECL_ARTIFICIAL (decl))
17938         add_AT_flag (var_die, DW_AT_artificial, 1);
17939
17940       add_accessibility_attribute (var_die, decl);
17941     }
17942
17943   if (declaration)
17944     add_AT_flag (var_die, DW_AT_declaration, 1);
17945
17946   if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL))
17947     equate_decl_number_to_die (decl, var_die);
17948
17949   if (! declaration
17950       && (! DECL_ABSTRACT (decl_or_origin)
17951           /* Local static vars are shared between all clones/inlines,
17952              so emit DW_AT_location on the abstract DIE if DECL_RTL is
17953              already set.  */
17954           || (TREE_CODE (decl_or_origin) == VAR_DECL
17955               && TREE_STATIC (decl_or_origin)
17956               && DECL_RTL_SET_P (decl_or_origin)))
17957       /* When abstract origin already has DW_AT_location attribute, no need
17958          to add it again.  */
17959       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
17960     {
17961       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
17962           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
17963         defer_location (decl_or_origin, var_die);
17964       else
17965         add_location_or_const_value_attribute (var_die, decl_or_origin,
17966                                                decl == NULL, DW_AT_location);
17967       add_pubname (decl_or_origin, var_die);
17968     }
17969   else
17970     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
17971 }
17972
17973 /* Generate a DIE to represent a named constant.  */
17974
17975 static void
17976 gen_const_die (tree decl, dw_die_ref context_die)
17977 {
17978   dw_die_ref const_die;
17979   tree type = TREE_TYPE (decl);
17980
17981   const_die = new_die (DW_TAG_constant, context_die, decl);
17982   add_name_and_src_coords_attributes (const_die, decl);
17983   add_type_attribute (const_die, type, 1, 0, context_die);
17984   if (TREE_PUBLIC (decl))
17985     add_AT_flag (const_die, DW_AT_external, 1);
17986   if (DECL_ARTIFICIAL (decl))
17987     add_AT_flag (const_die, DW_AT_artificial, 1);
17988   tree_add_const_value_attribute_for_decl (const_die, decl);
17989 }
17990
17991 /* Generate a DIE to represent a label identifier.  */
17992
17993 static void
17994 gen_label_die (tree decl, dw_die_ref context_die)
17995 {
17996   tree origin = decl_ultimate_origin (decl);
17997   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
17998   rtx insn;
17999   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18000
18001   if (origin != NULL)
18002     add_abstract_origin_attribute (lbl_die, origin);
18003   else
18004     add_name_and_src_coords_attributes (lbl_die, decl);
18005
18006   if (DECL_ABSTRACT (decl))
18007     equate_decl_number_to_die (decl, lbl_die);
18008   else
18009     {
18010       insn = DECL_RTL_IF_SET (decl);
18011
18012       /* Deleted labels are programmer specified labels which have been
18013          eliminated because of various optimizations.  We still emit them
18014          here so that it is possible to put breakpoints on them.  */
18015       if (insn
18016           && (LABEL_P (insn)
18017               || ((NOTE_P (insn)
18018                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18019         {
18020           /* When optimization is enabled (via -O) some parts of the compiler
18021              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18022              represent source-level labels which were explicitly declared by
18023              the user.  This really shouldn't be happening though, so catch
18024              it if it ever does happen.  */
18025           gcc_assert (!INSN_DELETED_P (insn));
18026
18027           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18028           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18029         }
18030       else if (insn
18031                && NOTE_P (insn)
18032                && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
18033                && CODE_LABEL_NUMBER (insn) != -1)
18034         {
18035           ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
18036           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18037         }
18038     }
18039 }
18040
18041 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18042    attributes to the DIE for a block STMT, to describe where the inlined
18043    function was called from.  This is similar to add_src_coords_attributes.  */
18044
18045 static inline void
18046 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18047 {
18048   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18049
18050   if (dwarf_version >= 3 || !dwarf_strict)
18051     {
18052       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18053       add_AT_unsigned (die, DW_AT_call_line, s.line);
18054     }
18055 }
18056
18057
18058 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18059    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18060
18061 static inline void
18062 add_high_low_attributes (tree stmt, dw_die_ref die)
18063 {
18064   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18065
18066   if (BLOCK_FRAGMENT_CHAIN (stmt)
18067       && (dwarf_version >= 3 || !dwarf_strict))
18068     {
18069       tree chain;
18070
18071       if (inlined_function_outer_scope_p (stmt))
18072         {
18073           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18074                                        BLOCK_NUMBER (stmt));
18075           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18076         }
18077
18078       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18079
18080       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18081       do
18082         {
18083           add_ranges (chain);
18084           chain = BLOCK_FRAGMENT_CHAIN (chain);
18085         }
18086       while (chain);
18087       add_ranges (NULL);
18088     }
18089   else
18090     {
18091       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18092                                    BLOCK_NUMBER (stmt));
18093       add_AT_lbl_id (die, DW_AT_low_pc, label);
18094       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18095                                    BLOCK_NUMBER (stmt));
18096       add_AT_lbl_id (die, DW_AT_high_pc, label);
18097     }
18098 }
18099
18100 /* Generate a DIE for a lexical block.  */
18101
18102 static void
18103 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18104 {
18105   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18106
18107   if (call_arg_locations)
18108     {
18109       if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18110         VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18111                                BLOCK_NUMBER (stmt) + 1);
18112       VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), stmt_die);
18113     }
18114
18115   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18116     add_high_low_attributes (stmt, stmt_die);
18117
18118   decls_for_scope (stmt, stmt_die, depth);
18119 }
18120
18121 /* Generate a DIE for an inlined subprogram.  */
18122
18123 static void
18124 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18125 {
18126   tree decl;
18127
18128   /* The instance of function that is effectively being inlined shall not
18129      be abstract.  */
18130   gcc_assert (! BLOCK_ABSTRACT (stmt));
18131
18132   decl = block_ultimate_origin (stmt);
18133
18134   /* Emit info for the abstract instance first, if we haven't yet.  We
18135      must emit this even if the block is abstract, otherwise when we
18136      emit the block below (or elsewhere), we may end up trying to emit
18137      a die whose origin die hasn't been emitted, and crashing.  */
18138   dwarf2out_abstract_function (decl);
18139
18140   if (! BLOCK_ABSTRACT (stmt))
18141     {
18142       dw_die_ref subr_die
18143         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18144
18145       if (call_arg_locations)
18146         {
18147           if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18148             VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18149                                    BLOCK_NUMBER (stmt) + 1);
18150           VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), subr_die);
18151         }
18152       add_abstract_origin_attribute (subr_die, decl);
18153       if (TREE_ASM_WRITTEN (stmt))
18154         add_high_low_attributes (stmt, subr_die);
18155       add_call_src_coords_attributes (stmt, subr_die);
18156
18157       decls_for_scope (stmt, subr_die, depth);
18158       current_function_has_inlines = 1;
18159     }
18160 }
18161
18162 /* Generate a DIE for a field in a record, or structure.  */
18163
18164 static void
18165 gen_field_die (tree decl, dw_die_ref context_die)
18166 {
18167   dw_die_ref decl_die;
18168
18169   if (TREE_TYPE (decl) == error_mark_node)
18170     return;
18171
18172   decl_die = new_die (DW_TAG_member, context_die, decl);
18173   add_name_and_src_coords_attributes (decl_die, decl);
18174   add_type_attribute (decl_die, member_declared_type (decl),
18175                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18176                       context_die);
18177
18178   if (DECL_BIT_FIELD_TYPE (decl))
18179     {
18180       add_byte_size_attribute (decl_die, decl);
18181       add_bit_size_attribute (decl_die, decl);
18182       add_bit_offset_attribute (decl_die, decl);
18183     }
18184
18185   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18186     add_data_member_location_attribute (decl_die, decl);
18187
18188   if (DECL_ARTIFICIAL (decl))
18189     add_AT_flag (decl_die, DW_AT_artificial, 1);
18190
18191   add_accessibility_attribute (decl_die, decl);
18192
18193   /* Equate decl number to die, so that we can look up this decl later on.  */
18194   equate_decl_number_to_die (decl, decl_die);
18195 }
18196
18197 #if 0
18198 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18199    Use modified_type_die instead.
18200    We keep this code here just in case these types of DIEs may be needed to
18201    represent certain things in other languages (e.g. Pascal) someday.  */
18202
18203 static void
18204 gen_pointer_type_die (tree type, dw_die_ref context_die)
18205 {
18206   dw_die_ref ptr_die
18207     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18208
18209   equate_type_number_to_die (type, ptr_die);
18210   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18211   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18212 }
18213
18214 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18215    Use modified_type_die instead.
18216    We keep this code here just in case these types of DIEs may be needed to
18217    represent certain things in other languages (e.g. Pascal) someday.  */
18218
18219 static void
18220 gen_reference_type_die (tree type, dw_die_ref context_die)
18221 {
18222   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18223
18224   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18225     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18226   else
18227     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18228
18229   equate_type_number_to_die (type, ref_die);
18230   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18231   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18232 }
18233 #endif
18234
18235 /* Generate a DIE for a pointer to a member type.  */
18236
18237 static void
18238 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18239 {
18240   dw_die_ref ptr_die
18241     = new_die (DW_TAG_ptr_to_member_type,
18242                scope_die_for (type, context_die), type);
18243
18244   equate_type_number_to_die (type, ptr_die);
18245   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18246                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18247   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18248 }
18249
18250 typedef const char *dchar_p; /* For DEF_VEC_P.  */
18251 DEF_VEC_P(dchar_p);
18252 DEF_VEC_ALLOC_P(dchar_p,heap);
18253
18254 static char *producer_string;
18255
18256 /* Return a heap allocated producer string including command line options
18257    if -grecord-gcc-switches.  */
18258
18259 static char *
18260 gen_producer_string (void)
18261 {
18262   size_t j;
18263   VEC(dchar_p, heap) *switches = NULL;
18264   const char *language_string = lang_hooks.name;
18265   char *producer, *tail;
18266   const char *p;
18267   size_t len = dwarf_record_gcc_switches ? 0 : 3;
18268   size_t plen = strlen (language_string) + 1 + strlen (version_string);
18269
18270   for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
18271     switch (save_decoded_options[j].opt_index)
18272       {
18273       case OPT_o:
18274       case OPT_d:
18275       case OPT_dumpbase:
18276       case OPT_dumpdir:
18277       case OPT_auxbase:
18278       case OPT_auxbase_strip:
18279       case OPT_quiet:
18280       case OPT_version:
18281       case OPT_v:
18282       case OPT_w:
18283       case OPT_L:
18284       case OPT_D:
18285       case OPT_I:
18286       case OPT_U:
18287       case OPT_SPECIAL_unknown:
18288       case OPT_SPECIAL_ignore:
18289       case OPT_SPECIAL_program_name:
18290       case OPT_SPECIAL_input_file:
18291       case OPT_grecord_gcc_switches:
18292       case OPT_gno_record_gcc_switches:
18293       case OPT__output_pch_:
18294       case OPT_fdiagnostics_show_location_:
18295       case OPT_fdiagnostics_show_option:
18296       case OPT_fverbose_asm:
18297       case OPT____:
18298       case OPT__sysroot_:
18299       case OPT_nostdinc:
18300       case OPT_nostdinc__:
18301         /* Ignore these.  */
18302         continue;
18303       default:
18304         gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
18305                              == '-');
18306         switch (save_decoded_options[j].canonical_option[0][1])
18307           {
18308           case 'M':
18309           case 'i':
18310           case 'W':
18311             continue;
18312           case 'f':
18313             if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
18314                          "dump", 4) == 0)
18315               continue;
18316             break;
18317           default:
18318             break;
18319           }
18320         VEC_safe_push (dchar_p, heap, switches,
18321                        save_decoded_options[j].orig_option_with_args_text);
18322         len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
18323         break;
18324       }
18325
18326   producer = XNEWVEC (char, plen + 1 + len + 1);
18327   tail = producer;
18328   sprintf (tail, "%s %s", language_string, version_string);
18329   tail += plen;
18330
18331   if (!dwarf_record_gcc_switches)
18332     {
18333 #ifdef MIPS_DEBUGGING_INFO
18334       /* The MIPS/SGI compilers place the 'cc' command line options in the
18335          producer string.  The SGI debugger looks for -g, -g1, -g2, or -g3;
18336          if they do not appear in the producer string, the debugger reaches
18337          the conclusion that the object file is stripped and has no debugging
18338          information.  To get the MIPS/SGI debugger to believe that there is
18339          debugging information in the object file, we add a -g to the producer
18340          string.  */
18341       if (debug_info_level > DINFO_LEVEL_TERSE)
18342         {
18343           memcpy (tail, " -g", 3);
18344           tail += 3;
18345         }
18346 #endif
18347     }
18348
18349   FOR_EACH_VEC_ELT (dchar_p, switches, j, p)
18350     {
18351       len = strlen (p);
18352       *tail = ' ';
18353       memcpy (tail + 1, p, len);
18354       tail += len + 1;
18355     }
18356
18357   *tail = '\0';
18358   VEC_free (dchar_p, heap, switches);
18359   return producer;
18360 }
18361
18362 /* Generate the DIE for the compilation unit.  */
18363
18364 static dw_die_ref
18365 gen_compile_unit_die (const char *filename)
18366 {
18367   dw_die_ref die;
18368   const char *language_string = lang_hooks.name;
18369   int language;
18370
18371   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18372
18373   if (filename)
18374     {
18375       add_name_attribute (die, filename);
18376       /* Don't add cwd for <built-in>.  */
18377       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18378         add_comp_dir_attribute (die);
18379     }
18380
18381   if (producer_string == NULL)
18382     producer_string = gen_producer_string ();
18383   add_AT_string (die, DW_AT_producer, producer_string);
18384
18385   /* If our producer is LTO try to figure out a common language to use
18386      from the global list of translation units.  */
18387   if (strcmp (language_string, "GNU GIMPLE") == 0)
18388     {
18389       unsigned i;
18390       tree t;
18391       const char *common_lang = NULL;
18392
18393       FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
18394         {
18395           if (!TRANSLATION_UNIT_LANGUAGE (t))
18396             continue;
18397           if (!common_lang)
18398             common_lang = TRANSLATION_UNIT_LANGUAGE (t);
18399           else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
18400             ;
18401           else if (strncmp (common_lang, "GNU C", 5) == 0
18402                    && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
18403             /* Mixing C and C++ is ok, use C++ in that case.  */
18404             common_lang = "GNU C++";
18405           else
18406             {
18407               /* Fall back to C.  */
18408               common_lang = NULL;
18409               break;
18410             }
18411         }
18412
18413       if (common_lang)
18414         language_string = common_lang;
18415     }
18416
18417   language = DW_LANG_C89;
18418   if (strcmp (language_string, "GNU C++") == 0)
18419     language = DW_LANG_C_plus_plus;
18420   else if (strcmp (language_string, "GNU F77") == 0)
18421     language = DW_LANG_Fortran77;
18422   else if (strcmp (language_string, "GNU Pascal") == 0)
18423     language = DW_LANG_Pascal83;
18424   else if (dwarf_version >= 3 || !dwarf_strict)
18425     {
18426       if (strcmp (language_string, "GNU Ada") == 0)
18427         language = DW_LANG_Ada95;
18428       else if (strcmp (language_string, "GNU Fortran") == 0)
18429         language = DW_LANG_Fortran95;
18430       else if (strcmp (language_string, "GNU Java") == 0)
18431         language = DW_LANG_Java;
18432       else if (strcmp (language_string, "GNU Objective-C") == 0)
18433         language = DW_LANG_ObjC;
18434       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18435         language = DW_LANG_ObjC_plus_plus;
18436       else if (dwarf_version >= 5 || !dwarf_strict)
18437         {
18438           if (strcmp (language_string, "GNU Go") == 0)
18439             language = DW_LANG_Go;
18440         }
18441     }
18442
18443   add_AT_unsigned (die, DW_AT_language, language);
18444
18445   switch (language)
18446     {
18447     case DW_LANG_Fortran77:
18448     case DW_LANG_Fortran90:
18449     case DW_LANG_Fortran95:
18450       /* Fortran has case insensitive identifiers and the front-end
18451          lowercases everything.  */
18452       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
18453       break;
18454     default:
18455       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
18456       break;
18457     }
18458   return die;
18459 }
18460
18461 /* Generate the DIE for a base class.  */
18462
18463 static void
18464 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18465 {
18466   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18467
18468   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18469   add_data_member_location_attribute (die, binfo);
18470
18471   if (BINFO_VIRTUAL_P (binfo))
18472     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18473
18474   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
18475      children, otherwise the default is DW_ACCESS_public.  In DWARF2
18476      the default has always been DW_ACCESS_private.  */
18477   if (access == access_public_node)
18478     {
18479       if (dwarf_version == 2
18480           || context_die->die_tag == DW_TAG_class_type)
18481       add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18482     }
18483   else if (access == access_protected_node)
18484     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18485   else if (dwarf_version > 2
18486            && context_die->die_tag != DW_TAG_class_type)
18487     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
18488 }
18489
18490 /* Generate a DIE for a class member.  */
18491
18492 static void
18493 gen_member_die (tree type, dw_die_ref context_die)
18494 {
18495   tree member;
18496   tree binfo = TYPE_BINFO (type);
18497   dw_die_ref child;
18498
18499   /* If this is not an incomplete type, output descriptions of each of its
18500      members. Note that as we output the DIEs necessary to represent the
18501      members of this record or union type, we will also be trying to output
18502      DIEs to represent the *types* of those members. However the `type'
18503      function (above) will specifically avoid generating type DIEs for member
18504      types *within* the list of member DIEs for this (containing) type except
18505      for those types (of members) which are explicitly marked as also being
18506      members of this (containing) type themselves.  The g++ front- end can
18507      force any given type to be treated as a member of some other (containing)
18508      type by setting the TYPE_CONTEXT of the given (member) type to point to
18509      the TREE node representing the appropriate (containing) type.  */
18510
18511   /* First output info about the base classes.  */
18512   if (binfo)
18513     {
18514       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18515       int i;
18516       tree base;
18517
18518       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18519         gen_inheritance_die (base,
18520                              (accesses ? VEC_index (tree, accesses, i)
18521                               : access_public_node), context_die);
18522     }
18523
18524   /* Now output info about the data members and type members.  */
18525   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
18526     {
18527       /* If we thought we were generating minimal debug info for TYPE
18528          and then changed our minds, some of the member declarations
18529          may have already been defined.  Don't define them again, but
18530          do put them in the right order.  */
18531
18532       child = lookup_decl_die (member);
18533       if (child)
18534         splice_child_die (context_die, child);
18535       else
18536         gen_decl_die (member, NULL, context_die);
18537     }
18538
18539   /* Now output info about the function members (if any).  */
18540   for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
18541     {
18542       /* Don't include clones in the member list.  */
18543       if (DECL_ABSTRACT_ORIGIN (member))
18544         continue;
18545
18546       child = lookup_decl_die (member);
18547       if (child)
18548         splice_child_die (context_die, child);
18549       else
18550         gen_decl_die (member, NULL, context_die);
18551     }
18552 }
18553
18554 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18555    is set, we pretend that the type was never defined, so we only get the
18556    member DIEs needed by later specification DIEs.  */
18557
18558 static void
18559 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18560                                 enum debug_info_usage usage)
18561 {
18562   dw_die_ref type_die = lookup_type_die (type);
18563   dw_die_ref scope_die = 0;
18564   int nested = 0;
18565   int complete = (TYPE_SIZE (type)
18566                   && (! TYPE_STUB_DECL (type)
18567                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18568   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18569   complete = complete && should_emit_struct_debug (type, usage);
18570
18571   if (type_die && ! complete)
18572     return;
18573
18574   if (TYPE_CONTEXT (type) != NULL_TREE
18575       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18576           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18577     nested = 1;
18578
18579   scope_die = scope_die_for (type, context_die);
18580
18581   if (! type_die || (nested && is_cu_die (scope_die)))
18582     /* First occurrence of type or toplevel definition of nested class.  */
18583     {
18584       dw_die_ref old_die = type_die;
18585
18586       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18587                           ? record_type_tag (type) : DW_TAG_union_type,
18588                           scope_die, type);
18589       equate_type_number_to_die (type, type_die);
18590       if (old_die)
18591         add_AT_specification (type_die, old_die);
18592       else
18593         {
18594           add_name_attribute (type_die, type_tag (type));
18595           add_gnat_descriptive_type_attribute (type_die, type, context_die);
18596           if (TYPE_ARTIFICIAL (type))
18597             add_AT_flag (type_die, DW_AT_artificial, 1);
18598         }
18599     }
18600   else
18601     remove_AT (type_die, DW_AT_declaration);
18602
18603   /* Generate child dies for template paramaters.  */
18604   if (debug_info_level > DINFO_LEVEL_TERSE
18605       && COMPLETE_TYPE_P (type))
18606     schedule_generic_params_dies_gen (type);
18607
18608   /* If this type has been completed, then give it a byte_size attribute and
18609      then give a list of members.  */
18610   if (complete && !ns_decl)
18611     {
18612       /* Prevent infinite recursion in cases where the type of some member of
18613          this type is expressed in terms of this type itself.  */
18614       TREE_ASM_WRITTEN (type) = 1;
18615       add_byte_size_attribute (type_die, type);
18616       if (TYPE_STUB_DECL (type) != NULL_TREE)
18617         {
18618           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18619           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
18620         }
18621
18622       /* If the first reference to this type was as the return type of an
18623          inline function, then it may not have a parent.  Fix this now.  */
18624       if (type_die->die_parent == NULL)
18625         add_child_die (scope_die, type_die);
18626
18627       push_decl_scope (type);
18628       gen_member_die (type, type_die);
18629       pop_decl_scope ();
18630
18631       /* GNU extension: Record what type our vtable lives in.  */
18632       if (TYPE_VFIELD (type))
18633         {
18634           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18635
18636           gen_type_die (vtype, context_die);
18637           add_AT_die_ref (type_die, DW_AT_containing_type,
18638                           lookup_type_die (vtype));
18639         }
18640     }
18641   else
18642     {
18643       add_AT_flag (type_die, DW_AT_declaration, 1);
18644
18645       /* We don't need to do this for function-local types.  */
18646       if (TYPE_STUB_DECL (type)
18647           && ! decl_function_context (TYPE_STUB_DECL (type)))
18648         VEC_safe_push (tree, gc, incomplete_types, type);
18649     }
18650
18651   if (get_AT (type_die, DW_AT_name))
18652     add_pubtype (type, type_die);
18653 }
18654
18655 /* Generate a DIE for a subroutine _type_.  */
18656
18657 static void
18658 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18659 {
18660   tree return_type = TREE_TYPE (type);
18661   dw_die_ref subr_die
18662     = new_die (DW_TAG_subroutine_type,
18663                scope_die_for (type, context_die), type);
18664
18665   equate_type_number_to_die (type, subr_die);
18666   add_prototyped_attribute (subr_die, type);
18667   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18668   gen_formal_types_die (type, subr_die);
18669
18670   if (get_AT (subr_die, DW_AT_name))
18671     add_pubtype (type, subr_die);
18672 }
18673
18674 /* Generate a DIE for a type definition.  */
18675
18676 static void
18677 gen_typedef_die (tree decl, dw_die_ref context_die)
18678 {
18679   dw_die_ref type_die;
18680   tree origin;
18681
18682   if (TREE_ASM_WRITTEN (decl))
18683     return;
18684
18685   TREE_ASM_WRITTEN (decl) = 1;
18686   type_die = new_die (DW_TAG_typedef, context_die, decl);
18687   origin = decl_ultimate_origin (decl);
18688   if (origin != NULL)
18689     add_abstract_origin_attribute (type_die, origin);
18690   else
18691     {
18692       tree type;
18693
18694       add_name_and_src_coords_attributes (type_die, decl);
18695       if (DECL_ORIGINAL_TYPE (decl))
18696         {
18697           type = DECL_ORIGINAL_TYPE (decl);
18698
18699           gcc_assert (type != TREE_TYPE (decl));
18700           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18701         }
18702       else
18703         {
18704           type = TREE_TYPE (decl);
18705
18706           if (is_naming_typedef_decl (TYPE_NAME (type)))
18707             {
18708               /* Here, we are in the case of decl being a typedef naming
18709                  an anonymous type, e.g:
18710                      typedef struct {...} foo;
18711                  In that case TREE_TYPE (decl) is not a typedef variant
18712                  type and TYPE_NAME of the anonymous type is set to the
18713                  TYPE_DECL of the typedef. This construct is emitted by
18714                  the C++ FE.
18715
18716                  TYPE is the anonymous struct named by the typedef
18717                  DECL. As we need the DW_AT_type attribute of the
18718                  DW_TAG_typedef to point to the DIE of TYPE, let's
18719                  generate that DIE right away. add_type_attribute
18720                  called below will then pick (via lookup_type_die) that
18721                  anonymous struct DIE.  */
18722               if (!TREE_ASM_WRITTEN (type))
18723                 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
18724
18725               /* This is a GNU Extension.  We are adding a
18726                  DW_AT_linkage_name attribute to the DIE of the
18727                  anonymous struct TYPE.  The value of that attribute
18728                  is the name of the typedef decl naming the anonymous
18729                  struct.  This greatly eases the work of consumers of
18730                  this debug info.  */
18731               add_linkage_attr (lookup_type_die (type), decl);
18732             }
18733         }
18734
18735       add_type_attribute (type_die, type, TREE_READONLY (decl),
18736                           TREE_THIS_VOLATILE (decl), context_die);
18737
18738       if (is_naming_typedef_decl (decl))
18739         /* We want that all subsequent calls to lookup_type_die with
18740            TYPE in argument yield the DW_TAG_typedef we have just
18741            created.  */
18742         equate_type_number_to_die (type, type_die);
18743
18744       add_accessibility_attribute (type_die, decl);
18745     }
18746
18747   if (DECL_ABSTRACT (decl))
18748     equate_decl_number_to_die (decl, type_die);
18749
18750   if (get_AT (type_die, DW_AT_name))
18751     add_pubtype (decl, type_die);
18752 }
18753
18754 /* Generate a DIE for a struct, class, enum or union type.  */
18755
18756 static void
18757 gen_tagged_type_die (tree type,
18758                      dw_die_ref context_die,
18759                      enum debug_info_usage usage)
18760 {
18761   int need_pop;
18762
18763   if (type == NULL_TREE
18764       || !is_tagged_type (type))
18765     return;
18766
18767   /* If this is a nested type whose containing class hasn't been written
18768      out yet, writing it out will cover this one, too.  This does not apply
18769      to instantiations of member class templates; they need to be added to
18770      the containing class as they are generated.  FIXME: This hurts the
18771      idea of combining type decls from multiple TUs, since we can't predict
18772      what set of template instantiations we'll get.  */
18773   if (TYPE_CONTEXT (type)
18774       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18775       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18776     {
18777       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18778
18779       if (TREE_ASM_WRITTEN (type))
18780         return;
18781
18782       /* If that failed, attach ourselves to the stub.  */
18783       push_decl_scope (TYPE_CONTEXT (type));
18784       context_die = lookup_type_die (TYPE_CONTEXT (type));
18785       need_pop = 1;
18786     }
18787   else if (TYPE_CONTEXT (type) != NULL_TREE
18788            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18789     {
18790       /* If this type is local to a function that hasn't been written
18791          out yet, use a NULL context for now; it will be fixed up in
18792          decls_for_scope.  */
18793       context_die = lookup_decl_die (TYPE_CONTEXT (type));
18794       /* A declaration DIE doesn't count; nested types need to go in the
18795          specification.  */
18796       if (context_die && is_declaration_die (context_die))
18797         context_die = NULL;
18798       need_pop = 0;
18799     }
18800   else
18801     {
18802       context_die = declare_in_namespace (type, context_die);
18803       need_pop = 0;
18804     }
18805
18806   if (TREE_CODE (type) == ENUMERAL_TYPE)
18807     {
18808       /* This might have been written out by the call to
18809          declare_in_namespace.  */
18810       if (!TREE_ASM_WRITTEN (type))
18811         gen_enumeration_type_die (type, context_die);
18812     }
18813   else
18814     gen_struct_or_union_type_die (type, context_die, usage);
18815
18816   if (need_pop)
18817     pop_decl_scope ();
18818
18819   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18820      it up if it is ever completed.  gen_*_type_die will set it for us
18821      when appropriate.  */
18822 }
18823
18824 /* Generate a type description DIE.  */
18825
18826 static void
18827 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18828                          enum debug_info_usage usage)
18829 {
18830   struct array_descr_info info;
18831
18832   if (type == NULL_TREE || type == error_mark_node)
18833     return;
18834
18835   if (TYPE_NAME (type) != NULL_TREE
18836       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18837       && is_redundant_typedef (TYPE_NAME (type))
18838       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18839     /* The DECL of this type is a typedef we don't want to emit debug
18840        info for but we want debug info for its underlying typedef.
18841        This can happen for e.g, the injected-class-name of a C++
18842        type.  */
18843     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
18844
18845   /* If TYPE is a typedef type variant, let's generate debug info
18846      for the parent typedef which TYPE is a type of.  */
18847   if (typedef_variant_p (type))
18848     {
18849       if (TREE_ASM_WRITTEN (type))
18850         return;
18851
18852       /* Prevent broken recursion; we can't hand off to the same type.  */
18853       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18854
18855       /* Use the DIE of the containing namespace as the parent DIE of
18856          the type description DIE we want to generate.  */
18857       if (DECL_FILE_SCOPE_P (TYPE_NAME (type))
18858           || (DECL_CONTEXT (TYPE_NAME (type))
18859               && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL))
18860         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18861
18862       TREE_ASM_WRITTEN (type) = 1;
18863
18864       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18865       return;
18866     }
18867
18868   /* If type is an anonymous tagged type named by a typedef, let's
18869      generate debug info for the typedef.  */
18870   if (is_naming_typedef_decl (TYPE_NAME (type)))
18871     {
18872       /* Use the DIE of the containing namespace as the parent DIE of
18873          the type description DIE we want to generate.  */
18874       if (DECL_CONTEXT (TYPE_NAME (type))
18875           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18876         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18877       
18878       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18879       return;
18880     }
18881
18882   /* If this is an array type with hidden descriptor, handle it first.  */
18883   if (!TREE_ASM_WRITTEN (type)
18884       && lang_hooks.types.get_array_descr_info
18885       && lang_hooks.types.get_array_descr_info (type, &info)
18886       && (dwarf_version >= 3 || !dwarf_strict))
18887     {
18888       gen_descr_array_type_die (type, &info, context_die);
18889       TREE_ASM_WRITTEN (type) = 1;
18890       return;
18891     }
18892
18893   /* We are going to output a DIE to represent the unqualified version
18894      of this type (i.e. without any const or volatile qualifiers) so
18895      get the main variant (i.e. the unqualified version) of this type
18896      now.  (Vectors are special because the debugging info is in the
18897      cloned type itself).  */
18898   if (TREE_CODE (type) != VECTOR_TYPE)
18899     type = type_main_variant (type);
18900
18901   if (TREE_ASM_WRITTEN (type))
18902     return;
18903
18904   switch (TREE_CODE (type))
18905     {
18906     case ERROR_MARK:
18907       break;
18908
18909     case POINTER_TYPE:
18910     case REFERENCE_TYPE:
18911       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
18912          ensures that the gen_type_die recursion will terminate even if the
18913          type is recursive.  Recursive types are possible in Ada.  */
18914       /* ??? We could perhaps do this for all types before the switch
18915          statement.  */
18916       TREE_ASM_WRITTEN (type) = 1;
18917
18918       /* For these types, all that is required is that we output a DIE (or a
18919          set of DIEs) to represent the "basis" type.  */
18920       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18921                                 DINFO_USAGE_IND_USE);
18922       break;
18923
18924     case OFFSET_TYPE:
18925       /* This code is used for C++ pointer-to-data-member types.
18926          Output a description of the relevant class type.  */
18927       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
18928                                         DINFO_USAGE_IND_USE);
18929
18930       /* Output a description of the type of the object pointed to.  */
18931       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18932                                         DINFO_USAGE_IND_USE);
18933
18934       /* Now output a DIE to represent this pointer-to-data-member type
18935          itself.  */
18936       gen_ptr_to_mbr_type_die (type, context_die);
18937       break;
18938
18939     case FUNCTION_TYPE:
18940       /* Force out return type (in case it wasn't forced out already).  */
18941       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18942                                         DINFO_USAGE_DIR_USE);
18943       gen_subroutine_type_die (type, context_die);
18944       break;
18945
18946     case METHOD_TYPE:
18947       /* Force out return type (in case it wasn't forced out already).  */
18948       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18949                                         DINFO_USAGE_DIR_USE);
18950       gen_subroutine_type_die (type, context_die);
18951       break;
18952
18953     case ARRAY_TYPE:
18954       gen_array_type_die (type, context_die);
18955       break;
18956
18957     case VECTOR_TYPE:
18958       gen_array_type_die (type, context_die);
18959       break;
18960
18961     case ENUMERAL_TYPE:
18962     case RECORD_TYPE:
18963     case UNION_TYPE:
18964     case QUAL_UNION_TYPE:
18965       gen_tagged_type_die (type, context_die, usage);
18966       return;
18967
18968     case VOID_TYPE:
18969     case INTEGER_TYPE:
18970     case REAL_TYPE:
18971     case FIXED_POINT_TYPE:
18972     case COMPLEX_TYPE:
18973     case BOOLEAN_TYPE:
18974       /* No DIEs needed for fundamental types.  */
18975       break;
18976
18977     case NULLPTR_TYPE:
18978     case LANG_TYPE:
18979       /* Just use DW_TAG_unspecified_type.  */
18980       {
18981         dw_die_ref type_die = lookup_type_die (type);
18982         if (type_die == NULL)
18983           {
18984             tree name = TYPE_NAME (type);
18985             if (TREE_CODE (name) == TYPE_DECL)
18986               name = DECL_NAME (name);
18987             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (), type);
18988             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
18989             equate_type_number_to_die (type, type_die);
18990           }
18991       }
18992       break;
18993
18994     default:
18995       gcc_unreachable ();
18996     }
18997
18998   TREE_ASM_WRITTEN (type) = 1;
18999 }
19000
19001 static void
19002 gen_type_die (tree type, dw_die_ref context_die)
19003 {
19004   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19005 }
19006
19007 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19008    things which are local to the given block.  */
19009
19010 static void
19011 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19012 {
19013   int must_output_die = 0;
19014   bool inlined_func;
19015
19016   /* Ignore blocks that are NULL.  */
19017   if (stmt == NULL_TREE)
19018     return;
19019
19020   inlined_func = inlined_function_outer_scope_p (stmt);
19021
19022   /* If the block is one fragment of a non-contiguous block, do not
19023      process the variables, since they will have been done by the
19024      origin block.  Do process subblocks.  */
19025   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19026     {
19027       tree sub;
19028
19029       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19030         gen_block_die (sub, context_die, depth + 1);
19031
19032       return;
19033     }
19034
19035   /* Determine if we need to output any Dwarf DIEs at all to represent this
19036      block.  */
19037   if (inlined_func)
19038     /* The outer scopes for inlinings *must* always be represented.  We
19039        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19040     must_output_die = 1;
19041   else
19042     {
19043       /* Determine if this block directly contains any "significant"
19044          local declarations which we will need to output DIEs for.  */
19045       if (debug_info_level > DINFO_LEVEL_TERSE)
19046         /* We are not in terse mode so *any* local declaration counts
19047            as being a "significant" one.  */
19048         must_output_die = ((BLOCK_VARS (stmt) != NULL
19049                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19050                            && (TREE_USED (stmt)
19051                                || TREE_ASM_WRITTEN (stmt)
19052                                || BLOCK_ABSTRACT (stmt)));
19053       else if ((TREE_USED (stmt)
19054                 || TREE_ASM_WRITTEN (stmt)
19055                 || BLOCK_ABSTRACT (stmt))
19056                && !dwarf2out_ignore_block (stmt))
19057         must_output_die = 1;
19058     }
19059
19060   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19061      DIE for any block which contains no significant local declarations at
19062      all.  Rather, in such cases we just call `decls_for_scope' so that any
19063      needed Dwarf info for any sub-blocks will get properly generated. Note
19064      that in terse mode, our definition of what constitutes a "significant"
19065      local declaration gets restricted to include only inlined function
19066      instances and local (nested) function definitions.  */
19067   if (must_output_die)
19068     {
19069       if (inlined_func)
19070         {
19071           /* If STMT block is abstract, that means we have been called
19072              indirectly from dwarf2out_abstract_function.
19073              That function rightfully marks the descendent blocks (of
19074              the abstract function it is dealing with) as being abstract,
19075              precisely to prevent us from emitting any
19076              DW_TAG_inlined_subroutine DIE as a descendent
19077              of an abstract function instance. So in that case, we should
19078              not call gen_inlined_subroutine_die.
19079
19080              Later though, when cgraph asks dwarf2out to emit info
19081              for the concrete instance of the function decl into which
19082              the concrete instance of STMT got inlined, the later will lead
19083              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19084           if (! BLOCK_ABSTRACT (stmt))
19085             gen_inlined_subroutine_die (stmt, context_die, depth);
19086         }
19087       else
19088         gen_lexical_block_die (stmt, context_die, depth);
19089     }
19090   else
19091     decls_for_scope (stmt, context_die, depth);
19092 }
19093
19094 /* Process variable DECL (or variable with origin ORIGIN) within
19095    block STMT and add it to CONTEXT_DIE.  */
19096 static void
19097 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19098 {
19099   dw_die_ref die;
19100   tree decl_or_origin = decl ? decl : origin;
19101
19102   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19103     die = lookup_decl_die (decl_or_origin);
19104   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19105            && TYPE_DECL_IS_STUB (decl_or_origin))
19106     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19107   else
19108     die = NULL;
19109
19110   if (die != NULL && die->die_parent == NULL)
19111     add_child_die (context_die, die);
19112   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19113     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19114                                          stmt, context_die);
19115   else
19116     gen_decl_die (decl, origin, context_die);
19117 }
19118
19119 /* Generate all of the decls declared within a given scope and (recursively)
19120    all of its sub-blocks.  */
19121
19122 static void
19123 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19124 {
19125   tree decl;
19126   unsigned int i;
19127   tree subblocks;
19128
19129   /* Ignore NULL blocks.  */
19130   if (stmt == NULL_TREE)
19131     return;
19132
19133   /* Output the DIEs to represent all of the data objects and typedefs
19134      declared directly within this block but not within any nested
19135      sub-blocks.  Also, nested function and tag DIEs have been
19136      generated with a parent of NULL; fix that up now.  */
19137   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
19138     process_scope_var (stmt, decl, NULL_TREE, context_die);
19139   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19140     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19141                        context_die);
19142
19143   /* If we're at -g1, we're not interested in subblocks.  */
19144   if (debug_info_level <= DINFO_LEVEL_TERSE)
19145     return;
19146
19147   /* Output the DIEs to represent all sub-blocks (and the items declared
19148      therein) of this block.  */
19149   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19150        subblocks != NULL;
19151        subblocks = BLOCK_CHAIN (subblocks))
19152     gen_block_die (subblocks, context_die, depth + 1);
19153 }
19154
19155 /* Is this a typedef we can avoid emitting?  */
19156
19157 static inline int
19158 is_redundant_typedef (const_tree decl)
19159 {
19160   if (TYPE_DECL_IS_STUB (decl))
19161     return 1;
19162
19163   if (DECL_ARTIFICIAL (decl)
19164       && DECL_CONTEXT (decl)
19165       && is_tagged_type (DECL_CONTEXT (decl))
19166       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19167       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19168     /* Also ignore the artificial member typedef for the class name.  */
19169     return 1;
19170
19171   return 0;
19172 }
19173
19174 /* Return TRUE if TYPE is a typedef that names a type for linkage
19175    purposes. This kind of typedefs is produced by the C++ FE for
19176    constructs like:
19177
19178    typedef struct {...} foo;
19179
19180    In that case, there is no typedef variant type produced for foo.
19181    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
19182    struct type.  */
19183
19184 static bool
19185 is_naming_typedef_decl (const_tree decl)
19186 {
19187   if (decl == NULL_TREE
19188       || TREE_CODE (decl) != TYPE_DECL
19189       || !is_tagged_type (TREE_TYPE (decl))
19190       || DECL_IS_BUILTIN (decl)
19191       || is_redundant_typedef (decl)
19192       /* It looks like Ada produces TYPE_DECLs that are very similar
19193          to C++ naming typedefs but that have different
19194          semantics. Let's be specific to c++ for now.  */
19195       || !is_cxx ())
19196     return FALSE;
19197
19198   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
19199           && TYPE_NAME (TREE_TYPE (decl)) == decl
19200           && (TYPE_STUB_DECL (TREE_TYPE (decl))
19201               != TYPE_NAME (TREE_TYPE (decl))));
19202 }
19203
19204 /* Returns the DIE for a context.  */
19205
19206 static inline dw_die_ref
19207 get_context_die (tree context)
19208 {
19209   if (context)
19210     {
19211       /* Find die that represents this context.  */
19212       if (TYPE_P (context))
19213         {
19214           context = TYPE_MAIN_VARIANT (context);
19215           return strip_naming_typedef (context, force_type_die (context));
19216         }
19217       else
19218         return force_decl_die (context);
19219     }
19220   return comp_unit_die ();
19221 }
19222
19223 /* Returns the DIE for decl.  A DIE will always be returned.  */
19224
19225 static dw_die_ref
19226 force_decl_die (tree decl)
19227 {
19228   dw_die_ref decl_die;
19229   unsigned saved_external_flag;
19230   tree save_fn = NULL_TREE;
19231   decl_die = lookup_decl_die (decl);
19232   if (!decl_die)
19233     {
19234       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19235
19236       decl_die = lookup_decl_die (decl);
19237       if (decl_die)
19238         return decl_die;
19239
19240       switch (TREE_CODE (decl))
19241         {
19242         case FUNCTION_DECL:
19243           /* Clear current_function_decl, so that gen_subprogram_die thinks
19244              that this is a declaration. At this point, we just want to force
19245              declaration die.  */
19246           save_fn = current_function_decl;
19247           current_function_decl = NULL_TREE;
19248           gen_subprogram_die (decl, context_die);
19249           current_function_decl = save_fn;
19250           break;
19251
19252         case VAR_DECL:
19253           /* Set external flag to force declaration die. Restore it after
19254            gen_decl_die() call.  */
19255           saved_external_flag = DECL_EXTERNAL (decl);
19256           DECL_EXTERNAL (decl) = 1;
19257           gen_decl_die (decl, NULL, context_die);
19258           DECL_EXTERNAL (decl) = saved_external_flag;
19259           break;
19260
19261         case NAMESPACE_DECL:
19262           if (dwarf_version >= 3 || !dwarf_strict)
19263             dwarf2out_decl (decl);
19264           else
19265             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19266             decl_die = comp_unit_die ();
19267           break;
19268
19269         case TRANSLATION_UNIT_DECL:
19270           decl_die = comp_unit_die ();
19271           break;
19272
19273         default:
19274           gcc_unreachable ();
19275         }
19276
19277       /* We should be able to find the DIE now.  */
19278       if (!decl_die)
19279         decl_die = lookup_decl_die (decl);
19280       gcc_assert (decl_die);
19281     }
19282
19283   return decl_die;
19284 }
19285
19286 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19287    always returned.  */
19288
19289 static dw_die_ref
19290 force_type_die (tree type)
19291 {
19292   dw_die_ref type_die;
19293
19294   type_die = lookup_type_die (type);
19295   if (!type_die)
19296     {
19297       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19298
19299       type_die = modified_type_die (type, TYPE_READONLY (type),
19300                                     TYPE_VOLATILE (type), context_die);
19301       gcc_assert (type_die);
19302     }
19303   return type_die;
19304 }
19305
19306 /* Force out any required namespaces to be able to output DECL,
19307    and return the new context_die for it, if it's changed.  */
19308
19309 static dw_die_ref
19310 setup_namespace_context (tree thing, dw_die_ref context_die)
19311 {
19312   tree context = (DECL_P (thing)
19313                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19314   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19315     /* Force out the namespace.  */
19316     context_die = force_decl_die (context);
19317
19318   return context_die;
19319 }
19320
19321 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19322    type) within its namespace, if appropriate.
19323
19324    For compatibility with older debuggers, namespace DIEs only contain
19325    declarations; all definitions are emitted at CU scope.  */
19326
19327 static dw_die_ref
19328 declare_in_namespace (tree thing, dw_die_ref context_die)
19329 {
19330   dw_die_ref ns_context;
19331
19332   if (debug_info_level <= DINFO_LEVEL_TERSE)
19333     return context_die;
19334
19335   /* If this decl is from an inlined function, then don't try to emit it in its
19336      namespace, as we will get confused.  It would have already been emitted
19337      when the abstract instance of the inline function was emitted anyways.  */
19338   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19339     return context_die;
19340
19341   ns_context = setup_namespace_context (thing, context_die);
19342
19343   if (ns_context != context_die)
19344     {
19345       if (is_fortran ())
19346         return ns_context;
19347       if (DECL_P (thing))
19348         gen_decl_die (thing, NULL, ns_context);
19349       else
19350         gen_type_die (thing, ns_context);
19351     }
19352   return context_die;
19353 }
19354
19355 /* Generate a DIE for a namespace or namespace alias.  */
19356
19357 static void
19358 gen_namespace_die (tree decl, dw_die_ref context_die)
19359 {
19360   dw_die_ref namespace_die;
19361
19362   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19363      they are an alias of.  */
19364   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19365     {
19366       /* Output a real namespace or module.  */
19367       context_die = setup_namespace_context (decl, comp_unit_die ());
19368       namespace_die = new_die (is_fortran ()
19369                                ? DW_TAG_module : DW_TAG_namespace,
19370                                context_die, decl);
19371       /* For Fortran modules defined in different CU don't add src coords.  */
19372       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19373         {
19374           const char *name = dwarf2_name (decl, 0);
19375           if (name)
19376             add_name_attribute (namespace_die, name);
19377         }
19378       else
19379         add_name_and_src_coords_attributes (namespace_die, decl);
19380       if (DECL_EXTERNAL (decl))
19381         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19382       equate_decl_number_to_die (decl, namespace_die);
19383     }
19384   else
19385     {
19386       /* Output a namespace alias.  */
19387
19388       /* Force out the namespace we are an alias of, if necessary.  */
19389       dw_die_ref origin_die
19390         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19391
19392       if (DECL_FILE_SCOPE_P (decl)
19393           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19394         context_die = setup_namespace_context (decl, comp_unit_die ());
19395       /* Now create the namespace alias DIE.  */
19396       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19397       add_name_and_src_coords_attributes (namespace_die, decl);
19398       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19399       equate_decl_number_to_die (decl, namespace_die);
19400     }
19401 }
19402
19403 /* Generate Dwarf debug information for a decl described by DECL.
19404    The return value is currently only meaningful for PARM_DECLs,
19405    for all other decls it returns NULL.  */
19406
19407 static dw_die_ref
19408 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19409 {
19410   tree decl_or_origin = decl ? decl : origin;
19411   tree class_origin = NULL, ultimate_origin;
19412
19413   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19414     return NULL;
19415
19416   switch (TREE_CODE (decl_or_origin))
19417     {
19418     case ERROR_MARK:
19419       break;
19420
19421     case CONST_DECL:
19422       if (!is_fortran () && !is_ada ())
19423         {
19424           /* The individual enumerators of an enum type get output when we output
19425              the Dwarf representation of the relevant enum type itself.  */
19426           break;
19427         }
19428
19429       /* Emit its type.  */
19430       gen_type_die (TREE_TYPE (decl), context_die);
19431
19432       /* And its containing namespace.  */
19433       context_die = declare_in_namespace (decl, context_die);
19434
19435       gen_const_die (decl, context_die);
19436       break;
19437
19438     case FUNCTION_DECL:
19439       /* Don't output any DIEs to represent mere function declarations,
19440          unless they are class members or explicit block externs.  */
19441       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19442           && DECL_FILE_SCOPE_P (decl_or_origin)
19443           && (current_function_decl == NULL_TREE
19444               || DECL_ARTIFICIAL (decl_or_origin)))
19445         break;
19446
19447 #if 0
19448       /* FIXME */
19449       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19450          on local redeclarations of global functions.  That seems broken.  */
19451       if (current_function_decl != decl)
19452         /* This is only a declaration.  */;
19453 #endif
19454
19455       /* If we're emitting a clone, emit info for the abstract instance.  */
19456       if (origin || DECL_ORIGIN (decl) != decl)
19457         dwarf2out_abstract_function (origin
19458                                      ? DECL_ORIGIN (origin)
19459                                      : DECL_ABSTRACT_ORIGIN (decl));
19460
19461       /* If we're emitting an out-of-line copy of an inline function,
19462          emit info for the abstract instance and set up to refer to it.  */
19463       else if (cgraph_function_possibly_inlined_p (decl)
19464                && ! DECL_ABSTRACT (decl)
19465                && ! class_or_namespace_scope_p (context_die)
19466                /* dwarf2out_abstract_function won't emit a die if this is just
19467                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19468                   that case, because that works only if we have a die.  */
19469                && DECL_INITIAL (decl) != NULL_TREE)
19470         {
19471           dwarf2out_abstract_function (decl);
19472           set_decl_origin_self (decl);
19473         }
19474
19475       /* Otherwise we're emitting the primary DIE for this decl.  */
19476       else if (debug_info_level > DINFO_LEVEL_TERSE)
19477         {
19478           /* Before we describe the FUNCTION_DECL itself, make sure that we
19479              have its containing type.  */
19480           if (!origin)
19481             origin = decl_class_context (decl);
19482           if (origin != NULL_TREE)
19483             gen_type_die (origin, context_die);
19484
19485           /* And its return type.  */
19486           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19487
19488           /* And its virtual context.  */
19489           if (DECL_VINDEX (decl) != NULL_TREE)
19490             gen_type_die (DECL_CONTEXT (decl), context_die);
19491
19492           /* Make sure we have a member DIE for decl.  */
19493           if (origin != NULL_TREE)
19494             gen_type_die_for_member (origin, decl, context_die);
19495
19496           /* And its containing namespace.  */
19497           context_die = declare_in_namespace (decl, context_die);
19498         }
19499
19500       /* Now output a DIE to represent the function itself.  */
19501       if (decl)
19502         gen_subprogram_die (decl, context_die);
19503       break;
19504
19505     case TYPE_DECL:
19506       /* If we are in terse mode, don't generate any DIEs to represent any
19507          actual typedefs.  */
19508       if (debug_info_level <= DINFO_LEVEL_TERSE)
19509         break;
19510
19511       /* In the special case of a TYPE_DECL node representing the declaration
19512          of some type tag, if the given TYPE_DECL is marked as having been
19513          instantiated from some other (original) TYPE_DECL node (e.g. one which
19514          was generated within the original definition of an inline function) we
19515          used to generate a special (abbreviated) DW_TAG_structure_type,
19516          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19517          should be actually referencing those DIEs, as variable DIEs with that
19518          type would be emitted already in the abstract origin, so it was always
19519          removed during unused type prunning.  Don't add anything in this
19520          case.  */
19521       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19522         break;
19523
19524       if (is_redundant_typedef (decl))
19525         gen_type_die (TREE_TYPE (decl), context_die);
19526       else
19527         /* Output a DIE to represent the typedef itself.  */
19528         gen_typedef_die (decl, context_die);
19529       break;
19530
19531     case LABEL_DECL:
19532       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19533         gen_label_die (decl, context_die);
19534       break;
19535
19536     case VAR_DECL:
19537     case RESULT_DECL:
19538       /* If we are in terse mode, don't generate any DIEs to represent any
19539          variable declarations or definitions.  */
19540       if (debug_info_level <= DINFO_LEVEL_TERSE)
19541         break;
19542
19543       /* Output any DIEs that are needed to specify the type of this data
19544          object.  */
19545       if (decl_by_reference_p (decl_or_origin))
19546         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19547       else
19548         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19549
19550       /* And its containing type.  */
19551       class_origin = decl_class_context (decl_or_origin);
19552       if (class_origin != NULL_TREE)
19553         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19554
19555       /* And its containing namespace.  */
19556       context_die = declare_in_namespace (decl_or_origin, context_die);
19557
19558       /* Now output the DIE to represent the data object itself.  This gets
19559          complicated because of the possibility that the VAR_DECL really
19560          represents an inlined instance of a formal parameter for an inline
19561          function.  */
19562       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19563       if (ultimate_origin != NULL_TREE
19564           && TREE_CODE (ultimate_origin) == PARM_DECL)
19565         gen_formal_parameter_die (decl, origin,
19566                                   true /* Emit name attribute.  */,
19567                                   context_die);
19568       else
19569         gen_variable_die (decl, origin, context_die);
19570       break;
19571
19572     case FIELD_DECL:
19573       /* Ignore the nameless fields that are used to skip bits but handle C++
19574          anonymous unions and structs.  */
19575       if (DECL_NAME (decl) != NULL_TREE
19576           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19577           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19578         {
19579           gen_type_die (member_declared_type (decl), context_die);
19580           gen_field_die (decl, context_die);
19581         }
19582       break;
19583
19584     case PARM_DECL:
19585       if (DECL_BY_REFERENCE (decl_or_origin))
19586         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19587       else
19588         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19589       return gen_formal_parameter_die (decl, origin,
19590                                        true /* Emit name attribute.  */,
19591                                        context_die);
19592
19593     case NAMESPACE_DECL:
19594     case IMPORTED_DECL:
19595       if (dwarf_version >= 3 || !dwarf_strict)
19596         gen_namespace_die (decl, context_die);
19597       break;
19598
19599     default:
19600       /* Probably some frontend-internal decl.  Assume we don't care.  */
19601       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19602       break;
19603     }
19604
19605   return NULL;
19606 }
19607 \f
19608 /* Output debug information for global decl DECL.  Called from toplev.c after
19609    compilation proper has finished.  */
19610
19611 static void
19612 dwarf2out_global_decl (tree decl)
19613 {
19614   /* Output DWARF2 information for file-scope tentative data object
19615      declarations, file-scope (extern) function declarations (which
19616      had no corresponding body) and file-scope tagged type declarations
19617      and definitions which have not yet been forced out.  */
19618   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19619     dwarf2out_decl (decl);
19620 }
19621
19622 /* Output debug information for type decl DECL.  Called from toplev.c
19623    and from language front ends (to record built-in types).  */
19624 static void
19625 dwarf2out_type_decl (tree decl, int local)
19626 {
19627   if (!local)
19628     dwarf2out_decl (decl);
19629 }
19630
19631 /* Output debug information for imported module or decl DECL.
19632    NAME is non-NULL name in the lexical block if the decl has been renamed.
19633    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19634    that DECL belongs to.
19635    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19636 static void
19637 dwarf2out_imported_module_or_decl_1 (tree decl,
19638                                      tree name,
19639                                      tree lexical_block,
19640                                      dw_die_ref lexical_block_die)
19641 {
19642   expanded_location xloc;
19643   dw_die_ref imported_die = NULL;
19644   dw_die_ref at_import_die;
19645
19646   if (TREE_CODE (decl) == IMPORTED_DECL)
19647     {
19648       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19649       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19650       gcc_assert (decl);
19651     }
19652   else
19653     xloc = expand_location (input_location);
19654
19655   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19656     {
19657       at_import_die = force_type_die (TREE_TYPE (decl));
19658       /* For namespace N { typedef void T; } using N::T; base_type_die
19659          returns NULL, but DW_TAG_imported_declaration requires
19660          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19661       if (!at_import_die)
19662         {
19663           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19664           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19665           at_import_die = lookup_type_die (TREE_TYPE (decl));
19666           gcc_assert (at_import_die);
19667         }
19668     }
19669   else
19670     {
19671       at_import_die = lookup_decl_die (decl);
19672       if (!at_import_die)
19673         {
19674           /* If we're trying to avoid duplicate debug info, we may not have
19675              emitted the member decl for this field.  Emit it now.  */
19676           if (TREE_CODE (decl) == FIELD_DECL)
19677             {
19678               tree type = DECL_CONTEXT (decl);
19679
19680               if (TYPE_CONTEXT (type)
19681                   && TYPE_P (TYPE_CONTEXT (type))
19682                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19683                                                 DINFO_USAGE_DIR_USE))
19684                 return;
19685               gen_type_die_for_member (type, decl,
19686                                        get_context_die (TYPE_CONTEXT (type)));
19687             }
19688           at_import_die = force_decl_die (decl);
19689         }
19690     }
19691
19692   if (TREE_CODE (decl) == NAMESPACE_DECL)
19693     {
19694       if (dwarf_version >= 3 || !dwarf_strict)
19695         imported_die = new_die (DW_TAG_imported_module,
19696                                 lexical_block_die,
19697                                 lexical_block);
19698       else
19699         return;
19700     }
19701   else
19702     imported_die = new_die (DW_TAG_imported_declaration,
19703                             lexical_block_die,
19704                             lexical_block);
19705
19706   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19707   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19708   if (name)
19709     add_AT_string (imported_die, DW_AT_name,
19710                    IDENTIFIER_POINTER (name));
19711   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19712 }
19713
19714 /* Output debug information for imported module or decl DECL.
19715    NAME is non-NULL name in context if the decl has been renamed.
19716    CHILD is true if decl is one of the renamed decls as part of
19717    importing whole module.  */
19718
19719 static void
19720 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19721                                    bool child)
19722 {
19723   /* dw_die_ref at_import_die;  */
19724   dw_die_ref scope_die;
19725
19726   if (debug_info_level <= DINFO_LEVEL_TERSE)
19727     return;
19728
19729   gcc_assert (decl);
19730
19731   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19732      We need decl DIE for reference and scope die. First, get DIE for the decl
19733      itself.  */
19734
19735   /* Get the scope die for decl context. Use comp_unit_die for global module
19736      or decl. If die is not found for non globals, force new die.  */
19737   if (context
19738       && TYPE_P (context)
19739       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19740     return;
19741
19742   if (!(dwarf_version >= 3 || !dwarf_strict))
19743     return;
19744
19745   scope_die = get_context_die (context);
19746
19747   if (child)
19748     {
19749       gcc_assert (scope_die->die_child);
19750       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19751       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19752       scope_die = scope_die->die_child;
19753     }
19754
19755   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19756   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19757
19758 }
19759
19760 /* Write the debugging output for DECL.  */
19761
19762 void
19763 dwarf2out_decl (tree decl)
19764 {
19765   dw_die_ref context_die = comp_unit_die ();
19766
19767   switch (TREE_CODE (decl))
19768     {
19769     case ERROR_MARK:
19770       return;
19771
19772     case FUNCTION_DECL:
19773       /* What we would really like to do here is to filter out all mere
19774          file-scope declarations of file-scope functions which are never
19775          referenced later within this translation unit (and keep all of ones
19776          that *are* referenced later on) but we aren't clairvoyant, so we have
19777          no idea which functions will be referenced in the future (i.e. later
19778          on within the current translation unit). So here we just ignore all
19779          file-scope function declarations which are not also definitions.  If
19780          and when the debugger needs to know something about these functions,
19781          it will have to hunt around and find the DWARF information associated
19782          with the definition of the function.
19783
19784          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19785          nodes represent definitions and which ones represent mere
19786          declarations.  We have to check DECL_INITIAL instead. That's because
19787          the C front-end supports some weird semantics for "extern inline"
19788          function definitions.  These can get inlined within the current
19789          translation unit (and thus, we need to generate Dwarf info for their
19790          abstract instances so that the Dwarf info for the concrete inlined
19791          instances can have something to refer to) but the compiler never
19792          generates any out-of-lines instances of such things (despite the fact
19793          that they *are* definitions).
19794
19795          The important point is that the C front-end marks these "extern
19796          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19797          them anyway. Note that the C++ front-end also plays some similar games
19798          for inline function definitions appearing within include files which
19799          also contain `#pragma interface' pragmas.  */
19800       if (DECL_INITIAL (decl) == NULL_TREE)
19801         return;
19802
19803       /* If we're a nested function, initially use a parent of NULL; if we're
19804          a plain function, this will be fixed up in decls_for_scope.  If
19805          we're a method, it will be ignored, since we already have a DIE.  */
19806       if (decl_function_context (decl)
19807           /* But if we're in terse mode, we don't care about scope.  */
19808           && debug_info_level > DINFO_LEVEL_TERSE)
19809         context_die = NULL;
19810       break;
19811
19812     case VAR_DECL:
19813       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19814          declaration and if the declaration was never even referenced from
19815          within this entire compilation unit.  We suppress these DIEs in
19816          order to save space in the .debug section (by eliminating entries
19817          which are probably useless).  Note that we must not suppress
19818          block-local extern declarations (whether used or not) because that
19819          would screw-up the debugger's name lookup mechanism and cause it to
19820          miss things which really ought to be in scope at a given point.  */
19821       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19822         return;
19823
19824       /* For local statics lookup proper context die.  */
19825       if (TREE_STATIC (decl) && decl_function_context (decl))
19826         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19827
19828       /* If we are in terse mode, don't generate any DIEs to represent any
19829          variable declarations or definitions.  */
19830       if (debug_info_level <= DINFO_LEVEL_TERSE)
19831         return;
19832       break;
19833
19834     case CONST_DECL:
19835       if (debug_info_level <= DINFO_LEVEL_TERSE)
19836         return;
19837       if (!is_fortran () && !is_ada ())
19838         return;
19839       if (TREE_STATIC (decl) && decl_function_context (decl))
19840         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19841       break;
19842
19843     case NAMESPACE_DECL:
19844     case IMPORTED_DECL:
19845       if (debug_info_level <= DINFO_LEVEL_TERSE)
19846         return;
19847       if (lookup_decl_die (decl) != NULL)
19848         return;
19849       break;
19850
19851     case TYPE_DECL:
19852       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19853       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19854         return;
19855
19856       /* Don't bother trying to generate any DIEs to represent any of the
19857          normal built-in types for the language we are compiling.  */
19858       if (DECL_IS_BUILTIN (decl))
19859         return;
19860
19861       /* If we are in terse mode, don't generate any DIEs for types.  */
19862       if (debug_info_level <= DINFO_LEVEL_TERSE)
19863         return;
19864
19865       /* If we're a function-scope tag, initially use a parent of NULL;
19866          this will be fixed up in decls_for_scope.  */
19867       if (decl_function_context (decl))
19868         context_die = NULL;
19869
19870       break;
19871
19872     default:
19873       return;
19874     }
19875
19876   gen_decl_die (decl, NULL, context_die);
19877 }
19878
19879 /* Write the debugging output for DECL.  */
19880
19881 static void
19882 dwarf2out_function_decl (tree decl)
19883 {
19884   dwarf2out_decl (decl);
19885   call_arg_locations = NULL;
19886   call_arg_loc_last = NULL;
19887   call_site_count = -1;
19888   tail_call_site_count = -1;
19889   VEC_free (dw_die_ref, heap, block_map);
19890   htab_empty (decl_loc_table);
19891   htab_empty (cached_dw_loc_list_table);
19892 }
19893
19894 /* Output a marker (i.e. a label) for the beginning of the generated code for
19895    a lexical block.  */
19896
19897 static void
19898 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19899                        unsigned int blocknum)
19900 {
19901   switch_to_section (current_function_section ());
19902   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19903 }
19904
19905 /* Output a marker (i.e. a label) for the end of the generated code for a
19906    lexical block.  */
19907
19908 static void
19909 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19910 {
19911   switch_to_section (current_function_section ());
19912   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
19913 }
19914
19915 /* Returns nonzero if it is appropriate not to emit any debugging
19916    information for BLOCK, because it doesn't contain any instructions.
19917
19918    Don't allow this for blocks with nested functions or local classes
19919    as we would end up with orphans, and in the presence of scheduling
19920    we may end up calling them anyway.  */
19921
19922 static bool
19923 dwarf2out_ignore_block (const_tree block)
19924 {
19925   tree decl;
19926   unsigned int i;
19927
19928   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
19929     if (TREE_CODE (decl) == FUNCTION_DECL
19930         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19931       return 0;
19932   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
19933     {
19934       decl = BLOCK_NONLOCALIZED_VAR (block, i);
19935       if (TREE_CODE (decl) == FUNCTION_DECL
19936           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19937       return 0;
19938     }
19939
19940   return 1;
19941 }
19942
19943 /* Hash table routines for file_hash.  */
19944
19945 static int
19946 file_table_eq (const void *p1_p, const void *p2_p)
19947 {
19948   const struct dwarf_file_data *const p1 =
19949     (const struct dwarf_file_data *) p1_p;
19950   const char *const p2 = (const char *) p2_p;
19951   return filename_cmp (p1->filename, p2) == 0;
19952 }
19953
19954 static hashval_t
19955 file_table_hash (const void *p_p)
19956 {
19957   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
19958   return htab_hash_string (p->filename);
19959 }
19960
19961 /* Lookup FILE_NAME (in the list of filenames that we know about here in
19962    dwarf2out.c) and return its "index".  The index of each (known) filename is
19963    just a unique number which is associated with only that one filename.  We
19964    need such numbers for the sake of generating labels (in the .debug_sfnames
19965    section) and references to those files numbers (in the .debug_srcinfo
19966    and.debug_macinfo sections).  If the filename given as an argument is not
19967    found in our current list, add it to the list and assign it the next
19968    available unique index number.  In order to speed up searches, we remember
19969    the index of the filename was looked up last.  This handles the majority of
19970    all searches.  */
19971
19972 static struct dwarf_file_data *
19973 lookup_filename (const char *file_name)
19974 {
19975   void ** slot;
19976   struct dwarf_file_data * created;
19977
19978   /* Check to see if the file name that was searched on the previous
19979      call matches this file name.  If so, return the index.  */
19980   if (file_table_last_lookup
19981       && (file_name == file_table_last_lookup->filename
19982           || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
19983     return file_table_last_lookup;
19984
19985   /* Didn't match the previous lookup, search the table.  */
19986   slot = htab_find_slot_with_hash (file_table, file_name,
19987                                    htab_hash_string (file_name), INSERT);
19988   if (*slot)
19989     return (struct dwarf_file_data *) *slot;
19990
19991   created = ggc_alloc_dwarf_file_data ();
19992   created->filename = file_name;
19993   created->emitted_number = 0;
19994   *slot = created;
19995   return created;
19996 }
19997
19998 /* If the assembler will construct the file table, then translate the compiler
19999    internal file table number into the assembler file table number, and emit
20000    a .file directive if we haven't already emitted one yet.  The file table
20001    numbers are different because we prune debug info for unused variables and
20002    types, which may include filenames.  */
20003
20004 static int
20005 maybe_emit_file (struct dwarf_file_data * fd)
20006 {
20007   if (! fd->emitted_number)
20008     {
20009       if (last_emitted_file)
20010         fd->emitted_number = last_emitted_file->emitted_number + 1;
20011       else
20012         fd->emitted_number = 1;
20013       last_emitted_file = fd;
20014
20015       if (DWARF2_ASM_LINE_DEBUG_INFO)
20016         {
20017           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20018           output_quoted_string (asm_out_file,
20019                                 remap_debug_filename (fd->filename));
20020           fputc ('\n', asm_out_file);
20021         }
20022     }
20023
20024   return fd->emitted_number;
20025 }
20026
20027 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20028    That generation should happen after function debug info has been
20029    generated. The value of the attribute is the constant value of ARG.  */
20030
20031 static void
20032 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20033 {
20034   die_arg_entry entry;
20035
20036   if (!die || !arg)
20037     return;
20038
20039   if (!tmpl_value_parm_die_table)
20040     tmpl_value_parm_die_table
20041       = VEC_alloc (die_arg_entry, gc, 32);
20042
20043   entry.die = die;
20044   entry.arg = arg;
20045   VEC_safe_push (die_arg_entry, gc,
20046                  tmpl_value_parm_die_table,
20047                  &entry);
20048 }
20049
20050 /* Return TRUE if T is an instance of generic type, FALSE
20051    otherwise.  */
20052
20053 static bool
20054 generic_type_p (tree t)
20055 {
20056   if (t == NULL_TREE || !TYPE_P (t))
20057     return false;
20058   return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
20059 }
20060
20061 /* Schedule the generation of the generic parameter dies for the
20062   instance of generic type T. The proper generation itself is later
20063   done by gen_scheduled_generic_parms_dies. */
20064
20065 static void
20066 schedule_generic_params_dies_gen (tree t)
20067 {
20068   if (!generic_type_p (t))
20069     return;
20070
20071   if (generic_type_instances == NULL)
20072     generic_type_instances = VEC_alloc (tree, gc, 256);
20073
20074   VEC_safe_push (tree, gc, generic_type_instances, t);
20075 }
20076
20077 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20078    by append_entry_to_tmpl_value_parm_die_table. This function must
20079    be called after function DIEs have been generated.  */
20080
20081 static void
20082 gen_remaining_tmpl_value_param_die_attribute (void)
20083 {
20084   if (tmpl_value_parm_die_table)
20085     {
20086       unsigned i;
20087       die_arg_entry *e;
20088
20089       FOR_EACH_VEC_ELT (die_arg_entry, tmpl_value_parm_die_table, i, e)
20090         tree_add_const_value_attribute (e->die, e->arg);
20091     }
20092 }
20093
20094 /* Generate generic parameters DIEs for instances of generic types
20095    that have been previously scheduled by
20096    schedule_generic_params_dies_gen. This function must be called
20097    after all the types of the CU have been laid out.  */
20098
20099 static void
20100 gen_scheduled_generic_parms_dies (void)
20101 {
20102   unsigned i;
20103   tree t;
20104
20105   if (generic_type_instances == NULL)
20106     return;
20107   
20108   FOR_EACH_VEC_ELT (tree, generic_type_instances, i, t)
20109     gen_generic_params_dies (t);
20110 }
20111
20112
20113 /* Replace DW_AT_name for the decl with name.  */
20114
20115 static void
20116 dwarf2out_set_name (tree decl, tree name)
20117 {
20118   dw_die_ref die;
20119   dw_attr_ref attr;
20120   const char *dname;
20121
20122   die = TYPE_SYMTAB_DIE (decl);
20123   if (!die)
20124     return;
20125
20126   dname = dwarf2_name (name, 0);
20127   if (!dname)
20128     return;
20129
20130   attr = get_AT (die, DW_AT_name);
20131   if (attr)
20132     {
20133       struct indirect_string_node *node;
20134
20135       node = find_AT_string (dname);
20136       /* replace the string.  */
20137       attr->dw_attr_val.v.val_str = node;
20138     }
20139
20140   else
20141     add_name_attribute (die, dname);
20142 }
20143
20144 /* Called by the final INSN scan whenever we see a var location.  We
20145    use it to drop labels in the right places, and throw the location in
20146    our lookup table.  */
20147
20148 static void
20149 dwarf2out_var_location (rtx loc_note)
20150 {
20151   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20152   struct var_loc_node *newloc;
20153   rtx next_real, next_note;
20154   static const char *last_label;
20155   static const char *last_postcall_label;
20156   static bool last_in_cold_section_p;
20157   static rtx expected_next_loc_note;
20158   tree decl;
20159   bool var_loc_p;
20160
20161   if (!NOTE_P (loc_note))
20162     {
20163       if (CALL_P (loc_note))
20164         {
20165           call_site_count++;
20166           if (SIBLING_CALL_P (loc_note))
20167             tail_call_site_count++;
20168         }
20169       return;
20170     }
20171
20172   var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
20173   if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20174     return;
20175
20176   /* Optimize processing a large consecutive sequence of location
20177      notes so we don't spend too much time in next_real_insn.  If the
20178      next insn is another location note, remember the next_real_insn
20179      calculation for next time.  */
20180   next_real = cached_next_real_insn;
20181   if (next_real)
20182     {
20183       if (expected_next_loc_note != loc_note)
20184         next_real = NULL_RTX;
20185     }
20186
20187   next_note = NEXT_INSN (loc_note);
20188   if (! next_note
20189       || INSN_DELETED_P (next_note)
20190       || GET_CODE (next_note) != NOTE
20191       || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
20192           && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
20193     next_note = NULL_RTX;
20194
20195   if (! next_real)
20196     next_real = next_real_insn (loc_note);
20197
20198   if (next_note)
20199     {
20200       expected_next_loc_note = next_note;
20201       cached_next_real_insn = next_real;
20202     }
20203   else
20204     cached_next_real_insn = NULL_RTX;
20205
20206   /* If there are no instructions which would be affected by this note,
20207      don't do anything.  */
20208   if (var_loc_p
20209       && next_real == NULL_RTX
20210       && !NOTE_DURING_CALL_P (loc_note))
20211     return;
20212
20213   if (next_real == NULL_RTX)
20214     next_real = get_last_insn ();
20215
20216   /* If there were any real insns between note we processed last time
20217      and this note (or if it is the first note), clear
20218      last_{,postcall_}label so that they are not reused this time.  */
20219   if (last_var_location_insn == NULL_RTX
20220       || last_var_location_insn != next_real
20221       || last_in_cold_section_p != in_cold_section_p)
20222     {
20223       last_label = NULL;
20224       last_postcall_label = NULL;
20225     }
20226
20227   if (var_loc_p)
20228     {
20229       decl = NOTE_VAR_LOCATION_DECL (loc_note);
20230       newloc = add_var_loc_to_decl (decl, loc_note,
20231                                     NOTE_DURING_CALL_P (loc_note)
20232                                     ? last_postcall_label : last_label);
20233       if (newloc == NULL)
20234         return;
20235     }
20236   else
20237     {
20238       decl = NULL_TREE;
20239       newloc = NULL;
20240     }
20241
20242   /* If there were no real insns between note we processed last time
20243      and this note, use the label we emitted last time.  Otherwise
20244      create a new label and emit it.  */
20245   if (last_label == NULL)
20246     {
20247       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20248       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20249       loclabel_num++;
20250       last_label = ggc_strdup (loclabel);
20251     }
20252
20253   if (!var_loc_p)
20254     {
20255       struct call_arg_loc_node *ca_loc
20256         = ggc_alloc_cleared_call_arg_loc_node ();
20257       rtx prev = prev_real_insn (loc_note), x;
20258       ca_loc->call_arg_loc_note = loc_note;
20259       ca_loc->next = NULL;
20260       ca_loc->label = last_label;
20261       gcc_assert (prev
20262                   && (CALL_P (prev)
20263                       || (NONJUMP_INSN_P (prev)
20264                           && GET_CODE (PATTERN (prev)) == SEQUENCE
20265                           && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
20266       if (!CALL_P (prev))
20267         prev = XVECEXP (PATTERN (prev), 0, 0);
20268       ca_loc->tail_call_p = SIBLING_CALL_P (prev);
20269       x = PATTERN (prev);
20270       if (GET_CODE (x) == PARALLEL)
20271         x = XVECEXP (x, 0, 0);
20272       if (GET_CODE (x) == SET)
20273         x = SET_SRC (x);
20274       if (GET_CODE (x) == CALL && MEM_P (XEXP (x, 0)))
20275         {
20276           x = XEXP (XEXP (x, 0), 0);
20277           if (GET_CODE (x) == SYMBOL_REF
20278               && SYMBOL_REF_DECL (x)
20279               && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
20280             ca_loc->symbol_ref = x;
20281         }
20282       ca_loc->block = insn_scope (prev);
20283       if (call_arg_locations)
20284         call_arg_loc_last->next = ca_loc;
20285       else
20286         call_arg_locations = ca_loc;
20287       call_arg_loc_last = ca_loc;
20288     }
20289   else if (!NOTE_DURING_CALL_P (loc_note))
20290     newloc->label = last_label;
20291   else
20292     {
20293       if (!last_postcall_label)
20294         {
20295           sprintf (loclabel, "%s-1", last_label);
20296           last_postcall_label = ggc_strdup (loclabel);
20297         }
20298       newloc->label = last_postcall_label;
20299     }
20300
20301   last_var_location_insn = next_real;
20302   last_in_cold_section_p = in_cold_section_p;
20303 }
20304
20305 /* Note in one location list that text section has changed.  */
20306
20307 static int
20308 var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED)
20309 {
20310   var_loc_list *list = (var_loc_list *) *slot;
20311   if (list->first)
20312     list->last_before_switch
20313       = list->last->next ? list->last->next : list->last;
20314   return 1;
20315 }
20316
20317 /* Note in all location lists that text section has changed.  */
20318
20319 static void
20320 var_location_switch_text_section (void)
20321 {
20322   if (decl_loc_table == NULL)
20323     return;
20324
20325   htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL);
20326 }
20327
20328 /* Create a new line number table.  */
20329
20330 static dw_line_info_table *
20331 new_line_info_table (void)
20332 {
20333   dw_line_info_table *table;
20334
20335   table = ggc_alloc_cleared_dw_line_info_table_struct ();
20336   table->file_num = 1;
20337   table->line_num = 1;
20338   table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
20339
20340   return table;
20341 }
20342
20343 /* Lookup the "current" table into which we emit line info, so
20344    that we don't have to do it for every source line.  */
20345
20346 static void
20347 set_cur_line_info_table (section *sec)
20348 {
20349   dw_line_info_table *table;
20350
20351   if (sec == text_section)
20352     table = text_section_line_info;
20353   else if (sec == cold_text_section)
20354     {
20355       table = cold_text_section_line_info;
20356       if (!table)
20357         {
20358           cold_text_section_line_info = table = new_line_info_table ();
20359           table->end_label = cold_end_label;
20360         }
20361     }
20362   else
20363     {
20364       const char *end_label;
20365
20366       if (flag_reorder_blocks_and_partition)
20367         {
20368           if (in_cold_section_p)
20369             end_label = crtl->subsections.cold_section_end_label;
20370           else
20371             end_label = crtl->subsections.hot_section_end_label;
20372         }
20373       else
20374         {
20375           char label[MAX_ARTIFICIAL_LABEL_BYTES];
20376           ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
20377                                        current_function_funcdef_no);
20378           end_label = ggc_strdup (label);
20379         }
20380
20381       table = new_line_info_table ();
20382       table->end_label = end_label;
20383
20384       VEC_safe_push (dw_line_info_table_p, gc, separate_line_info, table);
20385     }
20386
20387   if (DWARF2_ASM_LINE_DEBUG_INFO)
20388     table->is_stmt = (cur_line_info_table
20389                       ? cur_line_info_table->is_stmt
20390                       : DWARF_LINE_DEFAULT_IS_STMT_START);
20391   cur_line_info_table = table;
20392 }
20393
20394
20395 /* We need to reset the locations at the beginning of each
20396    function. We can't do this in the end_function hook, because the
20397    declarations that use the locations won't have been output when
20398    that hook is called.  Also compute have_multiple_function_sections here.  */
20399
20400 static void
20401 dwarf2out_begin_function (tree fun)
20402 {
20403   section *sec = function_section (fun);
20404
20405   if (sec != text_section)
20406     have_multiple_function_sections = true;
20407
20408   if (flag_reorder_blocks_and_partition && !cold_text_section)
20409     {
20410       gcc_assert (current_function_decl == fun);
20411       cold_text_section = unlikely_text_section ();
20412       switch_to_section (cold_text_section);
20413       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20414       switch_to_section (sec);
20415     }
20416
20417   dwarf2out_note_section_used ();
20418   call_site_count = 0;
20419   tail_call_site_count = 0;
20420
20421   set_cur_line_info_table (sec);
20422 }
20423
20424 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.  */
20425
20426 static void
20427 push_dw_line_info_entry (dw_line_info_table *table,
20428                          enum dw_line_info_opcode opcode, unsigned int val)
20429 {
20430   dw_line_info_entry e;
20431   e.opcode = opcode;
20432   e.val = val;
20433   VEC_safe_push (dw_line_info_entry, gc, table->entries, &e);
20434 }
20435
20436 /* Output a label to mark the beginning of a source code line entry
20437    and record information relating to this source line, in
20438    'line_info_table' for later output of the .debug_line section.  */
20439 /* ??? The discriminator parameter ought to be unsigned.  */
20440
20441 static void
20442 dwarf2out_source_line (unsigned int line, const char *filename,
20443                        int discriminator, bool is_stmt)
20444 {
20445   unsigned int file_num;
20446   dw_line_info_table *table;
20447
20448   if (debug_info_level < DINFO_LEVEL_NORMAL || line == 0)
20449     return;
20450
20451   /* The discriminator column was added in dwarf4.  Simplify the below
20452      by simply removing it if we're not supposed to output it.  */
20453   if (dwarf_version < 4 && dwarf_strict)
20454     discriminator = 0;
20455
20456   table = cur_line_info_table;
20457   file_num = maybe_emit_file (lookup_filename (filename));
20458
20459   /* ??? TODO: Elide duplicate line number entries.  Traditionally,
20460      the debugger has used the second (possibly duplicate) line number
20461      at the beginning of the function to mark the end of the prologue.
20462      We could eliminate any other duplicates within the function.  For
20463      Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
20464      that second line number entry.  */
20465   /* Recall that this end-of-prologue indication is *not* the same thing
20466      as the end_prologue debug hook.  The NOTE_INSN_PROLOGUE_END note,
20467      to which the hook corresponds, follows the last insn that was 
20468      emitted by gen_prologue.  What we need is to preceed the first insn
20469      that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
20470      insn that corresponds to something the user wrote.  These may be
20471      very different locations once scheduling is enabled.  */
20472
20473   if (0 && file_num == table->file_num
20474       && line == table->line_num
20475       && discriminator == table->discrim_num
20476       && is_stmt == table->is_stmt)
20477     return;
20478
20479   switch_to_section (current_function_section ());
20480
20481   /* If requested, emit something human-readable.  */
20482   if (flag_debug_asm)
20483     fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
20484
20485   if (DWARF2_ASM_LINE_DEBUG_INFO)
20486     {
20487       /* Emit the .loc directive understood by GNU as.  */
20488       /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
20489          file_num, line, is_stmt, discriminator */
20490       fputs ("\t.loc ", asm_out_file);
20491       fprint_ul (asm_out_file, file_num);
20492       putc (' ', asm_out_file);
20493       fprint_ul (asm_out_file, line);
20494       putc (' ', asm_out_file);
20495       putc ('0', asm_out_file);
20496
20497       if (is_stmt != table->is_stmt)
20498         {
20499           fputs (" is_stmt ", asm_out_file);
20500           putc (is_stmt ? '1' : '0', asm_out_file);
20501         }
20502       if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20503         {
20504           gcc_assert (discriminator > 0);
20505           fputs (" discriminator ", asm_out_file);
20506           fprint_ul (asm_out_file, (unsigned long) discriminator);
20507         }
20508       putc ('\n', asm_out_file);
20509     }
20510   else
20511     {
20512       unsigned int label_num = ++line_info_label_num;
20513
20514       targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
20515
20516       push_dw_line_info_entry (table, LI_set_address, label_num);
20517       if (file_num != table->file_num)
20518         push_dw_line_info_entry (table, LI_set_file, file_num);
20519       if (discriminator != table->discrim_num)
20520         push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
20521       if (is_stmt != table->is_stmt)
20522         push_dw_line_info_entry (table, LI_negate_stmt, 0);
20523       push_dw_line_info_entry (table, LI_set_line, line);
20524     }
20525
20526   table->file_num = file_num;
20527   table->line_num = line;
20528   table->discrim_num = discriminator;
20529   table->is_stmt = is_stmt;
20530   table->in_use = true;
20531 }
20532
20533 /* Record the beginning of a new source file.  */
20534
20535 static void
20536 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20537 {
20538   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20539     {
20540       /* Record the beginning of the file for break_out_includes.  */
20541       dw_die_ref bincl_die;
20542
20543       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
20544       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20545     }
20546
20547   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20548     {
20549       macinfo_entry e;
20550       e.code = DW_MACINFO_start_file;
20551       e.lineno = lineno;
20552       e.info = ggc_strdup (filename);
20553       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20554     }
20555 }
20556
20557 /* Record the end of a source file.  */
20558
20559 static void
20560 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20561 {
20562   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20563     /* Record the end of the file for break_out_includes.  */
20564     new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
20565
20566   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20567     {
20568       macinfo_entry e;
20569       e.code = DW_MACINFO_end_file;
20570       e.lineno = lineno;
20571       e.info = NULL;
20572       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20573     }
20574 }
20575
20576 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20577    the tail part of the directive line, i.e. the part which is past the
20578    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20579
20580 static void
20581 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20582                   const char *buffer ATTRIBUTE_UNUSED)
20583 {
20584   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20585     {
20586       macinfo_entry e;
20587       /* Insert a dummy first entry to be able to optimize the whole
20588          predefined macro block using DW_MACRO_GNU_transparent_include.  */
20589       if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20590         {
20591           e.code = 0;
20592           e.lineno = 0;
20593           e.info = NULL;
20594           VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20595         }
20596       e.code = DW_MACINFO_define;
20597       e.lineno = lineno;
20598       e.info = ggc_strdup (buffer);
20599       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20600     }
20601 }
20602
20603 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20604    the tail part of the directive line, i.e. the part which is past the
20605    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20606
20607 static void
20608 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20609                  const char *buffer ATTRIBUTE_UNUSED)
20610 {
20611   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20612     {
20613       macinfo_entry e;
20614       /* Insert a dummy first entry to be able to optimize the whole
20615          predefined macro block using DW_MACRO_GNU_transparent_include.  */
20616       if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20617         {
20618           e.code = 0;
20619           e.lineno = 0;
20620           e.info = NULL;
20621           VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20622         }
20623       e.code = DW_MACINFO_undef;
20624       e.lineno = lineno;
20625       e.info = ggc_strdup (buffer);
20626       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20627     }
20628 }
20629
20630 /* Routines to manipulate hash table of CUs.  */
20631
20632 static hashval_t
20633 htab_macinfo_hash (const void *of)
20634 {
20635   const macinfo_entry *const entry =
20636     (const macinfo_entry *) of;
20637
20638   return htab_hash_string (entry->info);
20639 }
20640
20641 static int
20642 htab_macinfo_eq (const void *of1, const void *of2)
20643 {
20644   const macinfo_entry *const entry1 = (const macinfo_entry *) of1;
20645   const macinfo_entry *const entry2 = (const macinfo_entry *) of2;
20646
20647   return !strcmp (entry1->info, entry2->info);
20648 }
20649
20650 /* Output a single .debug_macinfo entry.  */
20651
20652 static void
20653 output_macinfo_op (macinfo_entry *ref)
20654 {
20655   int file_num;
20656   size_t len;
20657   struct indirect_string_node *node;
20658   char label[MAX_ARTIFICIAL_LABEL_BYTES];
20659   struct dwarf_file_data *fd;
20660
20661   switch (ref->code)
20662     {
20663     case DW_MACINFO_start_file:
20664       fd = lookup_filename (ref->info);
20665       file_num = maybe_emit_file (fd);
20666       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20667       dw2_asm_output_data_uleb128 (ref->lineno,
20668                                    "Included from line number %lu", 
20669                                    (unsigned long) ref->lineno);
20670       dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
20671       break;
20672     case DW_MACINFO_end_file:
20673       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20674       break;
20675     case DW_MACINFO_define:
20676     case DW_MACINFO_undef:
20677       len = strlen (ref->info) + 1;
20678       if (!dwarf_strict
20679           && len > DWARF_OFFSET_SIZE
20680           && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
20681           && (debug_str_section->common.flags & SECTION_MERGE) != 0)
20682         {
20683           ref->code = ref->code == DW_MACINFO_define
20684                       ? DW_MACRO_GNU_define_indirect
20685                       : DW_MACRO_GNU_undef_indirect;
20686           output_macinfo_op (ref);
20687           return;
20688         }
20689       dw2_asm_output_data (1, ref->code,
20690                            ref->code == DW_MACINFO_define
20691                            ? "Define macro" : "Undefine macro");
20692       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 
20693                                    (unsigned long) ref->lineno);
20694       dw2_asm_output_nstring (ref->info, -1, "The macro");
20695       break;
20696     case DW_MACRO_GNU_define_indirect:
20697     case DW_MACRO_GNU_undef_indirect:
20698       node = find_AT_string (ref->info);
20699       if (node->form != DW_FORM_strp)
20700         {
20701           char label[32];
20702           ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
20703           ++dw2_string_counter;
20704           node->label = xstrdup (label);
20705           node->form = DW_FORM_strp;
20706         }
20707       dw2_asm_output_data (1, ref->code,
20708                            ref->code == DW_MACRO_GNU_define_indirect
20709                            ? "Define macro indirect"
20710                            : "Undefine macro indirect");
20711       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
20712                                    (unsigned long) ref->lineno);
20713       dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
20714                              debug_str_section, "The macro: \"%s\"",
20715                              ref->info);
20716       break;
20717     case DW_MACRO_GNU_transparent_include:
20718       dw2_asm_output_data (1, ref->code, "Transparent include");
20719       ASM_GENERATE_INTERNAL_LABEL (label,
20720                                    DEBUG_MACRO_SECTION_LABEL, ref->lineno);
20721       dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
20722       break;
20723     default:
20724       fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
20725                ASM_COMMENT_START, (unsigned long) ref->code);
20726       break;
20727     }
20728 }
20729
20730 /* Attempt to make a sequence of define/undef macinfo ops shareable with
20731    other compilation unit .debug_macinfo sections.  IDX is the first
20732    index of a define/undef, return the number of ops that should be
20733    emitted in a comdat .debug_macinfo section and emit
20734    a DW_MACRO_GNU_transparent_include entry referencing it.
20735    If the define/undef entry should be emitted normally, return 0.  */
20736
20737 static unsigned
20738 optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
20739                         htab_t *macinfo_htab)
20740 {
20741   macinfo_entry *first, *second, *cur, *inc;
20742   char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
20743   unsigned char checksum[16];
20744   struct md5_ctx ctx;
20745   char *grp_name, *tail;
20746   const char *base;
20747   unsigned int i, count, encoded_filename_len, linebuf_len;
20748   void **slot;
20749
20750   first = VEC_index (macinfo_entry, macinfo_table, idx);
20751   second = VEC_index (macinfo_entry, macinfo_table, idx + 1);
20752
20753   /* Optimize only if there are at least two consecutive define/undef ops,
20754      and either all of them are before first DW_MACINFO_start_file
20755      with lineno 0 (i.e. predefined macro block), or all of them are
20756      in some included header file.  */
20757   if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
20758     return 0;
20759   if (VEC_empty (macinfo_entry, files))
20760     {
20761       if (first->lineno != 0 || second->lineno != 0)
20762         return 0;
20763     }
20764   else if (first->lineno == 0)
20765     return 0;
20766
20767   /* Find the last define/undef entry that can be grouped together
20768      with first and at the same time compute md5 checksum of their
20769      codes, linenumbers and strings.  */
20770   md5_init_ctx (&ctx);
20771   for (i = idx; VEC_iterate (macinfo_entry, macinfo_table, i, cur); i++)
20772     if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
20773       break;
20774     else if (first->lineno == 0 && cur->lineno != 0)
20775       break;
20776     else
20777       {
20778         unsigned char code = cur->code;
20779         md5_process_bytes (&code, 1, &ctx);
20780         checksum_uleb128 (cur->lineno, &ctx);
20781         md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
20782       }
20783   md5_finish_ctx (&ctx, checksum);
20784   count = i - idx;
20785
20786   /* From the containing include filename (if any) pick up just
20787      usable characters from its basename.  */
20788   if (first->lineno == 0)
20789     base = "";
20790   else
20791     base = lbasename (VEC_last (macinfo_entry, files)->info);
20792   for (encoded_filename_len = 0, i = 0; base[i]; i++)
20793     if (ISIDNUM (base[i]) || base[i] == '.')
20794       encoded_filename_len++;
20795   /* Count . at the end.  */
20796   if (encoded_filename_len)
20797     encoded_filename_len++;
20798
20799   sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
20800   linebuf_len = strlen (linebuf);
20801
20802   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
20803   grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
20804                          + 16 * 2 + 1);
20805   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
20806   tail = grp_name + 4;
20807   if (encoded_filename_len)
20808     {
20809       for (i = 0; base[i]; i++)
20810         if (ISIDNUM (base[i]) || base[i] == '.')
20811           *tail++ = base[i];
20812       *tail++ = '.';
20813     }
20814   memcpy (tail, linebuf, linebuf_len);
20815   tail += linebuf_len;
20816   *tail++ = '.';
20817   for (i = 0; i < 16; i++)
20818     sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
20819
20820   /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
20821      in the empty vector entry before the first define/undef.  */
20822   inc = VEC_index (macinfo_entry, macinfo_table, idx - 1);
20823   inc->code = DW_MACRO_GNU_transparent_include;
20824   inc->lineno = 0;
20825   inc->info = ggc_strdup (grp_name);
20826   if (*macinfo_htab == NULL)
20827     *macinfo_htab = htab_create (10, htab_macinfo_hash, htab_macinfo_eq, NULL);
20828   /* Avoid emitting duplicates.  */
20829   slot = htab_find_slot (*macinfo_htab, inc, INSERT);
20830   if (*slot != NULL)
20831     {
20832       inc->code = 0;
20833       inc->info = NULL;
20834       /* If such an entry has been used before, just emit
20835          a DW_MACRO_GNU_transparent_include op.  */
20836       inc = (macinfo_entry *) *slot;
20837       output_macinfo_op (inc);
20838       /* And clear all macinfo_entry in the range to avoid emitting them
20839          in the second pass.  */
20840       for (i = idx;
20841            VEC_iterate (macinfo_entry, macinfo_table, i, cur)
20842            && i < idx + count;
20843            i++)
20844         {
20845           cur->code = 0;
20846           cur->info = NULL;
20847         }
20848     }
20849   else
20850     {
20851       *slot = inc;
20852       inc->lineno = htab_elements (*macinfo_htab);
20853       output_macinfo_op (inc);
20854     }
20855   return count;
20856 }
20857
20858 /* Output macinfo section(s).  */
20859
20860 static void
20861 output_macinfo (void)
20862 {
20863   unsigned i;
20864   unsigned long length = VEC_length (macinfo_entry, macinfo_table);
20865   macinfo_entry *ref;
20866   VEC (macinfo_entry, gc) *files = NULL;
20867   htab_t macinfo_htab = NULL;
20868
20869   if (! length)
20870     return;
20871
20872   /* output_macinfo* uses these interchangeably.  */
20873   gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
20874               && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
20875               && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
20876               && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
20877
20878   /* For .debug_macro emit the section header.  */
20879   if (!dwarf_strict)
20880     {
20881       dw2_asm_output_data (2, 4, "DWARF macro version number");
20882       if (DWARF_OFFSET_SIZE == 8)
20883         dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
20884       else
20885         dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
20886       dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_line_section_label,
20887                              debug_line_section, NULL);
20888     }
20889
20890   /* In the first loop, it emits the primary .debug_macinfo section
20891      and after each emitted op the macinfo_entry is cleared.
20892      If a longer range of define/undef ops can be optimized using
20893      DW_MACRO_GNU_transparent_include, the
20894      DW_MACRO_GNU_transparent_include op is emitted and kept in
20895      the vector before the first define/undef in the range and the
20896      whole range of define/undef ops is not emitted and kept.  */
20897   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20898     {
20899       switch (ref->code)
20900         {
20901         case DW_MACINFO_start_file:
20902           VEC_safe_push (macinfo_entry, gc, files, ref);
20903           break;
20904         case DW_MACINFO_end_file:
20905           if (!VEC_empty (macinfo_entry, files))
20906             VEC_pop (macinfo_entry, files);
20907           break;
20908         case DW_MACINFO_define:
20909         case DW_MACINFO_undef:
20910           if (!dwarf_strict
20911               && HAVE_COMDAT_GROUP
20912               && VEC_length (macinfo_entry, files) != 1
20913               && i > 0
20914               && i + 1 < length
20915               && VEC_index (macinfo_entry, macinfo_table, i - 1)->code == 0)
20916             {
20917               unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
20918               if (count)
20919                 {
20920                   i += count - 1;
20921                   continue;
20922                 }
20923             }
20924           break;
20925         case 0:
20926           /* A dummy entry may be inserted at the beginning to be able
20927              to optimize the whole block of predefined macros.  */
20928           if (i == 0)
20929             continue;
20930         default:
20931           break;
20932         }
20933       output_macinfo_op (ref);
20934       ref->info = NULL;
20935       ref->code = 0;
20936     }
20937
20938   if (macinfo_htab == NULL)
20939     return;
20940
20941   htab_delete (macinfo_htab);
20942
20943   /* If any DW_MACRO_GNU_transparent_include were used, on those
20944      DW_MACRO_GNU_transparent_include entries terminate the
20945      current chain and switch to a new comdat .debug_macinfo
20946      section and emit the define/undef entries within it.  */
20947   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20948     switch (ref->code)
20949       {
20950       case 0:
20951         continue;
20952       case DW_MACRO_GNU_transparent_include:
20953         {
20954           char label[MAX_ARTIFICIAL_LABEL_BYTES];
20955           tree comdat_key = get_identifier (ref->info);
20956           /* Terminate the previous .debug_macinfo section.  */
20957           dw2_asm_output_data (1, 0, "End compilation unit");
20958           targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
20959                                          SECTION_DEBUG
20960                                          | SECTION_LINKONCE,
20961                                          comdat_key);
20962           ASM_GENERATE_INTERNAL_LABEL (label,
20963                                        DEBUG_MACRO_SECTION_LABEL,
20964                                        ref->lineno);
20965           ASM_OUTPUT_LABEL (asm_out_file, label);
20966           ref->code = 0;
20967           ref->info = NULL;
20968           dw2_asm_output_data (2, 4, "DWARF macro version number");
20969           if (DWARF_OFFSET_SIZE == 8)
20970             dw2_asm_output_data (1, 1, "Flags: 64-bit");
20971           else
20972             dw2_asm_output_data (1, 0, "Flags: 32-bit");
20973         }
20974         break;
20975       case DW_MACINFO_define:
20976       case DW_MACINFO_undef:
20977         output_macinfo_op (ref);
20978         ref->code = 0;
20979         ref->info = NULL;
20980         break;
20981       default:
20982         gcc_unreachable ();
20983       }
20984 }
20985
20986 /* Set up for Dwarf output at the start of compilation.  */
20987
20988 static void
20989 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20990 {
20991   /* Allocate the file_table.  */
20992   file_table = htab_create_ggc (50, file_table_hash,
20993                                 file_table_eq, NULL);
20994
20995   /* Allocate the decl_die_table.  */
20996   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20997                                     decl_die_table_eq, NULL);
20998
20999   /* Allocate the decl_loc_table.  */
21000   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
21001                                     decl_loc_table_eq, NULL);
21002
21003   /* Allocate the cached_dw_loc_list_table.  */
21004   cached_dw_loc_list_table
21005     = htab_create_ggc (10, cached_dw_loc_list_table_hash,
21006                        cached_dw_loc_list_table_eq, NULL);
21007
21008   /* Allocate the initial hunk of the decl_scope_table.  */
21009   decl_scope_table = VEC_alloc (tree, gc, 256);
21010
21011   /* Allocate the initial hunk of the abbrev_die_table.  */
21012   abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref
21013     (ABBREV_DIE_TABLE_INCREMENT);
21014   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
21015   /* Zero-th entry is allocated, but unused.  */
21016   abbrev_die_table_in_use = 1;
21017
21018   /* Allocate the pubtypes and pubnames vectors.  */
21019   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21020   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21021
21022   incomplete_types = VEC_alloc (tree, gc, 64);
21023
21024   used_rtx_array = VEC_alloc (rtx, gc, 32);
21025
21026   debug_info_section = get_section (DEBUG_INFO_SECTION,
21027                                     SECTION_DEBUG, NULL);
21028   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21029                                       SECTION_DEBUG, NULL);
21030   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21031                                        SECTION_DEBUG, NULL);
21032   debug_macinfo_section = get_section (dwarf_strict
21033                                        ? DEBUG_MACINFO_SECTION
21034                                        : DEBUG_MACRO_SECTION,
21035                                        SECTION_DEBUG, NULL);
21036   debug_line_section = get_section (DEBUG_LINE_SECTION,
21037                                     SECTION_DEBUG, NULL);
21038   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21039                                    SECTION_DEBUG, NULL);
21040   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21041                                         SECTION_DEBUG, NULL);
21042   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21043                                         SECTION_DEBUG, NULL);
21044   debug_str_section = get_section (DEBUG_STR_SECTION,
21045                                    DEBUG_STR_SECTION_FLAGS, NULL);
21046   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21047                                       SECTION_DEBUG, NULL);
21048   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21049                                      SECTION_DEBUG, NULL);
21050
21051   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21052   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21053                                DEBUG_ABBREV_SECTION_LABEL, 0);
21054   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21055   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21056                                COLD_TEXT_SECTION_LABEL, 0);
21057   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21058
21059   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21060                                DEBUG_INFO_SECTION_LABEL, 0);
21061   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21062                                DEBUG_LINE_SECTION_LABEL, 0);
21063   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21064                                DEBUG_RANGES_SECTION_LABEL, 0);
21065   ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21066                                dwarf_strict
21067                                ? DEBUG_MACINFO_SECTION_LABEL
21068                                : DEBUG_MACRO_SECTION_LABEL, 0);
21069
21070   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21071     macinfo_table = VEC_alloc (macinfo_entry, gc, 64);
21072
21073   switch_to_section (text_section);
21074   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21075
21076   /* Make sure the line number table for .text always exists.  */
21077   text_section_line_info = new_line_info_table ();
21078   text_section_line_info->end_label = text_end_label;
21079 }
21080
21081 /* Called before cgraph_optimize starts outputtting functions, variables
21082    and toplevel asms into assembly.  */
21083
21084 static void
21085 dwarf2out_assembly_start (void)
21086 {
21087   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
21088       && dwarf2out_do_cfi_asm ()
21089       && (!(flag_unwind_tables || flag_exceptions)
21090           || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
21091     fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21092 }
21093
21094 /* A helper function for dwarf2out_finish called through
21095    htab_traverse.  Emit one queued .debug_str string.  */
21096
21097 static int
21098 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21099 {
21100   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21101
21102   if (node->form == DW_FORM_strp)
21103     {
21104       switch_to_section (debug_str_section);
21105       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21106       assemble_string (node->str, strlen (node->str) + 1);
21107     }
21108
21109   return 1;
21110 }
21111
21112 #if ENABLE_ASSERT_CHECKING
21113 /* Verify that all marks are clear.  */
21114
21115 static void
21116 verify_marks_clear (dw_die_ref die)
21117 {
21118   dw_die_ref c;
21119
21120   gcc_assert (! die->die_mark);
21121   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21122 }
21123 #endif /* ENABLE_ASSERT_CHECKING */
21124
21125 /* Clear the marks for a die and its children.
21126    Be cool if the mark isn't set.  */
21127
21128 static void
21129 prune_unmark_dies (dw_die_ref die)
21130 {
21131   dw_die_ref c;
21132
21133   if (die->die_mark)
21134     die->die_mark = 0;
21135   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21136 }
21137
21138 /* Given DIE that we're marking as used, find any other dies
21139    it references as attributes and mark them as used.  */
21140
21141 static void
21142 prune_unused_types_walk_attribs (dw_die_ref die)
21143 {
21144   dw_attr_ref a;
21145   unsigned ix;
21146
21147   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21148     {
21149       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21150         {
21151           /* A reference to another DIE.
21152              Make sure that it will get emitted.
21153              If it was broken out into a comdat group, don't follow it.  */
21154           if (! use_debug_types
21155               || a->dw_attr == DW_AT_specification
21156               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21157             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21158         }
21159       /* Set the string's refcount to 0 so that prune_unused_types_mark
21160          accounts properly for it.  */
21161       if (AT_class (a) == dw_val_class_str)
21162         a->dw_attr_val.v.val_str->refcount = 0;
21163     }
21164 }
21165
21166 /* Mark the generic parameters and arguments children DIEs of DIE.  */
21167
21168 static void
21169 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
21170 {
21171   dw_die_ref c;
21172
21173   if (die == NULL || die->die_child == NULL)
21174     return;
21175   c = die->die_child;
21176   do
21177     {
21178       switch (c->die_tag)
21179         {
21180         case DW_TAG_template_type_param:
21181         case DW_TAG_template_value_param:
21182         case DW_TAG_GNU_template_template_param:
21183         case DW_TAG_GNU_template_parameter_pack:
21184           prune_unused_types_mark (c, 1);
21185           break;
21186         default:
21187           break;
21188         }
21189       c = c->die_sib;
21190     } while (c && c != die->die_child);
21191 }
21192
21193 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21194    to DIE's children.  */
21195
21196 static void
21197 prune_unused_types_mark (dw_die_ref die, int dokids)
21198 {
21199   dw_die_ref c;
21200
21201   if (die->die_mark == 0)
21202     {
21203       /* We haven't done this node yet.  Mark it as used.  */
21204       die->die_mark = 1;
21205       /* If this is the DIE of a generic type instantiation,
21206          mark the children DIEs that describe its generic parms and
21207          args.  */
21208       prune_unused_types_mark_generic_parms_dies (die);
21209
21210       /* We also have to mark its parents as used.
21211          (But we don't want to mark our parents' kids due to this.)  */
21212       if (die->die_parent)
21213         prune_unused_types_mark (die->die_parent, 0);
21214
21215       /* Mark any referenced nodes.  */
21216       prune_unused_types_walk_attribs (die);
21217
21218       /* If this node is a specification,
21219          also mark the definition, if it exists.  */
21220       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21221         prune_unused_types_mark (die->die_definition, 1);
21222     }
21223
21224   if (dokids && die->die_mark != 2)
21225     {
21226       /* We need to walk the children, but haven't done so yet.
21227          Remember that we've walked the kids.  */
21228       die->die_mark = 2;
21229
21230       /* If this is an array type, we need to make sure our
21231          kids get marked, even if they're types.  If we're
21232          breaking out types into comdat sections, do this
21233          for all type definitions.  */
21234       if (die->die_tag == DW_TAG_array_type
21235           || (use_debug_types
21236               && is_type_die (die) && ! is_declaration_die (die)))
21237         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21238       else
21239         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21240     }
21241 }
21242
21243 /* For local classes, look if any static member functions were emitted
21244    and if so, mark them.  */
21245
21246 static void
21247 prune_unused_types_walk_local_classes (dw_die_ref die)
21248 {
21249   dw_die_ref c;
21250
21251   if (die->die_mark == 2)
21252     return;
21253
21254   switch (die->die_tag)
21255     {
21256     case DW_TAG_structure_type:
21257     case DW_TAG_union_type:
21258     case DW_TAG_class_type:
21259       break;
21260
21261     case DW_TAG_subprogram:
21262       if (!get_AT_flag (die, DW_AT_declaration)
21263           || die->die_definition != NULL)
21264         prune_unused_types_mark (die, 1);
21265       return;
21266
21267     default:
21268       return;
21269     }
21270
21271   /* Mark children.  */
21272   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21273 }
21274
21275 /* Walk the tree DIE and mark types that we actually use.  */
21276
21277 static void
21278 prune_unused_types_walk (dw_die_ref die)
21279 {
21280   dw_die_ref c;
21281
21282   /* Don't do anything if this node is already marked and
21283      children have been marked as well.  */
21284   if (die->die_mark == 2)
21285     return;
21286
21287   switch (die->die_tag)
21288     {
21289     case DW_TAG_structure_type:
21290     case DW_TAG_union_type:
21291     case DW_TAG_class_type:
21292       if (die->die_perennial_p)
21293         break;
21294
21295       for (c = die->die_parent; c; c = c->die_parent)
21296         if (c->die_tag == DW_TAG_subprogram)
21297           break;
21298
21299       /* Finding used static member functions inside of classes
21300          is needed just for local classes, because for other classes
21301          static member function DIEs with DW_AT_specification
21302          are emitted outside of the DW_TAG_*_type.  If we ever change
21303          it, we'd need to call this even for non-local classes.  */
21304       if (c)
21305         prune_unused_types_walk_local_classes (die);
21306
21307       /* It's a type node --- don't mark it.  */
21308       return;
21309
21310     case DW_TAG_const_type:
21311     case DW_TAG_packed_type:
21312     case DW_TAG_pointer_type:
21313     case DW_TAG_reference_type:
21314     case DW_TAG_rvalue_reference_type:
21315     case DW_TAG_volatile_type:
21316     case DW_TAG_typedef:
21317     case DW_TAG_array_type:
21318     case DW_TAG_interface_type:
21319     case DW_TAG_friend:
21320     case DW_TAG_variant_part:
21321     case DW_TAG_enumeration_type:
21322     case DW_TAG_subroutine_type:
21323     case DW_TAG_string_type:
21324     case DW_TAG_set_type:
21325     case DW_TAG_subrange_type:
21326     case DW_TAG_ptr_to_member_type:
21327     case DW_TAG_file_type:
21328       if (die->die_perennial_p)
21329         break;
21330
21331       /* It's a type node --- don't mark it.  */
21332       return;
21333
21334     default:
21335       /* Mark everything else.  */
21336       break;
21337   }
21338
21339   if (die->die_mark == 0)
21340     {
21341       die->die_mark = 1;
21342
21343       /* Now, mark any dies referenced from here.  */
21344       prune_unused_types_walk_attribs (die);
21345     }
21346
21347   die->die_mark = 2;
21348
21349   /* Mark children.  */
21350   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21351 }
21352
21353 /* Increment the string counts on strings referred to from DIE's
21354    attributes.  */
21355
21356 static void
21357 prune_unused_types_update_strings (dw_die_ref die)
21358 {
21359   dw_attr_ref a;
21360   unsigned ix;
21361
21362   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21363     if (AT_class (a) == dw_val_class_str)
21364       {
21365         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21366         s->refcount++;
21367         /* Avoid unnecessarily putting strings that are used less than
21368            twice in the hash table.  */
21369         if (s->refcount
21370             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21371           {
21372             void ** slot;
21373             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21374                                              htab_hash_string (s->str),
21375                                              INSERT);
21376             gcc_assert (*slot == NULL);
21377             *slot = s;
21378           }
21379       }
21380 }
21381
21382 /* Remove from the tree DIE any dies that aren't marked.  */
21383
21384 static void
21385 prune_unused_types_prune (dw_die_ref die)
21386 {
21387   dw_die_ref c;
21388
21389   gcc_assert (die->die_mark);
21390   prune_unused_types_update_strings (die);
21391
21392   if (! die->die_child)
21393     return;
21394
21395   c = die->die_child;
21396   do {
21397     dw_die_ref prev = c;
21398     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21399       if (c == die->die_child)
21400         {
21401           /* No marked children between 'prev' and the end of the list.  */
21402           if (prev == c)
21403             /* No marked children at all.  */
21404             die->die_child = NULL;
21405           else
21406             {
21407               prev->die_sib = c->die_sib;
21408               die->die_child = prev;
21409             }
21410           return;
21411         }
21412
21413     if (c != prev->die_sib)
21414       prev->die_sib = c;
21415     prune_unused_types_prune (c);
21416   } while (c != die->die_child);
21417 }
21418
21419 /* Remove dies representing declarations that we never use.  */
21420
21421 static void
21422 prune_unused_types (void)
21423 {
21424   unsigned int i;
21425   limbo_die_node *node;
21426   comdat_type_node *ctnode;
21427   pubname_ref pub;
21428   dw_die_ref base_type;
21429
21430 #if ENABLE_ASSERT_CHECKING
21431   /* All the marks should already be clear.  */
21432   verify_marks_clear (comp_unit_die ());
21433   for (node = limbo_die_list; node; node = node->next)
21434     verify_marks_clear (node->die);
21435   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21436     verify_marks_clear (ctnode->root_die);
21437 #endif /* ENABLE_ASSERT_CHECKING */
21438
21439   /* Mark types that are used in global variables.  */
21440   premark_types_used_by_global_vars ();
21441
21442   /* Set the mark on nodes that are actually used.  */
21443   prune_unused_types_walk (comp_unit_die ());
21444   for (node = limbo_die_list; node; node = node->next)
21445     prune_unused_types_walk (node->die);
21446   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21447     {
21448       prune_unused_types_walk (ctnode->root_die);
21449       prune_unused_types_mark (ctnode->type_die, 1);
21450     }
21451
21452   /* Also set the mark on nodes referenced from the
21453      pubname_table.  */
21454   FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
21455     prune_unused_types_mark (pub->die, 1);
21456   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21457     prune_unused_types_mark (base_type, 1);
21458
21459   if (debug_str_hash)
21460     htab_empty (debug_str_hash);
21461   prune_unused_types_prune (comp_unit_die ());
21462   for (node = limbo_die_list; node; node = node->next)
21463     prune_unused_types_prune (node->die);
21464   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21465     prune_unused_types_prune (ctnode->root_die);
21466
21467   /* Leave the marks clear.  */
21468   prune_unmark_dies (comp_unit_die ());
21469   for (node = limbo_die_list; node; node = node->next)
21470     prune_unmark_dies (node->die);
21471   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21472     prune_unmark_dies (ctnode->root_die);
21473 }
21474
21475 /* Set the parameter to true if there are any relative pathnames in
21476    the file table.  */
21477 static int
21478 file_table_relative_p (void ** slot, void *param)
21479 {
21480   bool *p = (bool *) param;
21481   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21482   if (!IS_ABSOLUTE_PATH (d->filename))
21483     {
21484       *p = true;
21485       return 0;
21486     }
21487   return 1;
21488 }
21489
21490 /* Routines to manipulate hash table of comdat type units.  */
21491
21492 static hashval_t
21493 htab_ct_hash (const void *of)
21494 {
21495   hashval_t h;
21496   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21497
21498   memcpy (&h, type_node->signature, sizeof (h));
21499   return h;
21500 }
21501
21502 static int
21503 htab_ct_eq (const void *of1, const void *of2)
21504 {
21505   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21506   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21507
21508   return (! memcmp (type_node_1->signature, type_node_2->signature,
21509                     DWARF_TYPE_SIGNATURE_SIZE));
21510 }
21511
21512 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21513    to the location it would have been added, should we know its
21514    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21515    probably improve compactness of debug info, removing equivalent
21516    abbrevs, and hide any differences caused by deferring the
21517    computation of the assembler name, triggered by e.g. PCH.  */
21518
21519 static inline void
21520 move_linkage_attr (dw_die_ref die)
21521 {
21522   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21523   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21524
21525   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
21526               || linkage.dw_attr == DW_AT_MIPS_linkage_name);
21527
21528   while (--ix > 0)
21529     {
21530       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21531
21532       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21533         break;
21534     }
21535
21536   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21537     {
21538       VEC_pop (dw_attr_node, die->die_attr);
21539       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21540     }
21541 }
21542
21543 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
21544    referenced from typed stack ops and count how often they are used.  */
21545
21546 static void
21547 mark_base_types (dw_loc_descr_ref loc)
21548 {
21549   dw_die_ref base_type = NULL;
21550
21551   for (; loc; loc = loc->dw_loc_next)
21552     {
21553       switch (loc->dw_loc_opc)
21554         {
21555         case DW_OP_GNU_regval_type:
21556         case DW_OP_GNU_deref_type:
21557           base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
21558           break;
21559         case DW_OP_GNU_convert:
21560         case DW_OP_GNU_reinterpret:
21561           if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
21562             continue;
21563           /* FALLTHRU */
21564         case DW_OP_GNU_const_type:
21565           base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
21566           break;
21567         case DW_OP_GNU_entry_value:
21568           mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
21569           continue;
21570         default:
21571           continue;
21572         }
21573       gcc_assert (base_type->die_parent == comp_unit_die ());
21574       if (base_type->die_mark)
21575         base_type->die_mark++;
21576       else
21577         {
21578           VEC_safe_push (dw_die_ref, heap, base_types, base_type);
21579           base_type->die_mark = 1;
21580         }
21581     }
21582 }
21583
21584 /* Comparison function for sorting marked base types.  */
21585
21586 static int
21587 base_type_cmp (const void *x, const void *y)
21588 {
21589   dw_die_ref dx = *(const dw_die_ref *) x;
21590   dw_die_ref dy = *(const dw_die_ref *) y;
21591   unsigned int byte_size1, byte_size2;
21592   unsigned int encoding1, encoding2;
21593   if (dx->die_mark > dy->die_mark)
21594     return -1;
21595   if (dx->die_mark < dy->die_mark)
21596     return 1;
21597   byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
21598   byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
21599   if (byte_size1 < byte_size2)
21600     return 1;
21601   if (byte_size1 > byte_size2)
21602     return -1;
21603   encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
21604   encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
21605   if (encoding1 < encoding2)
21606     return 1;
21607   if (encoding1 > encoding2)
21608     return -1;
21609   return 0;
21610 }
21611
21612 /* Move base types marked by mark_base_types as early as possible
21613    in the CU, sorted by decreasing usage count both to make the
21614    uleb128 references as small as possible and to make sure they
21615    will have die_offset already computed by calc_die_sizes when
21616    sizes of typed stack loc ops is computed.  */
21617
21618 static void
21619 move_marked_base_types (void)
21620 {
21621   unsigned int i;
21622   dw_die_ref base_type, die, c;
21623
21624   if (VEC_empty (dw_die_ref, base_types))
21625     return;
21626
21627   /* Sort by decreasing usage count, they will be added again in that
21628      order later on.  */
21629   VEC_qsort (dw_die_ref, base_types, base_type_cmp);
21630   die = comp_unit_die ();
21631   c = die->die_child;
21632   do
21633     {
21634       dw_die_ref prev = c;
21635       c = c->die_sib;
21636       while (c->die_mark)
21637         {
21638           remove_child_with_prev (c, prev);
21639           /* As base types got marked, there must be at least
21640              one node other than DW_TAG_base_type.  */
21641           gcc_assert (c != c->die_sib);
21642           c = c->die_sib;
21643         }
21644     }
21645   while (c != die->die_child);
21646   gcc_assert (die->die_child);
21647   c = die->die_child;
21648   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21649     {
21650       base_type->die_mark = 0;
21651       base_type->die_sib = c->die_sib;
21652       c->die_sib = base_type;
21653       c = base_type;
21654     }
21655 }
21656
21657 /* Helper function for resolve_addr, attempt to resolve
21658    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21659    SYMBOL_REFs refer to variables emitted in the current CU.  */
21660
21661 static int
21662 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21663 {
21664   rtx rtl = *addr;
21665
21666   if (GET_CODE (rtl) == CONST_STRING)
21667     {
21668       size_t len = strlen (XSTR (rtl, 0)) + 1;
21669       tree t = build_string (len, XSTR (rtl, 0));
21670       tree tlen = size_int (len - 1);
21671       TREE_TYPE (t)
21672         = build_array_type (char_type_node, build_index_type (tlen));
21673       rtl = lookup_constant_def (t);
21674       if (!rtl || !MEM_P (rtl))
21675         return 1;
21676       rtl = XEXP (rtl, 0);
21677       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21678       *addr = rtl;
21679       return 0;
21680     }
21681
21682   if (GET_CODE (rtl) == SYMBOL_REF
21683       && SYMBOL_REF_DECL (rtl))
21684     {
21685       if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
21686         {
21687           if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
21688             return 1;
21689         }
21690       else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21691         return 1;
21692     }
21693
21694   if (GET_CODE (rtl) == CONST
21695       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21696     return 1;
21697
21698   return 0;
21699 }
21700
21701 /* Helper function for resolve_addr, handle one location
21702    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21703    the location list couldn't be resolved.  */
21704
21705 static bool
21706 resolve_addr_in_expr (dw_loc_descr_ref loc)
21707 {
21708   dw_loc_descr_ref keep = NULL;
21709   for (; loc; loc = loc->dw_loc_next)
21710     switch (loc->dw_loc_opc)
21711       {
21712       case DW_OP_addr:
21713         if (resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21714           return false;
21715         break;
21716       case DW_OP_const4u:
21717       case DW_OP_const8u:
21718         if (loc->dtprel
21719             && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21720           return false;
21721         break;
21722       case DW_OP_plus_uconst:
21723         if (size_of_loc_descr (loc)
21724             > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
21725               + 1
21726             && loc->dw_loc_oprnd1.v.val_unsigned > 0)
21727           {
21728             dw_loc_descr_ref repl
21729               = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
21730             add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
21731             add_loc_descr (&repl, loc->dw_loc_next);
21732             *loc = *repl;
21733           }
21734         break;
21735       case DW_OP_implicit_value:
21736         if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21737             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL))
21738           return false;
21739         break;
21740       case DW_OP_GNU_implicit_pointer:
21741       case DW_OP_GNU_parameter_ref:
21742         if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
21743           {
21744             dw_die_ref ref
21745               = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
21746             if (ref == NULL)
21747               return false;
21748             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
21749             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
21750             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
21751           }
21752         break;
21753       case DW_OP_GNU_const_type:
21754       case DW_OP_GNU_regval_type:
21755       case DW_OP_GNU_deref_type:
21756       case DW_OP_GNU_convert:
21757       case DW_OP_GNU_reinterpret:
21758         while (loc->dw_loc_next
21759                && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
21760           {
21761             dw_die_ref base1, base2;
21762             unsigned enc1, enc2, size1, size2;
21763             if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21764                 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21765               base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
21766             else if (loc->dw_loc_oprnd1.val_class
21767                      == dw_val_class_unsigned_const)
21768               break;
21769             else
21770               base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
21771             if (loc->dw_loc_next->dw_loc_oprnd1.val_class
21772                 == dw_val_class_unsigned_const)
21773               break;
21774             base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
21775             gcc_assert (base1->die_tag == DW_TAG_base_type
21776                         && base2->die_tag == DW_TAG_base_type);
21777             enc1 = get_AT_unsigned (base1, DW_AT_encoding);
21778             enc2 = get_AT_unsigned (base2, DW_AT_encoding);
21779             size1 = get_AT_unsigned (base1, DW_AT_byte_size);
21780             size2 = get_AT_unsigned (base2, DW_AT_byte_size);
21781             if (size1 == size2
21782                 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
21783                      && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
21784                      && loc != keep)
21785                     || enc1 == enc2))
21786               {
21787                 /* Optimize away next DW_OP_GNU_convert after
21788                    adjusting LOC's base type die reference.  */
21789                 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21790                     || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21791                   loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
21792                 else
21793                   loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
21794                 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
21795                 continue;
21796               }
21797             /* Don't change integer DW_OP_GNU_convert after e.g. floating
21798                point typed stack entry.  */
21799             else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
21800               keep = loc->dw_loc_next;
21801             break;
21802           }
21803         break;
21804       default:
21805         break;
21806       }
21807   return true;
21808 }
21809
21810 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21811    an address in .rodata section if the string literal is emitted there,
21812    or remove the containing location list or replace DW_AT_const_value
21813    with DW_AT_location and empty location expression, if it isn't found
21814    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21815    to something that has been emitted in the current CU.  */
21816
21817 static void
21818 resolve_addr (dw_die_ref die)
21819 {
21820   dw_die_ref c;
21821   dw_attr_ref a;
21822   dw_loc_list_ref *curr, *start, loc;
21823   unsigned ix;
21824
21825   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21826     switch (AT_class (a))
21827       {
21828       case dw_val_class_loc_list:
21829         start = curr = AT_loc_list_ptr (a);
21830         loc = *curr;
21831         gcc_assert (loc);
21832         /* The same list can be referenced more than once.  See if we have
21833            already recorded the result from a previous pass.  */
21834         if (loc->replaced)
21835           *curr = loc->dw_loc_next;
21836         else if (!loc->resolved_addr)
21837           {
21838             /* As things stand, we do not expect or allow one die to
21839                reference a suffix of another die's location list chain.
21840                References must be identical or completely separate.
21841                There is therefore no need to cache the result of this
21842                pass on any list other than the first; doing so
21843                would lead to unnecessary writes.  */
21844             while (*curr)
21845               {
21846                 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
21847                 if (!resolve_addr_in_expr ((*curr)->expr))
21848                   {
21849                     dw_loc_list_ref next = (*curr)->dw_loc_next;
21850                     if (next && (*curr)->ll_symbol)
21851                       {
21852                         gcc_assert (!next->ll_symbol);
21853                         next->ll_symbol = (*curr)->ll_symbol;
21854                       }
21855                     *curr = next;
21856                   }
21857                 else
21858                   {
21859                     mark_base_types ((*curr)->expr);
21860                     curr = &(*curr)->dw_loc_next;
21861                   }
21862               }
21863             if (loc == *start)
21864               loc->resolved_addr = 1;
21865             else
21866               {
21867                 loc->replaced = 1;
21868                 loc->dw_loc_next = *start;
21869               }
21870           }
21871         if (!*start)
21872           {
21873             remove_AT (die, a->dw_attr);
21874             ix--;
21875           }
21876         break;
21877       case dw_val_class_loc:
21878         {
21879           dw_loc_descr_ref l = AT_loc (a);
21880           /* For -gdwarf-2 don't attempt to optimize
21881              DW_AT_data_member_location containing
21882              DW_OP_plus_uconst - older consumers might
21883              rely on it being that op instead of a more complex,
21884              but shorter, location description.  */
21885           if ((dwarf_version > 2
21886                || a->dw_attr != DW_AT_data_member_location
21887                || l == NULL
21888                || l->dw_loc_opc != DW_OP_plus_uconst
21889                || l->dw_loc_next != NULL)
21890               && !resolve_addr_in_expr (l))
21891             {
21892               remove_AT (die, a->dw_attr);
21893               ix--;
21894             }
21895           else
21896             mark_base_types (l);
21897         }
21898         break;
21899       case dw_val_class_addr:
21900         if (a->dw_attr == DW_AT_const_value
21901             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21902           {
21903             remove_AT (die, a->dw_attr);
21904             ix--;
21905           }
21906         if (die->die_tag == DW_TAG_GNU_call_site
21907             && a->dw_attr == DW_AT_abstract_origin)
21908           {
21909             tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
21910             dw_die_ref tdie = lookup_decl_die (tdecl);
21911             if (tdie == NULL
21912                 && DECL_EXTERNAL (tdecl)
21913                 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
21914               {
21915                 force_decl_die (tdecl);
21916                 tdie = lookup_decl_die (tdecl);
21917               }
21918             if (tdie)
21919               {
21920                 a->dw_attr_val.val_class = dw_val_class_die_ref;
21921                 a->dw_attr_val.v.val_die_ref.die = tdie;
21922                 a->dw_attr_val.v.val_die_ref.external = 0;
21923               }
21924             else
21925               {
21926                 remove_AT (die, a->dw_attr);
21927                 ix--;
21928               }
21929           }
21930         break;
21931       default:
21932         break;
21933       }
21934
21935   FOR_EACH_CHILD (die, c, resolve_addr (c));
21936 }
21937 \f
21938 /* Helper routines for optimize_location_lists.
21939    This pass tries to share identical local lists in .debug_loc
21940    section.  */
21941
21942 /* Iteratively hash operands of LOC opcode.  */
21943
21944 static inline hashval_t
21945 hash_loc_operands (dw_loc_descr_ref loc, hashval_t hash)
21946 {
21947   dw_val_ref val1 = &loc->dw_loc_oprnd1;
21948   dw_val_ref val2 = &loc->dw_loc_oprnd2;
21949
21950   switch (loc->dw_loc_opc)
21951     {
21952     case DW_OP_const4u:
21953     case DW_OP_const8u:
21954       if (loc->dtprel)
21955         goto hash_addr;
21956       /* FALLTHRU */
21957     case DW_OP_const1u:
21958     case DW_OP_const1s:
21959     case DW_OP_const2u:
21960     case DW_OP_const2s:
21961     case DW_OP_const4s:
21962     case DW_OP_const8s:
21963     case DW_OP_constu:
21964     case DW_OP_consts:
21965     case DW_OP_pick:
21966     case DW_OP_plus_uconst:
21967     case DW_OP_breg0:
21968     case DW_OP_breg1:
21969     case DW_OP_breg2:
21970     case DW_OP_breg3:
21971     case DW_OP_breg4:
21972     case DW_OP_breg5:
21973     case DW_OP_breg6:
21974     case DW_OP_breg7:
21975     case DW_OP_breg8:
21976     case DW_OP_breg9:
21977     case DW_OP_breg10:
21978     case DW_OP_breg11:
21979     case DW_OP_breg12:
21980     case DW_OP_breg13:
21981     case DW_OP_breg14:
21982     case DW_OP_breg15:
21983     case DW_OP_breg16:
21984     case DW_OP_breg17:
21985     case DW_OP_breg18:
21986     case DW_OP_breg19:
21987     case DW_OP_breg20:
21988     case DW_OP_breg21:
21989     case DW_OP_breg22:
21990     case DW_OP_breg23:
21991     case DW_OP_breg24:
21992     case DW_OP_breg25:
21993     case DW_OP_breg26:
21994     case DW_OP_breg27:
21995     case DW_OP_breg28:
21996     case DW_OP_breg29:
21997     case DW_OP_breg30:
21998     case DW_OP_breg31:
21999     case DW_OP_regx:
22000     case DW_OP_fbreg:
22001     case DW_OP_piece:
22002     case DW_OP_deref_size:
22003     case DW_OP_xderef_size:
22004       hash = iterative_hash_object (val1->v.val_int, hash);
22005       break;
22006     case DW_OP_skip:
22007     case DW_OP_bra:
22008       {
22009         int offset;
22010
22011         gcc_assert (val1->val_class == dw_val_class_loc);
22012         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
22013         hash = iterative_hash_object (offset, hash);
22014       }
22015       break;
22016     case DW_OP_implicit_value:
22017       hash = iterative_hash_object (val1->v.val_unsigned, hash);
22018       switch (val2->val_class)
22019         {
22020         case dw_val_class_const:
22021           hash = iterative_hash_object (val2->v.val_int, hash);
22022           break;
22023         case dw_val_class_vec:
22024           {
22025             unsigned int elt_size = val2->v.val_vec.elt_size;
22026             unsigned int len = val2->v.val_vec.length;
22027
22028             hash = iterative_hash_object (elt_size, hash);
22029             hash = iterative_hash_object (len, hash);
22030             hash = iterative_hash (val2->v.val_vec.array,
22031                                    len * elt_size, hash);
22032           }
22033           break;
22034         case dw_val_class_const_double:
22035           hash = iterative_hash_object (val2->v.val_double.low, hash);
22036           hash = iterative_hash_object (val2->v.val_double.high, hash);
22037           break;
22038         case dw_val_class_addr:
22039           hash = iterative_hash_rtx (val2->v.val_addr, hash);
22040           break;
22041         default:
22042           gcc_unreachable ();
22043         }
22044       break;
22045     case DW_OP_bregx:
22046     case DW_OP_bit_piece:
22047       hash = iterative_hash_object (val1->v.val_int, hash);
22048       hash = iterative_hash_object (val2->v.val_int, hash);
22049       break;
22050     case DW_OP_addr:
22051     hash_addr:
22052       if (loc->dtprel)
22053         {
22054           unsigned char dtprel = 0xd1;
22055           hash = iterative_hash_object (dtprel, hash);
22056         }
22057       hash = iterative_hash_rtx (val1->v.val_addr, hash);
22058       break;
22059     case DW_OP_GNU_implicit_pointer:
22060       hash = iterative_hash_object (val2->v.val_int, hash);
22061       break;
22062     case DW_OP_GNU_entry_value:
22063       hash = hash_loc_operands (val1->v.val_loc, hash);
22064       break;
22065     case DW_OP_GNU_regval_type:
22066     case DW_OP_GNU_deref_type:
22067       {
22068         unsigned int byte_size
22069           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
22070         unsigned int encoding
22071           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
22072         hash = iterative_hash_object (val1->v.val_int, hash);
22073         hash = iterative_hash_object (byte_size, hash);
22074         hash = iterative_hash_object (encoding, hash);
22075       }
22076       break;
22077     case DW_OP_GNU_convert:
22078     case DW_OP_GNU_reinterpret:
22079       if (val1->val_class == dw_val_class_unsigned_const)
22080         {
22081           hash = iterative_hash_object (val1->v.val_unsigned, hash);
22082           break;
22083         }
22084       /* FALLTHRU */
22085     case DW_OP_GNU_const_type:
22086       {
22087         unsigned int byte_size
22088           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
22089         unsigned int encoding
22090           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
22091         hash = iterative_hash_object (byte_size, hash);
22092         hash = iterative_hash_object (encoding, hash);
22093         if (loc->dw_loc_opc != DW_OP_GNU_const_type)
22094           break;
22095         hash = iterative_hash_object (val2->val_class, hash);
22096         switch (val2->val_class)
22097           {
22098           case dw_val_class_const:
22099             hash = iterative_hash_object (val2->v.val_int, hash);
22100             break;
22101           case dw_val_class_vec:
22102             {
22103               unsigned int elt_size = val2->v.val_vec.elt_size;
22104               unsigned int len = val2->v.val_vec.length;
22105
22106               hash = iterative_hash_object (elt_size, hash);
22107               hash = iterative_hash_object (len, hash);
22108               hash = iterative_hash (val2->v.val_vec.array,
22109                                      len * elt_size, hash);
22110             }
22111             break;
22112           case dw_val_class_const_double:
22113             hash = iterative_hash_object (val2->v.val_double.low, hash);
22114             hash = iterative_hash_object (val2->v.val_double.high, hash);
22115             break;
22116           default:
22117             gcc_unreachable ();
22118           }
22119       }
22120       break;
22121
22122     default:
22123       /* Other codes have no operands.  */
22124       break;
22125     }
22126   return hash;
22127 }
22128
22129 /* Iteratively hash the whole DWARF location expression LOC.  */
22130
22131 static inline hashval_t
22132 hash_locs (dw_loc_descr_ref loc, hashval_t hash)
22133 {
22134   dw_loc_descr_ref l;
22135   bool sizes_computed = false;
22136   /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed.  */
22137   size_of_locs (loc);
22138
22139   for (l = loc; l != NULL; l = l->dw_loc_next)
22140     {
22141       enum dwarf_location_atom opc = l->dw_loc_opc;
22142       hash = iterative_hash_object (opc, hash);
22143       if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
22144         {
22145           size_of_locs (loc);
22146           sizes_computed = true;
22147         }
22148       hash = hash_loc_operands (l, hash);
22149     }
22150   return hash;
22151 }
22152
22153 /* Compute hash of the whole location list LIST_HEAD.  */
22154
22155 static inline void
22156 hash_loc_list (dw_loc_list_ref list_head)
22157 {
22158   dw_loc_list_ref curr = list_head;
22159   hashval_t hash = 0;
22160
22161   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
22162     {
22163       hash = iterative_hash (curr->begin, strlen (curr->begin) + 1, hash);
22164       hash = iterative_hash (curr->end, strlen (curr->end) + 1, hash);
22165       if (curr->section)
22166         hash = iterative_hash (curr->section, strlen (curr->section) + 1,
22167                                hash);
22168       hash = hash_locs (curr->expr, hash);
22169     }
22170   list_head->hash = hash;
22171 }
22172
22173 /* Return true if X and Y opcodes have the same operands.  */
22174
22175 static inline bool
22176 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
22177 {
22178   dw_val_ref valx1 = &x->dw_loc_oprnd1;
22179   dw_val_ref valx2 = &x->dw_loc_oprnd2;
22180   dw_val_ref valy1 = &y->dw_loc_oprnd1;
22181   dw_val_ref valy2 = &y->dw_loc_oprnd2;
22182
22183   switch (x->dw_loc_opc)
22184     {
22185     case DW_OP_const4u:
22186     case DW_OP_const8u:
22187       if (x->dtprel)
22188         goto hash_addr;
22189       /* FALLTHRU */
22190     case DW_OP_const1u:
22191     case DW_OP_const1s:
22192     case DW_OP_const2u:
22193     case DW_OP_const2s:
22194     case DW_OP_const4s:
22195     case DW_OP_const8s:
22196     case DW_OP_constu:
22197     case DW_OP_consts:
22198     case DW_OP_pick:
22199     case DW_OP_plus_uconst:
22200     case DW_OP_breg0:
22201     case DW_OP_breg1:
22202     case DW_OP_breg2:
22203     case DW_OP_breg3:
22204     case DW_OP_breg4:
22205     case DW_OP_breg5:
22206     case DW_OP_breg6:
22207     case DW_OP_breg7:
22208     case DW_OP_breg8:
22209     case DW_OP_breg9:
22210     case DW_OP_breg10:
22211     case DW_OP_breg11:
22212     case DW_OP_breg12:
22213     case DW_OP_breg13:
22214     case DW_OP_breg14:
22215     case DW_OP_breg15:
22216     case DW_OP_breg16:
22217     case DW_OP_breg17:
22218     case DW_OP_breg18:
22219     case DW_OP_breg19:
22220     case DW_OP_breg20:
22221     case DW_OP_breg21:
22222     case DW_OP_breg22:
22223     case DW_OP_breg23:
22224     case DW_OP_breg24:
22225     case DW_OP_breg25:
22226     case DW_OP_breg26:
22227     case DW_OP_breg27:
22228     case DW_OP_breg28:
22229     case DW_OP_breg29:
22230     case DW_OP_breg30:
22231     case DW_OP_breg31:
22232     case DW_OP_regx:
22233     case DW_OP_fbreg:
22234     case DW_OP_piece:
22235     case DW_OP_deref_size:
22236     case DW_OP_xderef_size:
22237       return valx1->v.val_int == valy1->v.val_int;
22238     case DW_OP_skip:
22239     case DW_OP_bra:
22240       gcc_assert (valx1->val_class == dw_val_class_loc
22241                   && valy1->val_class == dw_val_class_loc
22242                   && x->dw_loc_addr == y->dw_loc_addr);
22243       return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
22244     case DW_OP_implicit_value:
22245       if (valx1->v.val_unsigned != valy1->v.val_unsigned
22246           || valx2->val_class != valy2->val_class)
22247         return false;
22248       switch (valx2->val_class)
22249         {
22250         case dw_val_class_const:
22251           return valx2->v.val_int == valy2->v.val_int;
22252         case dw_val_class_vec:
22253           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22254                  && valx2->v.val_vec.length == valy2->v.val_vec.length
22255                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22256                             valx2->v.val_vec.elt_size
22257                             * valx2->v.val_vec.length) == 0;
22258         case dw_val_class_const_double:
22259           return valx2->v.val_double.low == valy2->v.val_double.low
22260                  && valx2->v.val_double.high == valy2->v.val_double.high;
22261         case dw_val_class_addr:
22262           return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
22263         default:
22264           gcc_unreachable ();
22265         }
22266     case DW_OP_bregx:
22267     case DW_OP_bit_piece:
22268       return valx1->v.val_int == valy1->v.val_int
22269              && valx2->v.val_int == valy2->v.val_int;
22270     case DW_OP_addr:
22271     hash_addr:
22272       return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
22273     case DW_OP_GNU_implicit_pointer:
22274       return valx1->val_class == dw_val_class_die_ref
22275              && valx1->val_class == valy1->val_class
22276              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
22277              && valx2->v.val_int == valy2->v.val_int;
22278     case DW_OP_GNU_entry_value:
22279       return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
22280     case DW_OP_GNU_const_type:
22281       if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
22282           || valx2->val_class != valy2->val_class)
22283         return false;
22284       switch (valx2->val_class)
22285         {
22286         case dw_val_class_const:
22287           return valx2->v.val_int == valy2->v.val_int;
22288         case dw_val_class_vec:
22289           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22290                  && valx2->v.val_vec.length == valy2->v.val_vec.length
22291                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22292                             valx2->v.val_vec.elt_size
22293                             * valx2->v.val_vec.length) == 0;
22294         case dw_val_class_const_double:
22295           return valx2->v.val_double.low == valy2->v.val_double.low
22296                  && valx2->v.val_double.high == valy2->v.val_double.high;
22297         default:
22298           gcc_unreachable ();
22299         }
22300     case DW_OP_GNU_regval_type:
22301     case DW_OP_GNU_deref_type:
22302       return valx1->v.val_int == valy1->v.val_int
22303              && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
22304     case DW_OP_GNU_convert:
22305     case DW_OP_GNU_reinterpret:
22306       if (valx1->val_class != valy1->val_class)
22307         return false;
22308       if (valx1->val_class == dw_val_class_unsigned_const)
22309         return valx1->v.val_unsigned == valy1->v.val_unsigned;
22310       return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22311     case DW_OP_GNU_parameter_ref:
22312       return valx1->val_class == dw_val_class_die_ref
22313              && valx1->val_class == valy1->val_class
22314              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22315     default:
22316       /* Other codes have no operands.  */
22317       return true;
22318     }
22319 }
22320
22321 /* Return true if DWARF location expressions X and Y are the same.  */
22322
22323 static inline bool
22324 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
22325 {
22326   for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
22327     if (x->dw_loc_opc != y->dw_loc_opc
22328         || x->dtprel != y->dtprel
22329         || !compare_loc_operands (x, y))
22330       break;
22331   return x == NULL && y == NULL;
22332 }
22333
22334 /* Return precomputed hash of location list X.  */
22335
22336 static hashval_t
22337 loc_list_hash (const void *x)
22338 {
22339   return ((const struct dw_loc_list_struct *) x)->hash;
22340 }
22341
22342 /* Return 1 if location lists X and Y are the same.  */
22343
22344 static int
22345 loc_list_eq (const void *x, const void *y)
22346 {
22347   const struct dw_loc_list_struct *a = (const struct dw_loc_list_struct *) x;
22348   const struct dw_loc_list_struct *b = (const struct dw_loc_list_struct *) y;
22349   if (a == b)
22350     return 1;
22351   if (a->hash != b->hash)
22352     return 0;
22353   for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
22354     if (strcmp (a->begin, b->begin) != 0
22355         || strcmp (a->end, b->end) != 0
22356         || (a->section == NULL) != (b->section == NULL)
22357         || (a->section && strcmp (a->section, b->section) != 0)
22358         || !compare_locs (a->expr, b->expr))
22359       break;
22360   return a == NULL && b == NULL;
22361 }
22362
22363 /* Recursively optimize location lists referenced from DIE
22364    children and share them whenever possible.  */
22365
22366 static void
22367 optimize_location_lists_1 (dw_die_ref die, htab_t htab)
22368 {
22369   dw_die_ref c;
22370   dw_attr_ref a;
22371   unsigned ix;
22372   void **slot;
22373
22374   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
22375     if (AT_class (a) == dw_val_class_loc_list)
22376       {
22377         dw_loc_list_ref list = AT_loc_list (a);
22378         /* TODO: perform some optimizations here, before hashing
22379            it and storing into the hash table.  */
22380         hash_loc_list (list);
22381         slot = htab_find_slot_with_hash (htab, list, list->hash,
22382                                          INSERT);
22383         if (*slot == NULL)
22384           *slot = (void *) list;
22385         else
22386           a->dw_attr_val.v.val_loc_list = (dw_loc_list_ref) *slot;
22387       }
22388
22389   FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
22390 }
22391
22392 /* Optimize location lists referenced from DIE
22393    children and share them whenever possible.  */
22394
22395 static void
22396 optimize_location_lists (dw_die_ref die)
22397 {
22398   htab_t htab = htab_create (500, loc_list_hash, loc_list_eq, NULL);
22399   optimize_location_lists_1 (die, htab);
22400   htab_delete (htab);
22401 }
22402 \f
22403 /* Output stuff that dwarf requires at the end of every file,
22404    and generate the DWARF-2 debugging info.  */
22405
22406 static void
22407 dwarf2out_finish (const char *filename)
22408 {
22409   limbo_die_node *node, *next_node;
22410   comdat_type_node *ctnode;
22411   htab_t comdat_type_table;
22412   unsigned int i;
22413
22414   /* PCH might result in DW_AT_producer string being restored from the
22415      header compilation, fix it up if needed.  */
22416   dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
22417   if (strcmp (AT_string (producer), producer_string) != 0)
22418     {
22419       struct indirect_string_node *node = find_AT_string (producer_string);
22420       producer->dw_attr_val.v.val_str = node;
22421     }
22422
22423   gen_scheduled_generic_parms_dies ();
22424   gen_remaining_tmpl_value_param_die_attribute ();
22425
22426   /* Add the name for the main input file now.  We delayed this from
22427      dwarf2out_init to avoid complications with PCH.  */
22428   add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
22429   if (!IS_ABSOLUTE_PATH (filename))
22430     add_comp_dir_attribute (comp_unit_die ());
22431   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
22432     {
22433       bool p = false;
22434       htab_traverse (file_table, file_table_relative_p, &p);
22435       if (p)
22436         add_comp_dir_attribute (comp_unit_die ());
22437     }
22438
22439   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
22440     {
22441       add_location_or_const_value_attribute (
22442         VEC_index (deferred_locations, deferred_locations_list, i)->die,
22443         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
22444         false,
22445         DW_AT_location);
22446     }
22447
22448   /* Traverse the limbo die list, and add parent/child links.  The only
22449      dies without parents that should be here are concrete instances of
22450      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
22451      For concrete instances, we can get the parent die from the abstract
22452      instance.  */
22453   for (node = limbo_die_list; node; node = next_node)
22454     {
22455       dw_die_ref die = node->die;
22456       next_node = node->next;
22457
22458       if (die->die_parent == NULL)
22459         {
22460           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
22461
22462           if (origin && origin->die_parent)
22463             add_child_die (origin->die_parent, die);
22464           else if (is_cu_die (die))
22465             ;
22466           else if (seen_error ())
22467             /* It's OK to be confused by errors in the input.  */
22468             add_child_die (comp_unit_die (), die);
22469           else
22470             {
22471               /* In certain situations, the lexical block containing a
22472                  nested function can be optimized away, which results
22473                  in the nested function die being orphaned.  Likewise
22474                  with the return type of that nested function.  Force
22475                  this to be a child of the containing function.
22476
22477                  It may happen that even the containing function got fully
22478                  inlined and optimized out.  In that case we are lost and
22479                  assign the empty child.  This should not be big issue as
22480                  the function is likely unreachable too.  */
22481               tree context = NULL_TREE;
22482
22483               gcc_assert (node->created_for);
22484
22485               if (DECL_P (node->created_for))
22486                 context = DECL_CONTEXT (node->created_for);
22487               else if (TYPE_P (node->created_for))
22488                 context = TYPE_CONTEXT (node->created_for);
22489
22490               origin = get_context_die (context);
22491               add_child_die (origin, die);
22492             }
22493         }
22494     }
22495
22496   limbo_die_list = NULL;
22497
22498 #if ENABLE_ASSERT_CHECKING
22499   {
22500     dw_die_ref die = comp_unit_die (), c;
22501     FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
22502   }
22503 #endif
22504   resolve_addr (comp_unit_die ());
22505   move_marked_base_types ();
22506
22507   for (node = deferred_asm_name; node; node = node->next)
22508     {
22509       tree decl = node->created_for;
22510       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
22511         {
22512           add_linkage_attr (node->die, decl);
22513           move_linkage_attr (node->die);
22514         }
22515     }
22516
22517   deferred_asm_name = NULL;
22518
22519   /* Walk through the list of incomplete types again, trying once more to
22520      emit full debugging info for them.  */
22521   retry_incomplete_types ();
22522
22523   if (flag_eliminate_unused_debug_types)
22524     prune_unused_types ();
22525
22526   /* Generate separate CUs for each of the include files we've seen.
22527      They will go into limbo_die_list.  */
22528   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
22529     break_out_includes (comp_unit_die ());
22530
22531   /* Generate separate COMDAT sections for type DIEs. */
22532   if (use_debug_types)
22533     {
22534       break_out_comdat_types (comp_unit_die ());
22535
22536       /* Each new type_unit DIE was added to the limbo die list when created.
22537          Since these have all been added to comdat_type_list, clear the
22538          limbo die list.  */
22539       limbo_die_list = NULL;
22540
22541       /* For each new comdat type unit, copy declarations for incomplete
22542          types to make the new unit self-contained (i.e., no direct
22543          references to the main compile unit).  */
22544       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22545         copy_decls_for_unworthy_types (ctnode->root_die);
22546       copy_decls_for_unworthy_types (comp_unit_die ());
22547
22548       /* In the process of copying declarations from one unit to another,
22549          we may have left some declarations behind that are no longer
22550          referenced.  Prune them.  */
22551       prune_unused_types ();
22552     }
22553
22554   /* Traverse the DIE's and add add sibling attributes to those DIE's
22555      that have children.  */
22556   add_sibling_attributes (comp_unit_die ());
22557   for (node = limbo_die_list; node; node = node->next)
22558     add_sibling_attributes (node->die);
22559   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22560     add_sibling_attributes (ctnode->root_die);
22561
22562   /* Output a terminator label for the .text section.  */
22563   switch_to_section (text_section);
22564   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22565   if (cold_text_section)
22566     {
22567       switch_to_section (cold_text_section);
22568       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22569     }
22570
22571   /* We can only use the low/high_pc attributes if all of the code was
22572      in .text.  */
22573   if (!have_multiple_function_sections 
22574       || (dwarf_version < 3 && dwarf_strict))
22575     {
22576       /* Don't add if the CU has no associated code.  */
22577       if (text_section_used)
22578         {
22579           add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label);
22580           add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
22581         }
22582     }
22583   else
22584     {
22585       unsigned fde_idx;
22586       dw_fde_ref fde;
22587       bool range_list_added = false;
22588
22589       if (text_section_used)
22590         add_ranges_by_labels (comp_unit_die (), text_section_label,
22591                               text_end_label, &range_list_added);
22592       if (cold_text_section_used)
22593         add_ranges_by_labels (comp_unit_die (), cold_text_section_label,
22594                               cold_end_label, &range_list_added);
22595
22596       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
22597         {
22598           if (!fde->in_std_section)
22599             add_ranges_by_labels (comp_unit_die (), fde->dw_fde_begin,
22600                                   fde->dw_fde_end, &range_list_added);
22601           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
22602             add_ranges_by_labels (comp_unit_die (), fde->dw_fde_second_begin,
22603                                   fde->dw_fde_second_end, &range_list_added);
22604         }
22605
22606       if (range_list_added)
22607         {
22608           /* We need to give .debug_loc and .debug_ranges an appropriate
22609              "base address".  Use zero so that these addresses become
22610              absolute.  Historically, we've emitted the unexpected
22611              DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22612              Emit both to give time for other tools to adapt.  */
22613           add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx);
22614           if (! dwarf_strict && dwarf_version < 4)
22615             add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx);
22616
22617           add_ranges (NULL);
22618         }
22619     }
22620
22621   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22622     add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list,
22623                     debug_line_section_label);
22624
22625   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22626     add_AT_macptr (comp_unit_die (),
22627                    dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
22628                    macinfo_section_label);
22629
22630   if (have_location_lists)
22631     optimize_location_lists (comp_unit_die ());
22632
22633   /* Output all of the compilation units.  We put the main one last so that
22634      the offsets are available to output_pubnames.  */
22635   for (node = limbo_die_list; node; node = node->next)
22636     output_comp_unit (node->die, 0);
22637
22638   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22639   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22640     {
22641       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22642
22643       /* Don't output duplicate types.  */
22644       if (*slot != HTAB_EMPTY_ENTRY)
22645         continue;
22646
22647       /* Add a pointer to the line table for the main compilation unit
22648          so that the debugger can make sense of DW_AT_decl_file
22649          attributes.  */
22650       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22651         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22652                         debug_line_section_label);
22653
22654       output_comdat_type_unit (ctnode);
22655       *slot = ctnode;
22656     }
22657   htab_delete (comdat_type_table);
22658
22659   /* Output the main compilation unit if non-empty or if .debug_macinfo
22660      will be emitted.  */
22661   output_comp_unit (comp_unit_die (), debug_info_level >= DINFO_LEVEL_VERBOSE);
22662
22663   /* Output the abbreviation table.  */
22664   if (abbrev_die_table_in_use != 1)
22665     {
22666       switch_to_section (debug_abbrev_section);
22667       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
22668       output_abbrev_section ();
22669     }
22670
22671   /* Output location list section if necessary.  */
22672   if (have_location_lists)
22673     {
22674       /* Output the location lists info.  */
22675       switch_to_section (debug_loc_section);
22676       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22677                                    DEBUG_LOC_SECTION_LABEL, 0);
22678       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22679       output_location_lists (comp_unit_die ());
22680     }
22681
22682   /* Output public names table if necessary.  */
22683   if (!VEC_empty (pubname_entry, pubname_table))
22684     {
22685       gcc_assert (info_section_emitted);
22686       switch_to_section (debug_pubnames_section);
22687       output_pubnames (pubname_table);
22688     }
22689
22690   /* Output public types table if necessary.  */
22691   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22692      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22693      simply won't look for the section.  */
22694   if (!VEC_empty (pubname_entry, pubtype_table))
22695     {
22696       bool empty = false;
22697       
22698       if (flag_eliminate_unused_debug_types)
22699         {
22700           /* The pubtypes table might be emptied by pruning unused items.  */
22701           unsigned i;
22702           pubname_ref p;
22703           empty = true;
22704           FOR_EACH_VEC_ELT (pubname_entry, pubtype_table, i, p)
22705             if (p->die->die_offset != 0)
22706               {
22707                 empty = false;
22708                 break;
22709               }
22710         }
22711       if (!empty)
22712         {
22713           gcc_assert (info_section_emitted);
22714           switch_to_section (debug_pubtypes_section);
22715           output_pubnames (pubtype_table);
22716         }
22717     }
22718
22719   /* Output the address range information if a CU (.debug_info section)
22720      was emitted.  We output an empty table even if we had no functions
22721      to put in it.  This because the consumer has no way to tell the
22722      difference between an empty table that we omitted and failure to
22723      generate a table that would have contained data.  */
22724   if (info_section_emitted)
22725     {
22726       unsigned long aranges_length = size_of_aranges ();
22727
22728       switch_to_section (debug_aranges_section);
22729       output_aranges (aranges_length);
22730     }
22731
22732   /* Output ranges section if necessary.  */
22733   if (ranges_table_in_use)
22734     {
22735       switch_to_section (debug_ranges_section);
22736       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22737       output_ranges ();
22738     }
22739
22740   /* Have to end the macro section.  */
22741   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22742     {
22743       switch_to_section (debug_macinfo_section);
22744       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
22745       if (!VEC_empty (macinfo_entry, macinfo_table))
22746         output_macinfo ();
22747       dw2_asm_output_data (1, 0, "End compilation unit");
22748     }
22749
22750   /* Output the source line correspondence table.  We must do this
22751      even if there is no line information.  Otherwise, on an empty
22752      translation unit, we will generate a present, but empty,
22753      .debug_info section.  IRIX 6.5 `nm' will then complain when
22754      examining the file.  This is done late so that any filenames
22755      used by the debug_info section are marked as 'used'.  */
22756   switch_to_section (debug_line_section);
22757   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
22758   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22759     output_line_info ();
22760
22761   /* If we emitted any DW_FORM_strp form attribute, output the string
22762      table too.  */
22763   if (debug_str_hash)
22764     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22765 }
22766
22767 #include "gt-dwarf2out.h"