OSDN Git Service

PR tree-optimization/50693
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Contributed by Gary Funck (gary@intrepid.com).
6    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
7    Extensively modified by Jason Merrill (jason@cygnus.com).
8
9 This file is part of GCC.
10
11 GCC is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 3, or (at your option) any later
14 version.
15
16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19 for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3.  If not see
23 <http://www.gnu.org/licenses/>.  */
24
25 /* TODO: Emit .debug_line header even when there are no functions, since
26            the file numbers are used by .debug_info.  Alternately, leave
27            out locations for types and decls.
28          Avoid talking about ctors and op= for PODs.
29          Factor out common prologue sequences into multiple CIEs.  */
30
31 /* The first part of this file deals with the DWARF 2 frame unwind
32    information, which is also used by the GCC efficient exception handling
33    mechanism.  The second part, controlled only by an #ifdef
34    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35    information.  */
36
37 /* DWARF2 Abbreviation Glossary:
38
39    CFA = Canonical Frame Address
40            a fixed address on the stack which identifies a call frame.
41            We define it to be the value of SP just before the call insn.
42            The CFA register and offset, which may change during the course
43            of the function, are used to calculate its value at runtime.
44
45    CFI = Call Frame Instruction
46            an instruction for the DWARF2 abstract machine
47
48    CIE = Common Information Entry
49            information describing information common to one or more FDEs
50
51    DIE = Debugging Information Entry
52
53    FDE = Frame Description Entry
54            information describing the stack call frame, in particular,
55            how to restore registers
56
57    DW_CFA_... = DWARF2 CFA call frame instruction
58    DW_TAG_... = DWARF2 DIE tag */
59
60 #include "config.h"
61 #include "system.h"
62 #include "coretypes.h"
63 #include "tm.h"
64 #include "tree.h"
65 #include "version.h"
66 #include "flags.h"
67 #include "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "ggc.h"
82 #include "md5.h"
83 #include "tm_p.h"
84 #include "diagnostic.h"
85 #include "tree-pretty-print.h"
86 #include "debug.h"
87 #include "target.h"
88 #include "common/common-target.h"
89 #include "langhooks.h"
90 #include "hashtab.h"
91 #include "cgraph.h"
92 #include "input.h"
93 #include "gimple.h"
94 #include "tree-pass.h"
95 #include "tree-flow.h"
96 #include "cfglayout.h"
97 #include "opts.h"
98
99 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
100 static rtx last_var_location_insn;
101 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     add_name_attribute (mod_type_die, "__unknown__");
9877
9878   if (qualified_type)
9879     equate_type_number_to_die (qualified_type, mod_type_die);
9880
9881   if (item_type)
9882     /* We must do this after the equate_type_number_to_die call, in case
9883        this is a recursive type.  This ensures that the modified_type_die
9884        recursion will terminate even if the type is recursive.  Recursive
9885        types are possible in Ada.  */
9886     sub_die = modified_type_die (item_type,
9887                                  TYPE_READONLY (item_type),
9888                                  TYPE_VOLATILE (item_type),
9889                                  context_die);
9890
9891   if (sub_die != NULL)
9892     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
9893
9894   return mod_type_die;
9895 }
9896
9897 /* Generate DIEs for the generic parameters of T.
9898    T must be either a generic type or a generic function.
9899    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
9900
9901 static void
9902 gen_generic_params_dies (tree t)
9903 {
9904   tree parms, args;
9905   int parms_num, i;
9906   dw_die_ref die = NULL;
9907
9908   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
9909     return;
9910
9911   if (TYPE_P (t))
9912     die = lookup_type_die (t);
9913   else if (DECL_P (t))
9914     die = lookup_decl_die (t);
9915
9916   gcc_assert (die);
9917
9918   parms = lang_hooks.get_innermost_generic_parms (t);
9919   if (!parms)
9920     /* T has no generic parameter. It means T is neither a generic type
9921        or function. End of story.  */
9922     return;
9923
9924   parms_num = TREE_VEC_LENGTH (parms);
9925   args = lang_hooks.get_innermost_generic_args (t);
9926   for (i = 0; i < parms_num; i++)
9927     {
9928       tree parm, arg, arg_pack_elems;
9929
9930       parm = TREE_VEC_ELT (parms, i);
9931       arg = TREE_VEC_ELT (args, i);
9932       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
9933       gcc_assert (parm && TREE_VALUE (parm) && arg);
9934
9935       if (parm && TREE_VALUE (parm) && arg)
9936         {
9937           /* If PARM represents a template parameter pack,
9938              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
9939              by DW_TAG_template_*_parameter DIEs for the argument
9940              pack elements of ARG. Note that ARG would then be
9941              an argument pack.  */
9942           if (arg_pack_elems)
9943             template_parameter_pack_die (TREE_VALUE (parm),
9944                                          arg_pack_elems,
9945                                          die);
9946           else
9947             generic_parameter_die (TREE_VALUE (parm), arg,
9948                                    true /* Emit DW_AT_name */, die);
9949         }
9950     }
9951 }
9952
9953 /* Create and return a DIE for PARM which should be
9954    the representation of a generic type parameter.
9955    For instance, in the C++ front end, PARM would be a template parameter.
9956    ARG is the argument to PARM.
9957    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
9958    name of the PARM.
9959    PARENT_DIE is the parent DIE which the new created DIE should be added to,
9960    as a child node.  */
9961
9962 static dw_die_ref
9963 generic_parameter_die (tree parm, tree arg,
9964                        bool emit_name_p,
9965                        dw_die_ref parent_die)
9966 {
9967   dw_die_ref tmpl_die = NULL;
9968   const char *name = NULL;
9969
9970   if (!parm || !DECL_NAME (parm) || !arg)
9971     return NULL;
9972
9973   /* We support non-type generic parameters and arguments,
9974      type generic parameters and arguments, as well as
9975      generic generic parameters (a.k.a. template template parameters in C++)
9976      and arguments.  */
9977   if (TREE_CODE (parm) == PARM_DECL)
9978     /* PARM is a nontype generic parameter  */
9979     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
9980   else if (TREE_CODE (parm) == TYPE_DECL)
9981     /* PARM is a type generic parameter.  */
9982     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
9983   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
9984     /* PARM is a generic generic parameter.
9985        Its DIE is a GNU extension. It shall have a
9986        DW_AT_name attribute to represent the name of the template template
9987        parameter, and a DW_AT_GNU_template_name attribute to represent the
9988        name of the template template argument.  */
9989     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
9990                         parent_die, parm);
9991   else
9992     gcc_unreachable ();
9993
9994   if (tmpl_die)
9995     {
9996       tree tmpl_type;
9997
9998       /* If PARM is a generic parameter pack, it means we are
9999          emitting debug info for a template argument pack element.
10000          In other terms, ARG is a template argument pack element.
10001          In that case, we don't emit any DW_AT_name attribute for
10002          the die.  */
10003       if (emit_name_p)
10004         {
10005           name = IDENTIFIER_POINTER (DECL_NAME (parm));
10006           gcc_assert (name);
10007           add_AT_string (tmpl_die, DW_AT_name, name);
10008         }
10009
10010       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10011         {
10012           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
10013              TMPL_DIE should have a child DW_AT_type attribute that is set
10014              to the type of the argument to PARM, which is ARG.
10015              If PARM is a type generic parameter, TMPL_DIE should have a
10016              child DW_AT_type that is set to ARG.  */
10017           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
10018           add_type_attribute (tmpl_die, tmpl_type, 0,
10019                               TREE_THIS_VOLATILE (tmpl_type),
10020                               parent_die);
10021         }
10022       else
10023         {
10024           /* So TMPL_DIE is a DIE representing a
10025              a generic generic template parameter, a.k.a template template
10026              parameter in C++ and arg is a template.  */
10027
10028           /* The DW_AT_GNU_template_name attribute of the DIE must be set
10029              to the name of the argument.  */
10030           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
10031           if (name)
10032             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
10033         }
10034
10035       if (TREE_CODE (parm) == PARM_DECL)
10036         /* So PARM is a non-type generic parameter.
10037            DWARF3 5.6.8 says we must set a DW_AT_const_value child
10038            attribute of TMPL_DIE which value represents the value
10039            of ARG.
10040            We must be careful here:
10041            The value of ARG might reference some function decls.
10042            We might currently be emitting debug info for a generic
10043            type and types are emitted before function decls, we don't
10044            know if the function decls referenced by ARG will actually be
10045            emitted after cgraph computations.
10046            So must defer the generation of the DW_AT_const_value to
10047            after cgraph is ready.  */
10048         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
10049     }
10050
10051   return tmpl_die;
10052 }
10053
10054 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
10055    PARM_PACK must be a template parameter pack. The returned DIE
10056    will be child DIE of PARENT_DIE.  */
10057
10058 static dw_die_ref
10059 template_parameter_pack_die (tree parm_pack,
10060                              tree parm_pack_args,
10061                              dw_die_ref parent_die)
10062 {
10063   dw_die_ref die;
10064   int j;
10065
10066   gcc_assert (parent_die && parm_pack);
10067
10068   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
10069   add_name_and_src_coords_attributes (die, parm_pack);
10070   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
10071     generic_parameter_die (parm_pack,
10072                            TREE_VEC_ELT (parm_pack_args, j),
10073                            false /* Don't emit DW_AT_name */,
10074                            die);
10075   return die;
10076 }
10077
10078 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
10079    an enumerated type.  */
10080
10081 static inline int
10082 type_is_enum (const_tree type)
10083 {
10084   return TREE_CODE (type) == ENUMERAL_TYPE;
10085 }
10086
10087 /* Return the DBX register number described by a given RTL node.  */
10088
10089 static unsigned int
10090 dbx_reg_number (const_rtx rtl)
10091 {
10092   unsigned regno = REGNO (rtl);
10093
10094   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
10095
10096 #ifdef LEAF_REG_REMAP
10097   if (current_function_uses_only_leaf_regs)
10098     {
10099       int leaf_reg = LEAF_REG_REMAP (regno);
10100       if (leaf_reg != -1)
10101         regno = (unsigned) leaf_reg;
10102     }
10103 #endif
10104
10105   return DBX_REGISTER_NUMBER (regno);
10106 }
10107
10108 /* Optionally add a DW_OP_piece term to a location description expression.
10109    DW_OP_piece is only added if the location description expression already
10110    doesn't end with DW_OP_piece.  */
10111
10112 static void
10113 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
10114 {
10115   dw_loc_descr_ref loc;
10116
10117   if (*list_head != NULL)
10118     {
10119       /* Find the end of the chain.  */
10120       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
10121         ;
10122
10123       if (loc->dw_loc_opc != DW_OP_piece)
10124         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
10125     }
10126 }
10127
10128 /* Return a location descriptor that designates a machine register or
10129    zero if there is none.  */
10130
10131 static dw_loc_descr_ref
10132 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
10133 {
10134   rtx regs;
10135
10136   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
10137     return 0;
10138
10139   /* We only use "frame base" when we're sure we're talking about the
10140      post-prologue local stack frame.  We do this by *not* running
10141      register elimination until this point, and recognizing the special
10142      argument pointer and soft frame pointer rtx's.
10143      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
10144   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
10145       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
10146     {
10147       dw_loc_descr_ref result = NULL;
10148
10149       if (dwarf_version >= 4 || !dwarf_strict)
10150         {
10151           result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
10152                                        initialized);
10153           if (result)
10154             add_loc_descr (&result,
10155                            new_loc_descr (DW_OP_stack_value, 0, 0));
10156         }
10157       return result;
10158     }
10159
10160   regs = targetm.dwarf_register_span (rtl);
10161
10162   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
10163     return multiple_reg_loc_descriptor (rtl, regs, initialized);
10164   else
10165     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
10166 }
10167
10168 /* Return a location descriptor that designates a machine register for
10169    a given hard register number.  */
10170
10171 static dw_loc_descr_ref
10172 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
10173 {
10174   dw_loc_descr_ref reg_loc_descr;
10175
10176   if (regno <= 31)
10177     reg_loc_descr
10178       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
10179   else
10180     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
10181
10182   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10183     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10184
10185   return reg_loc_descr;
10186 }
10187
10188 /* Given an RTL of a register, return a location descriptor that
10189    designates a value that spans more than one register.  */
10190
10191 static dw_loc_descr_ref
10192 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
10193                              enum var_init_status initialized)
10194 {
10195   int nregs, size, i;
10196   unsigned reg;
10197   dw_loc_descr_ref loc_result = NULL;
10198
10199   reg = REGNO (rtl);
10200 #ifdef LEAF_REG_REMAP
10201   if (current_function_uses_only_leaf_regs)
10202     {
10203       int leaf_reg = LEAF_REG_REMAP (reg);
10204       if (leaf_reg != -1)
10205         reg = (unsigned) leaf_reg;
10206     }
10207 #endif
10208   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
10209   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
10210
10211   /* Simple, contiguous registers.  */
10212   if (regs == NULL_RTX)
10213     {
10214       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
10215
10216       loc_result = NULL;
10217       while (nregs--)
10218         {
10219           dw_loc_descr_ref t;
10220
10221           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
10222                                       VAR_INIT_STATUS_INITIALIZED);
10223           add_loc_descr (&loc_result, t);
10224           add_loc_descr_op_piece (&loc_result, size);
10225           ++reg;
10226         }
10227       return loc_result;
10228     }
10229
10230   /* Now onto stupid register sets in non contiguous locations.  */
10231
10232   gcc_assert (GET_CODE (regs) == PARALLEL);
10233
10234   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10235   loc_result = NULL;
10236
10237   for (i = 0; i < XVECLEN (regs, 0); ++i)
10238     {
10239       dw_loc_descr_ref t;
10240
10241       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
10242                                   VAR_INIT_STATUS_INITIALIZED);
10243       add_loc_descr (&loc_result, t);
10244       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10245       add_loc_descr_op_piece (&loc_result, size);
10246     }
10247
10248   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10249     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10250   return loc_result;
10251 }
10252
10253 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
10254
10255 /* Return a location descriptor that designates a constant i,
10256    as a compound operation from constant (i >> shift), constant shift
10257    and DW_OP_shl.  */
10258
10259 static dw_loc_descr_ref
10260 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10261 {
10262   dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
10263   add_loc_descr (&ret, int_loc_descriptor (shift));
10264   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
10265   return ret;
10266 }
10267
10268 /* Return a location descriptor that designates a constant.  */
10269
10270 static dw_loc_descr_ref
10271 int_loc_descriptor (HOST_WIDE_INT i)
10272 {
10273   enum dwarf_location_atom op;
10274
10275   /* Pick the smallest representation of a constant, rather than just
10276      defaulting to the LEB encoding.  */
10277   if (i >= 0)
10278     {
10279       int clz = clz_hwi (i);
10280       int ctz = ctz_hwi (i);
10281       if (i <= 31)
10282         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
10283       else if (i <= 0xff)
10284         op = DW_OP_const1u;
10285       else if (i <= 0xffff)
10286         op = DW_OP_const2u;
10287       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10288                && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10289         /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
10290            DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
10291            while DW_OP_const4u is 5 bytes.  */
10292         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
10293       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10294                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10295         /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
10296            while DW_OP_const4u is 5 bytes.  */
10297         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10298       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10299         op = DW_OP_const4u;
10300       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10301                && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10302         /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
10303            while DW_OP_constu of constant >= 0x100000000 takes at least
10304            6 bytes.  */
10305         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10306       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10307                && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
10308                   >= HOST_BITS_PER_WIDE_INT)
10309         /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
10310            DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
10311            while DW_OP_constu takes in this case at least 6 bytes.  */
10312         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
10313       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10314                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10315                && size_of_uleb128 (i) > 6)
10316         /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes.  */
10317         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
10318       else
10319         op = DW_OP_constu;
10320     }
10321   else
10322     {
10323       if (i >= -0x80)
10324         op = DW_OP_const1s;
10325       else if (i >= -0x8000)
10326         op = DW_OP_const2s;
10327       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10328         {
10329           if (size_of_int_loc_descriptor (i) < 5)
10330             {
10331               dw_loc_descr_ref ret = int_loc_descriptor (-i);
10332               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10333               return ret;
10334             }
10335           op = DW_OP_const4s;
10336         }
10337       else
10338         {
10339           if (size_of_int_loc_descriptor (i)
10340               < (unsigned long) 1 + size_of_sleb128 (i))
10341             {
10342               dw_loc_descr_ref ret = int_loc_descriptor (-i);
10343               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10344               return ret;
10345             }
10346           op = DW_OP_consts;
10347         }
10348     }
10349
10350   return new_loc_descr (op, i, 0);
10351 }
10352
10353 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
10354    without actually allocating it.  */
10355
10356 static unsigned long
10357 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10358 {
10359   return size_of_int_loc_descriptor (i >> shift)
10360          + size_of_int_loc_descriptor (shift)
10361          + 1;
10362 }
10363
10364 /* Return size_of_locs (int_loc_descriptor (i)) without
10365    actually allocating it.  */
10366
10367 static unsigned long
10368 size_of_int_loc_descriptor (HOST_WIDE_INT i)
10369 {
10370   unsigned long s;
10371
10372   if (i >= 0)
10373     {
10374       int clz, ctz;
10375       if (i <= 31)
10376         return 1;
10377       else if (i <= 0xff)
10378         return 2;
10379       else if (i <= 0xffff)
10380         return 3;
10381       clz = clz_hwi (i);
10382       ctz = ctz_hwi (i);
10383       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10384           && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10385         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10386                                                     - clz - 5);
10387       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10388                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10389         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10390                                                     - clz - 8);
10391       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10392         return 5;
10393       s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
10394       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10395           && clz + 8 + 255 >= 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 (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10399                && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
10400         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10401                                                     - clz - 16);
10402       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10403                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10404                && s > 6)
10405         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10406                                                     - clz - 32);
10407       else
10408         return 1 + s;
10409     }
10410   else
10411     {
10412       if (i >= -0x80)
10413         return 2;
10414       else if (i >= -0x8000)
10415         return 3;
10416       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10417         {
10418           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10419             {
10420               s = size_of_int_loc_descriptor (-i) + 1;
10421               if (s < 5)
10422                 return s;
10423             }
10424           return 5;
10425         }
10426       else
10427         {
10428           unsigned long r = 1 + size_of_sleb128 (i);
10429           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10430             {
10431               s = size_of_int_loc_descriptor (-i) + 1;
10432               if (s < r)
10433                 return s;
10434             }
10435           return r;
10436         }
10437     }
10438 }
10439
10440 /* Return loc description representing "address" of integer value.
10441    This can appear only as toplevel expression.  */
10442
10443 static dw_loc_descr_ref
10444 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
10445 {
10446   int litsize;
10447   dw_loc_descr_ref loc_result = NULL;
10448
10449   if (!(dwarf_version >= 4 || !dwarf_strict))
10450     return NULL;
10451
10452   litsize = size_of_int_loc_descriptor (i);
10453   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
10454      is more compact.  For DW_OP_stack_value we need:
10455      litsize + 1 (DW_OP_stack_value)
10456      and for DW_OP_implicit_value:
10457      1 (DW_OP_implicit_value) + 1 (length) + size.  */
10458   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
10459     {
10460       loc_result = int_loc_descriptor (i);
10461       add_loc_descr (&loc_result,
10462                      new_loc_descr (DW_OP_stack_value, 0, 0));
10463       return loc_result;
10464     }
10465
10466   loc_result = new_loc_descr (DW_OP_implicit_value,
10467                               size, 0);
10468   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
10469   loc_result->dw_loc_oprnd2.v.val_int = i;
10470   return loc_result;
10471 }
10472
10473 /* Return a location descriptor that designates a base+offset location.  */
10474
10475 static dw_loc_descr_ref
10476 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
10477                  enum var_init_status initialized)
10478 {
10479   unsigned int regno;
10480   dw_loc_descr_ref result;
10481   dw_fde_ref fde = cfun->fde;
10482
10483   /* We only use "frame base" when we're sure we're talking about the
10484      post-prologue local stack frame.  We do this by *not* running
10485      register elimination until this point, and recognizing the special
10486      argument pointer and soft frame pointer rtx's.  */
10487   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
10488     {
10489       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10490
10491       if (elim != reg)
10492         {
10493           if (GET_CODE (elim) == PLUS)
10494             {
10495               offset += INTVAL (XEXP (elim, 1));
10496               elim = XEXP (elim, 0);
10497             }
10498           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
10499                        && (elim == hard_frame_pointer_rtx
10500                            || elim == stack_pointer_rtx))
10501                       || elim == (frame_pointer_needed
10502                                   ? hard_frame_pointer_rtx
10503                                   : stack_pointer_rtx));
10504
10505           /* If drap register is used to align stack, use frame
10506              pointer + offset to access stack variables.  If stack
10507              is aligned without drap, use stack pointer + offset to
10508              access stack variables.  */
10509           if (crtl->stack_realign_tried
10510               && reg == frame_pointer_rtx)
10511             {
10512               int base_reg
10513                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
10514                                       ? HARD_FRAME_POINTER_REGNUM
10515                                       : REGNO (elim));
10516               return new_reg_loc_descr (base_reg, offset);
10517             }
10518
10519           gcc_assert (frame_pointer_fb_offset_valid);
10520           offset += frame_pointer_fb_offset;
10521           return new_loc_descr (DW_OP_fbreg, offset, 0);
10522         }
10523     }
10524
10525   regno = DWARF_FRAME_REGNUM (REGNO (reg));
10526
10527   if (!optimize && fde
10528       && (fde->drap_reg == regno || fde->vdrap_reg == regno))
10529     {
10530       /* Use cfa+offset to represent the location of arguments passed
10531          on the stack when drap is used to align stack.
10532          Only do this when not optimizing, for optimized code var-tracking
10533          is supposed to track where the arguments live and the register
10534          used as vdrap or drap in some spot might be used for something
10535          else in other part of the routine.  */
10536       return new_loc_descr (DW_OP_fbreg, offset, 0);
10537     }
10538
10539   if (regno <= 31)
10540     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
10541                             offset, 0);
10542   else
10543     result = new_loc_descr (DW_OP_bregx, regno, offset);
10544
10545   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10546     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10547
10548   return result;
10549 }
10550
10551 /* Return true if this RTL expression describes a base+offset calculation.  */
10552
10553 static inline int
10554 is_based_loc (const_rtx rtl)
10555 {
10556   return (GET_CODE (rtl) == PLUS
10557           && ((REG_P (XEXP (rtl, 0))
10558                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
10559                && CONST_INT_P (XEXP (rtl, 1)))));
10560 }
10561
10562 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
10563    failed.  */
10564
10565 static dw_loc_descr_ref
10566 tls_mem_loc_descriptor (rtx mem)
10567 {
10568   tree base;
10569   dw_loc_descr_ref loc_result;
10570
10571   if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
10572     return NULL;
10573
10574   base = get_base_address (MEM_EXPR (mem));
10575   if (base == NULL
10576       || TREE_CODE (base) != VAR_DECL
10577       || !DECL_THREAD_LOCAL_P (base))
10578     return NULL;
10579
10580   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
10581   if (loc_result == NULL)
10582     return NULL;
10583
10584   if (MEM_OFFSET (mem))
10585     loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
10586
10587   return loc_result;
10588 }
10589
10590 /* Output debug info about reason why we failed to expand expression as dwarf
10591    expression.  */
10592
10593 static void
10594 expansion_failed (tree expr, rtx rtl, char const *reason)
10595 {
10596   if (dump_file && (dump_flags & TDF_DETAILS))
10597     {
10598       fprintf (dump_file, "Failed to expand as dwarf: ");
10599       if (expr)
10600         print_generic_expr (dump_file, expr, dump_flags);
10601       if (rtl)
10602         {
10603           fprintf (dump_file, "\n");
10604           print_rtl (dump_file, rtl);
10605         }
10606       fprintf (dump_file, "\nReason: %s\n", reason);
10607     }
10608 }
10609
10610 /* Helper function for const_ok_for_output, called either directly
10611    or via for_each_rtx.  */
10612
10613 static int
10614 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
10615 {
10616   rtx rtl = *rtlp;
10617
10618   if (GET_CODE (rtl) == UNSPEC)
10619     {
10620       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
10621          we can't express it in the debug info.  */
10622 #ifdef ENABLE_CHECKING
10623       /* Don't complain about TLS UNSPECs, those are just too hard to
10624          delegitimize.  */
10625       if (XVECLEN (rtl, 0) != 1
10626           || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
10627           || SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0)) == NULL
10628           || TREE_CODE (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))) != VAR_DECL
10629           || !DECL_THREAD_LOCAL_P (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))))
10630         inform (current_function_decl
10631                 ? DECL_SOURCE_LOCATION (current_function_decl)
10632                 : UNKNOWN_LOCATION,
10633 #if NUM_UNSPEC_VALUES > 0
10634                 "non-delegitimized UNSPEC %s (%d) found in variable location",
10635                 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
10636                  ? unspec_strings[XINT (rtl, 1)] : "unknown"),
10637                 XINT (rtl, 1));
10638 #else
10639                 "non-delegitimized UNSPEC %d found in variable location",
10640                 XINT (rtl, 1));
10641 #endif
10642 #endif
10643       expansion_failed (NULL_TREE, rtl,
10644                         "UNSPEC hasn't been delegitimized.\n");
10645       return 1;
10646     }
10647
10648   if (GET_CODE (rtl) != SYMBOL_REF)
10649     return 0;
10650
10651   if (CONSTANT_POOL_ADDRESS_P (rtl))
10652     {
10653       bool marked;
10654       get_pool_constant_mark (rtl, &marked);
10655       /* If all references to this pool constant were optimized away,
10656          it was not output and thus we can't represent it.  */
10657       if (!marked)
10658         {
10659           expansion_failed (NULL_TREE, rtl,
10660                             "Constant was removed from constant pool.\n");
10661           return 1;
10662         }
10663     }
10664
10665   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
10666     return 1;
10667
10668   /* Avoid references to external symbols in debug info, on several targets
10669      the linker might even refuse to link when linking a shared library,
10670      and in many other cases the relocations for .debug_info/.debug_loc are
10671      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
10672      to be defined within the same shared library or executable are fine.  */
10673   if (SYMBOL_REF_EXTERNAL_P (rtl))
10674     {
10675       tree decl = SYMBOL_REF_DECL (rtl);
10676
10677       if (decl == NULL || !targetm.binds_local_p (decl))
10678         {
10679           expansion_failed (NULL_TREE, rtl,
10680                             "Symbol not defined in current TU.\n");
10681           return 1;
10682         }
10683     }
10684
10685   return 0;
10686 }
10687
10688 /* Return true if constant RTL can be emitted in DW_OP_addr or
10689    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
10690    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
10691
10692 static bool
10693 const_ok_for_output (rtx rtl)
10694 {
10695   if (GET_CODE (rtl) == SYMBOL_REF)
10696     return const_ok_for_output_1 (&rtl, NULL) == 0;
10697
10698   if (GET_CODE (rtl) == CONST)
10699     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
10700
10701   return true;
10702 }
10703
10704 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
10705    if possible, NULL otherwise.  */
10706
10707 static dw_die_ref
10708 base_type_for_mode (enum machine_mode mode, bool unsignedp)
10709 {
10710   dw_die_ref type_die;
10711   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
10712
10713   if (type == NULL)
10714     return NULL;
10715   switch (TREE_CODE (type))
10716     {
10717     case INTEGER_TYPE:
10718     case REAL_TYPE:
10719       break;
10720     default:
10721       return NULL;
10722     }
10723   type_die = lookup_type_die (type);
10724   if (!type_die)
10725     type_die = modified_type_die (type, false, false, comp_unit_die ());
10726   if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
10727     return NULL;
10728   return type_die;
10729 }
10730
10731 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
10732    type matching MODE, or, if MODE is narrower than or as wide as
10733    DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
10734    possible.  */
10735
10736 static dw_loc_descr_ref
10737 convert_descriptor_to_mode (enum machine_mode mode, dw_loc_descr_ref op)
10738 {
10739   enum machine_mode outer_mode = mode;
10740   dw_die_ref type_die;
10741   dw_loc_descr_ref cvt;
10742
10743   if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
10744     {
10745       add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
10746       return op;
10747     }
10748   type_die = base_type_for_mode (outer_mode, 1);
10749   if (type_die == NULL)
10750     return NULL;
10751   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10752   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10753   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10754   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10755   add_loc_descr (&op, cvt);
10756   return op;
10757 }
10758
10759 /* Return location descriptor for comparison OP with operands OP0 and OP1.  */
10760
10761 static dw_loc_descr_ref
10762 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
10763                         dw_loc_descr_ref op1)
10764 {
10765   dw_loc_descr_ref ret = op0;
10766   add_loc_descr (&ret, op1);
10767   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
10768   if (STORE_FLAG_VALUE != 1)
10769     {
10770       add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
10771       add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
10772     }
10773   return ret;
10774 }
10775
10776 /* Return location descriptor for signed comparison OP RTL.  */
10777
10778 static dw_loc_descr_ref
10779 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10780                          enum machine_mode mem_mode)
10781 {
10782   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10783   dw_loc_descr_ref op0, op1;
10784   int shift;
10785
10786   if (op_mode == VOIDmode)
10787     op_mode = GET_MODE (XEXP (rtl, 1));
10788   if (op_mode == VOIDmode)
10789     return NULL;
10790
10791   if (dwarf_strict
10792       && (GET_MODE_CLASS (op_mode) != MODE_INT
10793           || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
10794     return NULL;
10795
10796   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10797                             VAR_INIT_STATUS_INITIALIZED);
10798   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10799                             VAR_INIT_STATUS_INITIALIZED);
10800
10801   if (op0 == NULL || op1 == NULL)
10802     return NULL;
10803
10804   if (GET_MODE_CLASS (op_mode) != MODE_INT
10805       || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10806     return compare_loc_descriptor (op, op0, op1);
10807
10808   if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10809     {
10810       dw_die_ref type_die = base_type_for_mode (op_mode, 0);
10811       dw_loc_descr_ref cvt;
10812
10813       if (type_die == NULL)
10814         return NULL;
10815       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10816       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10817       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10818       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10819       add_loc_descr (&op0, cvt);
10820       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10821       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10822       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10823       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10824       add_loc_descr (&op1, cvt);
10825       return compare_loc_descriptor (op, op0, op1);
10826     }
10827
10828   shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
10829   /* For eq/ne, if the operands are known to be zero-extended,
10830      there is no need to do the fancy shifting up.  */
10831   if (op == DW_OP_eq || op == DW_OP_ne)
10832     {
10833       dw_loc_descr_ref last0, last1;
10834       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10835         ;
10836       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10837         ;
10838       /* deref_size zero extends, and for constants we can check
10839          whether they are zero extended or not.  */
10840       if (((last0->dw_loc_opc == DW_OP_deref_size
10841             && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10842            || (CONST_INT_P (XEXP (rtl, 0))
10843                && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
10844                   == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
10845           && ((last1->dw_loc_opc == DW_OP_deref_size
10846                && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10847               || (CONST_INT_P (XEXP (rtl, 1))
10848                   && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
10849                      == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
10850         return compare_loc_descriptor (op, op0, op1);
10851
10852       /* EQ/NE comparison against constant in narrower type than
10853          DWARF2_ADDR_SIZE can be performed either as
10854          DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
10855          DW_OP_{eq,ne}
10856          or
10857          DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
10858          DW_OP_{eq,ne}.  Pick whatever is shorter.  */
10859       if (CONST_INT_P (XEXP (rtl, 1))
10860           && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
10861           && (size_of_int_loc_descriptor (shift) + 1
10862               + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
10863               >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
10864                  + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10865                                                & GET_MODE_MASK (op_mode))))
10866         {
10867           add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
10868           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10869           op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10870                                     & GET_MODE_MASK (op_mode));
10871           return compare_loc_descriptor (op, op0, op1);
10872         }
10873     }
10874   add_loc_descr (&op0, int_loc_descriptor (shift));
10875   add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
10876   if (CONST_INT_P (XEXP (rtl, 1)))
10877     op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
10878   else
10879     {
10880       add_loc_descr (&op1, int_loc_descriptor (shift));
10881       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
10882     }
10883   return compare_loc_descriptor (op, op0, op1);
10884 }
10885
10886 /* Return location descriptor for unsigned comparison OP RTL.  */
10887
10888 static dw_loc_descr_ref
10889 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10890                          enum machine_mode mem_mode)
10891 {
10892   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10893   dw_loc_descr_ref op0, op1;
10894
10895   if (op_mode == VOIDmode)
10896     op_mode = GET_MODE (XEXP (rtl, 1));
10897   if (op_mode == VOIDmode)
10898     return NULL;
10899   if (GET_MODE_CLASS (op_mode) != MODE_INT)
10900     return NULL;
10901
10902   if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10903     return NULL;
10904
10905   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10906                             VAR_INIT_STATUS_INITIALIZED);
10907   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10908                             VAR_INIT_STATUS_INITIALIZED);
10909
10910   if (op0 == NULL || op1 == NULL)
10911     return NULL;
10912
10913   if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
10914     {
10915       HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
10916       dw_loc_descr_ref last0, last1;
10917       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10918         ;
10919       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10920         ;
10921       if (CONST_INT_P (XEXP (rtl, 0)))
10922         op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
10923       /* deref_size zero extends, so no need to mask it again.  */
10924       else if (last0->dw_loc_opc != DW_OP_deref_size
10925                || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10926         {
10927           add_loc_descr (&op0, int_loc_descriptor (mask));
10928           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10929         }
10930       if (CONST_INT_P (XEXP (rtl, 1)))
10931         op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
10932       /* deref_size zero extends, so no need to mask it again.  */
10933       else if (last1->dw_loc_opc != DW_OP_deref_size
10934                || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10935         {
10936           add_loc_descr (&op1, int_loc_descriptor (mask));
10937           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10938         }
10939     }
10940   else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10941     {
10942       HOST_WIDE_INT bias = 1;
10943       bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
10944       add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10945       if (CONST_INT_P (XEXP (rtl, 1)))
10946         op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
10947                                   + INTVAL (XEXP (rtl, 1)));
10948       else
10949         add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
10950                                             bias, 0));
10951     }
10952   return compare_loc_descriptor (op, op0, op1);
10953 }
10954
10955 /* Return location descriptor for {U,S}{MIN,MAX}.  */
10956
10957 static dw_loc_descr_ref
10958 minmax_loc_descriptor (rtx rtl, enum machine_mode mode,
10959                        enum machine_mode mem_mode)
10960 {
10961   enum dwarf_location_atom op;
10962   dw_loc_descr_ref op0, op1, ret;
10963   dw_loc_descr_ref bra_node, drop_node;
10964
10965   if (dwarf_strict
10966       && (GET_MODE_CLASS (mode) != MODE_INT
10967           || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
10968     return NULL;
10969
10970   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
10971                             VAR_INIT_STATUS_INITIALIZED);
10972   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
10973                             VAR_INIT_STATUS_INITIALIZED);
10974
10975   if (op0 == NULL || op1 == NULL)
10976     return NULL;
10977
10978   add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
10979   add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
10980   add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
10981   if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
10982     {
10983       if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
10984         {
10985           HOST_WIDE_INT mask = GET_MODE_MASK (mode);
10986           add_loc_descr (&op0, int_loc_descriptor (mask));
10987           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10988           add_loc_descr (&op1, int_loc_descriptor (mask));
10989           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10990         }
10991       else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
10992         {
10993           HOST_WIDE_INT bias = 1;
10994           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
10995           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10996           add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10997         }
10998     }
10999   else if (GET_MODE_CLASS (mode) == MODE_INT
11000            && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11001     {
11002       int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
11003       add_loc_descr (&op0, int_loc_descriptor (shift));
11004       add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11005       add_loc_descr (&op1, int_loc_descriptor (shift));
11006       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11007     }
11008   else if (GET_MODE_CLASS (mode) == MODE_INT
11009            && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11010     {
11011       dw_die_ref type_die = base_type_for_mode (mode, 0);
11012       dw_loc_descr_ref cvt;
11013       if (type_die == NULL)
11014         return NULL;
11015       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11016       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11017       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11018       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11019       add_loc_descr (&op0, cvt);
11020       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11021       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11022       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11023       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11024       add_loc_descr (&op1, cvt);
11025     }
11026
11027   if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
11028     op = DW_OP_lt;
11029   else
11030     op = DW_OP_gt;
11031   ret = op0;
11032   add_loc_descr (&ret, op1);
11033   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11034   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11035   add_loc_descr (&ret, bra_node);
11036   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11037   drop_node = new_loc_descr (DW_OP_drop, 0, 0);
11038   add_loc_descr (&ret, drop_node);
11039   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11040   bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
11041   if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
11042       && GET_MODE_CLASS (mode) == MODE_INT
11043       && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11044     ret = convert_descriptor_to_mode (mode, ret);
11045   return ret;
11046 }
11047
11048 /* Helper function for mem_loc_descriptor.  Perform OP binary op,
11049    but after converting arguments to type_die, afterwards
11050    convert back to unsigned.  */
11051
11052 static dw_loc_descr_ref
11053 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
11054              enum machine_mode mode, enum machine_mode mem_mode)
11055 {
11056   dw_loc_descr_ref cvt, op0, op1;
11057
11058   if (type_die == NULL)
11059     return NULL;
11060   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11061                             VAR_INIT_STATUS_INITIALIZED);
11062   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11063                             VAR_INIT_STATUS_INITIALIZED);
11064   if (op0 == NULL || op1 == NULL)
11065     return NULL;
11066   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11067   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11068   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11069   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11070   add_loc_descr (&op0, cvt);
11071   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11072   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11073   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11074   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11075   add_loc_descr (&op1, cvt);
11076   add_loc_descr (&op0, op1);
11077   add_loc_descr (&op0, new_loc_descr (op, 0, 0));
11078   return convert_descriptor_to_mode (mode, op0);
11079 }
11080
11081 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
11082    const0 is DW_OP_lit0 or corresponding typed constant,
11083    const1 is DW_OP_lit1 or corresponding typed constant
11084    and constMSB is constant with just the MSB bit set
11085    for the mode):
11086        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11087    L1: const0 DW_OP_swap
11088    L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
11089        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11090    L3: DW_OP_drop
11091    L4: DW_OP_nop
11092
11093    CTZ is similar:
11094        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11095    L1: const0 DW_OP_swap
11096    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11097        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11098    L3: DW_OP_drop
11099    L4: DW_OP_nop
11100
11101    FFS is similar:
11102        DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
11103    L1: const1 DW_OP_swap
11104    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11105        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11106    L3: DW_OP_drop
11107    L4: DW_OP_nop  */
11108
11109 static dw_loc_descr_ref
11110 clz_loc_descriptor (rtx rtl, enum machine_mode mode,
11111                     enum machine_mode mem_mode)
11112 {
11113   dw_loc_descr_ref op0, ret, tmp;
11114   HOST_WIDE_INT valv;
11115   dw_loc_descr_ref l1jump, l1label;
11116   dw_loc_descr_ref l2jump, l2label;
11117   dw_loc_descr_ref l3jump, l3label;
11118   dw_loc_descr_ref l4jump, l4label;
11119   rtx msb;
11120
11121   if (GET_MODE_CLASS (mode) != MODE_INT
11122       || GET_MODE (XEXP (rtl, 0)) != mode
11123       || (GET_CODE (rtl) == CLZ
11124           && GET_MODE_BITSIZE (mode) > 2 * HOST_BITS_PER_WIDE_INT))
11125     return NULL;
11126
11127   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11128                             VAR_INIT_STATUS_INITIALIZED);
11129   if (op0 == NULL)
11130     return NULL;
11131   ret = op0;
11132   if (GET_CODE (rtl) == CLZ)
11133     {
11134       if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11135         valv = GET_MODE_BITSIZE (mode);
11136     }
11137   else if (GET_CODE (rtl) == FFS)
11138     valv = 0;
11139   else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11140     valv = GET_MODE_BITSIZE (mode);
11141   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11142   l1jump = new_loc_descr (DW_OP_bra, 0, 0);
11143   add_loc_descr (&ret, l1jump);
11144   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11145   tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
11146                             VAR_INIT_STATUS_INITIALIZED);
11147   if (tmp == NULL)
11148     return NULL;
11149   add_loc_descr (&ret, tmp);
11150   l4jump = new_loc_descr (DW_OP_skip, 0, 0);
11151   add_loc_descr (&ret, l4jump);
11152   l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
11153                                 ? const1_rtx : const0_rtx,
11154                                 mode, mem_mode,
11155                                 VAR_INIT_STATUS_INITIALIZED);
11156   if (l1label == NULL)
11157     return NULL;
11158   add_loc_descr (&ret, l1label);
11159   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11160   l2label = new_loc_descr (DW_OP_dup, 0, 0);
11161   add_loc_descr (&ret, l2label);
11162   if (GET_CODE (rtl) != CLZ)
11163     msb = const1_rtx;
11164   else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
11165     msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
11166                    << (GET_MODE_BITSIZE (mode) - 1));
11167   else
11168     msb = immed_double_const (0, (unsigned HOST_WIDE_INT) 1
11169                                   << (GET_MODE_BITSIZE (mode)
11170                                       - HOST_BITS_PER_WIDE_INT - 1), mode);
11171   if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
11172     tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11173                          ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
11174                          ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
11175   else
11176     tmp = mem_loc_descriptor (msb, mode, mem_mode,
11177                               VAR_INIT_STATUS_INITIALIZED);
11178   if (tmp == NULL)
11179     return NULL;
11180   add_loc_descr (&ret, tmp);
11181   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11182   l3jump = new_loc_descr (DW_OP_bra, 0, 0);
11183   add_loc_descr (&ret, l3jump);
11184   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11185                             VAR_INIT_STATUS_INITIALIZED);
11186   if (tmp == NULL)
11187     return NULL;
11188   add_loc_descr (&ret, tmp);
11189   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
11190                                       ? DW_OP_shl : DW_OP_shr, 0, 0));
11191   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11192   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
11193   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11194   l2jump = new_loc_descr (DW_OP_skip, 0, 0);
11195   add_loc_descr (&ret, l2jump);
11196   l3label = new_loc_descr (DW_OP_drop, 0, 0);
11197   add_loc_descr (&ret, l3label);
11198   l4label = new_loc_descr (DW_OP_nop, 0, 0);
11199   add_loc_descr (&ret, l4label);
11200   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11201   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11202   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11203   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11204   l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11205   l3jump->dw_loc_oprnd1.v.val_loc = l3label;
11206   l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11207   l4jump->dw_loc_oprnd1.v.val_loc = l4label;
11208   return ret;
11209 }
11210
11211 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
11212    const1 is DW_OP_lit1 or corresponding typed constant):
11213        const0 DW_OP_swap
11214    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11215        DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11216    L2: DW_OP_drop
11217
11218    PARITY is similar:
11219    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11220        DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11221    L2: DW_OP_drop  */
11222
11223 static dw_loc_descr_ref
11224 popcount_loc_descriptor (rtx rtl, enum machine_mode mode,
11225                          enum machine_mode mem_mode)
11226 {
11227   dw_loc_descr_ref op0, ret, tmp;
11228   dw_loc_descr_ref l1jump, l1label;
11229   dw_loc_descr_ref l2jump, l2label;
11230
11231   if (GET_MODE_CLASS (mode) != MODE_INT
11232       || GET_MODE (XEXP (rtl, 0)) != mode)
11233     return NULL;
11234
11235   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11236                             VAR_INIT_STATUS_INITIALIZED);
11237   if (op0 == NULL)
11238     return NULL;
11239   ret = op0;
11240   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11241                             VAR_INIT_STATUS_INITIALIZED);
11242   if (tmp == NULL)
11243     return NULL;
11244   add_loc_descr (&ret, tmp);
11245   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11246   l1label = new_loc_descr (DW_OP_dup, 0, 0);
11247   add_loc_descr (&ret, l1label);
11248   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11249   add_loc_descr (&ret, l2jump);
11250   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11251   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11252   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11253                             VAR_INIT_STATUS_INITIALIZED);
11254   if (tmp == NULL)
11255     return NULL;
11256   add_loc_descr (&ret, tmp);
11257   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11258   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
11259                                       ? DW_OP_plus : DW_OP_xor, 0, 0));
11260   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11261   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11262                             VAR_INIT_STATUS_INITIALIZED);
11263   add_loc_descr (&ret, tmp);
11264   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11265   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11266   add_loc_descr (&ret, l1jump);
11267   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11268   add_loc_descr (&ret, l2label);
11269   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11270   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11271   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11272   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11273   return ret;
11274 }
11275
11276 /* BSWAP (constS is initial shift count, either 56 or 24):
11277        constS const0
11278    L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
11279        const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
11280        DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
11281        DW_OP_minus DW_OP_swap DW_OP_skip <L1>
11282    L2: DW_OP_drop DW_OP_swap DW_OP_drop  */
11283
11284 static dw_loc_descr_ref
11285 bswap_loc_descriptor (rtx rtl, enum machine_mode mode,
11286                       enum machine_mode mem_mode)
11287 {
11288   dw_loc_descr_ref op0, ret, tmp;
11289   dw_loc_descr_ref l1jump, l1label;
11290   dw_loc_descr_ref l2jump, l2label;
11291
11292   if (GET_MODE_CLASS (mode) != MODE_INT
11293       || BITS_PER_UNIT != 8
11294       || (GET_MODE_BITSIZE (mode) != 32
11295           &&  GET_MODE_BITSIZE (mode) != 64))
11296     return NULL;
11297
11298   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11299                             VAR_INIT_STATUS_INITIALIZED);
11300   if (op0 == NULL)
11301     return NULL;
11302
11303   ret = op0;
11304   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11305                             mode, mem_mode,
11306                             VAR_INIT_STATUS_INITIALIZED);
11307   if (tmp == NULL)
11308     return NULL;
11309   add_loc_descr (&ret, tmp);
11310   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11311                             VAR_INIT_STATUS_INITIALIZED);
11312   if (tmp == NULL)
11313     return NULL;
11314   add_loc_descr (&ret, tmp);
11315   l1label = new_loc_descr (DW_OP_pick, 2, 0);
11316   add_loc_descr (&ret, l1label);
11317   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11318                             mode, mem_mode,
11319                             VAR_INIT_STATUS_INITIALIZED);
11320   add_loc_descr (&ret, tmp);
11321   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
11322   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11323   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11324   tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
11325                             VAR_INIT_STATUS_INITIALIZED);
11326   if (tmp == NULL)
11327     return NULL;
11328   add_loc_descr (&ret, tmp);
11329   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11330   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
11331   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11332   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11333   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11334   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11335   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11336                             VAR_INIT_STATUS_INITIALIZED);
11337   add_loc_descr (&ret, tmp);
11338   add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
11339   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11340   add_loc_descr (&ret, l2jump);
11341   tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
11342                             VAR_INIT_STATUS_INITIALIZED);
11343   add_loc_descr (&ret, tmp);
11344   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11345   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11346   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11347   add_loc_descr (&ret, l1jump);
11348   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11349   add_loc_descr (&ret, l2label);
11350   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11351   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11352   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11353   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11354   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11355   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11356   return ret;
11357 }
11358
11359 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
11360    DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11361    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
11362    DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
11363
11364    ROTATERT is similar:
11365    DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
11366    DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11367    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or  */
11368
11369 static dw_loc_descr_ref
11370 rotate_loc_descriptor (rtx rtl, enum machine_mode mode,
11371                        enum machine_mode mem_mode)
11372 {
11373   rtx rtlop1 = XEXP (rtl, 1);
11374   dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
11375   int i;
11376
11377   if (GET_MODE_CLASS (mode) != MODE_INT)
11378     return NULL;
11379
11380   if (GET_MODE (rtlop1) != VOIDmode
11381       && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
11382     rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11383   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11384                             VAR_INIT_STATUS_INITIALIZED);
11385   op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11386                             VAR_INIT_STATUS_INITIALIZED);
11387   if (op0 == NULL || op1 == NULL)
11388     return NULL;
11389   if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11390     for (i = 0; i < 2; i++)
11391       {
11392         if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
11393           mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
11394                                         mode, mem_mode,
11395                                         VAR_INIT_STATUS_INITIALIZED);
11396         else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
11397           mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11398                                    ? DW_OP_const4u
11399                                    : HOST_BITS_PER_WIDE_INT == 64
11400                                    ? DW_OP_const8u : DW_OP_constu,
11401                                    GET_MODE_MASK (mode), 0);
11402         else
11403           mask[i] = NULL;
11404         if (mask[i] == NULL)
11405           return NULL;
11406         add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
11407       }
11408   ret = op0;
11409   add_loc_descr (&ret, op1);
11410   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11411   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11412   if (GET_CODE (rtl) == ROTATERT)
11413     {
11414       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11415       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11416                                           GET_MODE_BITSIZE (mode), 0));
11417     }
11418   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11419   if (mask[0] != NULL)
11420     add_loc_descr (&ret, mask[0]);
11421   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11422   if (mask[1] != NULL)
11423     {
11424       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11425       add_loc_descr (&ret, mask[1]);
11426       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11427     }
11428   if (GET_CODE (rtl) == ROTATE)
11429     {
11430       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11431       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11432                                           GET_MODE_BITSIZE (mode), 0));
11433     }
11434   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11435   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11436   return ret;
11437 }
11438
11439 /* Helper function for mem_loc_descriptor.  Return DW_OP_GNU_parameter_ref
11440    for DEBUG_PARAMETER_REF RTL.  */
11441
11442 static dw_loc_descr_ref
11443 parameter_ref_descriptor (rtx rtl)
11444 {
11445   dw_loc_descr_ref ret;
11446   dw_die_ref ref;
11447
11448   if (dwarf_strict)
11449     return NULL;
11450   gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
11451   ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
11452   ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
11453   if (ref)
11454     {
11455       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11456       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
11457       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
11458     }
11459   else
11460     {
11461       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
11462       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
11463     }
11464   return ret;
11465 }
11466
11467 /* Helper function to get mode of MEM's address.  */
11468
11469 enum machine_mode
11470 get_address_mode (rtx mem)
11471 {
11472   enum machine_mode mode = GET_MODE (XEXP (mem, 0));
11473   if (mode != VOIDmode)
11474     return mode;
11475   return targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
11476 }
11477
11478 /* The following routine converts the RTL for a variable or parameter
11479    (resident in memory) into an equivalent Dwarf representation of a
11480    mechanism for getting the address of that same variable onto the top of a
11481    hypothetical "address evaluation" stack.
11482
11483    When creating memory location descriptors, we are effectively transforming
11484    the RTL for a memory-resident object into its Dwarf postfix expression
11485    equivalent.  This routine recursively descends an RTL tree, turning
11486    it into Dwarf postfix code as it goes.
11487
11488    MODE is the mode that should be assumed for the rtl if it is VOIDmode.
11489
11490    MEM_MODE is the mode of the memory reference, needed to handle some
11491    autoincrement addressing modes.
11492
11493    Return 0 if we can't represent the location.  */
11494
11495 dw_loc_descr_ref
11496 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
11497                     enum machine_mode mem_mode,
11498                     enum var_init_status initialized)
11499 {
11500   dw_loc_descr_ref mem_loc_result = NULL;
11501   enum dwarf_location_atom op;
11502   dw_loc_descr_ref op0, op1;
11503
11504   if (mode == VOIDmode)
11505     mode = GET_MODE (rtl);
11506
11507   /* Note that for a dynamically sized array, the location we will generate a
11508      description of here will be the lowest numbered location which is
11509      actually within the array.  That's *not* necessarily the same as the
11510      zeroth element of the array.  */
11511
11512   rtl = targetm.delegitimize_address (rtl);
11513
11514   if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
11515     return NULL;
11516
11517   switch (GET_CODE (rtl))
11518     {
11519     case POST_INC:
11520     case POST_DEC:
11521     case POST_MODIFY:
11522       return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
11523
11524     case SUBREG:
11525       /* The case of a subreg may arise when we have a local (register)
11526          variable or a formal (register) parameter which doesn't quite fill
11527          up an entire register.  For now, just assume that it is
11528          legitimate to make the Dwarf info refer to the whole register which
11529          contains the given subreg.  */
11530       if (!subreg_lowpart_p (rtl))
11531         break;
11532       if (GET_MODE_CLASS (mode) == MODE_INT
11533           && GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) == MODE_INT
11534           && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11535 #ifdef POINTERS_EXTEND_UNSIGNED
11536               || (mode == Pmode && mem_mode != VOIDmode)
11537 #endif
11538              )
11539           && GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) <= DWARF2_ADDR_SIZE)
11540         {
11541           mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11542                                                GET_MODE (SUBREG_REG (rtl)),
11543                                                mem_mode, initialized);
11544           break;
11545         }
11546       if (dwarf_strict)
11547         break;
11548       if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11549         break;
11550       if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl)))
11551           && (GET_MODE_CLASS (mode) != MODE_INT
11552               || GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) != MODE_INT))
11553         break;
11554       else
11555         {
11556           dw_die_ref type_die;
11557           dw_loc_descr_ref cvt;
11558
11559           mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11560                                                GET_MODE (SUBREG_REG (rtl)),
11561                                                mem_mode, initialized);
11562           if (mem_loc_result == NULL)
11563             break;
11564           type_die = base_type_for_mode (mode,
11565                                          GET_MODE_CLASS (mode) == MODE_INT);
11566           if (type_die == NULL)
11567             {
11568               mem_loc_result = NULL;
11569               break;
11570             }
11571           if (GET_MODE_SIZE (mode)
11572               != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11573             cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11574           else
11575             cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
11576           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11577           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11578           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11579           add_loc_descr (&mem_loc_result, cvt);
11580         }
11581       break;
11582
11583     case REG:
11584       if (GET_MODE_CLASS (mode) != MODE_INT
11585           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11586 #ifdef POINTERS_EXTEND_UNSIGNED
11587               && (mode != Pmode || mem_mode == VOIDmode)
11588 #endif
11589               ))
11590         {
11591           dw_die_ref type_die;
11592
11593           if (dwarf_strict)
11594             break;
11595           if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
11596             break;
11597           type_die = base_type_for_mode (mode,
11598                                          GET_MODE_CLASS (mode) == MODE_INT);
11599           if (type_die == NULL)
11600             break;
11601           mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
11602                                           dbx_reg_number (rtl), 0);
11603           mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11604           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11605           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
11606           break;
11607         }
11608       /* Whenever a register number forms a part of the description of the
11609          method for calculating the (dynamic) address of a memory resident
11610          object, DWARF rules require the register number be referred to as
11611          a "base register".  This distinction is not based in any way upon
11612          what category of register the hardware believes the given register
11613          belongs to.  This is strictly DWARF terminology we're dealing with
11614          here. Note that in cases where the location of a memory-resident
11615          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
11616          OP_CONST (0)) the actual DWARF location descriptor that we generate
11617          may just be OP_BASEREG (basereg).  This may look deceptively like
11618          the object in question was allocated to a register (rather than in
11619          memory) so DWARF consumers need to be aware of the subtle
11620          distinction between OP_REG and OP_BASEREG.  */
11621       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
11622         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
11623       else if (stack_realign_drap
11624                && crtl->drap_reg
11625                && crtl->args.internal_arg_pointer == rtl
11626                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
11627         {
11628           /* If RTL is internal_arg_pointer, which has been optimized
11629              out, use DRAP instead.  */
11630           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
11631                                             VAR_INIT_STATUS_INITIALIZED);
11632         }
11633       break;
11634
11635     case SIGN_EXTEND:
11636     case ZERO_EXTEND:
11637       if (GET_MODE_CLASS (mode) != MODE_INT)
11638         break;
11639       op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
11640                                 mem_mode, VAR_INIT_STATUS_INITIALIZED);
11641       if (op0 == 0)
11642         break;
11643       else if (GET_CODE (rtl) == ZERO_EXTEND
11644                && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11645                && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
11646                   < HOST_BITS_PER_WIDE_INT
11647                /* If DW_OP_const{1,2,4}u won't be used, it is shorter
11648                   to expand zero extend as two shifts instead of
11649                   masking.  */
11650                && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
11651         {
11652           enum machine_mode imode = GET_MODE (XEXP (rtl, 0));
11653           mem_loc_result = op0;
11654           add_loc_descr (&mem_loc_result,
11655                          int_loc_descriptor (GET_MODE_MASK (imode)));
11656           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
11657         }
11658       else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11659         {
11660           int shift = DWARF2_ADDR_SIZE
11661                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
11662           shift *= BITS_PER_UNIT;
11663           if (GET_CODE (rtl) == SIGN_EXTEND)
11664             op = DW_OP_shra;
11665           else
11666             op = DW_OP_shr;
11667           mem_loc_result = op0;
11668           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11669           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
11670           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11671           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11672         }
11673       else if (!dwarf_strict)
11674         {
11675           dw_die_ref type_die1, type_die2;
11676           dw_loc_descr_ref cvt;
11677
11678           type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
11679                                           GET_CODE (rtl) == ZERO_EXTEND);
11680           if (type_die1 == NULL)
11681             break;
11682           type_die2 = base_type_for_mode (mode, 1);
11683           if (type_die2 == NULL)
11684             break;
11685           mem_loc_result = op0;
11686           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11687           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11688           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
11689           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11690           add_loc_descr (&mem_loc_result, cvt);
11691           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11692           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11693           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
11694           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11695           add_loc_descr (&mem_loc_result, cvt);
11696         }
11697       break;
11698
11699     case MEM:
11700       {
11701         rtx new_rtl = avoid_constant_pool_reference (rtl);
11702         if (new_rtl != rtl)
11703           {
11704             mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
11705                                                  initialized);
11706             if (mem_loc_result != NULL)
11707               return mem_loc_result;
11708           }
11709       }
11710       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
11711                                            get_address_mode (rtl), mode,
11712                                            VAR_INIT_STATUS_INITIALIZED);
11713       if (mem_loc_result == NULL)
11714         mem_loc_result = tls_mem_loc_descriptor (rtl);
11715       if (mem_loc_result != NULL)
11716         {
11717           if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11718               || GET_MODE_CLASS (mode) != MODE_INT)
11719             {
11720               dw_die_ref type_die;
11721               dw_loc_descr_ref deref;
11722
11723               if (dwarf_strict)
11724                 return NULL;
11725               type_die
11726                 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
11727               if (type_die == NULL)
11728                 return NULL;
11729               deref = new_loc_descr (DW_OP_GNU_deref_type,
11730                                      GET_MODE_SIZE (mode), 0);
11731               deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11732               deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11733               deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
11734               add_loc_descr (&mem_loc_result, deref);
11735             }
11736           else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11737             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
11738           else
11739             add_loc_descr (&mem_loc_result,
11740                            new_loc_descr (DW_OP_deref_size,
11741                                           GET_MODE_SIZE (mode), 0));
11742         }
11743       break;
11744
11745     case LO_SUM:
11746       return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
11747
11748     case LABEL_REF:
11749       /* Some ports can transform a symbol ref into a label ref, because
11750          the symbol ref is too far away and has to be dumped into a constant
11751          pool.  */
11752     case CONST:
11753     case SYMBOL_REF:
11754       if (GET_MODE_CLASS (mode) != MODE_INT
11755           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11756 #ifdef POINTERS_EXTEND_UNSIGNED
11757               && (mode != Pmode || mem_mode == VOIDmode)
11758 #endif
11759               ))
11760         break;
11761       if (GET_CODE (rtl) == SYMBOL_REF
11762           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11763         {
11764           dw_loc_descr_ref temp;
11765
11766           /* If this is not defined, we have no way to emit the data.  */
11767           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
11768             break;
11769
11770           /* We used to emit DW_OP_addr here, but that's wrong, since
11771              DW_OP_addr should be relocated by the debug info consumer,
11772              while DW_OP_GNU_push_tls_address operand should not.  */
11773           temp = new_loc_descr (DWARF2_ADDR_SIZE == 4
11774                                 ? DW_OP_const4u : DW_OP_const8u, 0, 0);
11775           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
11776           temp->dw_loc_oprnd1.v.val_addr = rtl;
11777           temp->dtprel = true;
11778
11779           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
11780           add_loc_descr (&mem_loc_result, temp);
11781
11782           break;
11783         }
11784
11785       if (!const_ok_for_output (rtl))
11786         break;
11787
11788     symref:
11789       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
11790       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
11791       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
11792       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
11793       break;
11794
11795     case CONCAT:
11796     case CONCATN:
11797     case VAR_LOCATION:
11798     case DEBUG_IMPLICIT_PTR:
11799       expansion_failed (NULL_TREE, rtl,
11800                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
11801       return 0;
11802
11803     case ENTRY_VALUE:
11804       if (dwarf_strict)
11805         return NULL;
11806       if (REG_P (ENTRY_VALUE_EXP (rtl)))
11807         {
11808           if (GET_MODE_CLASS (mode) != MODE_INT
11809               || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11810             op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11811                                       VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11812           else
11813             op0
11814               = one_reg_loc_descriptor (dbx_reg_number (ENTRY_VALUE_EXP (rtl)),
11815                                         VAR_INIT_STATUS_INITIALIZED);
11816         }
11817       else if (MEM_P (ENTRY_VALUE_EXP (rtl))
11818                && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
11819         {
11820           op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11821                                     VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11822           if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
11823             return NULL;
11824         }
11825       else
11826         gcc_unreachable ();
11827       if (op0 == NULL)
11828         return NULL;
11829       mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
11830       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
11831       mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
11832       break;
11833
11834     case DEBUG_PARAMETER_REF:
11835       mem_loc_result = parameter_ref_descriptor (rtl);
11836       break;
11837
11838     case PRE_MODIFY:
11839       /* Extract the PLUS expression nested inside and fall into
11840          PLUS code below.  */
11841       rtl = XEXP (rtl, 1);
11842       goto plus;
11843
11844     case PRE_INC:
11845     case PRE_DEC:
11846       /* Turn these into a PLUS expression and fall into the PLUS code
11847          below.  */
11848       rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
11849                           GEN_INT (GET_CODE (rtl) == PRE_INC
11850                                    ? GET_MODE_UNIT_SIZE (mem_mode)
11851                                    : -GET_MODE_UNIT_SIZE (mem_mode)));
11852
11853       /* ... fall through ...  */
11854
11855     case PLUS:
11856     plus:
11857       if (is_based_loc (rtl)
11858           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11859           && GET_MODE_CLASS (mode) == MODE_INT)
11860         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
11861                                           INTVAL (XEXP (rtl, 1)),
11862                                           VAR_INIT_STATUS_INITIALIZED);
11863       else
11864         {
11865           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11866                                                VAR_INIT_STATUS_INITIALIZED);
11867           if (mem_loc_result == 0)
11868             break;
11869
11870           if (CONST_INT_P (XEXP (rtl, 1))
11871               && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11872             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
11873           else
11874             {
11875               op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11876                                         VAR_INIT_STATUS_INITIALIZED);
11877               if (op1 == 0)
11878                 break;
11879               add_loc_descr (&mem_loc_result, op1);
11880               add_loc_descr (&mem_loc_result,
11881                              new_loc_descr (DW_OP_plus, 0, 0));
11882             }
11883         }
11884       break;
11885
11886     /* If a pseudo-reg is optimized away, it is possible for it to
11887        be replaced with a MEM containing a multiply or shift.  */
11888     case MINUS:
11889       op = DW_OP_minus;
11890       goto do_binop;
11891
11892     case MULT:
11893       op = DW_OP_mul;
11894       goto do_binop;
11895
11896     case DIV:
11897       if (!dwarf_strict
11898           && GET_MODE_CLASS (mode) == MODE_INT
11899           && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11900         {
11901           mem_loc_result = typed_binop (DW_OP_div, rtl,
11902                                         base_type_for_mode (mode, 0),
11903                                         mode, mem_mode);
11904           break;
11905         }
11906       op = DW_OP_div;
11907       goto do_binop;
11908
11909     case UMOD:
11910       op = DW_OP_mod;
11911       goto do_binop;
11912
11913     case ASHIFT:
11914       op = DW_OP_shl;
11915       goto do_shift;
11916
11917     case ASHIFTRT:
11918       op = DW_OP_shra;
11919       goto do_shift;
11920
11921     case LSHIFTRT:
11922       op = DW_OP_shr;
11923       goto do_shift;
11924
11925     do_shift:
11926       if (GET_MODE_CLASS (mode) != MODE_INT)
11927         break;
11928       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11929                                 VAR_INIT_STATUS_INITIALIZED);
11930       {
11931         rtx rtlop1 = XEXP (rtl, 1);
11932         if (GET_MODE (rtlop1) != VOIDmode
11933             && GET_MODE_BITSIZE (GET_MODE (rtlop1))
11934                < GET_MODE_BITSIZE (mode))
11935           rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11936         op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11937                                   VAR_INIT_STATUS_INITIALIZED);
11938       }
11939
11940       if (op0 == 0 || op1 == 0)
11941         break;
11942
11943       mem_loc_result = op0;
11944       add_loc_descr (&mem_loc_result, op1);
11945       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11946       break;
11947
11948     case AND:
11949       op = DW_OP_and;
11950       goto do_binop;
11951
11952     case IOR:
11953       op = DW_OP_or;
11954       goto do_binop;
11955
11956     case XOR:
11957       op = DW_OP_xor;
11958       goto do_binop;
11959
11960     do_binop:
11961       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11962                                 VAR_INIT_STATUS_INITIALIZED);
11963       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11964                                 VAR_INIT_STATUS_INITIALIZED);
11965
11966       if (op0 == 0 || op1 == 0)
11967         break;
11968
11969       mem_loc_result = op0;
11970       add_loc_descr (&mem_loc_result, op1);
11971       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11972       break;
11973
11974     case MOD:
11975       if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
11976         {
11977           mem_loc_result = typed_binop (DW_OP_mod, rtl,
11978                                         base_type_for_mode (mode, 0),
11979                                         mode, mem_mode);
11980           break;
11981         }
11982
11983       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11984                                 VAR_INIT_STATUS_INITIALIZED);
11985       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11986                                 VAR_INIT_STATUS_INITIALIZED);
11987
11988       if (op0 == 0 || op1 == 0)
11989         break;
11990
11991       mem_loc_result = op0;
11992       add_loc_descr (&mem_loc_result, op1);
11993       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
11994       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
11995       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
11996       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
11997       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
11998       break;
11999
12000     case UDIV:
12001       if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
12002         {
12003           if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
12004             {
12005               op = DW_OP_div;
12006               goto do_binop;
12007             }
12008           mem_loc_result = typed_binop (DW_OP_div, rtl,
12009                                         base_type_for_mode (mode, 1),
12010                                         mode, mem_mode);
12011         }
12012       break;
12013
12014     case NOT:
12015       op = DW_OP_not;
12016       goto do_unop;
12017
12018     case ABS:
12019       op = DW_OP_abs;
12020       goto do_unop;
12021
12022     case NEG:
12023       op = DW_OP_neg;
12024       goto do_unop;
12025
12026     do_unop:
12027       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12028                                 VAR_INIT_STATUS_INITIALIZED);
12029
12030       if (op0 == 0)
12031         break;
12032
12033       mem_loc_result = op0;
12034       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12035       break;
12036
12037     case CONST_INT:
12038       if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12039 #ifdef POINTERS_EXTEND_UNSIGNED
12040           || (mode == Pmode
12041               && mem_mode != VOIDmode
12042               && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
12043 #endif
12044           )
12045         {
12046           mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12047           break;
12048         }
12049       if (!dwarf_strict
12050           && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
12051               || GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_WIDE_INT))
12052         {
12053           dw_die_ref type_die = base_type_for_mode (mode, 1);
12054           enum machine_mode amode;
12055           if (type_die == NULL)
12056             return NULL;
12057           amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
12058                                  MODE_INT, 0);
12059           if (INTVAL (rtl) >= 0
12060               && amode != BLKmode
12061               && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
12062               /* const DW_OP_GNU_convert <XXX> vs.
12063                  DW_OP_GNU_const_type <XXX, 1, const>.  */
12064               && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
12065                  < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
12066             {
12067               mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12068               op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12069               op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12070               op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12071               op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
12072               add_loc_descr (&mem_loc_result, op0);
12073               return mem_loc_result;
12074             }
12075           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
12076                                           INTVAL (rtl));
12077           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12078           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12079           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12080           if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12081             mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12082           else
12083             {
12084               mem_loc_result->dw_loc_oprnd2.val_class
12085                 = dw_val_class_const_double;
12086               mem_loc_result->dw_loc_oprnd2.v.val_double
12087                 = shwi_to_double_int (INTVAL (rtl));
12088             }
12089         }
12090       break;
12091
12092     case CONST_DOUBLE:
12093       if (!dwarf_strict)
12094         {
12095           dw_die_ref type_die;
12096
12097           /* Note that a CONST_DOUBLE rtx could represent either an integer
12098              or a floating-point constant.  A CONST_DOUBLE is used whenever
12099              the constant requires more than one word in order to be
12100              adequately represented.  We output CONST_DOUBLEs as blocks.  */
12101           if (mode == VOIDmode
12102               || (GET_MODE (rtl) == VOIDmode
12103                   && GET_MODE_BITSIZE (mode) != 2 * HOST_BITS_PER_WIDE_INT))
12104             break;
12105           type_die = base_type_for_mode (mode,
12106                                          GET_MODE_CLASS (mode) == MODE_INT);
12107           if (type_die == NULL)
12108             return NULL;
12109           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
12110           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12111           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12112           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12113           if (SCALAR_FLOAT_MODE_P (mode))
12114             {
12115               unsigned int length = GET_MODE_SIZE (mode);
12116               unsigned char *array
12117                   = (unsigned char*) ggc_alloc_atomic (length);
12118
12119               insert_float (rtl, array);
12120               mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12121               mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12122               mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12123               mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12124             }
12125           else
12126             {
12127               mem_loc_result->dw_loc_oprnd2.val_class
12128                 = dw_val_class_const_double;
12129               mem_loc_result->dw_loc_oprnd2.v.val_double
12130                 = rtx_to_double_int (rtl);
12131             }
12132         }
12133       break;
12134
12135     case EQ:
12136       mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
12137       break;
12138
12139     case GE:
12140       mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12141       break;
12142
12143     case GT:
12144       mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12145       break;
12146
12147     case LE:
12148       mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12149       break;
12150
12151     case LT:
12152       mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12153       break;
12154
12155     case NE:
12156       mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
12157       break;
12158
12159     case GEU:
12160       mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12161       break;
12162
12163     case GTU:
12164       mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12165       break;
12166
12167     case LEU:
12168       mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12169       break;
12170
12171     case LTU:
12172       mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12173       break;
12174
12175     case UMIN:
12176     case UMAX:
12177       if (GET_MODE_CLASS (mode) != MODE_INT)
12178         break;
12179       /* FALLTHRU */
12180     case SMIN:
12181     case SMAX:
12182       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
12183       break;
12184
12185     case ZERO_EXTRACT:
12186     case SIGN_EXTRACT:
12187       if (CONST_INT_P (XEXP (rtl, 1))
12188           && CONST_INT_P (XEXP (rtl, 2))
12189           && ((unsigned) INTVAL (XEXP (rtl, 1))
12190               + (unsigned) INTVAL (XEXP (rtl, 2))
12191               <= GET_MODE_BITSIZE (mode))
12192           && GET_MODE_CLASS (mode) == MODE_INT
12193           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12194           && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
12195         {
12196           int shift, size;
12197           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12198                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
12199           if (op0 == 0)
12200             break;
12201           if (GET_CODE (rtl) == SIGN_EXTRACT)
12202             op = DW_OP_shra;
12203           else
12204             op = DW_OP_shr;
12205           mem_loc_result = op0;
12206           size = INTVAL (XEXP (rtl, 1));
12207           shift = INTVAL (XEXP (rtl, 2));
12208           if (BITS_BIG_ENDIAN)
12209             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12210                     - shift - size;
12211           if (shift + size != (int) DWARF2_ADDR_SIZE)
12212             {
12213               add_loc_descr (&mem_loc_result,
12214                              int_loc_descriptor (DWARF2_ADDR_SIZE
12215                                                  - shift - size));
12216               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12217             }
12218           if (size != (int) DWARF2_ADDR_SIZE)
12219             {
12220               add_loc_descr (&mem_loc_result,
12221                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
12222               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12223             }
12224         }
12225       break;
12226
12227     case IF_THEN_ELSE:
12228       {
12229         dw_loc_descr_ref op2, bra_node, drop_node;
12230         op0 = mem_loc_descriptor (XEXP (rtl, 0),
12231                                   GET_MODE (XEXP (rtl, 0)) == VOIDmode
12232                                   ? word_mode : GET_MODE (XEXP (rtl, 0)),
12233                                   mem_mode, VAR_INIT_STATUS_INITIALIZED);
12234         op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12235                                   VAR_INIT_STATUS_INITIALIZED);
12236         op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
12237                                   VAR_INIT_STATUS_INITIALIZED);
12238         if (op0 == NULL || op1 == NULL || op2 == NULL)
12239           break;
12240
12241         mem_loc_result = op1;
12242         add_loc_descr (&mem_loc_result, op2);
12243         add_loc_descr (&mem_loc_result, op0);
12244         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12245         add_loc_descr (&mem_loc_result, bra_node);
12246         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
12247         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12248         add_loc_descr (&mem_loc_result, drop_node);
12249         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12250         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12251       }
12252       break;
12253
12254     case FLOAT_EXTEND:
12255     case FLOAT_TRUNCATE:
12256     case FLOAT:
12257     case UNSIGNED_FLOAT:
12258     case FIX:
12259     case UNSIGNED_FIX:
12260       if (!dwarf_strict)
12261         {
12262           dw_die_ref type_die;
12263           dw_loc_descr_ref cvt;
12264
12265           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12266                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
12267           if (op0 == NULL)
12268             break;
12269           if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
12270               && (GET_CODE (rtl) == FLOAT
12271                   || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
12272                      <= DWARF2_ADDR_SIZE))
12273             {
12274               type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12275                                              GET_CODE (rtl) == UNSIGNED_FLOAT);
12276               if (type_die == NULL)
12277                 break;
12278               cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12279               cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12280               cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12281               cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12282               add_loc_descr (&op0, cvt);
12283             }
12284           type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
12285           if (type_die == NULL)
12286             break;
12287           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12288           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12289           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12290           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12291           add_loc_descr (&op0, cvt);
12292           if (GET_MODE_CLASS (mode) == MODE_INT
12293               && (GET_CODE (rtl) == FIX
12294                   || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
12295             {
12296               op0 = convert_descriptor_to_mode (mode, op0);
12297               if (op0 == NULL)
12298                 break;
12299             }
12300           mem_loc_result = op0;
12301         }
12302       break;
12303
12304     case CLZ:
12305     case CTZ:
12306     case FFS:
12307       mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
12308       break;
12309
12310     case POPCOUNT:
12311     case PARITY:
12312       mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
12313       break;
12314
12315     case BSWAP:
12316       mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
12317       break;
12318
12319     case ROTATE:
12320     case ROTATERT:
12321       mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
12322       break;
12323
12324     case COMPARE:
12325     case TRUNCATE:
12326       /* In theory, we could implement the above.  */
12327       /* DWARF cannot represent the unsigned compare operations
12328          natively.  */
12329     case SS_MULT:
12330     case US_MULT:
12331     case SS_DIV:
12332     case US_DIV:
12333     case SS_PLUS:
12334     case US_PLUS:
12335     case SS_MINUS:
12336     case US_MINUS:
12337     case SS_NEG:
12338     case US_NEG:
12339     case SS_ABS:
12340     case SS_ASHIFT:
12341     case US_ASHIFT:
12342     case SS_TRUNCATE:
12343     case US_TRUNCATE:
12344     case UNORDERED:
12345     case ORDERED:
12346     case UNEQ:
12347     case UNGE:
12348     case UNGT:
12349     case UNLE:
12350     case UNLT:
12351     case LTGT:
12352     case FRACT_CONVERT:
12353     case UNSIGNED_FRACT_CONVERT:
12354     case SAT_FRACT:
12355     case UNSIGNED_SAT_FRACT:
12356     case SQRT:
12357     case ASM_OPERANDS:
12358     case VEC_MERGE:
12359     case VEC_SELECT:
12360     case VEC_CONCAT:
12361     case VEC_DUPLICATE:
12362     case UNSPEC:
12363     case HIGH:
12364     case FMA:
12365     case STRICT_LOW_PART:
12366     case CONST_VECTOR:
12367     case CONST_FIXED:
12368     case CLRSB:
12369       /* If delegitimize_address couldn't do anything with the UNSPEC, we
12370          can't express it in the debug info.  This can happen e.g. with some
12371          TLS UNSPECs.  */
12372       break;
12373
12374     case CONST_STRING:
12375       resolve_one_addr (&rtl, NULL);
12376       goto symref;
12377
12378     default:
12379 #ifdef ENABLE_CHECKING
12380       print_rtl (stderr, rtl);
12381       gcc_unreachable ();
12382 #else
12383       break;
12384 #endif
12385     }
12386
12387   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12388     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12389
12390   return mem_loc_result;
12391 }
12392
12393 /* Return a descriptor that describes the concatenation of two locations.
12394    This is typically a complex variable.  */
12395
12396 static dw_loc_descr_ref
12397 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
12398 {
12399   dw_loc_descr_ref cc_loc_result = NULL;
12400   dw_loc_descr_ref x0_ref
12401     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12402   dw_loc_descr_ref x1_ref
12403     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12404
12405   if (x0_ref == 0 || x1_ref == 0)
12406     return 0;
12407
12408   cc_loc_result = x0_ref;
12409   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
12410
12411   add_loc_descr (&cc_loc_result, x1_ref);
12412   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
12413
12414   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12415     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12416
12417   return cc_loc_result;
12418 }
12419
12420 /* Return a descriptor that describes the concatenation of N
12421    locations.  */
12422
12423 static dw_loc_descr_ref
12424 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
12425 {
12426   unsigned int i;
12427   dw_loc_descr_ref cc_loc_result = NULL;
12428   unsigned int n = XVECLEN (concatn, 0);
12429
12430   for (i = 0; i < n; ++i)
12431     {
12432       dw_loc_descr_ref ref;
12433       rtx x = XVECEXP (concatn, 0, i);
12434
12435       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12436       if (ref == NULL)
12437         return NULL;
12438
12439       add_loc_descr (&cc_loc_result, ref);
12440       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
12441     }
12442
12443   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12444     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12445
12446   return cc_loc_result;
12447 }
12448
12449 /* Helper function for loc_descriptor.  Return DW_OP_GNU_implicit_pointer
12450    for DEBUG_IMPLICIT_PTR RTL.  */
12451
12452 static dw_loc_descr_ref
12453 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
12454 {
12455   dw_loc_descr_ref ret;
12456   dw_die_ref ref;
12457
12458   if (dwarf_strict)
12459     return NULL;
12460   gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
12461               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
12462               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
12463   ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
12464   ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
12465   ret->dw_loc_oprnd2.val_class = dw_val_class_const;
12466   if (ref)
12467     {
12468       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12469       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12470       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12471     }
12472   else
12473     {
12474       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12475       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
12476     }
12477   return ret;
12478 }
12479
12480 /* Output a proper Dwarf location descriptor for a variable or parameter
12481    which is either allocated in a register or in a memory location.  For a
12482    register, we just generate an OP_REG and the register number.  For a
12483    memory location we provide a Dwarf postfix expression describing how to
12484    generate the (dynamic) address of the object onto the address stack.
12485
12486    MODE is mode of the decl if this loc_descriptor is going to be used in
12487    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
12488    allowed, VOIDmode otherwise.
12489
12490    If we don't know how to describe it, return 0.  */
12491
12492 static dw_loc_descr_ref
12493 loc_descriptor (rtx rtl, enum machine_mode mode,
12494                 enum var_init_status initialized)
12495 {
12496   dw_loc_descr_ref loc_result = NULL;
12497
12498   switch (GET_CODE (rtl))
12499     {
12500     case SUBREG:
12501       /* The case of a subreg may arise when we have a local (register)
12502          variable or a formal (register) parameter which doesn't quite fill
12503          up an entire register.  For now, just assume that it is
12504          legitimate to make the Dwarf info refer to the whole register which
12505          contains the given subreg.  */
12506       if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
12507         loc_result = loc_descriptor (SUBREG_REG (rtl),
12508                                      GET_MODE (SUBREG_REG (rtl)), initialized);
12509       else
12510         goto do_default;
12511       break;
12512
12513     case REG:
12514       loc_result = reg_loc_descriptor (rtl, initialized);
12515       break;
12516
12517     case MEM:
12518       loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
12519                                        GET_MODE (rtl), initialized);
12520       if (loc_result == NULL)
12521         loc_result = tls_mem_loc_descriptor (rtl);
12522       if (loc_result == NULL)
12523         {
12524           rtx new_rtl = avoid_constant_pool_reference (rtl);
12525           if (new_rtl != rtl)
12526             loc_result = loc_descriptor (new_rtl, mode, initialized);
12527         }
12528       break;
12529
12530     case CONCAT:
12531       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
12532                                           initialized);
12533       break;
12534
12535     case CONCATN:
12536       loc_result = concatn_loc_descriptor (rtl, initialized);
12537       break;
12538
12539     case VAR_LOCATION:
12540       /* Single part.  */
12541       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
12542         {
12543           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
12544           if (GET_CODE (loc) == EXPR_LIST)
12545             loc = XEXP (loc, 0);
12546           loc_result = loc_descriptor (loc, mode, initialized);
12547           break;
12548         }
12549
12550       rtl = XEXP (rtl, 1);
12551       /* FALLTHRU */
12552
12553     case PARALLEL:
12554       {
12555         rtvec par_elems = XVEC (rtl, 0);
12556         int num_elem = GET_NUM_ELEM (par_elems);
12557         enum machine_mode mode;
12558         int i;
12559
12560         /* Create the first one, so we have something to add to.  */
12561         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
12562                                      VOIDmode, initialized);
12563         if (loc_result == NULL)
12564           return NULL;
12565         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
12566         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12567         for (i = 1; i < num_elem; i++)
12568           {
12569             dw_loc_descr_ref temp;
12570
12571             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
12572                                    VOIDmode, initialized);
12573             if (temp == NULL)
12574               return NULL;
12575             add_loc_descr (&loc_result, temp);
12576             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
12577             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12578           }
12579       }
12580       break;
12581
12582     case CONST_INT:
12583       if (mode != VOIDmode && mode != BLKmode)
12584         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
12585                                                     INTVAL (rtl));
12586       break;
12587
12588     case CONST_DOUBLE:
12589       if (mode == VOIDmode)
12590         mode = GET_MODE (rtl);
12591
12592       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12593         {
12594           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12595
12596           /* Note that a CONST_DOUBLE rtx could represent either an integer
12597              or a floating-point constant.  A CONST_DOUBLE is used whenever
12598              the constant requires more than one word in order to be
12599              adequately represented.  We output CONST_DOUBLEs as blocks.  */
12600           loc_result = new_loc_descr (DW_OP_implicit_value,
12601                                       GET_MODE_SIZE (mode), 0);
12602           if (SCALAR_FLOAT_MODE_P (mode))
12603             {
12604               unsigned int length = GET_MODE_SIZE (mode);
12605               unsigned char *array
12606                   = (unsigned char*) ggc_alloc_atomic (length);
12607
12608               insert_float (rtl, array);
12609               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12610               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12611               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12612               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12613             }
12614           else
12615             {
12616               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
12617               loc_result->dw_loc_oprnd2.v.val_double
12618                 = rtx_to_double_int (rtl);
12619             }
12620         }
12621       break;
12622
12623     case CONST_VECTOR:
12624       if (mode == VOIDmode)
12625         mode = GET_MODE (rtl);
12626
12627       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12628         {
12629           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
12630           unsigned int length = CONST_VECTOR_NUNITS (rtl);
12631           unsigned char *array = (unsigned char *)
12632             ggc_alloc_atomic (length * elt_size);
12633           unsigned int i;
12634           unsigned char *p;
12635
12636           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12637           switch (GET_MODE_CLASS (mode))
12638             {
12639             case MODE_VECTOR_INT:
12640               for (i = 0, p = array; i < length; i++, p += elt_size)
12641                 {
12642                   rtx elt = CONST_VECTOR_ELT (rtl, i);
12643                   double_int val = rtx_to_double_int (elt);
12644
12645                   if (elt_size <= sizeof (HOST_WIDE_INT))
12646                     insert_int (double_int_to_shwi (val), elt_size, p);
12647                   else
12648                     {
12649                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
12650                       insert_double (val, p);
12651                     }
12652                 }
12653               break;
12654
12655             case MODE_VECTOR_FLOAT:
12656               for (i = 0, p = array; i < length; i++, p += elt_size)
12657                 {
12658                   rtx elt = CONST_VECTOR_ELT (rtl, i);
12659                   insert_float (elt, p);
12660                 }
12661               break;
12662
12663             default:
12664               gcc_unreachable ();
12665             }
12666
12667           loc_result = new_loc_descr (DW_OP_implicit_value,
12668                                       length * elt_size, 0);
12669           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12670           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
12671           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
12672           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12673         }
12674       break;
12675
12676     case CONST:
12677       if (mode == VOIDmode
12678           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
12679           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
12680           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
12681         {
12682           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
12683           break;
12684         }
12685       /* FALLTHROUGH */
12686     case SYMBOL_REF:
12687       if (!const_ok_for_output (rtl))
12688         break;
12689     case LABEL_REF:
12690       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
12691           && (dwarf_version >= 4 || !dwarf_strict))
12692         {
12693           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
12694           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
12695           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
12696           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
12697           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
12698         }
12699       break;
12700
12701     case DEBUG_IMPLICIT_PTR:
12702       loc_result = implicit_ptr_descriptor (rtl, 0);
12703       break;
12704
12705     case PLUS:
12706       if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
12707           && CONST_INT_P (XEXP (rtl, 1)))
12708         {
12709           loc_result
12710             = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
12711           break;
12712         }
12713       /* FALLTHRU */
12714     do_default:
12715     default:
12716       if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
12717            && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
12718            && dwarf_version >= 4)
12719           || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
12720         {
12721           /* Value expression.  */
12722           loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
12723           if (loc_result)
12724             add_loc_descr (&loc_result,
12725                            new_loc_descr (DW_OP_stack_value, 0, 0));
12726         }
12727       break;
12728     }
12729
12730   return loc_result;
12731 }
12732
12733 /* We need to figure out what section we should use as the base for the
12734    address ranges where a given location is valid.
12735    1. If this particular DECL has a section associated with it, use that.
12736    2. If this function has a section associated with it, use that.
12737    3. Otherwise, use the text section.
12738    XXX: If you split a variable across multiple sections, we won't notice.  */
12739
12740 static const char *
12741 secname_for_decl (const_tree decl)
12742 {
12743   const char *secname;
12744
12745   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
12746     {
12747       tree sectree = DECL_SECTION_NAME (decl);
12748       secname = TREE_STRING_POINTER (sectree);
12749     }
12750   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
12751     {
12752       tree sectree = DECL_SECTION_NAME (current_function_decl);
12753       secname = TREE_STRING_POINTER (sectree);
12754     }
12755   else if (cfun && in_cold_section_p)
12756     secname = crtl->subsections.cold_section_label;
12757   else
12758     secname = text_section_label;
12759
12760   return secname;
12761 }
12762
12763 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
12764
12765 static bool
12766 decl_by_reference_p (tree decl)
12767 {
12768   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
12769            || TREE_CODE (decl) == VAR_DECL)
12770           && DECL_BY_REFERENCE (decl));
12771 }
12772
12773 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12774    for VARLOC.  */
12775
12776 static dw_loc_descr_ref
12777 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
12778                enum var_init_status initialized)
12779 {
12780   int have_address = 0;
12781   dw_loc_descr_ref descr;
12782   enum machine_mode mode;
12783
12784   if (want_address != 2)
12785     {
12786       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
12787       /* Single part.  */
12788       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12789         {
12790           varloc = PAT_VAR_LOCATION_LOC (varloc);
12791           if (GET_CODE (varloc) == EXPR_LIST)
12792             varloc = XEXP (varloc, 0);
12793           mode = GET_MODE (varloc);
12794           if (MEM_P (varloc))
12795             {
12796               rtx addr = XEXP (varloc, 0);
12797               descr = mem_loc_descriptor (addr, get_address_mode (varloc),
12798                                           mode, initialized);
12799               if (descr)
12800                 have_address = 1;
12801               else
12802                 {
12803                   rtx x = avoid_constant_pool_reference (varloc);
12804                   if (x != varloc)
12805                     descr = mem_loc_descriptor (x, mode, VOIDmode,
12806                                                 initialized);
12807                 }
12808             }
12809           else
12810             descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
12811         }
12812       else
12813         return 0;
12814     }
12815   else
12816     {
12817       if (GET_CODE (varloc) == VAR_LOCATION)
12818         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
12819       else
12820         mode = DECL_MODE (loc);
12821       descr = loc_descriptor (varloc, mode, initialized);
12822       have_address = 1;
12823     }
12824
12825   if (!descr)
12826     return 0;
12827
12828   if (want_address == 2 && !have_address
12829       && (dwarf_version >= 4 || !dwarf_strict))
12830     {
12831       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
12832         {
12833           expansion_failed (loc, NULL_RTX,
12834                             "DWARF address size mismatch");
12835           return 0;
12836         }
12837       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
12838       have_address = 1;
12839     }
12840   /* Show if we can't fill the request for an address.  */
12841   if (want_address && !have_address)
12842     {
12843       expansion_failed (loc, NULL_RTX,
12844                         "Want address and only have value");
12845       return 0;
12846     }
12847
12848   /* If we've got an address and don't want one, dereference.  */
12849   if (!want_address && have_address)
12850     {
12851       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
12852       enum dwarf_location_atom op;
12853
12854       if (size > DWARF2_ADDR_SIZE || size == -1)
12855         {
12856           expansion_failed (loc, NULL_RTX,
12857                             "DWARF address size mismatch");
12858           return 0;
12859         }
12860       else if (size == DWARF2_ADDR_SIZE)
12861         op = DW_OP_deref;
12862       else
12863         op = DW_OP_deref_size;
12864
12865       add_loc_descr (&descr, new_loc_descr (op, size, 0));
12866     }
12867
12868   return descr;
12869 }
12870
12871 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
12872    if it is not possible.  */
12873
12874 static dw_loc_descr_ref
12875 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
12876 {
12877   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
12878     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
12879   else if (dwarf_version >= 3 || !dwarf_strict)
12880     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
12881   else
12882     return NULL;
12883 }
12884
12885 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12886    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
12887
12888 static dw_loc_descr_ref
12889 dw_sra_loc_expr (tree decl, rtx loc)
12890 {
12891   rtx p;
12892   unsigned int padsize = 0;
12893   dw_loc_descr_ref descr, *descr_tail;
12894   unsigned HOST_WIDE_INT decl_size;
12895   rtx varloc;
12896   enum var_init_status initialized;
12897
12898   if (DECL_SIZE (decl) == NULL
12899       || !host_integerp (DECL_SIZE (decl), 1))
12900     return NULL;
12901
12902   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
12903   descr = NULL;
12904   descr_tail = &descr;
12905
12906   for (p = loc; p; p = XEXP (p, 1))
12907     {
12908       unsigned int bitsize = decl_piece_bitsize (p);
12909       rtx loc_note = *decl_piece_varloc_ptr (p);
12910       dw_loc_descr_ref cur_descr;
12911       dw_loc_descr_ref *tail, last = NULL;
12912       unsigned int opsize = 0;
12913
12914       if (loc_note == NULL_RTX
12915           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
12916         {
12917           padsize += bitsize;
12918           continue;
12919         }
12920       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
12921       varloc = NOTE_VAR_LOCATION (loc_note);
12922       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
12923       if (cur_descr == NULL)
12924         {
12925           padsize += bitsize;
12926           continue;
12927         }
12928
12929       /* Check that cur_descr either doesn't use
12930          DW_OP_*piece operations, or their sum is equal
12931          to bitsize.  Otherwise we can't embed it.  */
12932       for (tail = &cur_descr; *tail != NULL;
12933            tail = &(*tail)->dw_loc_next)
12934         if ((*tail)->dw_loc_opc == DW_OP_piece)
12935           {
12936             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
12937                       * BITS_PER_UNIT;
12938             last = *tail;
12939           }
12940         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
12941           {
12942             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
12943             last = *tail;
12944           }
12945
12946       if (last != NULL && opsize != bitsize)
12947         {
12948           padsize += bitsize;
12949           continue;
12950         }
12951
12952       /* If there is a hole, add DW_OP_*piece after empty DWARF
12953          expression, which means that those bits are optimized out.  */
12954       if (padsize)
12955         {
12956           if (padsize > decl_size)
12957             return NULL;
12958           decl_size -= padsize;
12959           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
12960           if (*descr_tail == NULL)
12961             return NULL;
12962           descr_tail = &(*descr_tail)->dw_loc_next;
12963           padsize = 0;
12964         }
12965       *descr_tail = cur_descr;
12966       descr_tail = tail;
12967       if (bitsize > decl_size)
12968         return NULL;
12969       decl_size -= bitsize;
12970       if (last == NULL)
12971         {
12972           HOST_WIDE_INT offset = 0;
12973           if (GET_CODE (varloc) == VAR_LOCATION
12974               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12975             {
12976               varloc = PAT_VAR_LOCATION_LOC (varloc);
12977               if (GET_CODE (varloc) == EXPR_LIST)
12978                 varloc = XEXP (varloc, 0);
12979             }
12980           do 
12981             {
12982               if (GET_CODE (varloc) == CONST
12983                   || GET_CODE (varloc) == SIGN_EXTEND
12984                   || GET_CODE (varloc) == ZERO_EXTEND)
12985                 varloc = XEXP (varloc, 0);
12986               else if (GET_CODE (varloc) == SUBREG)
12987                 varloc = SUBREG_REG (varloc);
12988               else
12989                 break;
12990             }
12991           while (1);
12992           /* DW_OP_bit_size offset should be zero for register
12993              or implicit location descriptions and empty location
12994              descriptions, but for memory addresses needs big endian
12995              adjustment.  */
12996           if (MEM_P (varloc))
12997             {
12998               unsigned HOST_WIDE_INT memsize
12999                 = MEM_SIZE (varloc) * BITS_PER_UNIT;
13000               if (memsize != bitsize)
13001                 {
13002                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
13003                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
13004                     return NULL;
13005                   if (memsize < bitsize)
13006                     return NULL;
13007                   if (BITS_BIG_ENDIAN)
13008                     offset = memsize - bitsize;
13009                 }
13010             }
13011
13012           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
13013           if (*descr_tail == NULL)
13014             return NULL;
13015           descr_tail = &(*descr_tail)->dw_loc_next;
13016         }
13017     }
13018
13019   /* If there were any non-empty expressions, add padding till the end of
13020      the decl.  */
13021   if (descr != NULL && decl_size != 0)
13022     {
13023       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
13024       if (*descr_tail == NULL)
13025         return NULL;
13026     }
13027   return descr;
13028 }
13029
13030 /* Return the dwarf representation of the location list LOC_LIST of
13031    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
13032    function.  */
13033
13034 static dw_loc_list_ref
13035 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
13036 {
13037   const char *endname, *secname;
13038   rtx varloc;
13039   enum var_init_status initialized;
13040   struct var_loc_node *node;
13041   dw_loc_descr_ref descr;
13042   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13043   dw_loc_list_ref list = NULL;
13044   dw_loc_list_ref *listp = &list;
13045
13046   /* Now that we know what section we are using for a base,
13047      actually construct the list of locations.
13048      The first location information is what is passed to the
13049      function that creates the location list, and the remaining
13050      locations just get added on to that list.
13051      Note that we only know the start address for a location
13052      (IE location changes), so to build the range, we use
13053      the range [current location start, next location start].
13054      This means we have to special case the last node, and generate
13055      a range of [last location start, end of function label].  */
13056
13057   secname = secname_for_decl (decl);
13058
13059   for (node = loc_list->first; node; node = node->next)
13060     if (GET_CODE (node->loc) == EXPR_LIST
13061         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
13062       {
13063         if (GET_CODE (node->loc) == EXPR_LIST)
13064           {
13065             /* This requires DW_OP_{,bit_}piece, which is not usable
13066                inside DWARF expressions.  */
13067             if (want_address != 2)
13068               continue;
13069             descr = dw_sra_loc_expr (decl, node->loc);
13070             if (descr == NULL)
13071               continue;
13072           }
13073         else
13074           {
13075             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13076             varloc = NOTE_VAR_LOCATION (node->loc);
13077             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13078           }
13079         if (descr)
13080           {
13081             bool range_across_switch = false;
13082             /* If section switch happens in between node->label
13083                and node->next->label (or end of function) and
13084                we can't emit it as a single entry list,
13085                emit two ranges, first one ending at the end
13086                of first partition and second one starting at the
13087                beginning of second partition.  */
13088             if (node == loc_list->last_before_switch
13089                 && (node != loc_list->first || loc_list->first->next)
13090                 && current_function_decl)
13091               {
13092                 endname = cfun->fde->dw_fde_end;
13093                 range_across_switch = true;
13094               }
13095             /* The variable has a location between NODE->LABEL and
13096                NODE->NEXT->LABEL.  */
13097             else if (node->next)
13098               endname = node->next->label;
13099             /* If the variable has a location at the last label
13100                it keeps its location until the end of function.  */
13101             else if (!current_function_decl)
13102               endname = text_end_label;
13103             else
13104               {
13105                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
13106                                              current_function_funcdef_no);
13107                 endname = ggc_strdup (label_id);
13108               }
13109
13110             *listp = new_loc_list (descr, node->label, endname, secname);
13111             if (TREE_CODE (decl) == PARM_DECL
13112                 && node == loc_list->first
13113                 && GET_CODE (node->loc) == NOTE
13114                 && strcmp (node->label, endname) == 0)
13115               (*listp)->force = true;
13116             listp = &(*listp)->dw_loc_next;
13117
13118             if (range_across_switch)
13119               {
13120                 if (GET_CODE (node->loc) == EXPR_LIST)
13121                   descr = dw_sra_loc_expr (decl, node->loc);
13122                 else
13123                   {
13124                     initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13125                     varloc = NOTE_VAR_LOCATION (node->loc);
13126                     descr = dw_loc_list_1 (decl, varloc, want_address,
13127                                            initialized);
13128                   }
13129                 gcc_assert (descr);
13130                 /* The variable has a location between NODE->LABEL and
13131                    NODE->NEXT->LABEL.  */
13132                 if (node->next)
13133                   endname = node->next->label;
13134                 else
13135                   endname = cfun->fde->dw_fde_second_end;
13136                 *listp = new_loc_list (descr,
13137                                        cfun->fde->dw_fde_second_begin,
13138                                        endname, secname);
13139                 listp = &(*listp)->dw_loc_next;
13140               }
13141           }
13142       }
13143
13144   /* Try to avoid the overhead of a location list emitting a location
13145      expression instead, but only if we didn't have more than one
13146      location entry in the first place.  If some entries were not
13147      representable, we don't want to pretend a single entry that was
13148      applies to the entire scope in which the variable is
13149      available.  */
13150   if (list && loc_list->first->next)
13151     gen_llsym (list);
13152
13153   return list;
13154 }
13155
13156 /* Return if the loc_list has only single element and thus can be represented
13157    as location description.   */
13158
13159 static bool
13160 single_element_loc_list_p (dw_loc_list_ref list)
13161 {
13162   gcc_assert (!list->dw_loc_next || list->ll_symbol);
13163   return !list->ll_symbol;
13164 }
13165
13166 /* To each location in list LIST add loc descr REF.  */
13167
13168 static void
13169 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
13170 {
13171   dw_loc_descr_ref copy;
13172   add_loc_descr (&list->expr, ref);
13173   list = list->dw_loc_next;
13174   while (list)
13175     {
13176       copy = ggc_alloc_dw_loc_descr_node ();
13177       memcpy (copy, ref, sizeof (dw_loc_descr_node));
13178       add_loc_descr (&list->expr, copy);
13179       while (copy->dw_loc_next)
13180         {
13181           dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node ();
13182           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
13183           copy->dw_loc_next = new_copy;
13184           copy = new_copy;
13185         }
13186       list = list->dw_loc_next;
13187     }
13188 }
13189
13190 /* Given two lists RET and LIST
13191    produce location list that is result of adding expression in LIST
13192    to expression in RET on each possition in program.
13193    Might be destructive on both RET and LIST.
13194
13195    TODO: We handle only simple cases of RET or LIST having at most one
13196    element. General case would inolve sorting the lists in program order
13197    and merging them that will need some additional work.
13198    Adding that will improve quality of debug info especially for SRA-ed
13199    structures.  */
13200
13201 static void
13202 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
13203 {
13204   if (!list)
13205     return;
13206   if (!*ret)
13207     {
13208       *ret = list;
13209       return;
13210     }
13211   if (!list->dw_loc_next)
13212     {
13213       add_loc_descr_to_each (*ret, list->expr);
13214       return;
13215     }
13216   if (!(*ret)->dw_loc_next)
13217     {
13218       add_loc_descr_to_each (list, (*ret)->expr);
13219       *ret = list;
13220       return;
13221     }
13222   expansion_failed (NULL_TREE, NULL_RTX,
13223                     "Don't know how to merge two non-trivial"
13224                     " location lists.\n");
13225   *ret = NULL;
13226   return;
13227 }
13228
13229 /* LOC is constant expression.  Try a luck, look it up in constant
13230    pool and return its loc_descr of its address.  */
13231
13232 static dw_loc_descr_ref
13233 cst_pool_loc_descr (tree loc)
13234 {
13235   /* Get an RTL for this, if something has been emitted.  */
13236   rtx rtl = lookup_constant_def (loc);
13237
13238   if (!rtl || !MEM_P (rtl))
13239     {
13240       gcc_assert (!rtl);
13241       return 0;
13242     }
13243   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
13244
13245   /* TODO: We might get more coverage if we was actually delaying expansion
13246      of all expressions till end of compilation when constant pools are fully
13247      populated.  */
13248   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
13249     {
13250       expansion_failed (loc, NULL_RTX,
13251                         "CST value in contant pool but not marked.");
13252       return 0;
13253     }
13254   return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13255                              GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
13256 }
13257
13258 /* Return dw_loc_list representing address of addr_expr LOC
13259    by looking for innder INDIRECT_REF expression and turing it
13260    into simple arithmetics.  */
13261
13262 static dw_loc_list_ref
13263 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
13264 {
13265   tree obj, offset;
13266   HOST_WIDE_INT bitsize, bitpos, bytepos;
13267   enum machine_mode mode;
13268   int volatilep;
13269   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13270   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13271
13272   obj = get_inner_reference (TREE_OPERAND (loc, 0),
13273                              &bitsize, &bitpos, &offset, &mode,
13274                              &unsignedp, &volatilep, false);
13275   STRIP_NOPS (obj);
13276   if (bitpos % BITS_PER_UNIT)
13277     {
13278       expansion_failed (loc, NULL_RTX, "bitfield access");
13279       return 0;
13280     }
13281   if (!INDIRECT_REF_P (obj))
13282     {
13283       expansion_failed (obj,
13284                         NULL_RTX, "no indirect ref in inner refrence");
13285       return 0;
13286     }
13287   if (!offset && !bitpos)
13288     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
13289   else if (toplev
13290            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
13291            && (dwarf_version >= 4 || !dwarf_strict))
13292     {
13293       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
13294       if (!list_ret)
13295         return 0;
13296       if (offset)
13297         {
13298           /* Variable offset.  */
13299           list_ret1 = loc_list_from_tree (offset, 0);
13300           if (list_ret1 == 0)
13301             return 0;
13302           add_loc_list (&list_ret, list_ret1);
13303           if (!list_ret)
13304             return 0;
13305           add_loc_descr_to_each (list_ret,
13306                                  new_loc_descr (DW_OP_plus, 0, 0));
13307         }
13308       bytepos = bitpos / BITS_PER_UNIT;
13309       if (bytepos > 0)
13310         add_loc_descr_to_each (list_ret,
13311                                new_loc_descr (DW_OP_plus_uconst,
13312                                               bytepos, 0));
13313       else if (bytepos < 0)
13314         loc_list_plus_const (list_ret, bytepos);
13315       add_loc_descr_to_each (list_ret,
13316                              new_loc_descr (DW_OP_stack_value, 0, 0));
13317     }
13318   return list_ret;
13319 }
13320
13321
13322 /* Generate Dwarf location list representing LOC.
13323    If WANT_ADDRESS is false, expression computing LOC will be computed
13324    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
13325    if WANT_ADDRESS is 2, expression computing address useable in location
13326      will be returned (i.e. DW_OP_reg can be used
13327      to refer to register values).  */
13328
13329 static dw_loc_list_ref
13330 loc_list_from_tree (tree loc, int want_address)
13331 {
13332   dw_loc_descr_ref ret = NULL, ret1 = NULL;
13333   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13334   int have_address = 0;
13335   enum dwarf_location_atom op;
13336
13337   /* ??? Most of the time we do not take proper care for sign/zero
13338      extending the values properly.  Hopefully this won't be a real
13339      problem...  */
13340
13341   switch (TREE_CODE (loc))
13342     {
13343     case ERROR_MARK:
13344       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
13345       return 0;
13346
13347     case PLACEHOLDER_EXPR:
13348       /* This case involves extracting fields from an object to determine the
13349          position of other fields.  We don't try to encode this here.  The
13350          only user of this is Ada, which encodes the needed information using
13351          the names of types.  */
13352       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
13353       return 0;
13354
13355     case CALL_EXPR:
13356       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
13357       /* There are no opcodes for these operations.  */
13358       return 0;
13359
13360     case PREINCREMENT_EXPR:
13361     case PREDECREMENT_EXPR:
13362     case POSTINCREMENT_EXPR:
13363     case POSTDECREMENT_EXPR:
13364       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
13365       /* There are no opcodes for these operations.  */
13366       return 0;
13367
13368     case ADDR_EXPR:
13369       /* If we already want an address, see if there is INDIRECT_REF inside
13370          e.g. for &this->field.  */
13371       if (want_address)
13372         {
13373           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
13374                        (loc, want_address == 2);
13375           if (list_ret)
13376             have_address = 1;
13377           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
13378                    && (ret = cst_pool_loc_descr (loc)))
13379             have_address = 1;
13380         }
13381         /* Otherwise, process the argument and look for the address.  */
13382       if (!list_ret && !ret)
13383         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
13384       else
13385         {
13386           if (want_address)
13387             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
13388           return NULL;
13389         }
13390       break;
13391
13392     case VAR_DECL:
13393       if (DECL_THREAD_LOCAL_P (loc))
13394         {
13395           rtx rtl;
13396           enum dwarf_location_atom first_op;
13397           enum dwarf_location_atom second_op;
13398           bool dtprel = false;
13399
13400           if (targetm.have_tls)
13401             {
13402               /* If this is not defined, we have no way to emit the
13403                  data.  */
13404               if (!targetm.asm_out.output_dwarf_dtprel)
13405                 return 0;
13406
13407                /* The way DW_OP_GNU_push_tls_address is specified, we
13408                   can only look up addresses of objects in the current
13409                   module.  We used DW_OP_addr as first op, but that's
13410                   wrong, because DW_OP_addr is relocated by the debug
13411                   info consumer, while DW_OP_GNU_push_tls_address
13412                   operand shouldn't be.  */
13413               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
13414                 return 0;
13415               first_op = DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u;
13416               dtprel = true;
13417               second_op = DW_OP_GNU_push_tls_address;
13418             }
13419           else
13420             {
13421               if (!targetm.emutls.debug_form_tls_address
13422                   || !(dwarf_version >= 3 || !dwarf_strict))
13423                 return 0;
13424               /* We stuffed the control variable into the DECL_VALUE_EXPR
13425                  to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
13426                  no longer appear in gimple code.  We used the control
13427                  variable in specific so that we could pick it up here.  */
13428               loc = DECL_VALUE_EXPR (loc);
13429               first_op = DW_OP_addr;
13430               second_op = DW_OP_form_tls_address;
13431             }
13432
13433           rtl = rtl_for_decl_location (loc);
13434           if (rtl == NULL_RTX)
13435             return 0;
13436
13437           if (!MEM_P (rtl))
13438             return 0;
13439           rtl = XEXP (rtl, 0);
13440           if (! CONSTANT_P (rtl))
13441             return 0;
13442
13443           ret = new_loc_descr (first_op, 0, 0);
13444           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13445           ret->dw_loc_oprnd1.v.val_addr = rtl;
13446           ret->dtprel = dtprel;
13447
13448           ret1 = new_loc_descr (second_op, 0, 0);
13449           add_loc_descr (&ret, ret1);
13450
13451           have_address = 1;
13452           break;
13453         }
13454       /* FALLTHRU */
13455
13456     case PARM_DECL:
13457     case RESULT_DECL:
13458       if (DECL_HAS_VALUE_EXPR_P (loc))
13459         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
13460                                    want_address);
13461       /* FALLTHRU */
13462
13463     case FUNCTION_DECL:
13464       {
13465         rtx rtl;
13466         var_loc_list *loc_list = lookup_decl_loc (loc);
13467
13468         if (loc_list && loc_list->first)
13469           {
13470             list_ret = dw_loc_list (loc_list, loc, want_address);
13471             have_address = want_address != 0;
13472             break;
13473           }
13474         rtl = rtl_for_decl_location (loc);
13475         if (rtl == NULL_RTX)
13476           {
13477             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
13478             return 0;
13479           }
13480         else if (CONST_INT_P (rtl))
13481           {
13482             HOST_WIDE_INT val = INTVAL (rtl);
13483             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13484               val &= GET_MODE_MASK (DECL_MODE (loc));
13485             ret = int_loc_descriptor (val);
13486           }
13487         else if (GET_CODE (rtl) == CONST_STRING)
13488           {
13489             expansion_failed (loc, NULL_RTX, "CONST_STRING");
13490             return 0;
13491           }
13492         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
13493           {
13494             ret = new_loc_descr (DW_OP_addr, 0, 0);
13495             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13496             ret->dw_loc_oprnd1.v.val_addr = rtl;
13497           }
13498         else
13499           {
13500             enum machine_mode mode, mem_mode;
13501
13502             /* Certain constructs can only be represented at top-level.  */
13503             if (want_address == 2)
13504               {
13505                 ret = loc_descriptor (rtl, VOIDmode,
13506                                       VAR_INIT_STATUS_INITIALIZED);
13507                 have_address = 1;
13508               }
13509             else
13510               {
13511                 mode = GET_MODE (rtl);
13512                 mem_mode = VOIDmode;
13513                 if (MEM_P (rtl))
13514                   {
13515                     mem_mode = mode;
13516                     mode = get_address_mode (rtl);
13517                     rtl = XEXP (rtl, 0);
13518                     have_address = 1;
13519                   }
13520                 ret = mem_loc_descriptor (rtl, mode, mem_mode,
13521                                           VAR_INIT_STATUS_INITIALIZED);
13522               }
13523             if (!ret)
13524               expansion_failed (loc, rtl,
13525                                 "failed to produce loc descriptor for rtl");
13526           }
13527       }
13528       break;
13529
13530     case MEM_REF:
13531       /* ??? FIXME.  */
13532       if (!integer_zerop (TREE_OPERAND (loc, 1)))
13533         return 0;
13534       /* Fallthru.  */
13535     case INDIRECT_REF:
13536       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13537       have_address = 1;
13538       break;
13539
13540     case COMPOUND_EXPR:
13541       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
13542
13543     CASE_CONVERT:
13544     case VIEW_CONVERT_EXPR:
13545     case SAVE_EXPR:
13546     case MODIFY_EXPR:
13547       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
13548
13549     case COMPONENT_REF:
13550     case BIT_FIELD_REF:
13551     case ARRAY_REF:
13552     case ARRAY_RANGE_REF:
13553     case REALPART_EXPR:
13554     case IMAGPART_EXPR:
13555       {
13556         tree obj, offset;
13557         HOST_WIDE_INT bitsize, bitpos, bytepos;
13558         enum machine_mode mode;
13559         int volatilep;
13560         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13561
13562         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
13563                                    &unsignedp, &volatilep, false);
13564
13565         gcc_assert (obj != loc);
13566
13567         list_ret = loc_list_from_tree (obj,
13568                                        want_address == 2
13569                                        && !bitpos && !offset ? 2 : 1);
13570         /* TODO: We can extract value of the small expression via shifting even
13571            for nonzero bitpos.  */
13572         if (list_ret == 0)
13573           return 0;
13574         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
13575           {
13576             expansion_failed (loc, NULL_RTX,
13577                               "bitfield access");
13578             return 0;
13579           }
13580
13581         if (offset != NULL_TREE)
13582           {
13583             /* Variable offset.  */
13584             list_ret1 = loc_list_from_tree (offset, 0);
13585             if (list_ret1 == 0)
13586               return 0;
13587             add_loc_list (&list_ret, list_ret1);
13588             if (!list_ret)
13589               return 0;
13590             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
13591           }
13592
13593         bytepos = bitpos / BITS_PER_UNIT;
13594         if (bytepos > 0)
13595           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
13596         else if (bytepos < 0)
13597           loc_list_plus_const (list_ret, bytepos);
13598
13599         have_address = 1;
13600         break;
13601       }
13602
13603     case INTEGER_CST:
13604       if ((want_address || !host_integerp (loc, 0))
13605           && (ret = cst_pool_loc_descr (loc)))
13606         have_address = 1;
13607       else if (want_address == 2
13608                && host_integerp (loc, 0)
13609                && (ret = address_of_int_loc_descriptor
13610                            (int_size_in_bytes (TREE_TYPE (loc)),
13611                             tree_low_cst (loc, 0))))
13612         have_address = 1;
13613       else if (host_integerp (loc, 0))
13614         ret = int_loc_descriptor (tree_low_cst (loc, 0));
13615       else
13616         {
13617           expansion_failed (loc, NULL_RTX,
13618                             "Integer operand is not host integer");
13619           return 0;
13620         }
13621       break;
13622
13623     case CONSTRUCTOR:
13624     case REAL_CST:
13625     case STRING_CST:
13626     case COMPLEX_CST:
13627       if ((ret = cst_pool_loc_descr (loc)))
13628         have_address = 1;
13629       else
13630       /* We can construct small constants here using int_loc_descriptor.  */
13631         expansion_failed (loc, NULL_RTX,
13632                           "constructor or constant not in constant pool");
13633       break;
13634
13635     case TRUTH_AND_EXPR:
13636     case TRUTH_ANDIF_EXPR:
13637     case BIT_AND_EXPR:
13638       op = DW_OP_and;
13639       goto do_binop;
13640
13641     case TRUTH_XOR_EXPR:
13642     case BIT_XOR_EXPR:
13643       op = DW_OP_xor;
13644       goto do_binop;
13645
13646     case TRUTH_OR_EXPR:
13647     case TRUTH_ORIF_EXPR:
13648     case BIT_IOR_EXPR:
13649       op = DW_OP_or;
13650       goto do_binop;
13651
13652     case FLOOR_DIV_EXPR:
13653     case CEIL_DIV_EXPR:
13654     case ROUND_DIV_EXPR:
13655     case TRUNC_DIV_EXPR:
13656       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13657         return 0;
13658       op = DW_OP_div;
13659       goto do_binop;
13660
13661     case MINUS_EXPR:
13662       op = DW_OP_minus;
13663       goto do_binop;
13664
13665     case FLOOR_MOD_EXPR:
13666     case CEIL_MOD_EXPR:
13667     case ROUND_MOD_EXPR:
13668     case TRUNC_MOD_EXPR:
13669       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13670         {
13671           op = DW_OP_mod;
13672           goto do_binop;
13673         }
13674       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13675       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13676       if (list_ret == 0 || list_ret1 == 0)
13677         return 0;
13678
13679       add_loc_list (&list_ret, list_ret1);
13680       if (list_ret == 0)
13681         return 0;
13682       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13683       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13684       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
13685       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
13686       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
13687       break;
13688
13689     case MULT_EXPR:
13690       op = DW_OP_mul;
13691       goto do_binop;
13692
13693     case LSHIFT_EXPR:
13694       op = DW_OP_shl;
13695       goto do_binop;
13696
13697     case RSHIFT_EXPR:
13698       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
13699       goto do_binop;
13700
13701     case POINTER_PLUS_EXPR:
13702     case PLUS_EXPR:
13703       if (host_integerp (TREE_OPERAND (loc, 1), 0))
13704         {
13705           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13706           if (list_ret == 0)
13707             return 0;
13708
13709           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
13710           break;
13711         }
13712
13713       op = DW_OP_plus;
13714       goto do_binop;
13715
13716     case LE_EXPR:
13717       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13718         return 0;
13719
13720       op = DW_OP_le;
13721       goto do_binop;
13722
13723     case GE_EXPR:
13724       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13725         return 0;
13726
13727       op = DW_OP_ge;
13728       goto do_binop;
13729
13730     case LT_EXPR:
13731       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13732         return 0;
13733
13734       op = DW_OP_lt;
13735       goto do_binop;
13736
13737     case GT_EXPR:
13738       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13739         return 0;
13740
13741       op = DW_OP_gt;
13742       goto do_binop;
13743
13744     case EQ_EXPR:
13745       op = DW_OP_eq;
13746       goto do_binop;
13747
13748     case NE_EXPR:
13749       op = DW_OP_ne;
13750       goto do_binop;
13751
13752     do_binop:
13753       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13754       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13755       if (list_ret == 0 || list_ret1 == 0)
13756         return 0;
13757
13758       add_loc_list (&list_ret, list_ret1);
13759       if (list_ret == 0)
13760         return 0;
13761       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13762       break;
13763
13764     case TRUTH_NOT_EXPR:
13765     case BIT_NOT_EXPR:
13766       op = DW_OP_not;
13767       goto do_unop;
13768
13769     case ABS_EXPR:
13770       op = DW_OP_abs;
13771       goto do_unop;
13772
13773     case NEGATE_EXPR:
13774       op = DW_OP_neg;
13775       goto do_unop;
13776
13777     do_unop:
13778       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13779       if (list_ret == 0)
13780         return 0;
13781
13782       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13783       break;
13784
13785     case MIN_EXPR:
13786     case MAX_EXPR:
13787       {
13788         const enum tree_code code =
13789           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
13790
13791         loc = build3 (COND_EXPR, TREE_TYPE (loc),
13792                       build2 (code, integer_type_node,
13793                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
13794                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
13795       }
13796
13797       /* ... fall through ...  */
13798
13799     case COND_EXPR:
13800       {
13801         dw_loc_descr_ref lhs
13802           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
13803         dw_loc_list_ref rhs
13804           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
13805         dw_loc_descr_ref bra_node, jump_node, tmp;
13806
13807         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13808         if (list_ret == 0 || lhs == 0 || rhs == 0)
13809           return 0;
13810
13811         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13812         add_loc_descr_to_each (list_ret, bra_node);
13813
13814         add_loc_list (&list_ret, rhs);
13815         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
13816         add_loc_descr_to_each (list_ret, jump_node);
13817
13818         add_loc_descr_to_each (list_ret, lhs);
13819         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13820         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
13821
13822         /* ??? Need a node to point the skip at.  Use a nop.  */
13823         tmp = new_loc_descr (DW_OP_nop, 0, 0);
13824         add_loc_descr_to_each (list_ret, tmp);
13825         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13826         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
13827       }
13828       break;
13829
13830     case FIX_TRUNC_EXPR:
13831       return 0;
13832
13833     default:
13834       /* Leave front-end specific codes as simply unknown.  This comes
13835          up, for instance, with the C STMT_EXPR.  */
13836       if ((unsigned int) TREE_CODE (loc)
13837           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
13838         {
13839           expansion_failed (loc, NULL_RTX,
13840                             "language specific tree node");
13841           return 0;
13842         }
13843
13844 #ifdef ENABLE_CHECKING
13845       /* Otherwise this is a generic code; we should just lists all of
13846          these explicitly.  We forgot one.  */
13847       gcc_unreachable ();
13848 #else
13849       /* In a release build, we want to degrade gracefully: better to
13850          generate incomplete debugging information than to crash.  */
13851       return NULL;
13852 #endif
13853     }
13854
13855   if (!ret && !list_ret)
13856     return 0;
13857
13858   if (want_address == 2 && !have_address
13859       && (dwarf_version >= 4 || !dwarf_strict))
13860     {
13861       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13862         {
13863           expansion_failed (loc, NULL_RTX,
13864                             "DWARF address size mismatch");
13865           return 0;
13866         }
13867       if (ret)
13868         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
13869       else
13870         add_loc_descr_to_each (list_ret,
13871                                new_loc_descr (DW_OP_stack_value, 0, 0));
13872       have_address = 1;
13873     }
13874   /* Show if we can't fill the request for an address.  */
13875   if (want_address && !have_address)
13876     {
13877       expansion_failed (loc, NULL_RTX,
13878                         "Want address and only have value");
13879       return 0;
13880     }
13881
13882   gcc_assert (!ret || !list_ret);
13883
13884   /* If we've got an address and don't want one, dereference.  */
13885   if (!want_address && have_address)
13886     {
13887       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13888
13889       if (size > DWARF2_ADDR_SIZE || size == -1)
13890         {
13891           expansion_failed (loc, NULL_RTX,
13892                             "DWARF address size mismatch");
13893           return 0;
13894         }
13895       else if (size == DWARF2_ADDR_SIZE)
13896         op = DW_OP_deref;
13897       else
13898         op = DW_OP_deref_size;
13899
13900       if (ret)
13901         add_loc_descr (&ret, new_loc_descr (op, size, 0));
13902       else
13903         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
13904     }
13905   if (ret)
13906     list_ret = new_loc_list (ret, NULL, NULL, NULL);
13907
13908   return list_ret;
13909 }
13910
13911 /* Same as above but return only single location expression.  */
13912 static dw_loc_descr_ref
13913 loc_descriptor_from_tree (tree loc, int want_address)
13914 {
13915   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
13916   if (!ret)
13917     return NULL;
13918   if (ret->dw_loc_next)
13919     {
13920       expansion_failed (loc, NULL_RTX,
13921                         "Location list where only loc descriptor needed");
13922       return NULL;
13923     }
13924   return ret->expr;
13925 }
13926
13927 /* Given a value, round it up to the lowest multiple of `boundary'
13928    which is not less than the value itself.  */
13929
13930 static inline HOST_WIDE_INT
13931 ceiling (HOST_WIDE_INT value, unsigned int boundary)
13932 {
13933   return (((value + boundary - 1) / boundary) * boundary);
13934 }
13935
13936 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
13937    pointer to the declared type for the relevant field variable, or return
13938    `integer_type_node' if the given node turns out to be an
13939    ERROR_MARK node.  */
13940
13941 static inline tree
13942 field_type (const_tree decl)
13943 {
13944   tree type;
13945
13946   if (TREE_CODE (decl) == ERROR_MARK)
13947     return integer_type_node;
13948
13949   type = DECL_BIT_FIELD_TYPE (decl);
13950   if (type == NULL_TREE)
13951     type = TREE_TYPE (decl);
13952
13953   return type;
13954 }
13955
13956 /* Given a pointer to a tree node, return the alignment in bits for
13957    it, or else return BITS_PER_WORD if the node actually turns out to
13958    be an ERROR_MARK node.  */
13959
13960 static inline unsigned
13961 simple_type_align_in_bits (const_tree type)
13962 {
13963   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
13964 }
13965
13966 static inline unsigned
13967 simple_decl_align_in_bits (const_tree decl)
13968 {
13969   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
13970 }
13971
13972 /* Return the result of rounding T up to ALIGN.  */
13973
13974 static inline double_int
13975 round_up_to_align (double_int t, unsigned int align)
13976 {
13977   double_int alignd = uhwi_to_double_int (align);
13978   t = double_int_add (t, alignd);
13979   t = double_int_add (t, double_int_minus_one);
13980   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
13981   t = double_int_mul (t, alignd);
13982   return t;
13983 }
13984
13985 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
13986    lowest addressed byte of the "containing object" for the given FIELD_DECL,
13987    or return 0 if we are unable to determine what that offset is, either
13988    because the argument turns out to be a pointer to an ERROR_MARK node, or
13989    because the offset is actually variable.  (We can't handle the latter case
13990    just yet).  */
13991
13992 static HOST_WIDE_INT
13993 field_byte_offset (const_tree decl)
13994 {
13995   double_int object_offset_in_bits;
13996   double_int object_offset_in_bytes;
13997   double_int bitpos_int;
13998
13999   if (TREE_CODE (decl) == ERROR_MARK)
14000     return 0;
14001
14002   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14003
14004   /* We cannot yet cope with fields whose positions are variable, so
14005      for now, when we see such things, we simply return 0.  Someday, we may
14006      be able to handle such cases, but it will be damn difficult.  */
14007   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
14008     return 0;
14009
14010   bitpos_int = tree_to_double_int (bit_position (decl));
14011
14012 #ifdef PCC_BITFIELD_TYPE_MATTERS
14013   if (PCC_BITFIELD_TYPE_MATTERS)
14014     {
14015       tree type;
14016       tree field_size_tree;
14017       double_int deepest_bitpos;
14018       double_int field_size_in_bits;
14019       unsigned int type_align_in_bits;
14020       unsigned int decl_align_in_bits;
14021       double_int type_size_in_bits;
14022
14023       type = field_type (decl);
14024       type_size_in_bits = double_int_type_size_in_bits (type);
14025       type_align_in_bits = simple_type_align_in_bits (type);
14026
14027       field_size_tree = DECL_SIZE (decl);
14028
14029       /* The size could be unspecified if there was an error, or for
14030          a flexible array member.  */
14031       if (!field_size_tree)
14032         field_size_tree = bitsize_zero_node;
14033
14034       /* If the size of the field is not constant, use the type size.  */
14035       if (TREE_CODE (field_size_tree) == INTEGER_CST)
14036         field_size_in_bits = tree_to_double_int (field_size_tree);
14037       else
14038         field_size_in_bits = type_size_in_bits;
14039
14040       decl_align_in_bits = simple_decl_align_in_bits (decl);
14041
14042       /* The GCC front-end doesn't make any attempt to keep track of the
14043          starting bit offset (relative to the start of the containing
14044          structure type) of the hypothetical "containing object" for a
14045          bit-field.  Thus, when computing the byte offset value for the
14046          start of the "containing object" of a bit-field, we must deduce
14047          this information on our own. This can be rather tricky to do in
14048          some cases.  For example, handling the following structure type
14049          definition when compiling for an i386/i486 target (which only
14050          aligns long long's to 32-bit boundaries) can be very tricky:
14051
14052          struct S { int field1; long long field2:31; };
14053
14054          Fortunately, there is a simple rule-of-thumb which can be used
14055          in such cases.  When compiling for an i386/i486, GCC will
14056          allocate 8 bytes for the structure shown above.  It decides to
14057          do this based upon one simple rule for bit-field allocation.
14058          GCC allocates each "containing object" for each bit-field at
14059          the first (i.e. lowest addressed) legitimate alignment boundary
14060          (based upon the required minimum alignment for the declared
14061          type of the field) which it can possibly use, subject to the
14062          condition that there is still enough available space remaining
14063          in the containing object (when allocated at the selected point)
14064          to fully accommodate all of the bits of the bit-field itself.
14065
14066          This simple rule makes it obvious why GCC allocates 8 bytes for
14067          each object of the structure type shown above.  When looking
14068          for a place to allocate the "containing object" for `field2',
14069          the compiler simply tries to allocate a 64-bit "containing
14070          object" at each successive 32-bit boundary (starting at zero)
14071          until it finds a place to allocate that 64- bit field such that
14072          at least 31 contiguous (and previously unallocated) bits remain
14073          within that selected 64 bit field.  (As it turns out, for the
14074          example above, the compiler finds it is OK to allocate the
14075          "containing object" 64-bit field at bit-offset zero within the
14076          structure type.)
14077
14078          Here we attempt to work backwards from the limited set of facts
14079          we're given, and we try to deduce from those facts, where GCC
14080          must have believed that the containing object started (within
14081          the structure type). The value we deduce is then used (by the
14082          callers of this routine) to generate DW_AT_location and
14083          DW_AT_bit_offset attributes for fields (both bit-fields and, in
14084          the case of DW_AT_location, regular fields as well).  */
14085
14086       /* Figure out the bit-distance from the start of the structure to
14087          the "deepest" bit of the bit-field.  */
14088       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
14089
14090       /* This is the tricky part.  Use some fancy footwork to deduce
14091          where the lowest addressed bit of the containing object must
14092          be.  */
14093       object_offset_in_bits
14094         = double_int_sub (deepest_bitpos, type_size_in_bits);
14095
14096       /* Round up to type_align by default.  This works best for
14097          bitfields.  */
14098       object_offset_in_bits
14099         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14100
14101       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
14102         {
14103           object_offset_in_bits
14104             = double_int_sub (deepest_bitpos, type_size_in_bits);
14105
14106           /* Round up to decl_align instead.  */
14107           object_offset_in_bits
14108             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14109         }
14110     }
14111   else
14112 #endif /* PCC_BITFIELD_TYPE_MATTERS */
14113     object_offset_in_bits = bitpos_int;
14114
14115   object_offset_in_bytes
14116     = double_int_div (object_offset_in_bits,
14117                       uhwi_to_double_int (BITS_PER_UNIT), true,
14118                       TRUNC_DIV_EXPR);
14119   return double_int_to_shwi (object_offset_in_bytes);
14120 }
14121 \f
14122 /* The following routines define various Dwarf attributes and any data
14123    associated with them.  */
14124
14125 /* Add a location description attribute value to a DIE.
14126
14127    This emits location attributes suitable for whole variables and
14128    whole parameters.  Note that the location attributes for struct fields are
14129    generated by the routine `data_member_location_attribute' below.  */
14130
14131 static inline void
14132 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14133                              dw_loc_list_ref descr)
14134 {
14135   if (descr == 0)
14136     return;
14137   if (single_element_loc_list_p (descr))
14138     add_AT_loc (die, attr_kind, descr->expr);
14139   else
14140     add_AT_loc_list (die, attr_kind, descr);
14141 }
14142
14143 /* Add DW_AT_accessibility attribute to DIE if needed.  */
14144
14145 static void
14146 add_accessibility_attribute (dw_die_ref die, tree decl)
14147 {
14148   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
14149      children, otherwise the default is DW_ACCESS_public.  In DWARF2
14150      the default has always been DW_ACCESS_public.  */
14151   if (TREE_PROTECTED (decl))
14152     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
14153   else if (TREE_PRIVATE (decl))
14154     {
14155       if (dwarf_version == 2
14156           || die->die_parent == NULL
14157           || die->die_parent->die_tag != DW_TAG_class_type)
14158         add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
14159     }
14160   else if (dwarf_version > 2
14161            && die->die_parent
14162            && die->die_parent->die_tag == DW_TAG_class_type)
14163     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
14164 }
14165
14166 /* Attach the specialized form of location attribute used for data members of
14167    struct and union types.  In the special case of a FIELD_DECL node which
14168    represents a bit-field, the "offset" part of this special location
14169    descriptor must indicate the distance in bytes from the lowest-addressed
14170    byte of the containing struct or union type to the lowest-addressed byte of
14171    the "containing object" for the bit-field.  (See the `field_byte_offset'
14172    function above).
14173
14174    For any given bit-field, the "containing object" is a hypothetical object
14175    (of some integral or enum type) within which the given bit-field lives.  The
14176    type of this hypothetical "containing object" is always the same as the
14177    declared type of the individual bit-field itself (for GCC anyway... the
14178    DWARF spec doesn't actually mandate this).  Note that it is the size (in
14179    bytes) of the hypothetical "containing object" which will be given in the
14180    DW_AT_byte_size attribute for this bit-field.  (See the
14181    `byte_size_attribute' function below.)  It is also used when calculating the
14182    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
14183    function below.)  */
14184
14185 static void
14186 add_data_member_location_attribute (dw_die_ref die, tree decl)
14187 {
14188   HOST_WIDE_INT offset;
14189   dw_loc_descr_ref loc_descr = 0;
14190
14191   if (TREE_CODE (decl) == TREE_BINFO)
14192     {
14193       /* We're working on the TAG_inheritance for a base class.  */
14194       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
14195         {
14196           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
14197              aren't at a fixed offset from all (sub)objects of the same
14198              type.  We need to extract the appropriate offset from our
14199              vtable.  The following dwarf expression means
14200
14201                BaseAddr = ObAddr + *((*ObAddr) - Offset)
14202
14203              This is specific to the V3 ABI, of course.  */
14204
14205           dw_loc_descr_ref tmp;
14206
14207           /* Make a copy of the object address.  */
14208           tmp = new_loc_descr (DW_OP_dup, 0, 0);
14209           add_loc_descr (&loc_descr, tmp);
14210
14211           /* Extract the vtable address.  */
14212           tmp = new_loc_descr (DW_OP_deref, 0, 0);
14213           add_loc_descr (&loc_descr, tmp);
14214
14215           /* Calculate the address of the offset.  */
14216           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
14217           gcc_assert (offset < 0);
14218
14219           tmp = int_loc_descriptor (-offset);
14220           add_loc_descr (&loc_descr, tmp);
14221           tmp = new_loc_descr (DW_OP_minus, 0, 0);
14222           add_loc_descr (&loc_descr, tmp);
14223
14224           /* Extract the offset.  */
14225           tmp = new_loc_descr (DW_OP_deref, 0, 0);
14226           add_loc_descr (&loc_descr, tmp);
14227
14228           /* Add it to the object address.  */
14229           tmp = new_loc_descr (DW_OP_plus, 0, 0);
14230           add_loc_descr (&loc_descr, tmp);
14231         }
14232       else
14233         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
14234     }
14235   else
14236     offset = field_byte_offset (decl);
14237
14238   if (! loc_descr)
14239     {
14240       if (dwarf_version > 2)
14241         {
14242           /* Don't need to output a location expression, just the constant. */
14243           if (offset < 0)
14244             add_AT_int (die, DW_AT_data_member_location, offset);
14245           else
14246             add_AT_unsigned (die, DW_AT_data_member_location, offset);
14247           return;
14248         }
14249       else
14250         {
14251           enum dwarf_location_atom op;
14252
14253           /* The DWARF2 standard says that we should assume that the structure
14254              address is already on the stack, so we can specify a structure
14255              field address by using DW_OP_plus_uconst.  */
14256
14257 #ifdef MIPS_DEBUGGING_INFO
14258           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
14259              operator correctly.  It works only if we leave the offset on the
14260              stack.  */
14261           op = DW_OP_constu;
14262 #else
14263           op = DW_OP_plus_uconst;
14264 #endif
14265
14266           loc_descr = new_loc_descr (op, offset, 0);
14267         }
14268     }
14269
14270   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
14271 }
14272
14273 /* Writes integer values to dw_vec_const array.  */
14274
14275 static void
14276 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
14277 {
14278   while (size != 0)
14279     {
14280       *dest++ = val & 0xff;
14281       val >>= 8;
14282       --size;
14283     }
14284 }
14285
14286 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
14287
14288 static HOST_WIDE_INT
14289 extract_int (const unsigned char *src, unsigned int size)
14290 {
14291   HOST_WIDE_INT val = 0;
14292
14293   src += size;
14294   while (size != 0)
14295     {
14296       val <<= 8;
14297       val |= *--src & 0xff;
14298       --size;
14299     }
14300   return val;
14301 }
14302
14303 /* Writes double_int values to dw_vec_const array.  */
14304
14305 static void
14306 insert_double (double_int val, unsigned char *dest)
14307 {
14308   unsigned char *p0 = dest;
14309   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
14310
14311   if (WORDS_BIG_ENDIAN)
14312     {
14313       p0 = p1;
14314       p1 = dest;
14315     }
14316
14317   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
14318   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
14319 }
14320
14321 /* Writes floating point values to dw_vec_const array.  */
14322
14323 static void
14324 insert_float (const_rtx rtl, unsigned char *array)
14325 {
14326   REAL_VALUE_TYPE rv;
14327   long val[4];
14328   int i;
14329
14330   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
14331   real_to_target (val, &rv, GET_MODE (rtl));
14332
14333   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
14334   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
14335     {
14336       insert_int (val[i], 4, array);
14337       array += 4;
14338     }
14339 }
14340
14341 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
14342    does not have a "location" either in memory or in a register.  These
14343    things can arise in GNU C when a constant is passed as an actual parameter
14344    to an inlined function.  They can also arise in C++ where declared
14345    constants do not necessarily get memory "homes".  */
14346
14347 static bool
14348 add_const_value_attribute (dw_die_ref die, rtx rtl)
14349 {
14350   switch (GET_CODE (rtl))
14351     {
14352     case CONST_INT:
14353       {
14354         HOST_WIDE_INT val = INTVAL (rtl);
14355
14356         if (val < 0)
14357           add_AT_int (die, DW_AT_const_value, val);
14358         else
14359           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
14360       }
14361       return true;
14362
14363     case CONST_DOUBLE:
14364       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
14365          floating-point constant.  A CONST_DOUBLE is used whenever the
14366          constant requires more than one word in order to be adequately
14367          represented.  */
14368       {
14369         enum machine_mode mode = GET_MODE (rtl);
14370
14371         if (SCALAR_FLOAT_MODE_P (mode))
14372           {
14373             unsigned int length = GET_MODE_SIZE (mode);
14374             unsigned char *array = (unsigned char *) ggc_alloc_atomic (length);
14375
14376             insert_float (rtl, array);
14377             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
14378           }
14379         else
14380           add_AT_double (die, DW_AT_const_value,
14381                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
14382       }
14383       return true;
14384
14385     case CONST_VECTOR:
14386       {
14387         enum machine_mode mode = GET_MODE (rtl);
14388         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
14389         unsigned int length = CONST_VECTOR_NUNITS (rtl);
14390         unsigned char *array = (unsigned char *) ggc_alloc_atomic
14391           (length * elt_size);
14392         unsigned int i;
14393         unsigned char *p;
14394
14395         switch (GET_MODE_CLASS (mode))
14396           {
14397           case MODE_VECTOR_INT:
14398             for (i = 0, p = array; i < length; i++, p += elt_size)
14399               {
14400                 rtx elt = CONST_VECTOR_ELT (rtl, i);
14401                 double_int val = rtx_to_double_int (elt);
14402
14403                 if (elt_size <= sizeof (HOST_WIDE_INT))
14404                   insert_int (double_int_to_shwi (val), elt_size, p);
14405                 else
14406                   {
14407                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14408                     insert_double (val, p);
14409                   }
14410               }
14411             break;
14412
14413           case MODE_VECTOR_FLOAT:
14414             for (i = 0, p = array; i < length; i++, p += elt_size)
14415               {
14416                 rtx elt = CONST_VECTOR_ELT (rtl, i);
14417                 insert_float (elt, p);
14418               }
14419             break;
14420
14421           default:
14422             gcc_unreachable ();
14423           }
14424
14425         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
14426       }
14427       return true;
14428
14429     case CONST_STRING:
14430       if (dwarf_version >= 4 || !dwarf_strict)
14431         {
14432           dw_loc_descr_ref loc_result;
14433           resolve_one_addr (&rtl, NULL);
14434         rtl_addr:
14435           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14436           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14437           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14438           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14439           add_AT_loc (die, DW_AT_location, loc_result);
14440           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14441           return true;
14442         }
14443       return false;
14444
14445     case CONST:
14446       if (CONSTANT_P (XEXP (rtl, 0)))
14447         return add_const_value_attribute (die, XEXP (rtl, 0));
14448       /* FALLTHROUGH */
14449     case SYMBOL_REF:
14450       if (!const_ok_for_output (rtl))
14451         return false;
14452     case LABEL_REF:
14453       if (dwarf_version >= 4 || !dwarf_strict)
14454         goto rtl_addr;
14455       return false;
14456
14457     case PLUS:
14458       /* In cases where an inlined instance of an inline function is passed
14459          the address of an `auto' variable (which is local to the caller) we
14460          can get a situation where the DECL_RTL of the artificial local
14461          variable (for the inlining) which acts as a stand-in for the
14462          corresponding formal parameter (of the inline function) will look
14463          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
14464          exactly a compile-time constant expression, but it isn't the address
14465          of the (artificial) local variable either.  Rather, it represents the
14466          *value* which the artificial local variable always has during its
14467          lifetime.  We currently have no way to represent such quasi-constant
14468          values in Dwarf, so for now we just punt and generate nothing.  */
14469       return false;
14470
14471     case HIGH:
14472     case CONST_FIXED:
14473       return false;
14474
14475     case MEM:
14476       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
14477           && MEM_READONLY_P (rtl)
14478           && GET_MODE (rtl) == BLKmode)
14479         {
14480           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
14481           return true;
14482         }
14483       return false;
14484
14485     default:
14486       /* No other kinds of rtx should be possible here.  */
14487       gcc_unreachable ();
14488     }
14489   return false;
14490 }
14491
14492 /* Determine whether the evaluation of EXPR references any variables
14493    or functions which aren't otherwise used (and therefore may not be
14494    output).  */
14495 static tree
14496 reference_to_unused (tree * tp, int * walk_subtrees,
14497                      void * data ATTRIBUTE_UNUSED)
14498 {
14499   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
14500     *walk_subtrees = 0;
14501
14502   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
14503       && ! TREE_ASM_WRITTEN (*tp))
14504     return *tp;
14505   /* ???  The C++ FE emits debug information for using decls, so
14506      putting gcc_unreachable here falls over.  See PR31899.  For now
14507      be conservative.  */
14508   else if (!cgraph_global_info_ready
14509            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
14510     return *tp;
14511   else if (TREE_CODE (*tp) == VAR_DECL)
14512     {
14513       struct varpool_node *node = varpool_get_node (*tp);
14514       if (!node || !node->needed)
14515         return *tp;
14516     }
14517   else if (TREE_CODE (*tp) == FUNCTION_DECL
14518            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
14519     {
14520       /* The call graph machinery must have finished analyzing,
14521          optimizing and gimplifying the CU by now.
14522          So if *TP has no call graph node associated
14523          to it, it means *TP will not be emitted.  */
14524       if (!cgraph_get_node (*tp))
14525         return *tp;
14526     }
14527   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
14528     return *tp;
14529
14530   return NULL_TREE;
14531 }
14532
14533 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
14534    for use in a later add_const_value_attribute call.  */
14535
14536 static rtx
14537 rtl_for_decl_init (tree init, tree type)
14538 {
14539   rtx rtl = NULL_RTX;
14540
14541   STRIP_NOPS (init);
14542
14543   /* If a variable is initialized with a string constant without embedded
14544      zeros, build CONST_STRING.  */
14545   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
14546     {
14547       tree enttype = TREE_TYPE (type);
14548       tree domain = TYPE_DOMAIN (type);
14549       enum machine_mode mode = TYPE_MODE (enttype);
14550
14551       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
14552           && domain
14553           && integer_zerop (TYPE_MIN_VALUE (domain))
14554           && compare_tree_int (TYPE_MAX_VALUE (domain),
14555                                TREE_STRING_LENGTH (init) - 1) == 0
14556           && ((size_t) TREE_STRING_LENGTH (init)
14557               == strlen (TREE_STRING_POINTER (init)) + 1))
14558         {
14559           rtl = gen_rtx_CONST_STRING (VOIDmode,
14560                                       ggc_strdup (TREE_STRING_POINTER (init)));
14561           rtl = gen_rtx_MEM (BLKmode, rtl);
14562           MEM_READONLY_P (rtl) = 1;
14563         }
14564     }
14565   /* Other aggregates, and complex values, could be represented using
14566      CONCAT: FIXME!  */
14567   else if (AGGREGATE_TYPE_P (type)
14568            || (TREE_CODE (init) == VIEW_CONVERT_EXPR
14569                && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
14570            || TREE_CODE (type) == COMPLEX_TYPE)
14571     ;
14572   /* Vectors only work if their mode is supported by the target.
14573      FIXME: generic vectors ought to work too.  */
14574   else if (TREE_CODE (type) == VECTOR_TYPE
14575            && !VECTOR_MODE_P (TYPE_MODE (type)))
14576     ;
14577   /* If the initializer is something that we know will expand into an
14578      immediate RTL constant, expand it now.  We must be careful not to
14579      reference variables which won't be output.  */
14580   else if (initializer_constant_valid_p (init, type)
14581            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
14582     {
14583       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
14584          possible.  */
14585       if (TREE_CODE (type) == VECTOR_TYPE)
14586         switch (TREE_CODE (init))
14587           {
14588           case VECTOR_CST:
14589             break;
14590           case CONSTRUCTOR:
14591             if (TREE_CONSTANT (init))
14592               {
14593                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
14594                 bool constant_p = true;
14595                 tree value;
14596                 unsigned HOST_WIDE_INT ix;
14597
14598                 /* Even when ctor is constant, it might contain non-*_CST
14599                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
14600                    belong into VECTOR_CST nodes.  */
14601                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
14602                   if (!CONSTANT_CLASS_P (value))
14603                     {
14604                       constant_p = false;
14605                       break;
14606                     }
14607
14608                 if (constant_p)
14609                   {
14610                     init = build_vector_from_ctor (type, elts);
14611                     break;
14612                   }
14613               }
14614             /* FALLTHRU */
14615
14616           default:
14617             return NULL;
14618           }
14619
14620       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
14621
14622       /* If expand_expr returns a MEM, it wasn't immediate.  */
14623       gcc_assert (!rtl || !MEM_P (rtl));
14624     }
14625
14626   return rtl;
14627 }
14628
14629 /* Generate RTL for the variable DECL to represent its location.  */
14630
14631 static rtx
14632 rtl_for_decl_location (tree decl)
14633 {
14634   rtx rtl;
14635
14636   /* Here we have to decide where we are going to say the parameter "lives"
14637      (as far as the debugger is concerned).  We only have a couple of
14638      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
14639
14640      DECL_RTL normally indicates where the parameter lives during most of the
14641      activation of the function.  If optimization is enabled however, this
14642      could be either NULL or else a pseudo-reg.  Both of those cases indicate
14643      that the parameter doesn't really live anywhere (as far as the code
14644      generation parts of GCC are concerned) during most of the function's
14645      activation.  That will happen (for example) if the parameter is never
14646      referenced within the function.
14647
14648      We could just generate a location descriptor here for all non-NULL
14649      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
14650      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
14651      where DECL_RTL is NULL or is a pseudo-reg.
14652
14653      Note however that we can only get away with using DECL_INCOMING_RTL as
14654      a backup substitute for DECL_RTL in certain limited cases.  In cases
14655      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
14656      we can be sure that the parameter was passed using the same type as it is
14657      declared to have within the function, and that its DECL_INCOMING_RTL
14658      points us to a place where a value of that type is passed.
14659
14660      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
14661      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
14662      because in these cases DECL_INCOMING_RTL points us to a value of some
14663      type which is *different* from the type of the parameter itself.  Thus,
14664      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
14665      such cases, the debugger would end up (for example) trying to fetch a
14666      `float' from a place which actually contains the first part of a
14667      `double'.  That would lead to really incorrect and confusing
14668      output at debug-time.
14669
14670      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
14671      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
14672      are a couple of exceptions however.  On little-endian machines we can
14673      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
14674      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
14675      an integral type that is smaller than TREE_TYPE (decl). These cases arise
14676      when (on a little-endian machine) a non-prototyped function has a
14677      parameter declared to be of type `short' or `char'.  In such cases,
14678      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
14679      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
14680      passed `int' value.  If the debugger then uses that address to fetch
14681      a `short' or a `char' (on a little-endian machine) the result will be
14682      the correct data, so we allow for such exceptional cases below.
14683
14684      Note that our goal here is to describe the place where the given formal
14685      parameter lives during most of the function's activation (i.e. between the
14686      end of the prologue and the start of the epilogue).  We'll do that as best
14687      as we can. Note however that if the given formal parameter is modified
14688      sometime during the execution of the function, then a stack backtrace (at
14689      debug-time) will show the function as having been called with the *new*
14690      value rather than the value which was originally passed in.  This happens
14691      rarely enough that it is not a major problem, but it *is* a problem, and
14692      I'd like to fix it.
14693
14694      A future version of dwarf2out.c may generate two additional attributes for
14695      any given DW_TAG_formal_parameter DIE which will describe the "passed
14696      type" and the "passed location" for the given formal parameter in addition
14697      to the attributes we now generate to indicate the "declared type" and the
14698      "active location" for each parameter.  This additional set of attributes
14699      could be used by debuggers for stack backtraces. Separately, note that
14700      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
14701      This happens (for example) for inlined-instances of inline function formal
14702      parameters which are never referenced.  This really shouldn't be
14703      happening.  All PARM_DECL nodes should get valid non-NULL
14704      DECL_INCOMING_RTL values.  FIXME.  */
14705
14706   /* Use DECL_RTL as the "location" unless we find something better.  */
14707   rtl = DECL_RTL_IF_SET (decl);
14708
14709   /* When generating abstract instances, ignore everything except
14710      constants, symbols living in memory, and symbols living in
14711      fixed registers.  */
14712   if (! reload_completed)
14713     {
14714       if (rtl
14715           && (CONSTANT_P (rtl)
14716               || (MEM_P (rtl)
14717                   && CONSTANT_P (XEXP (rtl, 0)))
14718               || (REG_P (rtl)
14719                   && TREE_CODE (decl) == VAR_DECL
14720                   && TREE_STATIC (decl))))
14721         {
14722           rtl = targetm.delegitimize_address (rtl);
14723           return rtl;
14724         }
14725       rtl = NULL_RTX;
14726     }
14727   else if (TREE_CODE (decl) == PARM_DECL)
14728     {
14729       if (rtl == NULL_RTX
14730           || is_pseudo_reg (rtl)
14731           || (MEM_P (rtl)
14732               && is_pseudo_reg (XEXP (rtl, 0))
14733               && DECL_INCOMING_RTL (decl)
14734               && MEM_P (DECL_INCOMING_RTL (decl))
14735               && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
14736         {
14737           tree declared_type = TREE_TYPE (decl);
14738           tree passed_type = DECL_ARG_TYPE (decl);
14739           enum machine_mode dmode = TYPE_MODE (declared_type);
14740           enum machine_mode pmode = TYPE_MODE (passed_type);
14741
14742           /* This decl represents a formal parameter which was optimized out.
14743              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
14744              all cases where (rtl == NULL_RTX) just below.  */
14745           if (dmode == pmode)
14746             rtl = DECL_INCOMING_RTL (decl);
14747           else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
14748                    && SCALAR_INT_MODE_P (dmode)
14749                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
14750                    && DECL_INCOMING_RTL (decl))
14751             {
14752               rtx inc = DECL_INCOMING_RTL (decl);
14753               if (REG_P (inc))
14754                 rtl = inc;
14755               else if (MEM_P (inc))
14756                 {
14757                   if (BYTES_BIG_ENDIAN)
14758                     rtl = adjust_address_nv (inc, dmode,
14759                                              GET_MODE_SIZE (pmode)
14760                                              - GET_MODE_SIZE (dmode));
14761                   else
14762                     rtl = inc;
14763                 }
14764             }
14765         }
14766
14767       /* If the parm was passed in registers, but lives on the stack, then
14768          make a big endian correction if the mode of the type of the
14769          parameter is not the same as the mode of the rtl.  */
14770       /* ??? This is the same series of checks that are made in dbxout.c before
14771          we reach the big endian correction code there.  It isn't clear if all
14772          of these checks are necessary here, but keeping them all is the safe
14773          thing to do.  */
14774       else if (MEM_P (rtl)
14775                && XEXP (rtl, 0) != const0_rtx
14776                && ! CONSTANT_P (XEXP (rtl, 0))
14777                /* Not passed in memory.  */
14778                && !MEM_P (DECL_INCOMING_RTL (decl))
14779                /* Not passed by invisible reference.  */
14780                && (!REG_P (XEXP (rtl, 0))
14781                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
14782                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
14783 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
14784                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
14785 #endif
14786                      )
14787                /* Big endian correction check.  */
14788                && BYTES_BIG_ENDIAN
14789                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
14790                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
14791                    < UNITS_PER_WORD))
14792         {
14793           int offset = (UNITS_PER_WORD
14794                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
14795
14796           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14797                              plus_constant (XEXP (rtl, 0), offset));
14798         }
14799     }
14800   else if (TREE_CODE (decl) == VAR_DECL
14801            && rtl
14802            && MEM_P (rtl)
14803            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
14804            && BYTES_BIG_ENDIAN)
14805     {
14806       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
14807       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
14808
14809       /* If a variable is declared "register" yet is smaller than
14810          a register, then if we store the variable to memory, it
14811          looks like we're storing a register-sized value, when in
14812          fact we are not.  We need to adjust the offset of the
14813          storage location to reflect the actual value's bytes,
14814          else gdb will not be able to display it.  */
14815       if (rsize > dsize)
14816         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14817                            plus_constant (XEXP (rtl, 0), rsize-dsize));
14818     }
14819
14820   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
14821      and will have been substituted directly into all expressions that use it.
14822      C does not have such a concept, but C++ and other languages do.  */
14823   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
14824     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
14825
14826   if (rtl)
14827     rtl = targetm.delegitimize_address (rtl);
14828
14829   /* If we don't look past the constant pool, we risk emitting a
14830      reference to a constant pool entry that isn't referenced from
14831      code, and thus is not emitted.  */
14832   if (rtl)
14833     rtl = avoid_constant_pool_reference (rtl);
14834
14835   /* Try harder to get a rtl.  If this symbol ends up not being emitted
14836      in the current CU, resolve_addr will remove the expression referencing
14837      it.  */
14838   if (rtl == NULL_RTX
14839       && TREE_CODE (decl) == VAR_DECL
14840       && !DECL_EXTERNAL (decl)
14841       && TREE_STATIC (decl)
14842       && DECL_NAME (decl)
14843       && !DECL_HARD_REGISTER (decl)
14844       && DECL_MODE (decl) != VOIDmode)
14845     {
14846       rtl = make_decl_rtl_for_debug (decl);
14847       if (!MEM_P (rtl)
14848           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
14849           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
14850         rtl = NULL_RTX;
14851     }
14852
14853   return rtl;
14854 }
14855
14856 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
14857    returned.  If so, the decl for the COMMON block is returned, and the
14858    value is the offset into the common block for the symbol.  */
14859
14860 static tree
14861 fortran_common (tree decl, HOST_WIDE_INT *value)
14862 {
14863   tree val_expr, cvar;
14864   enum machine_mode mode;
14865   HOST_WIDE_INT bitsize, bitpos;
14866   tree offset;
14867   int volatilep = 0, unsignedp = 0;
14868
14869   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
14870      it does not have a value (the offset into the common area), or if it
14871      is thread local (as opposed to global) then it isn't common, and shouldn't
14872      be handled as such.  */
14873   if (TREE_CODE (decl) != VAR_DECL
14874       || !TREE_STATIC (decl)
14875       || !DECL_HAS_VALUE_EXPR_P (decl)
14876       || !is_fortran ())
14877     return NULL_TREE;
14878
14879   val_expr = DECL_VALUE_EXPR (decl);
14880   if (TREE_CODE (val_expr) != COMPONENT_REF)
14881     return NULL_TREE;
14882
14883   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
14884                               &mode, &unsignedp, &volatilep, true);
14885
14886   if (cvar == NULL_TREE
14887       || TREE_CODE (cvar) != VAR_DECL
14888       || DECL_ARTIFICIAL (cvar)
14889       || !TREE_PUBLIC (cvar))
14890     return NULL_TREE;
14891
14892   *value = 0;
14893   if (offset != NULL)
14894     {
14895       if (!host_integerp (offset, 0))
14896         return NULL_TREE;
14897       *value = tree_low_cst (offset, 0);
14898     }
14899   if (bitpos != 0)
14900     *value += bitpos / BITS_PER_UNIT;
14901
14902   return cvar;
14903 }
14904
14905 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
14906    data attribute for a variable or a parameter.  We generate the
14907    DW_AT_const_value attribute only in those cases where the given variable
14908    or parameter does not have a true "location" either in memory or in a
14909    register.  This can happen (for example) when a constant is passed as an
14910    actual argument in a call to an inline function.  (It's possible that
14911    these things can crop up in other ways also.)  Note that one type of
14912    constant value which can be passed into an inlined function is a constant
14913    pointer.  This can happen for example if an actual argument in an inlined
14914    function call evaluates to a compile-time constant address.
14915
14916    CACHE_P is true if it is worth caching the location list for DECL,
14917    so that future calls can reuse it rather than regenerate it from scratch.
14918    This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
14919    since we will need to refer to them each time the function is inlined.  */
14920
14921 static bool
14922 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
14923                                        enum dwarf_attribute attr)
14924 {
14925   rtx rtl;
14926   dw_loc_list_ref list;
14927   var_loc_list *loc_list;
14928   cached_dw_loc_list *cache;
14929   void **slot;
14930
14931   if (TREE_CODE (decl) == ERROR_MARK)
14932     return false;
14933
14934   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
14935               || TREE_CODE (decl) == RESULT_DECL);
14936
14937   /* Try to get some constant RTL for this decl, and use that as the value of
14938      the location.  */
14939
14940   rtl = rtl_for_decl_location (decl);
14941   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14942       && add_const_value_attribute (die, rtl))
14943     return true;
14944
14945   /* See if we have single element location list that is equivalent to
14946      a constant value.  That way we are better to use add_const_value_attribute
14947      rather than expanding constant value equivalent.  */
14948   loc_list = lookup_decl_loc (decl);
14949   if (loc_list
14950       && loc_list->first
14951       && loc_list->first->next == NULL
14952       && NOTE_P (loc_list->first->loc)
14953       && NOTE_VAR_LOCATION (loc_list->first->loc)
14954       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
14955     {
14956       struct var_loc_node *node;
14957
14958       node = loc_list->first;
14959       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
14960       if (GET_CODE (rtl) == EXPR_LIST)
14961         rtl = XEXP (rtl, 0);
14962       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14963           && add_const_value_attribute (die, rtl))
14964          return true;
14965     }
14966   /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
14967      list several times.  See if we've already cached the contents.  */
14968   list = NULL;
14969   if (loc_list == NULL || cached_dw_loc_list_table == NULL)
14970     cache_p = false;
14971   if (cache_p)
14972     {
14973       cache = (cached_dw_loc_list *)
14974         htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
14975       if (cache)
14976         list = cache->loc_list;
14977     }
14978   if (list == NULL)
14979     {
14980       list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
14981       /* It is usually worth caching this result if the decl is from
14982          BLOCK_NONLOCALIZED_VARS and if the list has at least two elements.  */
14983       if (cache_p && list && list->dw_loc_next)
14984         {
14985           slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
14986                                            DECL_UID (decl), INSERT);
14987           cache = ggc_alloc_cleared_cached_dw_loc_list ();
14988           cache->decl_id = DECL_UID (decl);
14989           cache->loc_list = list;
14990           *slot = cache;
14991         }
14992     }
14993   if (list)
14994     {
14995       add_AT_location_description (die, attr, list);
14996       return true;
14997     }
14998   /* None of that worked, so it must not really have a location;
14999      try adding a constant value attribute from the DECL_INITIAL.  */
15000   return tree_add_const_value_attribute_for_decl (die, decl);
15001 }
15002
15003 /* Add VARIABLE and DIE into deferred locations list.  */
15004
15005 static void
15006 defer_location (tree variable, dw_die_ref die)
15007 {
15008   deferred_locations entry;
15009   entry.variable = variable;
15010   entry.die = die;
15011   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15012 }
15013
15014 /* Helper function for tree_add_const_value_attribute.  Natively encode
15015    initializer INIT into an array.  Return true if successful.  */
15016
15017 static bool
15018 native_encode_initializer (tree init, unsigned char *array, int size)
15019 {
15020   tree type;
15021
15022   if (init == NULL_TREE)
15023     return false;
15024
15025   STRIP_NOPS (init);
15026   switch (TREE_CODE (init))
15027     {
15028     case STRING_CST:
15029       type = TREE_TYPE (init);
15030       if (TREE_CODE (type) == ARRAY_TYPE)
15031         {
15032           tree enttype = TREE_TYPE (type);
15033           enum machine_mode mode = TYPE_MODE (enttype);
15034
15035           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15036             return false;
15037           if (int_size_in_bytes (type) != size)
15038             return false;
15039           if (size > TREE_STRING_LENGTH (init))
15040             {
15041               memcpy (array, TREE_STRING_POINTER (init),
15042                       TREE_STRING_LENGTH (init));
15043               memset (array + TREE_STRING_LENGTH (init),
15044                       '\0', size - TREE_STRING_LENGTH (init));
15045             }
15046           else
15047             memcpy (array, TREE_STRING_POINTER (init), size);
15048           return true;
15049         }
15050       return false;
15051     case CONSTRUCTOR:
15052       type = TREE_TYPE (init);
15053       if (int_size_in_bytes (type) != size)
15054         return false;
15055       if (TREE_CODE (type) == ARRAY_TYPE)
15056         {
15057           HOST_WIDE_INT min_index;
15058           unsigned HOST_WIDE_INT cnt;
15059           int curpos = 0, fieldsize;
15060           constructor_elt *ce;
15061
15062           if (TYPE_DOMAIN (type) == NULL_TREE
15063               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15064             return false;
15065
15066           fieldsize = int_size_in_bytes (TREE_TYPE (type));
15067           if (fieldsize <= 0)
15068             return false;
15069
15070           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15071           memset (array, '\0', size);
15072           FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15073             {
15074               tree val = ce->value;
15075               tree index = ce->index;
15076               int pos = curpos;
15077               if (index && TREE_CODE (index) == RANGE_EXPR)
15078                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15079                       * fieldsize;
15080               else if (index)
15081                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15082
15083               if (val)
15084                 {
15085                   STRIP_NOPS (val);
15086                   if (!native_encode_initializer (val, array + pos, fieldsize))
15087                     return false;
15088                 }
15089               curpos = pos + fieldsize;
15090               if (index && TREE_CODE (index) == RANGE_EXPR)
15091                 {
15092                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15093                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
15094                   while (count-- > 0)
15095                     {
15096                       if (val)
15097                         memcpy (array + curpos, array + pos, fieldsize);
15098                       curpos += fieldsize;
15099                     }
15100                 }
15101               gcc_assert (curpos <= size);
15102             }
15103           return true;
15104         }
15105       else if (TREE_CODE (type) == RECORD_TYPE
15106                || TREE_CODE (type) == UNION_TYPE)
15107         {
15108           tree field = NULL_TREE;
15109           unsigned HOST_WIDE_INT cnt;
15110           constructor_elt *ce;
15111
15112           if (int_size_in_bytes (type) != size)
15113             return false;
15114
15115           if (TREE_CODE (type) == RECORD_TYPE)
15116             field = TYPE_FIELDS (type);
15117
15118           FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15119             {
15120               tree val = ce->value;
15121               int pos, fieldsize;
15122
15123               if (ce->index != 0)
15124                 field = ce->index;
15125
15126               if (val)
15127                 STRIP_NOPS (val);
15128
15129               if (field == NULL_TREE || DECL_BIT_FIELD (field))
15130                 return false;
15131
15132               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15133                   && TYPE_DOMAIN (TREE_TYPE (field))
15134                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15135                 return false;
15136               else if (DECL_SIZE_UNIT (field) == NULL_TREE
15137                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
15138                 return false;
15139               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15140               pos = int_byte_position (field);
15141               gcc_assert (pos + fieldsize <= size);
15142               if (val
15143                   && !native_encode_initializer (val, array + pos, fieldsize))
15144                 return false;
15145             }
15146           return true;
15147         }
15148       return false;
15149     case VIEW_CONVERT_EXPR:
15150     case NON_LVALUE_EXPR:
15151       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15152     default:
15153       return native_encode_expr (init, array, size) == size;
15154     }
15155 }
15156
15157 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15158    attribute is the const value T.  */
15159
15160 static bool
15161 tree_add_const_value_attribute (dw_die_ref die, tree t)
15162 {
15163   tree init;
15164   tree type = TREE_TYPE (t);
15165   rtx rtl;
15166
15167   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15168     return false;
15169
15170   init = t;
15171   gcc_assert (!DECL_P (init));
15172
15173   rtl = rtl_for_decl_init (init, type);
15174   if (rtl)
15175     return add_const_value_attribute (die, rtl);
15176   /* If the host and target are sane, try harder.  */
15177   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15178            && initializer_constant_valid_p (init, type))
15179     {
15180       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15181       if (size > 0 && (int) size == size)
15182         {
15183           unsigned char *array = (unsigned char *)
15184             ggc_alloc_cleared_atomic (size);
15185
15186           if (native_encode_initializer (init, array, size))
15187             {
15188               add_AT_vec (die, DW_AT_const_value, size, 1, array);
15189               return true;
15190             }
15191         }
15192     }
15193   return false;
15194 }
15195
15196 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
15197    attribute is the const value of T, where T is an integral constant
15198    variable with static storage duration
15199    (so it can't be a PARM_DECL or a RESULT_DECL).  */
15200
15201 static bool
15202 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
15203 {
15204
15205   if (!decl
15206       || (TREE_CODE (decl) != VAR_DECL
15207           && TREE_CODE (decl) != CONST_DECL)
15208       || (TREE_CODE (decl) == VAR_DECL
15209           && !TREE_STATIC (decl)))
15210     return false;
15211
15212     if (TREE_READONLY (decl)
15213         && ! TREE_THIS_VOLATILE (decl)
15214         && DECL_INITIAL (decl))
15215       /* OK */;
15216     else
15217       return false;
15218
15219   /* Don't add DW_AT_const_value if abstract origin already has one.  */
15220   if (get_AT (var_die, DW_AT_const_value))
15221     return false;
15222
15223   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
15224 }
15225
15226 /* Convert the CFI instructions for the current function into a
15227    location list.  This is used for DW_AT_frame_base when we targeting
15228    a dwarf2 consumer that does not support the dwarf3
15229    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
15230    expressions.  */
15231
15232 static dw_loc_list_ref
15233 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
15234 {
15235   int ix;
15236   dw_fde_ref fde;
15237   dw_loc_list_ref list, *list_tail;
15238   dw_cfi_ref cfi;
15239   dw_cfa_location last_cfa, next_cfa;
15240   const char *start_label, *last_label, *section;
15241   dw_cfa_location remember;
15242
15243   fde = cfun->fde;
15244   gcc_assert (fde != NULL);
15245
15246   section = secname_for_decl (current_function_decl);
15247   list_tail = &list;
15248   list = NULL;
15249
15250   memset (&next_cfa, 0, sizeof (next_cfa));
15251   next_cfa.reg = INVALID_REGNUM;
15252   remember = next_cfa;
15253
15254   start_label = fde->dw_fde_begin;
15255
15256   /* ??? Bald assumption that the CIE opcode list does not contain
15257      advance opcodes.  */
15258   FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, ix, cfi)
15259     lookup_cfa_1 (cfi, &next_cfa, &remember);
15260
15261   last_cfa = next_cfa;
15262   last_label = start_label;
15263
15264   if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
15265     {
15266       /* If the first partition contained no CFI adjustments, the
15267          CIE opcodes apply to the whole first partition.  */
15268       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15269                                  fde->dw_fde_begin, fde->dw_fde_end, section);
15270       list_tail =&(*list_tail)->dw_loc_next;
15271       start_label = last_label = fde->dw_fde_second_begin;
15272     }
15273
15274   FOR_EACH_VEC_ELT (dw_cfi_ref, fde->dw_fde_cfi, ix, cfi)
15275     {
15276       switch (cfi->dw_cfi_opc)
15277         {
15278         case DW_CFA_set_loc:
15279         case DW_CFA_advance_loc1:
15280         case DW_CFA_advance_loc2:
15281         case DW_CFA_advance_loc4:
15282           if (!cfa_equal_p (&last_cfa, &next_cfa))
15283             {
15284               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15285                                          start_label, last_label, section);
15286
15287               list_tail = &(*list_tail)->dw_loc_next;
15288               last_cfa = next_cfa;
15289               start_label = last_label;
15290             }
15291           last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
15292           break;
15293
15294         case DW_CFA_advance_loc:
15295           /* The encoding is complex enough that we should never emit this.  */
15296           gcc_unreachable ();
15297
15298         default:
15299           lookup_cfa_1 (cfi, &next_cfa, &remember);
15300           break;
15301         }
15302       if (ix + 1 == fde->dw_fde_switch_cfi_index)
15303         {
15304           if (!cfa_equal_p (&last_cfa, &next_cfa))
15305             {
15306               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15307                                          start_label, last_label, section);
15308
15309               list_tail = &(*list_tail)->dw_loc_next;
15310               last_cfa = next_cfa;
15311               start_label = last_label;
15312             }
15313           *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15314                                      start_label, fde->dw_fde_end, section);
15315           list_tail = &(*list_tail)->dw_loc_next;
15316           start_label = last_label = fde->dw_fde_second_begin;
15317         }
15318     }
15319
15320   if (!cfa_equal_p (&last_cfa, &next_cfa))
15321     {
15322       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15323                                  start_label, last_label, section);
15324       list_tail = &(*list_tail)->dw_loc_next;
15325       start_label = last_label;
15326     }
15327
15328   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
15329                              start_label,
15330                              fde->dw_fde_second_begin
15331                              ? fde->dw_fde_second_end : fde->dw_fde_end,
15332                              section);
15333
15334   if (list && list->dw_loc_next)
15335     gen_llsym (list);
15336
15337   return list;
15338 }
15339
15340 /* Compute a displacement from the "steady-state frame pointer" to the
15341    frame base (often the same as the CFA), and store it in
15342    frame_pointer_fb_offset.  OFFSET is added to the displacement
15343    before the latter is negated.  */
15344
15345 static void
15346 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
15347 {
15348   rtx reg, elim;
15349
15350 #ifdef FRAME_POINTER_CFA_OFFSET
15351   reg = frame_pointer_rtx;
15352   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
15353 #else
15354   reg = arg_pointer_rtx;
15355   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
15356 #endif
15357
15358   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
15359   if (GET_CODE (elim) == PLUS)
15360     {
15361       offset += INTVAL (XEXP (elim, 1));
15362       elim = XEXP (elim, 0);
15363     }
15364
15365   frame_pointer_fb_offset = -offset;
15366
15367   /* ??? AVR doesn't set up valid eliminations when there is no stack frame
15368      in which to eliminate.  This is because it's stack pointer isn't 
15369      directly accessible as a register within the ISA.  To work around
15370      this, assume that while we cannot provide a proper value for
15371      frame_pointer_fb_offset, we won't need one either.  */
15372   frame_pointer_fb_offset_valid
15373     = ((SUPPORTS_STACK_ALIGNMENT
15374         && (elim == hard_frame_pointer_rtx
15375             || elim == stack_pointer_rtx))
15376        || elim == (frame_pointer_needed
15377                    ? hard_frame_pointer_rtx
15378                    : stack_pointer_rtx));
15379 }
15380
15381 /* Generate a DW_AT_name attribute given some string value to be included as
15382    the value of the attribute.  */
15383
15384 static void
15385 add_name_attribute (dw_die_ref die, const char *name_string)
15386 {
15387   if (name_string != NULL && *name_string != 0)
15388     {
15389       if (demangle_name_func)
15390         name_string = (*demangle_name_func) (name_string);
15391
15392       add_AT_string (die, DW_AT_name, name_string);
15393     }
15394 }
15395
15396 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
15397    DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
15398    of TYPE accordingly.
15399
15400    ??? This is a temporary measure until after we're able to generate
15401    regular DWARF for the complex Ada type system.  */
15402
15403 static void 
15404 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
15405                                      dw_die_ref context_die)
15406 {
15407   tree dtype;
15408   dw_die_ref dtype_die;
15409
15410   if (!lang_hooks.types.descriptive_type)
15411     return;
15412
15413   dtype = lang_hooks.types.descriptive_type (type);
15414   if (!dtype)
15415     return;
15416
15417   dtype_die = lookup_type_die (dtype);
15418   if (!dtype_die)
15419     {
15420       /* The descriptive type indirectly references TYPE if this is also the
15421          case for TYPE itself.  Do not deal with the circularity here.  */
15422       TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1;
15423       gen_type_die (dtype, context_die);
15424       TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 0;
15425       dtype_die = lookup_type_die (dtype);
15426       gcc_assert (dtype_die);
15427     }
15428
15429   add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
15430 }
15431
15432 /* Generate a DW_AT_comp_dir attribute for DIE.  */
15433
15434 static void
15435 add_comp_dir_attribute (dw_die_ref die)
15436 {
15437   const char *wd = get_src_pwd ();
15438   char *wd1;
15439
15440   if (wd == NULL)
15441     return;
15442
15443   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
15444     {
15445       int wdlen;
15446
15447       wdlen = strlen (wd);
15448       wd1 = (char *) ggc_alloc_atomic (wdlen + 2);
15449       strcpy (wd1, wd);
15450       wd1 [wdlen] = DIR_SEPARATOR;
15451       wd1 [wdlen + 1] = 0;
15452       wd = wd1;
15453     }
15454
15455     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
15456 }
15457
15458 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
15459    default.  */
15460
15461 static int
15462 lower_bound_default (void)
15463 {
15464   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
15465     {
15466     case DW_LANG_C:
15467     case DW_LANG_C89:
15468     case DW_LANG_C99:
15469     case DW_LANG_C_plus_plus:
15470     case DW_LANG_ObjC:
15471     case DW_LANG_ObjC_plus_plus:
15472     case DW_LANG_Java:
15473       return 0;
15474     case DW_LANG_Fortran77:
15475     case DW_LANG_Fortran90:
15476     case DW_LANG_Fortran95:
15477       return 1;
15478     case DW_LANG_UPC:
15479     case DW_LANG_D:
15480     case DW_LANG_Python:
15481       return dwarf_version >= 4 ? 0 : -1;
15482     case DW_LANG_Ada95:
15483     case DW_LANG_Ada83:
15484     case DW_LANG_Cobol74:
15485     case DW_LANG_Cobol85:
15486     case DW_LANG_Pascal83:
15487     case DW_LANG_Modula2:
15488     case DW_LANG_PLI:
15489       return dwarf_version >= 4 ? 1 : -1;
15490     default:
15491       return -1;
15492     }
15493 }
15494
15495 /* Given a tree node describing an array bound (either lower or upper) output
15496    a representation for that bound.  */
15497
15498 static void
15499 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
15500 {
15501   switch (TREE_CODE (bound))
15502     {
15503     case ERROR_MARK:
15504       return;
15505
15506     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
15507     case INTEGER_CST:
15508       {
15509         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
15510         int dflt;
15511
15512         /* Use the default if possible.  */
15513         if (bound_attr == DW_AT_lower_bound
15514             && host_integerp (bound, 0)
15515             && (dflt = lower_bound_default ()) != -1
15516             && tree_low_cst (bound, 0) == dflt)
15517           ;
15518
15519         /* Otherwise represent the bound as an unsigned value with the
15520            precision of its type.  The precision and signedness of the
15521            type will be necessary to re-interpret it unambiguously.  */
15522         else if (prec < HOST_BITS_PER_WIDE_INT)
15523           {
15524             unsigned HOST_WIDE_INT mask
15525               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
15526             add_AT_unsigned (subrange_die, bound_attr,
15527                              TREE_INT_CST_LOW (bound) & mask);
15528           }
15529         else if (prec == HOST_BITS_PER_WIDE_INT
15530                  || TREE_INT_CST_HIGH (bound) == 0)
15531           add_AT_unsigned (subrange_die, bound_attr,
15532                            TREE_INT_CST_LOW (bound));
15533         else
15534           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
15535                          TREE_INT_CST_LOW (bound));
15536       }
15537       break;
15538
15539     CASE_CONVERT:
15540     case VIEW_CONVERT_EXPR:
15541       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
15542       break;
15543
15544     case SAVE_EXPR:
15545       break;
15546
15547     case VAR_DECL:
15548     case PARM_DECL:
15549     case RESULT_DECL:
15550       {
15551         dw_die_ref decl_die = lookup_decl_die (bound);
15552
15553         /* ??? Can this happen, or should the variable have been bound
15554            first?  Probably it can, since I imagine that we try to create
15555            the types of parameters in the order in which they exist in
15556            the list, and won't have created a forward reference to a
15557            later parameter.  */
15558         if (decl_die != NULL)
15559           {
15560             add_AT_die_ref (subrange_die, bound_attr, decl_die);
15561             break;
15562           }
15563       }
15564       /* FALLTHRU */
15565
15566     default:
15567       {
15568         /* Otherwise try to create a stack operation procedure to
15569            evaluate the value of the array bound.  */
15570
15571         dw_die_ref ctx, decl_die;
15572         dw_loc_list_ref list;
15573
15574         list = loc_list_from_tree (bound, 2);
15575         if (list == NULL || single_element_loc_list_p (list))
15576           {
15577             /* If DW_AT_*bound is not a reference nor constant, it is
15578                a DWARF expression rather than location description.
15579                For that loc_list_from_tree (bound, 0) is needed.
15580                If that fails to give a single element list,
15581                fall back to outputting this as a reference anyway.  */
15582             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
15583             if (list2 && single_element_loc_list_p (list2))
15584               {
15585                 add_AT_loc (subrange_die, bound_attr, list2->expr);
15586                 break;
15587               }
15588           }
15589         if (list == NULL)
15590           break;
15591
15592         if (current_function_decl == 0)
15593           ctx = comp_unit_die ();
15594         else
15595           ctx = lookup_decl_die (current_function_decl);
15596
15597         decl_die = new_die (DW_TAG_variable, ctx, bound);
15598         add_AT_flag (decl_die, DW_AT_artificial, 1);
15599         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
15600         add_AT_location_description (decl_die, DW_AT_location, list);
15601         add_AT_die_ref (subrange_die, bound_attr, decl_die);
15602         break;
15603       }
15604     }
15605 }
15606
15607 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
15608    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
15609    Note that the block of subscript information for an array type also
15610    includes information about the element type of the given array type.  */
15611
15612 static void
15613 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
15614 {
15615   unsigned dimension_number;
15616   tree lower, upper;
15617   dw_die_ref subrange_die;
15618
15619   for (dimension_number = 0;
15620        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
15621        type = TREE_TYPE (type), dimension_number++)
15622     {
15623       tree domain = TYPE_DOMAIN (type);
15624
15625       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
15626         break;
15627
15628       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
15629          and (in GNU C only) variable bounds.  Handle all three forms
15630          here.  */
15631       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
15632       if (domain)
15633         {
15634           /* We have an array type with specified bounds.  */
15635           lower = TYPE_MIN_VALUE (domain);
15636           upper = TYPE_MAX_VALUE (domain);
15637
15638           /* Define the index type.  */
15639           if (TREE_TYPE (domain))
15640             {
15641               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
15642                  TREE_TYPE field.  We can't emit debug info for this
15643                  because it is an unnamed integral type.  */
15644               if (TREE_CODE (domain) == INTEGER_TYPE
15645                   && TYPE_NAME (domain) == NULL_TREE
15646                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
15647                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
15648                 ;
15649               else
15650                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
15651                                     type_die);
15652             }
15653
15654           /* ??? If upper is NULL, the array has unspecified length,
15655              but it does have a lower bound.  This happens with Fortran
15656                dimension arr(N:*)
15657              Since the debugger is definitely going to need to know N
15658              to produce useful results, go ahead and output the lower
15659              bound solo, and hope the debugger can cope.  */
15660
15661           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
15662           if (upper)
15663             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
15664         }
15665
15666       /* Otherwise we have an array type with an unspecified length.  The
15667          DWARF-2 spec does not say how to handle this; let's just leave out the
15668          bounds.  */
15669     }
15670 }
15671
15672 static void
15673 add_byte_size_attribute (dw_die_ref die, tree tree_node)
15674 {
15675   unsigned size;
15676
15677   switch (TREE_CODE (tree_node))
15678     {
15679     case ERROR_MARK:
15680       size = 0;
15681       break;
15682     case ENUMERAL_TYPE:
15683     case RECORD_TYPE:
15684     case UNION_TYPE:
15685     case QUAL_UNION_TYPE:
15686       size = int_size_in_bytes (tree_node);
15687       break;
15688     case FIELD_DECL:
15689       /* For a data member of a struct or union, the DW_AT_byte_size is
15690          generally given as the number of bytes normally allocated for an
15691          object of the *declared* type of the member itself.  This is true
15692          even for bit-fields.  */
15693       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
15694       break;
15695     default:
15696       gcc_unreachable ();
15697     }
15698
15699   /* Note that `size' might be -1 when we get to this point.  If it is, that
15700      indicates that the byte size of the entity in question is variable.  We
15701      have no good way of expressing this fact in Dwarf at the present time,
15702      so just let the -1 pass on through.  */
15703   add_AT_unsigned (die, DW_AT_byte_size, size);
15704 }
15705
15706 /* For a FIELD_DECL node which represents a bit-field, output an attribute
15707    which specifies the distance in bits from the highest order bit of the
15708    "containing object" for the bit-field to the highest order bit of the
15709    bit-field itself.
15710
15711    For any given bit-field, the "containing object" is a hypothetical object
15712    (of some integral or enum type) within which the given bit-field lives.  The
15713    type of this hypothetical "containing object" is always the same as the
15714    declared type of the individual bit-field itself.  The determination of the
15715    exact location of the "containing object" for a bit-field is rather
15716    complicated.  It's handled by the `field_byte_offset' function (above).
15717
15718    Note that it is the size (in bytes) of the hypothetical "containing object"
15719    which will be given in the DW_AT_byte_size attribute for this bit-field.
15720    (See `byte_size_attribute' above).  */
15721
15722 static inline void
15723 add_bit_offset_attribute (dw_die_ref die, tree decl)
15724 {
15725   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
15726   tree type = DECL_BIT_FIELD_TYPE (decl);
15727   HOST_WIDE_INT bitpos_int;
15728   HOST_WIDE_INT highest_order_object_bit_offset;
15729   HOST_WIDE_INT highest_order_field_bit_offset;
15730   HOST_WIDE_INT bit_offset;
15731
15732   /* Must be a field and a bit field.  */
15733   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
15734
15735   /* We can't yet handle bit-fields whose offsets are variable, so if we
15736      encounter such things, just return without generating any attribute
15737      whatsoever.  Likewise for variable or too large size.  */
15738   if (! host_integerp (bit_position (decl), 0)
15739       || ! host_integerp (DECL_SIZE (decl), 1))
15740     return;
15741
15742   bitpos_int = int_bit_position (decl);
15743
15744   /* Note that the bit offset is always the distance (in bits) from the
15745      highest-order bit of the "containing object" to the highest-order bit of
15746      the bit-field itself.  Since the "high-order end" of any object or field
15747      is different on big-endian and little-endian machines, the computation
15748      below must take account of these differences.  */
15749   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
15750   highest_order_field_bit_offset = bitpos_int;
15751
15752   if (! BYTES_BIG_ENDIAN)
15753     {
15754       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
15755       highest_order_object_bit_offset += simple_type_size_in_bits (type);
15756     }
15757
15758   bit_offset
15759     = (! BYTES_BIG_ENDIAN
15760        ? highest_order_object_bit_offset - highest_order_field_bit_offset
15761        : highest_order_field_bit_offset - highest_order_object_bit_offset);
15762
15763   if (bit_offset < 0)
15764     add_AT_int (die, DW_AT_bit_offset, bit_offset);
15765   else
15766     add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
15767 }
15768
15769 /* For a FIELD_DECL node which represents a bit field, output an attribute
15770    which specifies the length in bits of the given field.  */
15771
15772 static inline void
15773 add_bit_size_attribute (dw_die_ref die, tree decl)
15774 {
15775   /* Must be a field and a bit field.  */
15776   gcc_assert (TREE_CODE (decl) == FIELD_DECL
15777               && DECL_BIT_FIELD_TYPE (decl));
15778
15779   if (host_integerp (DECL_SIZE (decl), 1))
15780     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
15781 }
15782
15783 /* If the compiled language is ANSI C, then add a 'prototyped'
15784    attribute, if arg types are given for the parameters of a function.  */
15785
15786 static inline void
15787 add_prototyped_attribute (dw_die_ref die, tree func_type)
15788 {
15789   if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
15790       && prototype_p (func_type))
15791     add_AT_flag (die, DW_AT_prototyped, 1);
15792 }
15793
15794 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
15795    by looking in either the type declaration or object declaration
15796    equate table.  */
15797
15798 static inline dw_die_ref
15799 add_abstract_origin_attribute (dw_die_ref die, tree origin)
15800 {
15801   dw_die_ref origin_die = NULL;
15802
15803   if (TREE_CODE (origin) != FUNCTION_DECL)
15804     {
15805       /* We may have gotten separated from the block for the inlined
15806          function, if we're in an exception handler or some such; make
15807          sure that the abstract function has been written out.
15808
15809          Doing this for nested functions is wrong, however; functions are
15810          distinct units, and our context might not even be inline.  */
15811       tree fn = origin;
15812
15813       if (TYPE_P (fn))
15814         fn = TYPE_STUB_DECL (fn);
15815
15816       fn = decl_function_context (fn);
15817       if (fn)
15818         dwarf2out_abstract_function (fn);
15819     }
15820
15821   if (DECL_P (origin))
15822     origin_die = lookup_decl_die (origin);
15823   else if (TYPE_P (origin))
15824     origin_die = lookup_type_die (origin);
15825
15826   /* XXX: Functions that are never lowered don't always have correct block
15827      trees (in the case of java, they simply have no block tree, in some other
15828      languages).  For these functions, there is nothing we can really do to
15829      output correct debug info for inlined functions in all cases.  Rather
15830      than die, we'll just produce deficient debug info now, in that we will
15831      have variables without a proper abstract origin.  In the future, when all
15832      functions are lowered, we should re-add a gcc_assert (origin_die)
15833      here.  */
15834
15835   if (origin_die)
15836     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
15837   return origin_die;
15838 }
15839
15840 /* We do not currently support the pure_virtual attribute.  */
15841
15842 static inline void
15843 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
15844 {
15845   if (DECL_VINDEX (func_decl))
15846     {
15847       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
15848
15849       if (host_integerp (DECL_VINDEX (func_decl), 0))
15850         add_AT_loc (die, DW_AT_vtable_elem_location,
15851                     new_loc_descr (DW_OP_constu,
15852                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
15853                                    0));
15854
15855       /* GNU extension: Record what type this method came from originally.  */
15856       if (debug_info_level > DINFO_LEVEL_TERSE
15857           && DECL_CONTEXT (func_decl))
15858         add_AT_die_ref (die, DW_AT_containing_type,
15859                         lookup_type_die (DECL_CONTEXT (func_decl)));
15860     }
15861 }
15862 \f
15863 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
15864    given decl.  This used to be a vendor extension until after DWARF 4
15865    standardized it.  */
15866
15867 static void
15868 add_linkage_attr (dw_die_ref die, tree decl)
15869 {
15870   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
15871
15872   /* Mimic what assemble_name_raw does with a leading '*'.  */
15873   if (name[0] == '*')
15874     name = &name[1];
15875
15876   if (dwarf_version >= 4)
15877     add_AT_string (die, DW_AT_linkage_name, name);
15878   else
15879     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
15880 }
15881
15882 /* Add source coordinate attributes for the given decl.  */
15883
15884 static void
15885 add_src_coords_attributes (dw_die_ref die, tree decl)
15886 {
15887   expanded_location s;
15888
15889   if (DECL_SOURCE_LOCATION (decl) == UNKNOWN_LOCATION)
15890     return;
15891   s = expand_location (DECL_SOURCE_LOCATION (decl));
15892   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
15893   add_AT_unsigned (die, DW_AT_decl_line, s.line);
15894 }
15895
15896 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
15897
15898 static void
15899 add_linkage_name (dw_die_ref die, tree decl)
15900 {
15901   if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
15902        && TREE_PUBLIC (decl)
15903        && !DECL_ABSTRACT (decl)
15904        && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
15905        && die->die_tag != DW_TAG_member)
15906     {
15907       /* Defer until we have an assembler name set.  */
15908       if (!DECL_ASSEMBLER_NAME_SET_P (decl))
15909         {
15910           limbo_die_node *asm_name;
15911
15912           asm_name = ggc_alloc_cleared_limbo_die_node ();
15913           asm_name->die = die;
15914           asm_name->created_for = decl;
15915           asm_name->next = deferred_asm_name;
15916           deferred_asm_name = asm_name;
15917         }
15918       else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
15919         add_linkage_attr (die, decl);
15920     }
15921 }
15922
15923 /* Add a DW_AT_name attribute and source coordinate attribute for the
15924    given decl, but only if it actually has a name.  */
15925
15926 static void
15927 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
15928 {
15929   tree decl_name;
15930
15931   decl_name = DECL_NAME (decl);
15932   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
15933     {
15934       const char *name = dwarf2_name (decl, 0);
15935       if (name)
15936         add_name_attribute (die, name);
15937       if (! DECL_ARTIFICIAL (decl))
15938         add_src_coords_attributes (die, decl);
15939
15940       add_linkage_name (die, decl);
15941     }
15942
15943 #ifdef VMS_DEBUGGING_INFO
15944   /* Get the function's name, as described by its RTL.  This may be different
15945      from the DECL_NAME name used in the source file.  */
15946   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
15947     {
15948       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
15949                    XEXP (DECL_RTL (decl), 0));
15950       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
15951     }
15952 #endif /* VMS_DEBUGGING_INFO */
15953 }
15954
15955 #ifdef VMS_DEBUGGING_INFO
15956 /* Output the debug main pointer die for VMS */
15957
15958 void
15959 dwarf2out_vms_debug_main_pointer (void)
15960 {
15961   char label[MAX_ARTIFICIAL_LABEL_BYTES];
15962   dw_die_ref die;
15963
15964   /* Allocate the VMS debug main subprogram die.  */
15965   die = ggc_alloc_cleared_die_node ();
15966   die->die_tag = DW_TAG_subprogram;
15967   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
15968   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
15969                                current_function_funcdef_no);
15970   add_AT_lbl_id (die, DW_AT_entry_pc, label);
15971
15972   /* Make it the first child of comp_unit_die ().  */
15973   die->die_parent = comp_unit_die ();
15974   if (comp_unit_die ()->die_child)
15975     {
15976       die->die_sib = comp_unit_die ()->die_child->die_sib;
15977       comp_unit_die ()->die_child->die_sib = die;
15978     }
15979   else
15980     {
15981       die->die_sib = die;
15982       comp_unit_die ()->die_child = die;
15983     }
15984 }
15985 #endif /* VMS_DEBUGGING_INFO */
15986
15987 /* Push a new declaration scope.  */
15988
15989 static void
15990 push_decl_scope (tree scope)
15991 {
15992   VEC_safe_push (tree, gc, decl_scope_table, scope);
15993 }
15994
15995 /* Pop a declaration scope.  */
15996
15997 static inline void
15998 pop_decl_scope (void)
15999 {
16000   VEC_pop (tree, decl_scope_table);
16001 }
16002
16003 /* Return the DIE for the scope that immediately contains this type.
16004    Non-named types get global scope.  Named types nested in other
16005    types get their containing scope if it's open, or global scope
16006    otherwise.  All other types (i.e. function-local named types) get
16007    the current active scope.  */
16008
16009 static dw_die_ref
16010 scope_die_for (tree t, dw_die_ref context_die)
16011 {
16012   dw_die_ref scope_die = NULL;
16013   tree containing_scope;
16014   int i;
16015
16016   /* Non-types always go in the current scope.  */
16017   gcc_assert (TYPE_P (t));
16018
16019   containing_scope = TYPE_CONTEXT (t);
16020
16021   /* Use the containing namespace if it was passed in (for a declaration).  */
16022   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16023     {
16024       if (context_die == lookup_decl_die (containing_scope))
16025         /* OK */;
16026       else
16027         containing_scope = NULL_TREE;
16028     }
16029
16030   /* Ignore function type "scopes" from the C frontend.  They mean that
16031      a tagged type is local to a parmlist of a function declarator, but
16032      that isn't useful to DWARF.  */
16033   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16034     containing_scope = NULL_TREE;
16035
16036   if (SCOPE_FILE_SCOPE_P (containing_scope))
16037     scope_die = comp_unit_die ();
16038   else if (TYPE_P (containing_scope))
16039     {
16040       /* For types, we can just look up the appropriate DIE.  But
16041          first we check to see if we're in the middle of emitting it
16042          so we know where the new DIE should go.  */
16043       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16044         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16045           break;
16046
16047       if (i < 0)
16048         {
16049           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16050                       || TREE_ASM_WRITTEN (containing_scope));
16051           /*We are not in the middle of emitting the type
16052             CONTAINING_SCOPE. Let's see if it's emitted already.  */
16053           scope_die = lookup_type_die (containing_scope);
16054
16055           /* If none of the current dies are suitable, we get file scope.  */
16056           if (scope_die == NULL)
16057             scope_die = comp_unit_die ();
16058         }
16059       else
16060         scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
16061     }
16062   else
16063     scope_die = context_die;
16064
16065   return scope_die;
16066 }
16067
16068 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16069
16070 static inline int
16071 local_scope_p (dw_die_ref context_die)
16072 {
16073   for (; context_die; context_die = context_die->die_parent)
16074     if (context_die->die_tag == DW_TAG_inlined_subroutine
16075         || context_die->die_tag == DW_TAG_subprogram)
16076       return 1;
16077
16078   return 0;
16079 }
16080
16081 /* Returns nonzero if CONTEXT_DIE is a class.  */
16082
16083 static inline int
16084 class_scope_p (dw_die_ref context_die)
16085 {
16086   return (context_die
16087           && (context_die->die_tag == DW_TAG_structure_type
16088               || context_die->die_tag == DW_TAG_class_type
16089               || context_die->die_tag == DW_TAG_interface_type
16090               || context_die->die_tag == DW_TAG_union_type));
16091 }
16092
16093 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16094    whether or not to treat a DIE in this context as a declaration.  */
16095
16096 static inline int
16097 class_or_namespace_scope_p (dw_die_ref context_die)
16098 {
16099   return (class_scope_p (context_die)
16100           || (context_die && context_die->die_tag == DW_TAG_namespace));
16101 }
16102
16103 /* Many forms of DIEs require a "type description" attribute.  This
16104    routine locates the proper "type descriptor" die for the type given
16105    by 'type', and adds a DW_AT_type attribute below the given die.  */
16106
16107 static void
16108 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16109                     int decl_volatile, dw_die_ref context_die)
16110 {
16111   enum tree_code code  = TREE_CODE (type);
16112   dw_die_ref type_die  = NULL;
16113
16114   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16115      or fixed-point type, use the inner type.  This is because we have no
16116      support for unnamed types in base_type_die.  This can happen if this is
16117      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16118   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16119       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16120     type = TREE_TYPE (type), code = TREE_CODE (type);
16121
16122   if (code == ERROR_MARK
16123       /* Handle a special case.  For functions whose return type is void, we
16124          generate *no* type attribute.  (Note that no object may have type
16125          `void', so this only applies to function return types).  */
16126       || code == VOID_TYPE)
16127     return;
16128
16129   type_die = modified_type_die (type,
16130                                 decl_const || TYPE_READONLY (type),
16131                                 decl_volatile || TYPE_VOLATILE (type),
16132                                 context_die);
16133
16134   if (type_die != NULL)
16135     add_AT_die_ref (object_die, DW_AT_type, type_die);
16136 }
16137
16138 /* Given an object die, add the calling convention attribute for the
16139    function call type.  */
16140 static void
16141 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16142 {
16143   enum dwarf_calling_convention value = DW_CC_normal;
16144
16145   value = ((enum dwarf_calling_convention)
16146            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16147
16148   if (is_fortran ()
16149       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16150     {
16151       /* DWARF 2 doesn't provide a way to identify a program's source-level
16152         entry point.  DW_AT_calling_convention attributes are only meant
16153         to describe functions' calling conventions.  However, lacking a
16154         better way to signal the Fortran main program, we used this for 
16155         a long time, following existing custom.  Now, DWARF 4 has 
16156         DW_AT_main_subprogram, which we add below, but some tools still
16157         rely on the old way, which we thus keep.  */
16158       value = DW_CC_program;
16159
16160       if (dwarf_version >= 4 || !dwarf_strict)
16161         add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
16162     }
16163
16164   /* Only add the attribute if the backend requests it, and
16165      is not DW_CC_normal.  */
16166   if (value && (value != DW_CC_normal))
16167     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16168 }
16169
16170 /* Given a tree pointer to a struct, class, union, or enum type node, return
16171    a pointer to the (string) tag name for the given type, or zero if the type
16172    was declared without a tag.  */
16173
16174 static const char *
16175 type_tag (const_tree type)
16176 {
16177   const char *name = 0;
16178
16179   if (TYPE_NAME (type) != 0)
16180     {
16181       tree t = 0;
16182
16183       /* Find the IDENTIFIER_NODE for the type name.  */
16184       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
16185           && !TYPE_NAMELESS (type))
16186         t = TYPE_NAME (type);
16187
16188       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16189          a TYPE_DECL node, regardless of whether or not a `typedef' was
16190          involved.  */
16191       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16192                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16193         {
16194           /* We want to be extra verbose.  Don't call dwarf_name if
16195              DECL_NAME isn't set.  The default hook for decl_printable_name
16196              doesn't like that, and in this context it's correct to return
16197              0, instead of "<anonymous>" or the like.  */
16198           if (DECL_NAME (TYPE_NAME (type))
16199               && !DECL_NAMELESS (TYPE_NAME (type)))
16200             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16201         }
16202
16203       /* Now get the name as a string, or invent one.  */
16204       if (!name && t != 0)
16205         name = IDENTIFIER_POINTER (t);
16206     }
16207
16208   return (name == 0 || *name == '\0') ? 0 : name;
16209 }
16210
16211 /* Return the type associated with a data member, make a special check
16212    for bit field types.  */
16213
16214 static inline tree
16215 member_declared_type (const_tree member)
16216 {
16217   return (DECL_BIT_FIELD_TYPE (member)
16218           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16219 }
16220
16221 /* Get the decl's label, as described by its RTL. This may be different
16222    from the DECL_NAME name used in the source file.  */
16223
16224 #if 0
16225 static const char *
16226 decl_start_label (tree decl)
16227 {
16228   rtx x;
16229   const char *fnname;
16230
16231   x = DECL_RTL (decl);
16232   gcc_assert (MEM_P (x));
16233
16234   x = XEXP (x, 0);
16235   gcc_assert (GET_CODE (x) == SYMBOL_REF);
16236
16237   fnname = XSTR (x, 0);
16238   return fnname;
16239 }
16240 #endif
16241 \f
16242 /* These routines generate the internal representation of the DIE's for
16243    the compilation unit.  Debugging information is collected by walking
16244    the declaration trees passed in from dwarf2out_decl().  */
16245
16246 static void
16247 gen_array_type_die (tree type, dw_die_ref context_die)
16248 {
16249   dw_die_ref scope_die = scope_die_for (type, context_die);
16250   dw_die_ref array_die;
16251
16252   /* GNU compilers represent multidimensional array types as sequences of one
16253      dimensional array types whose element types are themselves array types.
16254      We sometimes squish that down to a single array_type DIE with multiple
16255      subscripts in the Dwarf debugging info.  The draft Dwarf specification
16256      say that we are allowed to do this kind of compression in C, because
16257      there is no difference between an array of arrays and a multidimensional
16258      array.  We don't do this for Ada to remain as close as possible to the
16259      actual representation, which is especially important against the language
16260      flexibilty wrt arrays of variable size.  */
16261
16262   bool collapse_nested_arrays = !is_ada ();
16263   tree element_type;
16264
16265   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16266      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
16267   if (TYPE_STRING_FLAG (type)
16268       && TREE_CODE (type) == ARRAY_TYPE
16269       && is_fortran ()
16270       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16271     {
16272       HOST_WIDE_INT size;
16273
16274       array_die = new_die (DW_TAG_string_type, scope_die, type);
16275       add_name_attribute (array_die, type_tag (type));
16276       equate_type_number_to_die (type, array_die);
16277       size = int_size_in_bytes (type);
16278       if (size >= 0)
16279         add_AT_unsigned (array_die, DW_AT_byte_size, size);
16280       else if (TYPE_DOMAIN (type) != NULL_TREE
16281                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16282                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16283         {
16284           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16285           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16286
16287           size = int_size_in_bytes (TREE_TYPE (szdecl));
16288           if (loc && size > 0)
16289             {
16290               add_AT_location_description (array_die, DW_AT_string_length, loc);
16291               if (size != DWARF2_ADDR_SIZE)
16292                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16293             }
16294         }
16295       return;
16296     }
16297
16298   /* ??? The SGI dwarf reader fails for array of array of enum types
16299      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16300      array type comes before the outer array type.  We thus call gen_type_die
16301      before we new_die and must prevent nested array types collapsing for this
16302      target.  */
16303
16304 #ifdef MIPS_DEBUGGING_INFO
16305   gen_type_die (TREE_TYPE (type), context_die);
16306   collapse_nested_arrays = false;
16307 #endif
16308
16309   array_die = new_die (DW_TAG_array_type, scope_die, type);
16310   add_name_attribute (array_die, type_tag (type));
16311   add_gnat_descriptive_type_attribute (array_die, type, context_die);
16312   if (TYPE_ARTIFICIAL (type))
16313     add_AT_flag (array_die, DW_AT_artificial, 1);
16314   equate_type_number_to_die (type, array_die);
16315
16316   if (TREE_CODE (type) == VECTOR_TYPE)
16317     add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16318
16319   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16320   if (is_fortran ()
16321       && TREE_CODE (type) == ARRAY_TYPE
16322       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16323       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16324     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16325
16326 #if 0
16327   /* We default the array ordering.  SDB will probably do
16328      the right things even if DW_AT_ordering is not present.  It's not even
16329      an issue until we start to get into multidimensional arrays anyway.  If
16330      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16331      then we'll have to put the DW_AT_ordering attribute back in.  (But if
16332      and when we find out that we need to put these in, we will only do so
16333      for multidimensional arrays.  */
16334   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16335 #endif
16336
16337 #ifdef MIPS_DEBUGGING_INFO
16338   /* The SGI compilers handle arrays of unknown bound by setting
16339      AT_declaration and not emitting any subrange DIEs.  */
16340   if (TREE_CODE (type) == ARRAY_TYPE
16341       && ! TYPE_DOMAIN (type))
16342     add_AT_flag (array_die, DW_AT_declaration, 1);
16343   else
16344 #endif
16345   if (TREE_CODE (type) == VECTOR_TYPE)
16346     {
16347       /* For VECTOR_TYPEs we use an array die with appropriate bounds.  */
16348       dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
16349       add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node);
16350       add_bound_info (subrange_die, DW_AT_upper_bound,
16351                       size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
16352     }
16353   else
16354     add_subscript_info (array_die, type, collapse_nested_arrays);
16355
16356   /* Add representation of the type of the elements of this array type and
16357      emit the corresponding DIE if we haven't done it already.  */
16358   element_type = TREE_TYPE (type);
16359   if (collapse_nested_arrays)
16360     while (TREE_CODE (element_type) == ARRAY_TYPE)
16361       {
16362         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16363           break;
16364         element_type = TREE_TYPE (element_type);
16365       }
16366
16367 #ifndef MIPS_DEBUGGING_INFO
16368   gen_type_die (element_type, context_die);
16369 #endif
16370
16371   add_type_attribute (array_die, element_type, 0, 0, context_die);
16372
16373   if (get_AT (array_die, DW_AT_name))
16374     add_pubtype (type, array_die);
16375 }
16376
16377 static dw_loc_descr_ref
16378 descr_info_loc (tree val, tree base_decl)
16379 {
16380   HOST_WIDE_INT size;
16381   dw_loc_descr_ref loc, loc2;
16382   enum dwarf_location_atom op;
16383
16384   if (val == base_decl)
16385     return new_loc_descr (DW_OP_push_object_address, 0, 0);
16386
16387   switch (TREE_CODE (val))
16388     {
16389     CASE_CONVERT:
16390       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16391     case VAR_DECL:
16392       return loc_descriptor_from_tree (val, 0);
16393     case INTEGER_CST:
16394       if (host_integerp (val, 0))
16395         return int_loc_descriptor (tree_low_cst (val, 0));
16396       break;
16397     case INDIRECT_REF:
16398       size = int_size_in_bytes (TREE_TYPE (val));
16399       if (size < 0)
16400         break;
16401       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16402       if (!loc)
16403         break;
16404       if (size == DWARF2_ADDR_SIZE)
16405         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
16406       else
16407         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
16408       return loc;
16409     case POINTER_PLUS_EXPR:
16410     case PLUS_EXPR:
16411       if (host_integerp (TREE_OPERAND (val, 1), 1)
16412           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
16413              < 16384)
16414         {
16415           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16416           if (!loc)
16417             break;
16418           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
16419         }
16420       else
16421         {
16422           op = DW_OP_plus;
16423         do_binop:
16424           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16425           if (!loc)
16426             break;
16427           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
16428           if (!loc2)
16429             break;
16430           add_loc_descr (&loc, loc2);
16431           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
16432         }
16433       return loc;
16434     case MINUS_EXPR:
16435       op = DW_OP_minus;
16436       goto do_binop;
16437     case MULT_EXPR:
16438       op = DW_OP_mul;
16439       goto do_binop;
16440     case EQ_EXPR:
16441       op = DW_OP_eq;
16442       goto do_binop;
16443     case NE_EXPR:
16444       op = DW_OP_ne;
16445       goto do_binop;
16446     default:
16447       break;
16448     }
16449   return NULL;
16450 }
16451
16452 static void
16453 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
16454                       tree val, tree base_decl)
16455 {
16456   dw_loc_descr_ref loc;
16457
16458   if (host_integerp (val, 0))
16459     {
16460       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
16461       return;
16462     }
16463
16464   loc = descr_info_loc (val, base_decl);
16465   if (!loc)
16466     return;
16467
16468   add_AT_loc (die, attr, loc);
16469 }
16470
16471 /* This routine generates DIE for array with hidden descriptor, details
16472    are filled into *info by a langhook.  */
16473
16474 static void
16475 gen_descr_array_type_die (tree type, struct array_descr_info *info,
16476                           dw_die_ref context_die)
16477 {
16478   dw_die_ref scope_die = scope_die_for (type, context_die);
16479   dw_die_ref array_die;
16480   int dim;
16481
16482   array_die = new_die (DW_TAG_array_type, scope_die, type);
16483   add_name_attribute (array_die, type_tag (type));
16484   equate_type_number_to_die (type, array_die);
16485
16486   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16487   if (is_fortran ()
16488       && info->ndimensions >= 2)
16489     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16490
16491   if (info->data_location)
16492     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
16493                           info->base_decl);
16494   if (info->associated)
16495     add_descr_info_field (array_die, DW_AT_associated, info->associated,
16496                           info->base_decl);
16497   if (info->allocated)
16498     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
16499                           info->base_decl);
16500
16501   for (dim = 0; dim < info->ndimensions; dim++)
16502     {
16503       dw_die_ref subrange_die
16504         = new_die (DW_TAG_subrange_type, array_die, NULL);
16505
16506       if (info->dimen[dim].lower_bound)
16507         {
16508           /* If it is the default value, omit it.  */
16509           int dflt;
16510
16511           if (host_integerp (info->dimen[dim].lower_bound, 0)
16512               && (dflt = lower_bound_default ()) != -1
16513               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
16514             ;
16515           else
16516             add_descr_info_field (subrange_die, DW_AT_lower_bound,
16517                                   info->dimen[dim].lower_bound,
16518                                   info->base_decl);
16519         }
16520       if (info->dimen[dim].upper_bound)
16521         add_descr_info_field (subrange_die, DW_AT_upper_bound,
16522                               info->dimen[dim].upper_bound,
16523                               info->base_decl);
16524       if (info->dimen[dim].stride)
16525         add_descr_info_field (subrange_die, DW_AT_byte_stride,
16526                               info->dimen[dim].stride,
16527                               info->base_decl);
16528     }
16529
16530   gen_type_die (info->element_type, context_die);
16531   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
16532
16533   if (get_AT (array_die, DW_AT_name))
16534     add_pubtype (type, array_die);
16535 }
16536
16537 #if 0
16538 static void
16539 gen_entry_point_die (tree decl, dw_die_ref context_die)
16540 {
16541   tree origin = decl_ultimate_origin (decl);
16542   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
16543
16544   if (origin != NULL)
16545     add_abstract_origin_attribute (decl_die, origin);
16546   else
16547     {
16548       add_name_and_src_coords_attributes (decl_die, decl);
16549       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
16550                           0, 0, context_die);
16551     }
16552
16553   if (DECL_ABSTRACT (decl))
16554     equate_decl_number_to_die (decl, decl_die);
16555   else
16556     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
16557 }
16558 #endif
16559
16560 /* Walk through the list of incomplete types again, trying once more to
16561    emit full debugging info for them.  */
16562
16563 static void
16564 retry_incomplete_types (void)
16565 {
16566   int i;
16567
16568   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
16569     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
16570                                   DINFO_USAGE_DIR_USE))
16571       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die ());
16572 }
16573
16574 /* Determine what tag to use for a record type.  */
16575
16576 static enum dwarf_tag
16577 record_type_tag (tree type)
16578 {
16579   if (! lang_hooks.types.classify_record)
16580     return DW_TAG_structure_type;
16581
16582   switch (lang_hooks.types.classify_record (type))
16583     {
16584     case RECORD_IS_STRUCT:
16585       return DW_TAG_structure_type;
16586
16587     case RECORD_IS_CLASS:
16588       return DW_TAG_class_type;
16589
16590     case RECORD_IS_INTERFACE:
16591       if (dwarf_version >= 3 || !dwarf_strict)
16592         return DW_TAG_interface_type;
16593       return DW_TAG_structure_type;
16594
16595     default:
16596       gcc_unreachable ();
16597     }
16598 }
16599
16600 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
16601    include all of the information about the enumeration values also. Each
16602    enumerated type name/value is listed as a child of the enumerated type
16603    DIE.  */
16604
16605 static dw_die_ref
16606 gen_enumeration_type_die (tree type, dw_die_ref context_die)
16607 {
16608   dw_die_ref type_die = lookup_type_die (type);
16609
16610   if (type_die == NULL)
16611     {
16612       type_die = new_die (DW_TAG_enumeration_type,
16613                           scope_die_for (type, context_die), type);
16614       equate_type_number_to_die (type, type_die);
16615       add_name_attribute (type_die, type_tag (type));
16616       add_gnat_descriptive_type_attribute (type_die, type, context_die);
16617       if (TYPE_ARTIFICIAL (type))
16618         add_AT_flag (type_die, DW_AT_artificial, 1);
16619       if (dwarf_version >= 4 || !dwarf_strict)
16620         {
16621           if (ENUM_IS_SCOPED (type))
16622             add_AT_flag (type_die, DW_AT_enum_class, 1);
16623           if (ENUM_IS_OPAQUE (type))
16624             add_AT_flag (type_die, DW_AT_declaration, 1);
16625         }
16626     }
16627   else if (! TYPE_SIZE (type))
16628     return type_die;
16629   else
16630     remove_AT (type_die, DW_AT_declaration);
16631
16632   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
16633      given enum type is incomplete, do not generate the DW_AT_byte_size
16634      attribute or the DW_AT_element_list attribute.  */
16635   if (TYPE_SIZE (type))
16636     {
16637       tree link;
16638
16639       TREE_ASM_WRITTEN (type) = 1;
16640       add_byte_size_attribute (type_die, type);
16641       if (TYPE_STUB_DECL (type) != NULL_TREE)
16642         {
16643           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
16644           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
16645         }
16646
16647       /* If the first reference to this type was as the return type of an
16648          inline function, then it may not have a parent.  Fix this now.  */
16649       if (type_die->die_parent == NULL)
16650         add_child_die (scope_die_for (type, context_die), type_die);
16651
16652       for (link = TYPE_VALUES (type);
16653            link != NULL; link = TREE_CHAIN (link))
16654         {
16655           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
16656           tree value = TREE_VALUE (link);
16657
16658           add_name_attribute (enum_die,
16659                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
16660
16661           if (TREE_CODE (value) == CONST_DECL)
16662             value = DECL_INITIAL (value);
16663
16664           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
16665             /* DWARF2 does not provide a way of indicating whether or
16666                not enumeration constants are signed or unsigned.  GDB
16667                always assumes the values are signed, so we output all
16668                values as if they were signed.  That means that
16669                enumeration constants with very large unsigned values
16670                will appear to have negative values in the debugger.  */
16671             add_AT_int (enum_die, DW_AT_const_value,
16672                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
16673         }
16674     }
16675   else
16676     add_AT_flag (type_die, DW_AT_declaration, 1);
16677
16678   if (get_AT (type_die, DW_AT_name))
16679     add_pubtype (type, type_die);
16680
16681   return type_die;
16682 }
16683
16684 /* Generate a DIE to represent either a real live formal parameter decl or to
16685    represent just the type of some formal parameter position in some function
16686    type.
16687
16688    Note that this routine is a bit unusual because its argument may be a
16689    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
16690    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
16691    node.  If it's the former then this function is being called to output a
16692    DIE to represent a formal parameter object (or some inlining thereof).  If
16693    it's the latter, then this function is only being called to output a
16694    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
16695    argument type of some subprogram type.
16696    If EMIT_NAME_P is true, name and source coordinate attributes
16697    are emitted.  */
16698
16699 static dw_die_ref
16700 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
16701                           dw_die_ref context_die)
16702 {
16703   tree node_or_origin = node ? node : origin;
16704   tree ultimate_origin;
16705   dw_die_ref parm_die
16706     = new_die (DW_TAG_formal_parameter, context_die, node);
16707
16708   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
16709     {
16710     case tcc_declaration:
16711       ultimate_origin = decl_ultimate_origin (node_or_origin);
16712       if (node || ultimate_origin)
16713         origin = ultimate_origin;
16714       if (origin != NULL)
16715         add_abstract_origin_attribute (parm_die, origin);
16716       else if (emit_name_p)
16717         add_name_and_src_coords_attributes (parm_die, node);
16718       if (origin == NULL
16719           || (! DECL_ABSTRACT (node_or_origin)
16720               && variably_modified_type_p (TREE_TYPE (node_or_origin),
16721                                            decl_function_context
16722                                                             (node_or_origin))))
16723         {
16724           tree type = TREE_TYPE (node_or_origin);
16725           if (decl_by_reference_p (node_or_origin))
16726             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
16727                                 context_die);
16728           else
16729             add_type_attribute (parm_die, type,
16730                                 TREE_READONLY (node_or_origin),
16731                                 TREE_THIS_VOLATILE (node_or_origin),
16732                                 context_die);
16733         }
16734       if (origin == NULL && DECL_ARTIFICIAL (node))
16735         add_AT_flag (parm_die, DW_AT_artificial, 1);
16736
16737       if (node && node != origin)
16738         equate_decl_number_to_die (node, parm_die);
16739       if (! DECL_ABSTRACT (node_or_origin))
16740         add_location_or_const_value_attribute (parm_die, node_or_origin,
16741                                                node == NULL, DW_AT_location);
16742
16743       break;
16744
16745     case tcc_type:
16746       /* We were called with some kind of a ..._TYPE node.  */
16747       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
16748       break;
16749
16750     default:
16751       gcc_unreachable ();
16752     }
16753
16754   return parm_die;
16755 }
16756
16757 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
16758    children DW_TAG_formal_parameter DIEs representing the arguments of the
16759    parameter pack.
16760
16761    PARM_PACK must be a function parameter pack.
16762    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
16763    must point to the subsequent arguments of the function PACK_ARG belongs to.
16764    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
16765    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
16766    following the last one for which a DIE was generated.  */
16767
16768 static dw_die_ref
16769 gen_formal_parameter_pack_die  (tree parm_pack,
16770                                 tree pack_arg,
16771                                 dw_die_ref subr_die,
16772                                 tree *next_arg)
16773 {
16774   tree arg;
16775   dw_die_ref parm_pack_die;
16776
16777   gcc_assert (parm_pack
16778               && lang_hooks.function_parameter_pack_p (parm_pack)
16779               && subr_die);
16780
16781   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
16782   add_src_coords_attributes (parm_pack_die, parm_pack);
16783
16784   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
16785     {
16786       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
16787                                                                  parm_pack))
16788         break;
16789       gen_formal_parameter_die (arg, NULL,
16790                                 false /* Don't emit name attribute.  */,
16791                                 parm_pack_die);
16792     }
16793   if (next_arg)
16794     *next_arg = arg;
16795   return parm_pack_die;
16796 }
16797
16798 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
16799    at the end of an (ANSI prototyped) formal parameters list.  */
16800
16801 static void
16802 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
16803 {
16804   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
16805 }
16806
16807 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
16808    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
16809    parameters as specified in some function type specification (except for
16810    those which appear as part of a function *definition*).  */
16811
16812 static void
16813 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
16814 {
16815   tree link;
16816   tree formal_type = NULL;
16817   tree first_parm_type;
16818   tree arg;
16819
16820   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
16821     {
16822       arg = DECL_ARGUMENTS (function_or_method_type);
16823       function_or_method_type = TREE_TYPE (function_or_method_type);
16824     }
16825   else
16826     arg = NULL_TREE;
16827
16828   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
16829
16830   /* Make our first pass over the list of formal parameter types and output a
16831      DW_TAG_formal_parameter DIE for each one.  */
16832   for (link = first_parm_type; link; )
16833     {
16834       dw_die_ref parm_die;
16835
16836       formal_type = TREE_VALUE (link);
16837       if (formal_type == void_type_node)
16838         break;
16839
16840       /* Output a (nameless) DIE to represent the formal parameter itself.  */
16841       parm_die = gen_formal_parameter_die (formal_type, NULL,
16842                                            true /* Emit name attribute.  */,
16843                                            context_die);
16844       if (TREE_CODE (function_or_method_type) == METHOD_TYPE
16845           && link == first_parm_type)
16846         {
16847           add_AT_flag (parm_die, DW_AT_artificial, 1);
16848           if (dwarf_version >= 3 || !dwarf_strict)
16849             add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
16850         }
16851       else if (arg && DECL_ARTIFICIAL (arg))
16852         add_AT_flag (parm_die, DW_AT_artificial, 1);
16853
16854       link = TREE_CHAIN (link);
16855       if (arg)
16856         arg = DECL_CHAIN (arg);
16857     }
16858
16859   /* If this function type has an ellipsis, add a
16860      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
16861   if (formal_type != void_type_node)
16862     gen_unspecified_parameters_die (function_or_method_type, context_die);
16863
16864   /* Make our second (and final) pass over the list of formal parameter types
16865      and output DIEs to represent those types (as necessary).  */
16866   for (link = TYPE_ARG_TYPES (function_or_method_type);
16867        link && TREE_VALUE (link);
16868        link = TREE_CHAIN (link))
16869     gen_type_die (TREE_VALUE (link), context_die);
16870 }
16871
16872 /* We want to generate the DIE for TYPE so that we can generate the
16873    die for MEMBER, which has been defined; we will need to refer back
16874    to the member declaration nested within TYPE.  If we're trying to
16875    generate minimal debug info for TYPE, processing TYPE won't do the
16876    trick; we need to attach the member declaration by hand.  */
16877
16878 static void
16879 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
16880 {
16881   gen_type_die (type, context_die);
16882
16883   /* If we're trying to avoid duplicate debug info, we may not have
16884      emitted the member decl for this function.  Emit it now.  */
16885   if (TYPE_STUB_DECL (type)
16886       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
16887       && ! lookup_decl_die (member))
16888     {
16889       dw_die_ref type_die;
16890       gcc_assert (!decl_ultimate_origin (member));
16891
16892       push_decl_scope (type);
16893       type_die = lookup_type_die_strip_naming_typedef (type);
16894       if (TREE_CODE (member) == FUNCTION_DECL)
16895         gen_subprogram_die (member, type_die);
16896       else if (TREE_CODE (member) == FIELD_DECL)
16897         {
16898           /* Ignore the nameless fields that are used to skip bits but handle
16899              C++ anonymous unions and structs.  */
16900           if (DECL_NAME (member) != NULL_TREE
16901               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
16902               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
16903             {
16904               gen_type_die (member_declared_type (member), type_die);
16905               gen_field_die (member, type_die);
16906             }
16907         }
16908       else
16909         gen_variable_die (member, NULL_TREE, type_die);
16910
16911       pop_decl_scope ();
16912     }
16913 }
16914
16915 /* Generate the DWARF2 info for the "abstract" instance of a function which we
16916    may later generate inlined and/or out-of-line instances of.  */
16917
16918 static void
16919 dwarf2out_abstract_function (tree decl)
16920 {
16921   dw_die_ref old_die;
16922   tree save_fn;
16923   tree context;
16924   int was_abstract;
16925   htab_t old_decl_loc_table;
16926   htab_t old_cached_dw_loc_list_table;
16927   int old_call_site_count, old_tail_call_site_count;
16928   struct call_arg_loc_node *old_call_arg_locations;
16929
16930   /* Make sure we have the actual abstract inline, not a clone.  */
16931   decl = DECL_ORIGIN (decl);
16932
16933   old_die = lookup_decl_die (decl);
16934   if (old_die && get_AT (old_die, DW_AT_inline))
16935     /* We've already generated the abstract instance.  */
16936     return;
16937
16938   /* We can be called while recursively when seeing block defining inlined subroutine
16939      DIE.  Be sure to not clobber the outer location table nor use it or we would
16940      get locations in abstract instantces.  */
16941   old_decl_loc_table = decl_loc_table;
16942   decl_loc_table = NULL;
16943   old_cached_dw_loc_list_table = cached_dw_loc_list_table;
16944   cached_dw_loc_list_table = NULL;
16945   old_call_arg_locations = call_arg_locations;
16946   call_arg_locations = NULL;
16947   old_call_site_count = call_site_count;
16948   call_site_count = -1;
16949   old_tail_call_site_count = tail_call_site_count;
16950   tail_call_site_count = -1;
16951
16952   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
16953      we don't get confused by DECL_ABSTRACT.  */
16954   if (debug_info_level > DINFO_LEVEL_TERSE)
16955     {
16956       context = decl_class_context (decl);
16957       if (context)
16958         gen_type_die_for_member
16959           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
16960     }
16961
16962   /* Pretend we've just finished compiling this function.  */
16963   save_fn = current_function_decl;
16964   current_function_decl = decl;
16965   push_cfun (DECL_STRUCT_FUNCTION (decl));
16966
16967   was_abstract = DECL_ABSTRACT (decl);
16968   set_decl_abstract_flags (decl, 1);
16969   dwarf2out_decl (decl);
16970   if (! was_abstract)
16971     set_decl_abstract_flags (decl, 0);
16972
16973   current_function_decl = save_fn;
16974   decl_loc_table = old_decl_loc_table;
16975   cached_dw_loc_list_table = old_cached_dw_loc_list_table;
16976   call_arg_locations = old_call_arg_locations;
16977   call_site_count = old_call_site_count;
16978   tail_call_site_count = old_tail_call_site_count;
16979   pop_cfun ();
16980 }
16981
16982 /* Helper function of premark_used_types() which gets called through
16983    htab_traverse.
16984
16985    Marks the DIE of a given type in *SLOT as perennial, so it never gets
16986    marked as unused by prune_unused_types.  */
16987
16988 static int
16989 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
16990 {
16991   tree type;
16992   dw_die_ref die;
16993
16994   type = (tree) *slot;
16995   die = lookup_type_die (type);
16996   if (die != NULL)
16997     die->die_perennial_p = 1;
16998   return 1;
16999 }
17000
17001 /* Helper function of premark_types_used_by_global_vars which gets called
17002    through htab_traverse.
17003
17004    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17005    marked as unused by prune_unused_types. The DIE of the type is marked
17006    only if the global variable using the type will actually be emitted.  */
17007
17008 static int
17009 premark_types_used_by_global_vars_helper (void **slot,
17010                                           void *data ATTRIBUTE_UNUSED)
17011 {
17012   struct types_used_by_vars_entry *entry;
17013   dw_die_ref die;
17014
17015   entry = (struct types_used_by_vars_entry *) *slot;
17016   gcc_assert (entry->type != NULL
17017               && entry->var_decl != NULL);
17018   die = lookup_type_die (entry->type);
17019   if (die)
17020     {
17021       /* Ask cgraph if the global variable really is to be emitted.
17022          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17023       struct varpool_node *node = varpool_get_node (entry->var_decl);
17024       if (node && node->needed)
17025         {
17026           die->die_perennial_p = 1;
17027           /* Keep the parent DIEs as well.  */
17028           while ((die = die->die_parent) && die->die_perennial_p == 0)
17029             die->die_perennial_p = 1;
17030         }
17031     }
17032   return 1;
17033 }
17034
17035 /* Mark all members of used_types_hash as perennial.  */
17036
17037 static void
17038 premark_used_types (void)
17039 {
17040   if (cfun && cfun->used_types_hash)
17041     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17042 }
17043
17044 /* Mark all members of types_used_by_vars_entry as perennial.  */
17045
17046 static void
17047 premark_types_used_by_global_vars (void)
17048 {
17049   if (types_used_by_vars_hash)
17050     htab_traverse (types_used_by_vars_hash,
17051                    premark_types_used_by_global_vars_helper, NULL);
17052 }
17053
17054 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
17055    for CA_LOC call arg loc node.  */
17056
17057 static dw_die_ref
17058 gen_call_site_die (tree decl, dw_die_ref subr_die,
17059                    struct call_arg_loc_node *ca_loc)
17060 {
17061   dw_die_ref stmt_die = NULL, die;
17062   tree block = ca_loc->block;
17063
17064   while (block
17065          && block != DECL_INITIAL (decl)
17066          && TREE_CODE (block) == BLOCK)
17067     {
17068       if (VEC_length (dw_die_ref, block_map) > BLOCK_NUMBER (block))
17069         stmt_die = VEC_index (dw_die_ref, block_map, BLOCK_NUMBER (block));
17070       if (stmt_die)
17071         break;
17072       block = BLOCK_SUPERCONTEXT (block);
17073     }
17074   if (stmt_die == NULL)
17075     stmt_die = subr_die;
17076   die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
17077   add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
17078   if (ca_loc->tail_call_p)
17079     add_AT_flag (die, DW_AT_GNU_tail_call, 1);
17080   if (ca_loc->symbol_ref)
17081     {
17082       dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
17083       if (tdie)
17084         add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
17085       else
17086         add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref);
17087     }
17088   return die;
17089 }
17090
17091 /* Generate a DIE to represent a declared function (either file-scope or
17092    block-local).  */
17093
17094 static void
17095 gen_subprogram_die (tree decl, dw_die_ref context_die)
17096 {
17097   tree origin = decl_ultimate_origin (decl);
17098   dw_die_ref subr_die;
17099   tree outer_scope;
17100   dw_die_ref old_die = lookup_decl_die (decl);
17101   int declaration = (current_function_decl != decl
17102                      || class_or_namespace_scope_p (context_die));
17103
17104   premark_used_types ();
17105
17106   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17107      started to generate the abstract instance of an inline, decided to output
17108      its containing class, and proceeded to emit the declaration of the inline
17109      from the member list for the class.  If so, DECLARATION takes priority;
17110      we'll get back to the abstract instance when done with the class.  */
17111
17112   /* The class-scope declaration DIE must be the primary DIE.  */
17113   if (origin && declaration && class_or_namespace_scope_p (context_die))
17114     {
17115       origin = NULL;
17116       gcc_assert (!old_die);
17117     }
17118
17119   /* Now that the C++ front end lazily declares artificial member fns, we
17120      might need to retrofit the declaration into its class.  */
17121   if (!declaration && !origin && !old_die
17122       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17123       && !class_or_namespace_scope_p (context_die)
17124       && debug_info_level > DINFO_LEVEL_TERSE)
17125     old_die = force_decl_die (decl);
17126
17127   if (origin != NULL)
17128     {
17129       gcc_assert (!declaration || local_scope_p (context_die));
17130
17131       /* Fixup die_parent for the abstract instance of a nested
17132          inline function.  */
17133       if (old_die && old_die->die_parent == NULL)
17134         add_child_die (context_die, old_die);
17135
17136       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17137       add_abstract_origin_attribute (subr_die, origin);
17138       /*  This is where the actual code for a cloned function is.
17139           Let's emit linkage name attribute for it.  This helps
17140           debuggers to e.g, set breakpoints into
17141           constructors/destructors when the user asks "break
17142           K::K".  */
17143       add_linkage_name (subr_die, decl);
17144     }
17145   else if (old_die)
17146     {
17147       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17148       struct dwarf_file_data * file_index = lookup_filename (s.file);
17149
17150       if (!get_AT_flag (old_die, DW_AT_declaration)
17151           /* We can have a normal definition following an inline one in the
17152              case of redefinition of GNU C extern inlines.
17153              It seems reasonable to use AT_specification in this case.  */
17154           && !get_AT (old_die, DW_AT_inline))
17155         {
17156           /* Detect and ignore this case, where we are trying to output
17157              something we have already output.  */
17158           return;
17159         }
17160
17161       /* If the definition comes from the same place as the declaration,
17162          maybe use the old DIE.  We always want the DIE for this function
17163          that has the *_pc attributes to be under comp_unit_die so the
17164          debugger can find it.  We also need to do this for abstract
17165          instances of inlines, since the spec requires the out-of-line copy
17166          to have the same parent.  For local class methods, this doesn't
17167          apply; we just use the old DIE.  */
17168       if ((is_cu_die (old_die->die_parent) || context_die == NULL)
17169           && (DECL_ARTIFICIAL (decl)
17170               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17171                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17172                       == (unsigned) s.line))))
17173         {
17174           subr_die = old_die;
17175
17176           /* Clear out the declaration attribute and the formal parameters.
17177              Do not remove all children, because it is possible that this
17178              declaration die was forced using force_decl_die(). In such
17179              cases die that forced declaration die (e.g. TAG_imported_module)
17180              is one of the children that we do not want to remove.  */
17181           remove_AT (subr_die, DW_AT_declaration);
17182           remove_AT (subr_die, DW_AT_object_pointer);
17183           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17184         }
17185       else
17186         {
17187           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17188           add_AT_specification (subr_die, old_die);
17189           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17190             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17191           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17192             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17193         }
17194     }
17195   else
17196     {
17197       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17198
17199       if (TREE_PUBLIC (decl))
17200         add_AT_flag (subr_die, DW_AT_external, 1);
17201
17202       add_name_and_src_coords_attributes (subr_die, decl);
17203       if (debug_info_level > DINFO_LEVEL_TERSE)
17204         {
17205           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17206           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17207                               0, 0, context_die);
17208         }
17209
17210       add_pure_or_virtual_attribute (subr_die, decl);
17211       if (DECL_ARTIFICIAL (decl))
17212         add_AT_flag (subr_die, DW_AT_artificial, 1);
17213
17214       add_accessibility_attribute (subr_die, decl);
17215     }
17216
17217   if (declaration)
17218     {
17219       if (!old_die || !get_AT (old_die, DW_AT_inline))
17220         {
17221           add_AT_flag (subr_die, DW_AT_declaration, 1);
17222
17223           /* If this is an explicit function declaration then generate
17224              a DW_AT_explicit attribute.  */
17225           if (lang_hooks.decls.function_decl_explicit_p (decl)
17226               && (dwarf_version >= 3 || !dwarf_strict))
17227             add_AT_flag (subr_die, DW_AT_explicit, 1);
17228
17229           /* The first time we see a member function, it is in the context of
17230              the class to which it belongs.  We make sure of this by emitting
17231              the class first.  The next time is the definition, which is
17232              handled above.  The two may come from the same source text.
17233
17234              Note that force_decl_die() forces function declaration die. It is
17235              later reused to represent definition.  */
17236           equate_decl_number_to_die (decl, subr_die);
17237         }
17238     }
17239   else if (DECL_ABSTRACT (decl))
17240     {
17241       if (DECL_DECLARED_INLINE_P (decl))
17242         {
17243           if (cgraph_function_possibly_inlined_p (decl))
17244             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17245           else
17246             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17247         }
17248       else
17249         {
17250           if (cgraph_function_possibly_inlined_p (decl))
17251             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17252           else
17253             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17254         }
17255
17256       if (DECL_DECLARED_INLINE_P (decl)
17257           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17258         add_AT_flag (subr_die, DW_AT_artificial, 1);
17259
17260       equate_decl_number_to_die (decl, subr_die);
17261     }
17262   else if (!DECL_EXTERNAL (decl))
17263     {
17264       HOST_WIDE_INT cfa_fb_offset;
17265
17266       if (!old_die || !get_AT (old_die, DW_AT_inline))
17267         equate_decl_number_to_die (decl, subr_die);
17268
17269       if (!flag_reorder_blocks_and_partition)
17270         {
17271           dw_fde_ref fde = cfun->fde;
17272           if (fde->dw_fde_begin)
17273             {
17274               /* We have already generated the labels.  */
17275               add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17276               add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17277             }
17278           else
17279             {
17280               /* Create start/end labels and add the range.  */
17281               char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17282               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17283                                            current_function_funcdef_no);
17284               add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17285               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17286                                            current_function_funcdef_no);
17287               add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17288             }
17289
17290 #if VMS_DEBUGGING_INFO
17291       /* HP OpenVMS Industry Standard 64: DWARF Extensions
17292          Section 2.3 Prologue and Epilogue Attributes:
17293          When a breakpoint is set on entry to a function, it is generally
17294          desirable for execution to be suspended, not on the very first
17295          instruction of the function, but rather at a point after the
17296          function's frame has been set up, after any language defined local
17297          declaration processing has been completed, and before execution of
17298          the first statement of the function begins. Debuggers generally
17299          cannot properly determine where this point is.  Similarly for a
17300          breakpoint set on exit from a function. The prologue and epilogue
17301          attributes allow a compiler to communicate the location(s) to use.  */
17302
17303       {
17304         if (fde->dw_fde_vms_end_prologue)
17305           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
17306             fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
17307
17308         if (fde->dw_fde_vms_begin_epilogue)
17309           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
17310             fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
17311       }
17312 #endif
17313
17314           add_pubname (decl, subr_die);
17315         }
17316       else
17317         {
17318           /* Generate pubnames entries for the split function code ranges.  */
17319           dw_fde_ref fde = cfun->fde;
17320
17321           if (fde->dw_fde_second_begin)
17322             {
17323               if (dwarf_version >= 3 || !dwarf_strict)
17324                 {
17325                   /* We should use ranges for non-contiguous code section 
17326                      addresses.  Use the actual code range for the initial
17327                      section, since the HOT/COLD labels might precede an 
17328                      alignment offset.  */
17329                   bool range_list_added = false;
17330                   add_ranges_by_labels (subr_die, fde->dw_fde_begin,
17331                                         fde->dw_fde_end, &range_list_added);
17332                   add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
17333                                         fde->dw_fde_second_end,
17334                                         &range_list_added);
17335                   add_pubname (decl, subr_die);
17336                   if (range_list_added)
17337                     add_ranges (NULL);
17338                 }
17339               else
17340                 {
17341                   /* There is no real support in DW2 for this .. so we make
17342                      a work-around.  First, emit the pub name for the segment
17343                      containing the function label.  Then make and emit a
17344                      simplified subprogram DIE for the second segment with the
17345                      name pre-fixed by __hot/cold_sect_of_.  We use the same
17346                      linkage name for the second die so that gdb will find both
17347                      sections when given "b foo".  */
17348                   const char *name = NULL;
17349                   tree decl_name = DECL_NAME (decl);
17350                   dw_die_ref seg_die;
17351
17352                   /* Do the 'primary' section.   */
17353                   add_AT_lbl_id (subr_die, DW_AT_low_pc,
17354                                  fde->dw_fde_begin);
17355                   add_AT_lbl_id (subr_die, DW_AT_high_pc,
17356                                  fde->dw_fde_end);
17357                   /* Add it.   */
17358                   add_pubname (decl, subr_die);
17359
17360                   /* Build a minimal DIE for the secondary section.  */
17361                   seg_die = new_die (DW_TAG_subprogram,
17362                                      subr_die->die_parent, decl);
17363
17364                   if (TREE_PUBLIC (decl))
17365                     add_AT_flag (seg_die, DW_AT_external, 1);
17366
17367                   if (decl_name != NULL 
17368                       && IDENTIFIER_POINTER (decl_name) != NULL)
17369                     {
17370                       name = dwarf2_name (decl, 1);
17371                       if (! DECL_ARTIFICIAL (decl))
17372                         add_src_coords_attributes (seg_die, decl);
17373
17374                       add_linkage_name (seg_die, decl);
17375                     }
17376                   gcc_assert (name != NULL);
17377                   add_pure_or_virtual_attribute (seg_die, decl);
17378                   if (DECL_ARTIFICIAL (decl))
17379                     add_AT_flag (seg_die, DW_AT_artificial, 1);
17380
17381                   name = concat ("__second_sect_of_", name, NULL); 
17382                   add_AT_lbl_id (seg_die, DW_AT_low_pc,
17383                                  fde->dw_fde_second_begin);
17384                   add_AT_lbl_id (seg_die, DW_AT_high_pc,
17385                                  fde->dw_fde_second_end);
17386                   add_name_attribute (seg_die, name);
17387                   add_pubname_string (name, seg_die);
17388                 }
17389             }
17390           else
17391             {
17392               add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17393               add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17394               add_pubname (decl, subr_die);
17395             }
17396         }
17397
17398 #ifdef MIPS_DEBUGGING_INFO
17399       /* Add a reference to the FDE for this routine.  */
17400       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, cfun->fde->fde_index);
17401 #endif
17402
17403       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17404
17405       /* We define the "frame base" as the function's CFA.  This is more
17406          convenient for several reasons: (1) It's stable across the prologue
17407          and epilogue, which makes it better than just a frame pointer,
17408          (2) With dwarf3, there exists a one-byte encoding that allows us
17409          to reference the .debug_frame data by proxy, but failing that,
17410          (3) We can at least reuse the code inspection and interpretation
17411          code that determines the CFA position at various points in the
17412          function.  */
17413       if (dwarf_version >= 3)
17414         {
17415           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17416           add_AT_loc (subr_die, DW_AT_frame_base, op);
17417         }
17418       else
17419         {
17420           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17421           if (list->dw_loc_next)
17422             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17423           else
17424             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17425         }
17426
17427       /* Compute a displacement from the "steady-state frame pointer" to
17428          the CFA.  The former is what all stack slots and argument slots
17429          will reference in the rtl; the later is what we've told the
17430          debugger about.  We'll need to adjust all frame_base references
17431          by this displacement.  */
17432       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17433
17434       if (cfun->static_chain_decl)
17435         add_AT_location_description (subr_die, DW_AT_static_link,
17436                  loc_list_from_tree (cfun->static_chain_decl, 2));
17437     }
17438
17439   /* Generate child dies for template paramaters.  */
17440   if (debug_info_level > DINFO_LEVEL_TERSE)
17441     gen_generic_params_dies (decl);
17442
17443   /* Now output descriptions of the arguments for this function. This gets
17444      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17445      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17446      `...' at the end of the formal parameter list.  In order to find out if
17447      there was a trailing ellipsis or not, we must instead look at the type
17448      associated with the FUNCTION_DECL.  This will be a node of type
17449      FUNCTION_TYPE. If the chain of type nodes hanging off of this
17450      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17451      an ellipsis at the end.  */
17452
17453   /* In the case where we are describing a mere function declaration, all we
17454      need to do here (and all we *can* do here) is to describe the *types* of
17455      its formal parameters.  */
17456   if (debug_info_level <= DINFO_LEVEL_TERSE)
17457     ;
17458   else if (declaration)
17459     gen_formal_types_die (decl, subr_die);
17460   else
17461     {
17462       /* Generate DIEs to represent all known formal parameters.  */
17463       tree parm = DECL_ARGUMENTS (decl);
17464       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17465       tree generic_decl_parm = generic_decl
17466                                 ? DECL_ARGUMENTS (generic_decl)
17467                                 : NULL;
17468
17469       /* Now we want to walk the list of parameters of the function and
17470          emit their relevant DIEs.
17471
17472          We consider the case of DECL being an instance of a generic function
17473          as well as it being a normal function.
17474
17475          If DECL is an instance of a generic function we walk the
17476          parameters of the generic function declaration _and_ the parameters of
17477          DECL itself. This is useful because we want to emit specific DIEs for
17478          function parameter packs and those are declared as part of the
17479          generic function declaration. In that particular case,
17480          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17481          That DIE has children DIEs representing the set of arguments
17482          of the pack. Note that the set of pack arguments can be empty.
17483          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17484          children DIE.
17485
17486          Otherwise, we just consider the parameters of DECL.  */
17487       while (generic_decl_parm || parm)
17488         {
17489           if (generic_decl_parm
17490               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17491             gen_formal_parameter_pack_die (generic_decl_parm,
17492                                            parm, subr_die,
17493                                            &parm);
17494           else if (parm)
17495             {
17496               dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
17497
17498               if (parm == DECL_ARGUMENTS (decl)
17499                   && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
17500                   && parm_die
17501                   && (dwarf_version >= 3 || !dwarf_strict))
17502                 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
17503
17504               parm = DECL_CHAIN (parm);
17505             }
17506
17507           if (generic_decl_parm)
17508             generic_decl_parm = DECL_CHAIN (generic_decl_parm);
17509         }
17510
17511       /* Decide whether we need an unspecified_parameters DIE at the end.
17512          There are 2 more cases to do this for: 1) the ansi ... declaration -
17513          this is detectable when the end of the arg list is not a
17514          void_type_node 2) an unprototyped function declaration (not a
17515          definition).  This just means that we have no info about the
17516          parameters at all.  */
17517       if (prototype_p (TREE_TYPE (decl)))
17518         {
17519           /* This is the prototyped case, check for....  */
17520           if (stdarg_p (TREE_TYPE (decl)))
17521             gen_unspecified_parameters_die (decl, subr_die);
17522         }
17523       else if (DECL_INITIAL (decl) == NULL_TREE)
17524         gen_unspecified_parameters_die (decl, subr_die);
17525     }
17526
17527   /* Output Dwarf info for all of the stuff within the body of the function
17528      (if it has one - it may be just a declaration).  */
17529   outer_scope = DECL_INITIAL (decl);
17530
17531   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17532      a function.  This BLOCK actually represents the outermost binding contour
17533      for the function, i.e. the contour in which the function's formal
17534      parameters and labels get declared. Curiously, it appears that the front
17535      end doesn't actually put the PARM_DECL nodes for the current function onto
17536      the BLOCK_VARS list for this outer scope, but are strung off of the
17537      DECL_ARGUMENTS list for the function instead.
17538
17539      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17540      the LABEL_DECL nodes for the function however, and we output DWARF info
17541      for those in decls_for_scope.  Just within the `outer_scope' there will be
17542      a BLOCK node representing the function's outermost pair of curly braces,
17543      and any blocks used for the base and member initializers of a C++
17544      constructor function.  */
17545   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17546     {
17547       int call_site_note_count = 0;
17548       int tail_call_site_note_count = 0;
17549
17550       /* Emit a DW_TAG_variable DIE for a named return value.  */
17551       if (DECL_NAME (DECL_RESULT (decl)))
17552         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17553
17554       current_function_has_inlines = 0;
17555       decls_for_scope (outer_scope, subr_die, 0);
17556
17557       if (call_arg_locations && !dwarf_strict)
17558         {
17559           struct call_arg_loc_node *ca_loc;
17560           for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
17561             {
17562               dw_die_ref die = NULL;
17563               rtx tloc = NULL_RTX, tlocc = NULL_RTX;
17564               rtx arg, next_arg;
17565
17566               for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
17567                    arg; arg = next_arg)
17568                 {
17569                   dw_loc_descr_ref reg, val;
17570                   enum machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
17571                   dw_die_ref cdie, tdie = NULL;
17572
17573                   next_arg = XEXP (arg, 1);
17574                   if (REG_P (XEXP (XEXP (arg, 0), 0))
17575                       && next_arg
17576                       && MEM_P (XEXP (XEXP (next_arg, 0), 0))
17577                       && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
17578                       && REGNO (XEXP (XEXP (arg, 0), 0))
17579                          == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
17580                     next_arg = XEXP (next_arg, 1);
17581                   if (mode == VOIDmode)
17582                     {
17583                       mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
17584                       if (mode == VOIDmode)
17585                         mode = GET_MODE (XEXP (arg, 0));
17586                     }
17587                   if (mode == VOIDmode || mode == BLKmode)
17588                     continue;
17589                   if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
17590                     {
17591                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17592                       tloc = XEXP (XEXP (arg, 0), 1);
17593                       continue;
17594                     }
17595                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
17596                            && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
17597                     {
17598                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17599                       tlocc = XEXP (XEXP (arg, 0), 1);
17600                       continue;
17601                     }
17602                   reg = NULL;
17603                   if (REG_P (XEXP (XEXP (arg, 0), 0)))
17604                     reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
17605                                               VAR_INIT_STATUS_INITIALIZED);
17606                   else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
17607                     {
17608                       rtx mem = XEXP (XEXP (arg, 0), 0);
17609                       reg = mem_loc_descriptor (XEXP (mem, 0),
17610                                                 get_address_mode (mem),
17611                                                 GET_MODE (mem),
17612                                                 VAR_INIT_STATUS_INITIALIZED);
17613                     }
17614                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
17615                            == DEBUG_PARAMETER_REF)
17616                     {
17617                       tree tdecl
17618                         = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
17619                       tdie = lookup_decl_die (tdecl);
17620                       if (tdie == NULL)
17621                         continue;
17622                     }
17623                   else
17624                     continue;
17625                   if (reg == NULL
17626                       && GET_CODE (XEXP (XEXP (arg, 0), 0))
17627                          != DEBUG_PARAMETER_REF)
17628                     continue;
17629                   val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
17630                                             VOIDmode,
17631                                             VAR_INIT_STATUS_INITIALIZED);
17632                   if (val == NULL)
17633                     continue;
17634                   if (die == NULL)
17635                     die = gen_call_site_die (decl, subr_die, ca_loc);
17636                   cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
17637                                   NULL_TREE);
17638                   if (reg != NULL)
17639                     add_AT_loc (cdie, DW_AT_location, reg);
17640                   else if (tdie != NULL)
17641                     add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
17642                   add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
17643                   if (next_arg != XEXP (arg, 1))
17644                     {
17645                       mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
17646                       if (mode == VOIDmode)
17647                         mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
17648                       val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
17649                                                             0), 1),
17650                                                 mode, VOIDmode,
17651                                                 VAR_INIT_STATUS_INITIALIZED);
17652                       if (val != NULL)
17653                         add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
17654                     }
17655                 }
17656               if (die == NULL
17657                   && (ca_loc->symbol_ref || tloc))
17658                 die = gen_call_site_die (decl, subr_die, ca_loc);
17659               if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
17660                 {
17661                   dw_loc_descr_ref tval = NULL;
17662
17663                   if (tloc != NULL_RTX)
17664                     tval = mem_loc_descriptor (tloc,
17665                                                GET_MODE (tloc) == VOIDmode
17666                                                ? Pmode : GET_MODE (tloc),
17667                                                VOIDmode,
17668                                                VAR_INIT_STATUS_INITIALIZED);
17669                   if (tval)
17670                     add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
17671                   else if (tlocc != NULL_RTX)
17672                     {
17673                       tval = mem_loc_descriptor (tlocc,
17674                                                  GET_MODE (tlocc) == VOIDmode
17675                                                  ? Pmode : GET_MODE (tlocc),
17676                                                  VOIDmode,
17677                                                  VAR_INIT_STATUS_INITIALIZED);
17678                       if (tval)
17679                         add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
17680                                     tval);
17681                     }
17682                 }
17683               if (die != NULL)
17684                 {
17685                   call_site_note_count++;
17686                   if (ca_loc->tail_call_p)
17687                     tail_call_site_note_count++;
17688                 }
17689             }
17690         }
17691       call_arg_locations = NULL;
17692       call_arg_loc_last = NULL;
17693       if (tail_call_site_count >= 0
17694           && tail_call_site_count == tail_call_site_note_count
17695           && !dwarf_strict)
17696         {
17697           if (call_site_count >= 0
17698               && call_site_count == call_site_note_count)
17699             add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
17700           else
17701             add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
17702         }
17703       call_site_count = -1;
17704       tail_call_site_count = -1;
17705     }
17706   /* Add the calling convention attribute if requested.  */
17707   add_calling_convention_attribute (subr_die, decl);
17708
17709 }
17710
17711 /* Returns a hash value for X (which really is a die_struct).  */
17712
17713 static hashval_t
17714 common_block_die_table_hash (const void *x)
17715 {
17716   const_dw_die_ref d = (const_dw_die_ref) x;
17717   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17718 }
17719
17720 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17721    as decl_id and die_parent of die_struct Y.  */
17722
17723 static int
17724 common_block_die_table_eq (const void *x, const void *y)
17725 {
17726   const_dw_die_ref d = (const_dw_die_ref) x;
17727   const_dw_die_ref e = (const_dw_die_ref) y;
17728   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
17729 }
17730
17731 /* Generate a DIE to represent a declared data object.
17732    Either DECL or ORIGIN must be non-null.  */
17733
17734 static void
17735 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
17736 {
17737   HOST_WIDE_INT off;
17738   tree com_decl;
17739   tree decl_or_origin = decl ? decl : origin;
17740   tree ultimate_origin;
17741   dw_die_ref var_die;
17742   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
17743   dw_die_ref origin_die;
17744   bool declaration = (DECL_EXTERNAL (decl_or_origin)
17745                       || class_or_namespace_scope_p (context_die));
17746   bool specialization_p = false;
17747
17748   ultimate_origin = decl_ultimate_origin (decl_or_origin);
17749   if (decl || ultimate_origin)
17750     origin = ultimate_origin;
17751   com_decl = fortran_common (decl_or_origin, &off);
17752
17753   /* Symbol in common gets emitted as a child of the common block, in the form
17754      of a data member.  */
17755   if (com_decl)
17756     {
17757       dw_die_ref com_die;
17758       dw_loc_list_ref loc;
17759       die_node com_die_arg;
17760
17761       var_die = lookup_decl_die (decl_or_origin);
17762       if (var_die)
17763         {
17764           if (get_AT (var_die, DW_AT_location) == NULL)
17765             {
17766               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
17767               if (loc)
17768                 {
17769                   if (off)
17770                     {
17771                       /* Optimize the common case.  */
17772                       if (single_element_loc_list_p (loc)
17773                           && loc->expr->dw_loc_opc == DW_OP_addr
17774                           && loc->expr->dw_loc_next == NULL
17775                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
17776                              == SYMBOL_REF)
17777                         loc->expr->dw_loc_oprnd1.v.val_addr
17778                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17779                         else
17780                           loc_list_plus_const (loc, off);
17781                     }
17782                   add_AT_location_description (var_die, DW_AT_location, loc);
17783                   remove_AT (var_die, DW_AT_declaration);
17784                 }
17785             }
17786           return;
17787         }
17788
17789       if (common_block_die_table == NULL)
17790         common_block_die_table
17791           = htab_create_ggc (10, common_block_die_table_hash,
17792                              common_block_die_table_eq, NULL);
17793
17794       com_die_arg.decl_id = DECL_UID (com_decl);
17795       com_die_arg.die_parent = context_die;
17796       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
17797       loc = loc_list_from_tree (com_decl, 2);
17798       if (com_die == NULL)
17799         {
17800           const char *cnam
17801             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
17802           void **slot;
17803
17804           com_die = new_die (DW_TAG_common_block, context_die, decl);
17805           add_name_and_src_coords_attributes (com_die, com_decl);
17806           if (loc)
17807             {
17808               add_AT_location_description (com_die, DW_AT_location, loc);
17809               /* Avoid sharing the same loc descriptor between
17810                  DW_TAG_common_block and DW_TAG_variable.  */
17811               loc = loc_list_from_tree (com_decl, 2);
17812             }
17813           else if (DECL_EXTERNAL (decl))
17814             add_AT_flag (com_die, DW_AT_declaration, 1);
17815           add_pubname_string (cnam, com_die); /* ??? needed? */
17816           com_die->decl_id = DECL_UID (com_decl);
17817           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
17818           *slot = (void *) com_die;
17819         }
17820       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
17821         {
17822           add_AT_location_description (com_die, DW_AT_location, loc);
17823           loc = loc_list_from_tree (com_decl, 2);
17824           remove_AT (com_die, DW_AT_declaration);
17825         }
17826       var_die = new_die (DW_TAG_variable, com_die, decl);
17827       add_name_and_src_coords_attributes (var_die, decl);
17828       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
17829                           TREE_THIS_VOLATILE (decl), context_die);
17830       add_AT_flag (var_die, DW_AT_external, 1);
17831       if (loc)
17832         {
17833           if (off)
17834             {
17835               /* Optimize the common case.  */
17836               if (single_element_loc_list_p (loc)
17837                   && loc->expr->dw_loc_opc == DW_OP_addr
17838                   && loc->expr->dw_loc_next == NULL
17839                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
17840                 loc->expr->dw_loc_oprnd1.v.val_addr
17841                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17842               else
17843                 loc_list_plus_const (loc, off);
17844             }
17845           add_AT_location_description (var_die, DW_AT_location, loc);
17846         }
17847       else if (DECL_EXTERNAL (decl))
17848         add_AT_flag (var_die, DW_AT_declaration, 1);
17849       equate_decl_number_to_die (decl, var_die);
17850       return;
17851     }
17852
17853   /* If the compiler emitted a definition for the DECL declaration
17854      and if we already emitted a DIE for it, don't emit a second
17855      DIE for it again. Allow re-declarations of DECLs that are
17856      inside functions, though.  */
17857   if (old_die && declaration && !local_scope_p (context_die))
17858     return;
17859
17860   /* For static data members, the declaration in the class is supposed
17861      to have DW_TAG_member tag; the specification should still be
17862      DW_TAG_variable referencing the DW_TAG_member DIE.  */
17863   if (declaration && class_scope_p (context_die))
17864     var_die = new_die (DW_TAG_member, context_die, decl);
17865   else
17866     var_die = new_die (DW_TAG_variable, context_die, decl);
17867
17868   origin_die = NULL;
17869   if (origin != NULL)
17870     origin_die = add_abstract_origin_attribute (var_die, origin);
17871
17872   /* Loop unrolling can create multiple blocks that refer to the same
17873      static variable, so we must test for the DW_AT_declaration flag.
17874
17875      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
17876      copy decls and set the DECL_ABSTRACT flag on them instead of
17877      sharing them.
17878
17879      ??? Duplicated blocks have been rewritten to use .debug_ranges.
17880
17881      ??? The declare_in_namespace support causes us to get two DIEs for one
17882      variable, both of which are declarations.  We want to avoid considering
17883      one to be a specification, so we must test that this DIE is not a
17884      declaration.  */
17885   else if (old_die && TREE_STATIC (decl) && ! declaration
17886            && get_AT_flag (old_die, DW_AT_declaration) == 1)
17887     {
17888       /* This is a definition of a C++ class level static.  */
17889       add_AT_specification (var_die, old_die);
17890       specialization_p = true;
17891       if (DECL_NAME (decl))
17892         {
17893           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17894           struct dwarf_file_data * file_index = lookup_filename (s.file);
17895
17896           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17897             add_AT_file (var_die, DW_AT_decl_file, file_index);
17898
17899           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17900             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
17901
17902           if (old_die->die_tag == DW_TAG_member)
17903             add_linkage_name (var_die, decl);
17904         }
17905     }
17906   else
17907     add_name_and_src_coords_attributes (var_die, decl);
17908
17909   if ((origin == NULL && !specialization_p)
17910       || (origin != NULL
17911           && !DECL_ABSTRACT (decl_or_origin)
17912           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
17913                                        decl_function_context
17914                                                         (decl_or_origin))))
17915     {
17916       tree type = TREE_TYPE (decl_or_origin);
17917
17918       if (decl_by_reference_p (decl_or_origin))
17919         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
17920       else
17921         add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
17922                             TREE_THIS_VOLATILE (decl_or_origin), context_die);
17923     }
17924
17925   if (origin == NULL && !specialization_p)
17926     {
17927       if (TREE_PUBLIC (decl))
17928         add_AT_flag (var_die, DW_AT_external, 1);
17929
17930       if (DECL_ARTIFICIAL (decl))
17931         add_AT_flag (var_die, DW_AT_artificial, 1);
17932
17933       add_accessibility_attribute (var_die, decl);
17934     }
17935
17936   if (declaration)
17937     add_AT_flag (var_die, DW_AT_declaration, 1);
17938
17939   if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL))
17940     equate_decl_number_to_die (decl, var_die);
17941
17942   if (! declaration
17943       && (! DECL_ABSTRACT (decl_or_origin)
17944           /* Local static vars are shared between all clones/inlines,
17945              so emit DW_AT_location on the abstract DIE if DECL_RTL is
17946              already set.  */
17947           || (TREE_CODE (decl_or_origin) == VAR_DECL
17948               && TREE_STATIC (decl_or_origin)
17949               && DECL_RTL_SET_P (decl_or_origin)))
17950       /* When abstract origin already has DW_AT_location attribute, no need
17951          to add it again.  */
17952       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
17953     {
17954       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
17955           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
17956         defer_location (decl_or_origin, var_die);
17957       else
17958         add_location_or_const_value_attribute (var_die, decl_or_origin,
17959                                                decl == NULL, DW_AT_location);
17960       add_pubname (decl_or_origin, var_die);
17961     }
17962   else
17963     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
17964 }
17965
17966 /* Generate a DIE to represent a named constant.  */
17967
17968 static void
17969 gen_const_die (tree decl, dw_die_ref context_die)
17970 {
17971   dw_die_ref const_die;
17972   tree type = TREE_TYPE (decl);
17973
17974   const_die = new_die (DW_TAG_constant, context_die, decl);
17975   add_name_and_src_coords_attributes (const_die, decl);
17976   add_type_attribute (const_die, type, 1, 0, context_die);
17977   if (TREE_PUBLIC (decl))
17978     add_AT_flag (const_die, DW_AT_external, 1);
17979   if (DECL_ARTIFICIAL (decl))
17980     add_AT_flag (const_die, DW_AT_artificial, 1);
17981   tree_add_const_value_attribute_for_decl (const_die, decl);
17982 }
17983
17984 /* Generate a DIE to represent a label identifier.  */
17985
17986 static void
17987 gen_label_die (tree decl, dw_die_ref context_die)
17988 {
17989   tree origin = decl_ultimate_origin (decl);
17990   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
17991   rtx insn;
17992   char label[MAX_ARTIFICIAL_LABEL_BYTES];
17993
17994   if (origin != NULL)
17995     add_abstract_origin_attribute (lbl_die, origin);
17996   else
17997     add_name_and_src_coords_attributes (lbl_die, decl);
17998
17999   if (DECL_ABSTRACT (decl))
18000     equate_decl_number_to_die (decl, lbl_die);
18001   else
18002     {
18003       insn = DECL_RTL_IF_SET (decl);
18004
18005       /* Deleted labels are programmer specified labels which have been
18006          eliminated because of various optimizations.  We still emit them
18007          here so that it is possible to put breakpoints on them.  */
18008       if (insn
18009           && (LABEL_P (insn)
18010               || ((NOTE_P (insn)
18011                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18012         {
18013           /* When optimization is enabled (via -O) some parts of the compiler
18014              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18015              represent source-level labels which were explicitly declared by
18016              the user.  This really shouldn't be happening though, so catch
18017              it if it ever does happen.  */
18018           gcc_assert (!INSN_DELETED_P (insn));
18019
18020           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18021           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18022         }
18023       else if (insn
18024                && NOTE_P (insn)
18025                && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
18026                && CODE_LABEL_NUMBER (insn) != -1)
18027         {
18028           ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
18029           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18030         }
18031     }
18032 }
18033
18034 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18035    attributes to the DIE for a block STMT, to describe where the inlined
18036    function was called from.  This is similar to add_src_coords_attributes.  */
18037
18038 static inline void
18039 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18040 {
18041   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18042
18043   if (dwarf_version >= 3 || !dwarf_strict)
18044     {
18045       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18046       add_AT_unsigned (die, DW_AT_call_line, s.line);
18047     }
18048 }
18049
18050
18051 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18052    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18053
18054 static inline void
18055 add_high_low_attributes (tree stmt, dw_die_ref die)
18056 {
18057   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18058
18059   if (BLOCK_FRAGMENT_CHAIN (stmt)
18060       && (dwarf_version >= 3 || !dwarf_strict))
18061     {
18062       tree chain;
18063
18064       if (inlined_function_outer_scope_p (stmt))
18065         {
18066           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18067                                        BLOCK_NUMBER (stmt));
18068           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18069         }
18070
18071       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18072
18073       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18074       do
18075         {
18076           add_ranges (chain);
18077           chain = BLOCK_FRAGMENT_CHAIN (chain);
18078         }
18079       while (chain);
18080       add_ranges (NULL);
18081     }
18082   else
18083     {
18084       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18085                                    BLOCK_NUMBER (stmt));
18086       add_AT_lbl_id (die, DW_AT_low_pc, label);
18087       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18088                                    BLOCK_NUMBER (stmt));
18089       add_AT_lbl_id (die, DW_AT_high_pc, label);
18090     }
18091 }
18092
18093 /* Generate a DIE for a lexical block.  */
18094
18095 static void
18096 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18097 {
18098   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18099
18100   if (call_arg_locations)
18101     {
18102       if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18103         VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18104                                BLOCK_NUMBER (stmt) + 1);
18105       VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), stmt_die);
18106     }
18107
18108   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18109     add_high_low_attributes (stmt, stmt_die);
18110
18111   decls_for_scope (stmt, stmt_die, depth);
18112 }
18113
18114 /* Generate a DIE for an inlined subprogram.  */
18115
18116 static void
18117 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18118 {
18119   tree decl;
18120
18121   /* The instance of function that is effectively being inlined shall not
18122      be abstract.  */
18123   gcc_assert (! BLOCK_ABSTRACT (stmt));
18124
18125   decl = block_ultimate_origin (stmt);
18126
18127   /* Emit info for the abstract instance first, if we haven't yet.  We
18128      must emit this even if the block is abstract, otherwise when we
18129      emit the block below (or elsewhere), we may end up trying to emit
18130      a die whose origin die hasn't been emitted, and crashing.  */
18131   dwarf2out_abstract_function (decl);
18132
18133   if (! BLOCK_ABSTRACT (stmt))
18134     {
18135       dw_die_ref subr_die
18136         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18137
18138       if (call_arg_locations)
18139         {
18140           if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18141             VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18142                                    BLOCK_NUMBER (stmt) + 1);
18143           VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), subr_die);
18144         }
18145       add_abstract_origin_attribute (subr_die, decl);
18146       if (TREE_ASM_WRITTEN (stmt))
18147         add_high_low_attributes (stmt, subr_die);
18148       add_call_src_coords_attributes (stmt, subr_die);
18149
18150       decls_for_scope (stmt, subr_die, depth);
18151       current_function_has_inlines = 1;
18152     }
18153 }
18154
18155 /* Generate a DIE for a field in a record, or structure.  */
18156
18157 static void
18158 gen_field_die (tree decl, dw_die_ref context_die)
18159 {
18160   dw_die_ref decl_die;
18161
18162   if (TREE_TYPE (decl) == error_mark_node)
18163     return;
18164
18165   decl_die = new_die (DW_TAG_member, context_die, decl);
18166   add_name_and_src_coords_attributes (decl_die, decl);
18167   add_type_attribute (decl_die, member_declared_type (decl),
18168                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18169                       context_die);
18170
18171   if (DECL_BIT_FIELD_TYPE (decl))
18172     {
18173       add_byte_size_attribute (decl_die, decl);
18174       add_bit_size_attribute (decl_die, decl);
18175       add_bit_offset_attribute (decl_die, decl);
18176     }
18177
18178   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18179     add_data_member_location_attribute (decl_die, decl);
18180
18181   if (DECL_ARTIFICIAL (decl))
18182     add_AT_flag (decl_die, DW_AT_artificial, 1);
18183
18184   add_accessibility_attribute (decl_die, decl);
18185
18186   /* Equate decl number to die, so that we can look up this decl later on.  */
18187   equate_decl_number_to_die (decl, decl_die);
18188 }
18189
18190 #if 0
18191 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18192    Use modified_type_die instead.
18193    We keep this code here just in case these types of DIEs may be needed to
18194    represent certain things in other languages (e.g. Pascal) someday.  */
18195
18196 static void
18197 gen_pointer_type_die (tree type, dw_die_ref context_die)
18198 {
18199   dw_die_ref ptr_die
18200     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18201
18202   equate_type_number_to_die (type, ptr_die);
18203   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18204   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18205 }
18206
18207 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18208    Use modified_type_die instead.
18209    We keep this code here just in case these types of DIEs may be needed to
18210    represent certain things in other languages (e.g. Pascal) someday.  */
18211
18212 static void
18213 gen_reference_type_die (tree type, dw_die_ref context_die)
18214 {
18215   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18216
18217   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18218     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18219   else
18220     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18221
18222   equate_type_number_to_die (type, ref_die);
18223   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18224   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18225 }
18226 #endif
18227
18228 /* Generate a DIE for a pointer to a member type.  */
18229
18230 static void
18231 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18232 {
18233   dw_die_ref ptr_die
18234     = new_die (DW_TAG_ptr_to_member_type,
18235                scope_die_for (type, context_die), type);
18236
18237   equate_type_number_to_die (type, ptr_die);
18238   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18239                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18240   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18241 }
18242
18243 typedef const char *dchar_p; /* For DEF_VEC_P.  */
18244 DEF_VEC_P(dchar_p);
18245 DEF_VEC_ALLOC_P(dchar_p,heap);
18246
18247 static char *producer_string;
18248
18249 /* Return a heap allocated producer string including command line options
18250    if -grecord-gcc-switches.  */
18251
18252 static char *
18253 gen_producer_string (void)
18254 {
18255   size_t j;
18256   VEC(dchar_p, heap) *switches = NULL;
18257   const char *language_string = lang_hooks.name;
18258   char *producer, *tail;
18259   const char *p;
18260   size_t len = dwarf_record_gcc_switches ? 0 : 3;
18261   size_t plen = strlen (language_string) + 1 + strlen (version_string);
18262
18263   for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
18264     switch (save_decoded_options[j].opt_index)
18265       {
18266       case OPT_o:
18267       case OPT_d:
18268       case OPT_dumpbase:
18269       case OPT_dumpdir:
18270       case OPT_auxbase:
18271       case OPT_auxbase_strip:
18272       case OPT_quiet:
18273       case OPT_version:
18274       case OPT_v:
18275       case OPT_w:
18276       case OPT_L:
18277       case OPT_D:
18278       case OPT_I:
18279       case OPT_U:
18280       case OPT_SPECIAL_unknown:
18281       case OPT_SPECIAL_ignore:
18282       case OPT_SPECIAL_program_name:
18283       case OPT_SPECIAL_input_file:
18284       case OPT_grecord_gcc_switches:
18285       case OPT_gno_record_gcc_switches:
18286       case OPT__output_pch_:
18287       case OPT_fdiagnostics_show_location_:
18288       case OPT_fdiagnostics_show_option:
18289       case OPT_fverbose_asm:
18290       case OPT____:
18291       case OPT__sysroot_:
18292       case OPT_nostdinc:
18293       case OPT_nostdinc__:
18294         /* Ignore these.  */
18295         continue;
18296       default:
18297         gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
18298                              == '-');
18299         switch (save_decoded_options[j].canonical_option[0][1])
18300           {
18301           case 'M':
18302           case 'i':
18303           case 'W':
18304             continue;
18305           case 'f':
18306             if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
18307                          "dump", 4) == 0)
18308               continue;
18309             break;
18310           default:
18311             break;
18312           }
18313         VEC_safe_push (dchar_p, heap, switches,
18314                        save_decoded_options[j].orig_option_with_args_text);
18315         len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
18316         break;
18317       }
18318
18319   producer = XNEWVEC (char, plen + 1 + len + 1);
18320   tail = producer;
18321   sprintf (tail, "%s %s", language_string, version_string);
18322   tail += plen;
18323
18324   if (!dwarf_record_gcc_switches)
18325     {
18326 #ifdef MIPS_DEBUGGING_INFO
18327       /* The MIPS/SGI compilers place the 'cc' command line options in the
18328          producer string.  The SGI debugger looks for -g, -g1, -g2, or -g3;
18329          if they do not appear in the producer string, the debugger reaches
18330          the conclusion that the object file is stripped and has no debugging
18331          information.  To get the MIPS/SGI debugger to believe that there is
18332          debugging information in the object file, we add a -g to the producer
18333          string.  */
18334       if (debug_info_level > DINFO_LEVEL_TERSE)
18335         {
18336           memcpy (tail, " -g", 3);
18337           tail += 3;
18338         }
18339 #endif
18340     }
18341
18342   FOR_EACH_VEC_ELT (dchar_p, switches, j, p)
18343     {
18344       len = strlen (p);
18345       *tail = ' ';
18346       memcpy (tail + 1, p, len);
18347       tail += len + 1;
18348     }
18349
18350   *tail = '\0';
18351   VEC_free (dchar_p, heap, switches);
18352   return producer;
18353 }
18354
18355 /* Generate the DIE for the compilation unit.  */
18356
18357 static dw_die_ref
18358 gen_compile_unit_die (const char *filename)
18359 {
18360   dw_die_ref die;
18361   const char *language_string = lang_hooks.name;
18362   int language;
18363
18364   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18365
18366   if (filename)
18367     {
18368       add_name_attribute (die, filename);
18369       /* Don't add cwd for <built-in>.  */
18370       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18371         add_comp_dir_attribute (die);
18372     }
18373
18374   if (producer_string == NULL)
18375     producer_string = gen_producer_string ();
18376   add_AT_string (die, DW_AT_producer, producer_string);
18377
18378   /* If our producer is LTO try to figure out a common language to use
18379      from the global list of translation units.  */
18380   if (strcmp (language_string, "GNU GIMPLE") == 0)
18381     {
18382       unsigned i;
18383       tree t;
18384       const char *common_lang = NULL;
18385
18386       FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
18387         {
18388           if (!TRANSLATION_UNIT_LANGUAGE (t))
18389             continue;
18390           if (!common_lang)
18391             common_lang = TRANSLATION_UNIT_LANGUAGE (t);
18392           else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
18393             ;
18394           else if (strncmp (common_lang, "GNU C", 5) == 0
18395                    && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
18396             /* Mixing C and C++ is ok, use C++ in that case.  */
18397             common_lang = "GNU C++";
18398           else
18399             {
18400               /* Fall back to C.  */
18401               common_lang = NULL;
18402               break;
18403             }
18404         }
18405
18406       if (common_lang)
18407         language_string = common_lang;
18408     }
18409
18410   language = DW_LANG_C89;
18411   if (strcmp (language_string, "GNU C++") == 0)
18412     language = DW_LANG_C_plus_plus;
18413   else if (strcmp (language_string, "GNU F77") == 0)
18414     language = DW_LANG_Fortran77;
18415   else if (strcmp (language_string, "GNU Pascal") == 0)
18416     language = DW_LANG_Pascal83;
18417   else if (dwarf_version >= 3 || !dwarf_strict)
18418     {
18419       if (strcmp (language_string, "GNU Ada") == 0)
18420         language = DW_LANG_Ada95;
18421       else if (strcmp (language_string, "GNU Fortran") == 0)
18422         language = DW_LANG_Fortran95;
18423       else if (strcmp (language_string, "GNU Java") == 0)
18424         language = DW_LANG_Java;
18425       else if (strcmp (language_string, "GNU Objective-C") == 0)
18426         language = DW_LANG_ObjC;
18427       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18428         language = DW_LANG_ObjC_plus_plus;
18429     }
18430
18431   add_AT_unsigned (die, DW_AT_language, language);
18432
18433   switch (language)
18434     {
18435     case DW_LANG_Fortran77:
18436     case DW_LANG_Fortran90:
18437     case DW_LANG_Fortran95:
18438       /* Fortran has case insensitive identifiers and the front-end
18439          lowercases everything.  */
18440       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
18441       break;
18442     default:
18443       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
18444       break;
18445     }
18446   return die;
18447 }
18448
18449 /* Generate the DIE for a base class.  */
18450
18451 static void
18452 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18453 {
18454   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18455
18456   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18457   add_data_member_location_attribute (die, binfo);
18458
18459   if (BINFO_VIRTUAL_P (binfo))
18460     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18461
18462   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
18463      children, otherwise the default is DW_ACCESS_public.  In DWARF2
18464      the default has always been DW_ACCESS_private.  */
18465   if (access == access_public_node)
18466     {
18467       if (dwarf_version == 2
18468           || context_die->die_tag == DW_TAG_class_type)
18469       add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18470     }
18471   else if (access == access_protected_node)
18472     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18473   else if (dwarf_version > 2
18474            && context_die->die_tag != DW_TAG_class_type)
18475     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
18476 }
18477
18478 /* Generate a DIE for a class member.  */
18479
18480 static void
18481 gen_member_die (tree type, dw_die_ref context_die)
18482 {
18483   tree member;
18484   tree binfo = TYPE_BINFO (type);
18485   dw_die_ref child;
18486
18487   /* If this is not an incomplete type, output descriptions of each of its
18488      members. Note that as we output the DIEs necessary to represent the
18489      members of this record or union type, we will also be trying to output
18490      DIEs to represent the *types* of those members. However the `type'
18491      function (above) will specifically avoid generating type DIEs for member
18492      types *within* the list of member DIEs for this (containing) type except
18493      for those types (of members) which are explicitly marked as also being
18494      members of this (containing) type themselves.  The g++ front- end can
18495      force any given type to be treated as a member of some other (containing)
18496      type by setting the TYPE_CONTEXT of the given (member) type to point to
18497      the TREE node representing the appropriate (containing) type.  */
18498
18499   /* First output info about the base classes.  */
18500   if (binfo)
18501     {
18502       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18503       int i;
18504       tree base;
18505
18506       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18507         gen_inheritance_die (base,
18508                              (accesses ? VEC_index (tree, accesses, i)
18509                               : access_public_node), context_die);
18510     }
18511
18512   /* Now output info about the data members and type members.  */
18513   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
18514     {
18515       /* If we thought we were generating minimal debug info for TYPE
18516          and then changed our minds, some of the member declarations
18517          may have already been defined.  Don't define them again, but
18518          do put them in the right order.  */
18519
18520       child = lookup_decl_die (member);
18521       if (child)
18522         splice_child_die (context_die, child);
18523       else
18524         gen_decl_die (member, NULL, context_die);
18525     }
18526
18527   /* Now output info about the function members (if any).  */
18528   for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
18529     {
18530       /* Don't include clones in the member list.  */
18531       if (DECL_ABSTRACT_ORIGIN (member))
18532         continue;
18533
18534       child = lookup_decl_die (member);
18535       if (child)
18536         splice_child_die (context_die, child);
18537       else
18538         gen_decl_die (member, NULL, context_die);
18539     }
18540 }
18541
18542 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18543    is set, we pretend that the type was never defined, so we only get the
18544    member DIEs needed by later specification DIEs.  */
18545
18546 static void
18547 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18548                                 enum debug_info_usage usage)
18549 {
18550   dw_die_ref type_die = lookup_type_die (type);
18551   dw_die_ref scope_die = 0;
18552   int nested = 0;
18553   int complete = (TYPE_SIZE (type)
18554                   && (! TYPE_STUB_DECL (type)
18555                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18556   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18557   complete = complete && should_emit_struct_debug (type, usage);
18558
18559   if (type_die && ! complete)
18560     return;
18561
18562   if (TYPE_CONTEXT (type) != NULL_TREE
18563       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18564           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18565     nested = 1;
18566
18567   scope_die = scope_die_for (type, context_die);
18568
18569   if (! type_die || (nested && is_cu_die (scope_die)))
18570     /* First occurrence of type or toplevel definition of nested class.  */
18571     {
18572       dw_die_ref old_die = type_die;
18573
18574       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18575                           ? record_type_tag (type) : DW_TAG_union_type,
18576                           scope_die, type);
18577       equate_type_number_to_die (type, type_die);
18578       if (old_die)
18579         add_AT_specification (type_die, old_die);
18580       else
18581         {
18582           add_name_attribute (type_die, type_tag (type));
18583           add_gnat_descriptive_type_attribute (type_die, type, context_die);
18584           if (TYPE_ARTIFICIAL (type))
18585             add_AT_flag (type_die, DW_AT_artificial, 1);
18586         }
18587     }
18588   else
18589     remove_AT (type_die, DW_AT_declaration);
18590
18591   /* Generate child dies for template paramaters.  */
18592   if (debug_info_level > DINFO_LEVEL_TERSE
18593       && COMPLETE_TYPE_P (type))
18594     schedule_generic_params_dies_gen (type);
18595
18596   /* If this type has been completed, then give it a byte_size attribute and
18597      then give a list of members.  */
18598   if (complete && !ns_decl)
18599     {
18600       /* Prevent infinite recursion in cases where the type of some member of
18601          this type is expressed in terms of this type itself.  */
18602       TREE_ASM_WRITTEN (type) = 1;
18603       add_byte_size_attribute (type_die, type);
18604       if (TYPE_STUB_DECL (type) != NULL_TREE)
18605         {
18606           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18607           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
18608         }
18609
18610       /* If the first reference to this type was as the return type of an
18611          inline function, then it may not have a parent.  Fix this now.  */
18612       if (type_die->die_parent == NULL)
18613         add_child_die (scope_die, type_die);
18614
18615       push_decl_scope (type);
18616       gen_member_die (type, type_die);
18617       pop_decl_scope ();
18618
18619       /* GNU extension: Record what type our vtable lives in.  */
18620       if (TYPE_VFIELD (type))
18621         {
18622           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18623
18624           gen_type_die (vtype, context_die);
18625           add_AT_die_ref (type_die, DW_AT_containing_type,
18626                           lookup_type_die (vtype));
18627         }
18628     }
18629   else
18630     {
18631       add_AT_flag (type_die, DW_AT_declaration, 1);
18632
18633       /* We don't need to do this for function-local types.  */
18634       if (TYPE_STUB_DECL (type)
18635           && ! decl_function_context (TYPE_STUB_DECL (type)))
18636         VEC_safe_push (tree, gc, incomplete_types, type);
18637     }
18638
18639   if (get_AT (type_die, DW_AT_name))
18640     add_pubtype (type, type_die);
18641 }
18642
18643 /* Generate a DIE for a subroutine _type_.  */
18644
18645 static void
18646 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18647 {
18648   tree return_type = TREE_TYPE (type);
18649   dw_die_ref subr_die
18650     = new_die (DW_TAG_subroutine_type,
18651                scope_die_for (type, context_die), type);
18652
18653   equate_type_number_to_die (type, subr_die);
18654   add_prototyped_attribute (subr_die, type);
18655   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18656   gen_formal_types_die (type, subr_die);
18657
18658   if (get_AT (subr_die, DW_AT_name))
18659     add_pubtype (type, subr_die);
18660 }
18661
18662 /* Generate a DIE for a type definition.  */
18663
18664 static void
18665 gen_typedef_die (tree decl, dw_die_ref context_die)
18666 {
18667   dw_die_ref type_die;
18668   tree origin;
18669
18670   if (TREE_ASM_WRITTEN (decl))
18671     return;
18672
18673   TREE_ASM_WRITTEN (decl) = 1;
18674   type_die = new_die (DW_TAG_typedef, context_die, decl);
18675   origin = decl_ultimate_origin (decl);
18676   if (origin != NULL)
18677     add_abstract_origin_attribute (type_die, origin);
18678   else
18679     {
18680       tree type;
18681
18682       add_name_and_src_coords_attributes (type_die, decl);
18683       if (DECL_ORIGINAL_TYPE (decl))
18684         {
18685           type = DECL_ORIGINAL_TYPE (decl);
18686
18687           gcc_assert (type != TREE_TYPE (decl));
18688           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18689         }
18690       else
18691         {
18692           type = TREE_TYPE (decl);
18693
18694           if (is_naming_typedef_decl (TYPE_NAME (type)))
18695             {
18696               /* Here, we are in the case of decl being a typedef naming
18697                  an anonymous type, e.g:
18698                      typedef struct {...} foo;
18699                  In that case TREE_TYPE (decl) is not a typedef variant
18700                  type and TYPE_NAME of the anonymous type is set to the
18701                  TYPE_DECL of the typedef. This construct is emitted by
18702                  the C++ FE.
18703
18704                  TYPE is the anonymous struct named by the typedef
18705                  DECL. As we need the DW_AT_type attribute of the
18706                  DW_TAG_typedef to point to the DIE of TYPE, let's
18707                  generate that DIE right away. add_type_attribute
18708                  called below will then pick (via lookup_type_die) that
18709                  anonymous struct DIE.  */
18710               if (!TREE_ASM_WRITTEN (type))
18711                 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
18712
18713               /* This is a GNU Extension.  We are adding a
18714                  DW_AT_linkage_name attribute to the DIE of the
18715                  anonymous struct TYPE.  The value of that attribute
18716                  is the name of the typedef decl naming the anonymous
18717                  struct.  This greatly eases the work of consumers of
18718                  this debug info.  */
18719               add_linkage_attr (lookup_type_die (type), decl);
18720             }
18721         }
18722
18723       add_type_attribute (type_die, type, TREE_READONLY (decl),
18724                           TREE_THIS_VOLATILE (decl), context_die);
18725
18726       if (is_naming_typedef_decl (decl))
18727         /* We want that all subsequent calls to lookup_type_die with
18728            TYPE in argument yield the DW_TAG_typedef we have just
18729            created.  */
18730         equate_type_number_to_die (type, type_die);
18731
18732       add_accessibility_attribute (type_die, decl);
18733     }
18734
18735   if (DECL_ABSTRACT (decl))
18736     equate_decl_number_to_die (decl, type_die);
18737
18738   if (get_AT (type_die, DW_AT_name))
18739     add_pubtype (decl, type_die);
18740 }
18741
18742 /* Generate a DIE for a struct, class, enum or union type.  */
18743
18744 static void
18745 gen_tagged_type_die (tree type,
18746                      dw_die_ref context_die,
18747                      enum debug_info_usage usage)
18748 {
18749   int need_pop;
18750
18751   if (type == NULL_TREE
18752       || !is_tagged_type (type))
18753     return;
18754
18755   /* If this is a nested type whose containing class hasn't been written
18756      out yet, writing it out will cover this one, too.  This does not apply
18757      to instantiations of member class templates; they need to be added to
18758      the containing class as they are generated.  FIXME: This hurts the
18759      idea of combining type decls from multiple TUs, since we can't predict
18760      what set of template instantiations we'll get.  */
18761   if (TYPE_CONTEXT (type)
18762       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18763       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18764     {
18765       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18766
18767       if (TREE_ASM_WRITTEN (type))
18768         return;
18769
18770       /* If that failed, attach ourselves to the stub.  */
18771       push_decl_scope (TYPE_CONTEXT (type));
18772       context_die = lookup_type_die (TYPE_CONTEXT (type));
18773       need_pop = 1;
18774     }
18775   else if (TYPE_CONTEXT (type) != NULL_TREE
18776            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18777     {
18778       /* If this type is local to a function that hasn't been written
18779          out yet, use a NULL context for now; it will be fixed up in
18780          decls_for_scope.  */
18781       context_die = lookup_decl_die (TYPE_CONTEXT (type));
18782       /* A declaration DIE doesn't count; nested types need to go in the
18783          specification.  */
18784       if (context_die && is_declaration_die (context_die))
18785         context_die = NULL;
18786       need_pop = 0;
18787     }
18788   else
18789     {
18790       context_die = declare_in_namespace (type, context_die);
18791       need_pop = 0;
18792     }
18793
18794   if (TREE_CODE (type) == ENUMERAL_TYPE)
18795     {
18796       /* This might have been written out by the call to
18797          declare_in_namespace.  */
18798       if (!TREE_ASM_WRITTEN (type))
18799         gen_enumeration_type_die (type, context_die);
18800     }
18801   else
18802     gen_struct_or_union_type_die (type, context_die, usage);
18803
18804   if (need_pop)
18805     pop_decl_scope ();
18806
18807   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18808      it up if it is ever completed.  gen_*_type_die will set it for us
18809      when appropriate.  */
18810 }
18811
18812 /* Generate a type description DIE.  */
18813
18814 static void
18815 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18816                          enum debug_info_usage usage)
18817 {
18818   struct array_descr_info info;
18819
18820   if (type == NULL_TREE || type == error_mark_node)
18821     return;
18822
18823   if (TYPE_NAME (type) != NULL_TREE
18824       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18825       && is_redundant_typedef (TYPE_NAME (type))
18826       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18827     /* The DECL of this type is a typedef we don't want to emit debug
18828        info for but we want debug info for its underlying typedef.
18829        This can happen for e.g, the injected-class-name of a C++
18830        type.  */
18831     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
18832
18833   /* If TYPE is a typedef type variant, let's generate debug info
18834      for the parent typedef which TYPE is a type of.  */
18835   if (typedef_variant_p (type))
18836     {
18837       if (TREE_ASM_WRITTEN (type))
18838         return;
18839
18840       /* Prevent broken recursion; we can't hand off to the same type.  */
18841       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18842
18843       /* Use the DIE of the containing namespace as the parent DIE of
18844          the type description DIE we want to generate.  */
18845       if (DECL_CONTEXT (TYPE_NAME (type))
18846           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18847         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18848
18849       TREE_ASM_WRITTEN (type) = 1;
18850
18851       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18852       return;
18853     }
18854
18855   /* If type is an anonymous tagged type named by a typedef, let's
18856      generate debug info for the typedef.  */
18857   if (is_naming_typedef_decl (TYPE_NAME (type)))
18858     {
18859       /* Use the DIE of the containing namespace as the parent DIE of
18860          the type description DIE we want to generate.  */
18861       if (DECL_CONTEXT (TYPE_NAME (type))
18862           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18863         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18864       
18865       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18866       return;
18867     }
18868
18869   /* If this is an array type with hidden descriptor, handle it first.  */
18870   if (!TREE_ASM_WRITTEN (type)
18871       && lang_hooks.types.get_array_descr_info
18872       && lang_hooks.types.get_array_descr_info (type, &info)
18873       && (dwarf_version >= 3 || !dwarf_strict))
18874     {
18875       gen_descr_array_type_die (type, &info, context_die);
18876       TREE_ASM_WRITTEN (type) = 1;
18877       return;
18878     }
18879
18880   /* We are going to output a DIE to represent the unqualified version
18881      of this type (i.e. without any const or volatile qualifiers) so
18882      get the main variant (i.e. the unqualified version) of this type
18883      now.  (Vectors are special because the debugging info is in the
18884      cloned type itself).  */
18885   if (TREE_CODE (type) != VECTOR_TYPE)
18886     type = type_main_variant (type);
18887
18888   if (TREE_ASM_WRITTEN (type))
18889     return;
18890
18891   switch (TREE_CODE (type))
18892     {
18893     case ERROR_MARK:
18894       break;
18895
18896     case POINTER_TYPE:
18897     case REFERENCE_TYPE:
18898       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
18899          ensures that the gen_type_die recursion will terminate even if the
18900          type is recursive.  Recursive types are possible in Ada.  */
18901       /* ??? We could perhaps do this for all types before the switch
18902          statement.  */
18903       TREE_ASM_WRITTEN (type) = 1;
18904
18905       /* For these types, all that is required is that we output a DIE (or a
18906          set of DIEs) to represent the "basis" type.  */
18907       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18908                                 DINFO_USAGE_IND_USE);
18909       break;
18910
18911     case OFFSET_TYPE:
18912       /* This code is used for C++ pointer-to-data-member types.
18913          Output a description of the relevant class type.  */
18914       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
18915                                         DINFO_USAGE_IND_USE);
18916
18917       /* Output a description of the type of the object pointed to.  */
18918       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18919                                         DINFO_USAGE_IND_USE);
18920
18921       /* Now output a DIE to represent this pointer-to-data-member type
18922          itself.  */
18923       gen_ptr_to_mbr_type_die (type, context_die);
18924       break;
18925
18926     case FUNCTION_TYPE:
18927       /* Force out return type (in case it wasn't forced out already).  */
18928       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18929                                         DINFO_USAGE_DIR_USE);
18930       gen_subroutine_type_die (type, context_die);
18931       break;
18932
18933     case METHOD_TYPE:
18934       /* Force out return type (in case it wasn't forced out already).  */
18935       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18936                                         DINFO_USAGE_DIR_USE);
18937       gen_subroutine_type_die (type, context_die);
18938       break;
18939
18940     case ARRAY_TYPE:
18941       gen_array_type_die (type, context_die);
18942       break;
18943
18944     case VECTOR_TYPE:
18945       gen_array_type_die (type, context_die);
18946       break;
18947
18948     case ENUMERAL_TYPE:
18949     case RECORD_TYPE:
18950     case UNION_TYPE:
18951     case QUAL_UNION_TYPE:
18952       gen_tagged_type_die (type, context_die, usage);
18953       return;
18954
18955     case VOID_TYPE:
18956     case INTEGER_TYPE:
18957     case REAL_TYPE:
18958     case FIXED_POINT_TYPE:
18959     case COMPLEX_TYPE:
18960     case BOOLEAN_TYPE:
18961       /* No DIEs needed for fundamental types.  */
18962       break;
18963
18964     case NULLPTR_TYPE:
18965     case LANG_TYPE:
18966       /* Just use DW_TAG_unspecified_type.  */
18967       {
18968         dw_die_ref type_die = lookup_type_die (type);
18969         if (type_die == NULL)
18970           {
18971             tree name = TYPE_NAME (type);
18972             if (TREE_CODE (name) == TYPE_DECL)
18973               name = DECL_NAME (name);
18974             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (), type);
18975             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
18976             equate_type_number_to_die (type, type_die);
18977           }
18978       }
18979       break;
18980
18981     default:
18982       gcc_unreachable ();
18983     }
18984
18985   TREE_ASM_WRITTEN (type) = 1;
18986 }
18987
18988 static void
18989 gen_type_die (tree type, dw_die_ref context_die)
18990 {
18991   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
18992 }
18993
18994 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
18995    things which are local to the given block.  */
18996
18997 static void
18998 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
18999 {
19000   int must_output_die = 0;
19001   bool inlined_func;
19002
19003   /* Ignore blocks that are NULL.  */
19004   if (stmt == NULL_TREE)
19005     return;
19006
19007   inlined_func = inlined_function_outer_scope_p (stmt);
19008
19009   /* If the block is one fragment of a non-contiguous block, do not
19010      process the variables, since they will have been done by the
19011      origin block.  Do process subblocks.  */
19012   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19013     {
19014       tree sub;
19015
19016       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19017         gen_block_die (sub, context_die, depth + 1);
19018
19019       return;
19020     }
19021
19022   /* Determine if we need to output any Dwarf DIEs at all to represent this
19023      block.  */
19024   if (inlined_func)
19025     /* The outer scopes for inlinings *must* always be represented.  We
19026        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19027     must_output_die = 1;
19028   else
19029     {
19030       /* Determine if this block directly contains any "significant"
19031          local declarations which we will need to output DIEs for.  */
19032       if (debug_info_level > DINFO_LEVEL_TERSE)
19033         /* We are not in terse mode so *any* local declaration counts
19034            as being a "significant" one.  */
19035         must_output_die = ((BLOCK_VARS (stmt) != NULL
19036                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19037                            && (TREE_USED (stmt)
19038                                || TREE_ASM_WRITTEN (stmt)
19039                                || BLOCK_ABSTRACT (stmt)));
19040       else if ((TREE_USED (stmt)
19041                 || TREE_ASM_WRITTEN (stmt)
19042                 || BLOCK_ABSTRACT (stmt))
19043                && !dwarf2out_ignore_block (stmt))
19044         must_output_die = 1;
19045     }
19046
19047   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19048      DIE for any block which contains no significant local declarations at
19049      all.  Rather, in such cases we just call `decls_for_scope' so that any
19050      needed Dwarf info for any sub-blocks will get properly generated. Note
19051      that in terse mode, our definition of what constitutes a "significant"
19052      local declaration gets restricted to include only inlined function
19053      instances and local (nested) function definitions.  */
19054   if (must_output_die)
19055     {
19056       if (inlined_func)
19057         {
19058           /* If STMT block is abstract, that means we have been called
19059              indirectly from dwarf2out_abstract_function.
19060              That function rightfully marks the descendent blocks (of
19061              the abstract function it is dealing with) as being abstract,
19062              precisely to prevent us from emitting any
19063              DW_TAG_inlined_subroutine DIE as a descendent
19064              of an abstract function instance. So in that case, we should
19065              not call gen_inlined_subroutine_die.
19066
19067              Later though, when cgraph asks dwarf2out to emit info
19068              for the concrete instance of the function decl into which
19069              the concrete instance of STMT got inlined, the later will lead
19070              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19071           if (! BLOCK_ABSTRACT (stmt))
19072             gen_inlined_subroutine_die (stmt, context_die, depth);
19073         }
19074       else
19075         gen_lexical_block_die (stmt, context_die, depth);
19076     }
19077   else
19078     decls_for_scope (stmt, context_die, depth);
19079 }
19080
19081 /* Process variable DECL (or variable with origin ORIGIN) within
19082    block STMT and add it to CONTEXT_DIE.  */
19083 static void
19084 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19085 {
19086   dw_die_ref die;
19087   tree decl_or_origin = decl ? decl : origin;
19088
19089   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19090     die = lookup_decl_die (decl_or_origin);
19091   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19092            && TYPE_DECL_IS_STUB (decl_or_origin))
19093     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19094   else
19095     die = NULL;
19096
19097   if (die != NULL && die->die_parent == NULL)
19098     add_child_die (context_die, die);
19099   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19100     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19101                                          stmt, context_die);
19102   else
19103     gen_decl_die (decl, origin, context_die);
19104 }
19105
19106 /* Generate all of the decls declared within a given scope and (recursively)
19107    all of its sub-blocks.  */
19108
19109 static void
19110 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19111 {
19112   tree decl;
19113   unsigned int i;
19114   tree subblocks;
19115
19116   /* Ignore NULL blocks.  */
19117   if (stmt == NULL_TREE)
19118     return;
19119
19120   /* Output the DIEs to represent all of the data objects and typedefs
19121      declared directly within this block but not within any nested
19122      sub-blocks.  Also, nested function and tag DIEs have been
19123      generated with a parent of NULL; fix that up now.  */
19124   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
19125     process_scope_var (stmt, decl, NULL_TREE, context_die);
19126   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19127     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19128                        context_die);
19129
19130   /* If we're at -g1, we're not interested in subblocks.  */
19131   if (debug_info_level <= DINFO_LEVEL_TERSE)
19132     return;
19133
19134   /* Output the DIEs to represent all sub-blocks (and the items declared
19135      therein) of this block.  */
19136   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19137        subblocks != NULL;
19138        subblocks = BLOCK_CHAIN (subblocks))
19139     gen_block_die (subblocks, context_die, depth + 1);
19140 }
19141
19142 /* Is this a typedef we can avoid emitting?  */
19143
19144 static inline int
19145 is_redundant_typedef (const_tree decl)
19146 {
19147   if (TYPE_DECL_IS_STUB (decl))
19148     return 1;
19149
19150   if (DECL_ARTIFICIAL (decl)
19151       && DECL_CONTEXT (decl)
19152       && is_tagged_type (DECL_CONTEXT (decl))
19153       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19154       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19155     /* Also ignore the artificial member typedef for the class name.  */
19156     return 1;
19157
19158   return 0;
19159 }
19160
19161 /* Return TRUE if TYPE is a typedef that names a type for linkage
19162    purposes. This kind of typedefs is produced by the C++ FE for
19163    constructs like:
19164
19165    typedef struct {...} foo;
19166
19167    In that case, there is no typedef variant type produced for foo.
19168    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
19169    struct type.  */
19170
19171 static bool
19172 is_naming_typedef_decl (const_tree decl)
19173 {
19174   if (decl == NULL_TREE
19175       || TREE_CODE (decl) != TYPE_DECL
19176       || !is_tagged_type (TREE_TYPE (decl))
19177       || DECL_IS_BUILTIN (decl)
19178       || is_redundant_typedef (decl)
19179       /* It looks like Ada produces TYPE_DECLs that are very similar
19180          to C++ naming typedefs but that have different
19181          semantics. Let's be specific to c++ for now.  */
19182       || !is_cxx ())
19183     return FALSE;
19184
19185   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
19186           && TYPE_NAME (TREE_TYPE (decl)) == decl
19187           && (TYPE_STUB_DECL (TREE_TYPE (decl))
19188               != TYPE_NAME (TREE_TYPE (decl))));
19189 }
19190
19191 /* Returns the DIE for a context.  */
19192
19193 static inline dw_die_ref
19194 get_context_die (tree context)
19195 {
19196   if (context)
19197     {
19198       /* Find die that represents this context.  */
19199       if (TYPE_P (context))
19200         {
19201           context = TYPE_MAIN_VARIANT (context);
19202           return strip_naming_typedef (context, force_type_die (context));
19203         }
19204       else
19205         return force_decl_die (context);
19206     }
19207   return comp_unit_die ();
19208 }
19209
19210 /* Returns the DIE for decl.  A DIE will always be returned.  */
19211
19212 static dw_die_ref
19213 force_decl_die (tree decl)
19214 {
19215   dw_die_ref decl_die;
19216   unsigned saved_external_flag;
19217   tree save_fn = NULL_TREE;
19218   decl_die = lookup_decl_die (decl);
19219   if (!decl_die)
19220     {
19221       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19222
19223       decl_die = lookup_decl_die (decl);
19224       if (decl_die)
19225         return decl_die;
19226
19227       switch (TREE_CODE (decl))
19228         {
19229         case FUNCTION_DECL:
19230           /* Clear current_function_decl, so that gen_subprogram_die thinks
19231              that this is a declaration. At this point, we just want to force
19232              declaration die.  */
19233           save_fn = current_function_decl;
19234           current_function_decl = NULL_TREE;
19235           gen_subprogram_die (decl, context_die);
19236           current_function_decl = save_fn;
19237           break;
19238
19239         case VAR_DECL:
19240           /* Set external flag to force declaration die. Restore it after
19241            gen_decl_die() call.  */
19242           saved_external_flag = DECL_EXTERNAL (decl);
19243           DECL_EXTERNAL (decl) = 1;
19244           gen_decl_die (decl, NULL, context_die);
19245           DECL_EXTERNAL (decl) = saved_external_flag;
19246           break;
19247
19248         case NAMESPACE_DECL:
19249           if (dwarf_version >= 3 || !dwarf_strict)
19250             dwarf2out_decl (decl);
19251           else
19252             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19253             decl_die = comp_unit_die ();
19254           break;
19255
19256         case TRANSLATION_UNIT_DECL:
19257           decl_die = comp_unit_die ();
19258           break;
19259
19260         default:
19261           gcc_unreachable ();
19262         }
19263
19264       /* We should be able to find the DIE now.  */
19265       if (!decl_die)
19266         decl_die = lookup_decl_die (decl);
19267       gcc_assert (decl_die);
19268     }
19269
19270   return decl_die;
19271 }
19272
19273 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19274    always returned.  */
19275
19276 static dw_die_ref
19277 force_type_die (tree type)
19278 {
19279   dw_die_ref type_die;
19280
19281   type_die = lookup_type_die (type);
19282   if (!type_die)
19283     {
19284       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19285
19286       type_die = modified_type_die (type, TYPE_READONLY (type),
19287                                     TYPE_VOLATILE (type), context_die);
19288       gcc_assert (type_die);
19289     }
19290   return type_die;
19291 }
19292
19293 /* Force out any required namespaces to be able to output DECL,
19294    and return the new context_die for it, if it's changed.  */
19295
19296 static dw_die_ref
19297 setup_namespace_context (tree thing, dw_die_ref context_die)
19298 {
19299   tree context = (DECL_P (thing)
19300                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19301   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19302     /* Force out the namespace.  */
19303     context_die = force_decl_die (context);
19304
19305   return context_die;
19306 }
19307
19308 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19309    type) within its namespace, if appropriate.
19310
19311    For compatibility with older debuggers, namespace DIEs only contain
19312    declarations; all definitions are emitted at CU scope.  */
19313
19314 static dw_die_ref
19315 declare_in_namespace (tree thing, dw_die_ref context_die)
19316 {
19317   dw_die_ref ns_context;
19318
19319   if (debug_info_level <= DINFO_LEVEL_TERSE)
19320     return context_die;
19321
19322   /* If this decl is from an inlined function, then don't try to emit it in its
19323      namespace, as we will get confused.  It would have already been emitted
19324      when the abstract instance of the inline function was emitted anyways.  */
19325   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19326     return context_die;
19327
19328   ns_context = setup_namespace_context (thing, context_die);
19329
19330   if (ns_context != context_die)
19331     {
19332       if (is_fortran ())
19333         return ns_context;
19334       if (DECL_P (thing))
19335         gen_decl_die (thing, NULL, ns_context);
19336       else
19337         gen_type_die (thing, ns_context);
19338     }
19339   return context_die;
19340 }
19341
19342 /* Generate a DIE for a namespace or namespace alias.  */
19343
19344 static void
19345 gen_namespace_die (tree decl, dw_die_ref context_die)
19346 {
19347   dw_die_ref namespace_die;
19348
19349   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19350      they are an alias of.  */
19351   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19352     {
19353       /* Output a real namespace or module.  */
19354       context_die = setup_namespace_context (decl, comp_unit_die ());
19355       namespace_die = new_die (is_fortran ()
19356                                ? DW_TAG_module : DW_TAG_namespace,
19357                                context_die, decl);
19358       /* For Fortran modules defined in different CU don't add src coords.  */
19359       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19360         {
19361           const char *name = dwarf2_name (decl, 0);
19362           if (name)
19363             add_name_attribute (namespace_die, name);
19364         }
19365       else
19366         add_name_and_src_coords_attributes (namespace_die, decl);
19367       if (DECL_EXTERNAL (decl))
19368         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19369       equate_decl_number_to_die (decl, namespace_die);
19370     }
19371   else
19372     {
19373       /* Output a namespace alias.  */
19374
19375       /* Force out the namespace we are an alias of, if necessary.  */
19376       dw_die_ref origin_die
19377         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19378
19379       if (DECL_FILE_SCOPE_P (decl)
19380           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19381         context_die = setup_namespace_context (decl, comp_unit_die ());
19382       /* Now create the namespace alias DIE.  */
19383       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19384       add_name_and_src_coords_attributes (namespace_die, decl);
19385       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19386       equate_decl_number_to_die (decl, namespace_die);
19387     }
19388 }
19389
19390 /* Generate Dwarf debug information for a decl described by DECL.
19391    The return value is currently only meaningful for PARM_DECLs,
19392    for all other decls it returns NULL.  */
19393
19394 static dw_die_ref
19395 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19396 {
19397   tree decl_or_origin = decl ? decl : origin;
19398   tree class_origin = NULL, ultimate_origin;
19399
19400   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19401     return NULL;
19402
19403   switch (TREE_CODE (decl_or_origin))
19404     {
19405     case ERROR_MARK:
19406       break;
19407
19408     case CONST_DECL:
19409       if (!is_fortran () && !is_ada ())
19410         {
19411           /* The individual enumerators of an enum type get output when we output
19412              the Dwarf representation of the relevant enum type itself.  */
19413           break;
19414         }
19415
19416       /* Emit its type.  */
19417       gen_type_die (TREE_TYPE (decl), context_die);
19418
19419       /* And its containing namespace.  */
19420       context_die = declare_in_namespace (decl, context_die);
19421
19422       gen_const_die (decl, context_die);
19423       break;
19424
19425     case FUNCTION_DECL:
19426       /* Don't output any DIEs to represent mere function declarations,
19427          unless they are class members or explicit block externs.  */
19428       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19429           && DECL_FILE_SCOPE_P (decl_or_origin)
19430           && (current_function_decl == NULL_TREE
19431               || DECL_ARTIFICIAL (decl_or_origin)))
19432         break;
19433
19434 #if 0
19435       /* FIXME */
19436       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19437          on local redeclarations of global functions.  That seems broken.  */
19438       if (current_function_decl != decl)
19439         /* This is only a declaration.  */;
19440 #endif
19441
19442       /* If we're emitting a clone, emit info for the abstract instance.  */
19443       if (origin || DECL_ORIGIN (decl) != decl)
19444         dwarf2out_abstract_function (origin
19445                                      ? DECL_ORIGIN (origin)
19446                                      : DECL_ABSTRACT_ORIGIN (decl));
19447
19448       /* If we're emitting an out-of-line copy of an inline function,
19449          emit info for the abstract instance and set up to refer to it.  */
19450       else if (cgraph_function_possibly_inlined_p (decl)
19451                && ! DECL_ABSTRACT (decl)
19452                && ! class_or_namespace_scope_p (context_die)
19453                /* dwarf2out_abstract_function won't emit a die if this is just
19454                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19455                   that case, because that works only if we have a die.  */
19456                && DECL_INITIAL (decl) != NULL_TREE)
19457         {
19458           dwarf2out_abstract_function (decl);
19459           set_decl_origin_self (decl);
19460         }
19461
19462       /* Otherwise we're emitting the primary DIE for this decl.  */
19463       else if (debug_info_level > DINFO_LEVEL_TERSE)
19464         {
19465           /* Before we describe the FUNCTION_DECL itself, make sure that we
19466              have its containing type.  */
19467           if (!origin)
19468             origin = decl_class_context (decl);
19469           if (origin != NULL_TREE)
19470             gen_type_die (origin, context_die);
19471
19472           /* And its return type.  */
19473           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19474
19475           /* And its virtual context.  */
19476           if (DECL_VINDEX (decl) != NULL_TREE)
19477             gen_type_die (DECL_CONTEXT (decl), context_die);
19478
19479           /* Make sure we have a member DIE for decl.  */
19480           if (origin != NULL_TREE)
19481             gen_type_die_for_member (origin, decl, context_die);
19482
19483           /* And its containing namespace.  */
19484           context_die = declare_in_namespace (decl, context_die);
19485         }
19486
19487       /* Now output a DIE to represent the function itself.  */
19488       if (decl)
19489         gen_subprogram_die (decl, context_die);
19490       break;
19491
19492     case TYPE_DECL:
19493       /* If we are in terse mode, don't generate any DIEs to represent any
19494          actual typedefs.  */
19495       if (debug_info_level <= DINFO_LEVEL_TERSE)
19496         break;
19497
19498       /* In the special case of a TYPE_DECL node representing the declaration
19499          of some type tag, if the given TYPE_DECL is marked as having been
19500          instantiated from some other (original) TYPE_DECL node (e.g. one which
19501          was generated within the original definition of an inline function) we
19502          used to generate a special (abbreviated) DW_TAG_structure_type,
19503          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19504          should be actually referencing those DIEs, as variable DIEs with that
19505          type would be emitted already in the abstract origin, so it was always
19506          removed during unused type prunning.  Don't add anything in this
19507          case.  */
19508       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19509         break;
19510
19511       if (is_redundant_typedef (decl))
19512         gen_type_die (TREE_TYPE (decl), context_die);
19513       else
19514         /* Output a DIE to represent the typedef itself.  */
19515         gen_typedef_die (decl, context_die);
19516       break;
19517
19518     case LABEL_DECL:
19519       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19520         gen_label_die (decl, context_die);
19521       break;
19522
19523     case VAR_DECL:
19524     case RESULT_DECL:
19525       /* If we are in terse mode, don't generate any DIEs to represent any
19526          variable declarations or definitions.  */
19527       if (debug_info_level <= DINFO_LEVEL_TERSE)
19528         break;
19529
19530       /* Output any DIEs that are needed to specify the type of this data
19531          object.  */
19532       if (decl_by_reference_p (decl_or_origin))
19533         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19534       else
19535         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19536
19537       /* And its containing type.  */
19538       class_origin = decl_class_context (decl_or_origin);
19539       if (class_origin != NULL_TREE)
19540         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19541
19542       /* And its containing namespace.  */
19543       context_die = declare_in_namespace (decl_or_origin, context_die);
19544
19545       /* Now output the DIE to represent the data object itself.  This gets
19546          complicated because of the possibility that the VAR_DECL really
19547          represents an inlined instance of a formal parameter for an inline
19548          function.  */
19549       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19550       if (ultimate_origin != NULL_TREE
19551           && TREE_CODE (ultimate_origin) == PARM_DECL)
19552         gen_formal_parameter_die (decl, origin,
19553                                   true /* Emit name attribute.  */,
19554                                   context_die);
19555       else
19556         gen_variable_die (decl, origin, context_die);
19557       break;
19558
19559     case FIELD_DECL:
19560       /* Ignore the nameless fields that are used to skip bits but handle C++
19561          anonymous unions and structs.  */
19562       if (DECL_NAME (decl) != NULL_TREE
19563           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19564           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19565         {
19566           gen_type_die (member_declared_type (decl), context_die);
19567           gen_field_die (decl, context_die);
19568         }
19569       break;
19570
19571     case PARM_DECL:
19572       if (DECL_BY_REFERENCE (decl_or_origin))
19573         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19574       else
19575         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19576       return gen_formal_parameter_die (decl, origin,
19577                                        true /* Emit name attribute.  */,
19578                                        context_die);
19579
19580     case NAMESPACE_DECL:
19581     case IMPORTED_DECL:
19582       if (dwarf_version >= 3 || !dwarf_strict)
19583         gen_namespace_die (decl, context_die);
19584       break;
19585
19586     default:
19587       /* Probably some frontend-internal decl.  Assume we don't care.  */
19588       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19589       break;
19590     }
19591
19592   return NULL;
19593 }
19594 \f
19595 /* Output debug information for global decl DECL.  Called from toplev.c after
19596    compilation proper has finished.  */
19597
19598 static void
19599 dwarf2out_global_decl (tree decl)
19600 {
19601   /* Output DWARF2 information for file-scope tentative data object
19602      declarations, file-scope (extern) function declarations (which
19603      had no corresponding body) and file-scope tagged type declarations
19604      and definitions which have not yet been forced out.  */
19605   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19606     dwarf2out_decl (decl);
19607 }
19608
19609 /* Output debug information for type decl DECL.  Called from toplev.c
19610    and from language front ends (to record built-in types).  */
19611 static void
19612 dwarf2out_type_decl (tree decl, int local)
19613 {
19614   if (!local)
19615     dwarf2out_decl (decl);
19616 }
19617
19618 /* Output debug information for imported module or decl DECL.
19619    NAME is non-NULL name in the lexical block if the decl has been renamed.
19620    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19621    that DECL belongs to.
19622    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19623 static void
19624 dwarf2out_imported_module_or_decl_1 (tree decl,
19625                                      tree name,
19626                                      tree lexical_block,
19627                                      dw_die_ref lexical_block_die)
19628 {
19629   expanded_location xloc;
19630   dw_die_ref imported_die = NULL;
19631   dw_die_ref at_import_die;
19632
19633   if (TREE_CODE (decl) == IMPORTED_DECL)
19634     {
19635       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19636       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19637       gcc_assert (decl);
19638     }
19639   else
19640     xloc = expand_location (input_location);
19641
19642   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19643     {
19644       at_import_die = force_type_die (TREE_TYPE (decl));
19645       /* For namespace N { typedef void T; } using N::T; base_type_die
19646          returns NULL, but DW_TAG_imported_declaration requires
19647          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19648       if (!at_import_die)
19649         {
19650           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19651           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19652           at_import_die = lookup_type_die (TREE_TYPE (decl));
19653           gcc_assert (at_import_die);
19654         }
19655     }
19656   else
19657     {
19658       at_import_die = lookup_decl_die (decl);
19659       if (!at_import_die)
19660         {
19661           /* If we're trying to avoid duplicate debug info, we may not have
19662              emitted the member decl for this field.  Emit it now.  */
19663           if (TREE_CODE (decl) == FIELD_DECL)
19664             {
19665               tree type = DECL_CONTEXT (decl);
19666
19667               if (TYPE_CONTEXT (type)
19668                   && TYPE_P (TYPE_CONTEXT (type))
19669                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19670                                                 DINFO_USAGE_DIR_USE))
19671                 return;
19672               gen_type_die_for_member (type, decl,
19673                                        get_context_die (TYPE_CONTEXT (type)));
19674             }
19675           at_import_die = force_decl_die (decl);
19676         }
19677     }
19678
19679   if (TREE_CODE (decl) == NAMESPACE_DECL)
19680     {
19681       if (dwarf_version >= 3 || !dwarf_strict)
19682         imported_die = new_die (DW_TAG_imported_module,
19683                                 lexical_block_die,
19684                                 lexical_block);
19685       else
19686         return;
19687     }
19688   else
19689     imported_die = new_die (DW_TAG_imported_declaration,
19690                             lexical_block_die,
19691                             lexical_block);
19692
19693   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19694   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19695   if (name)
19696     add_AT_string (imported_die, DW_AT_name,
19697                    IDENTIFIER_POINTER (name));
19698   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19699 }
19700
19701 /* Output debug information for imported module or decl DECL.
19702    NAME is non-NULL name in context if the decl has been renamed.
19703    CHILD is true if decl is one of the renamed decls as part of
19704    importing whole module.  */
19705
19706 static void
19707 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19708                                    bool child)
19709 {
19710   /* dw_die_ref at_import_die;  */
19711   dw_die_ref scope_die;
19712
19713   if (debug_info_level <= DINFO_LEVEL_TERSE)
19714     return;
19715
19716   gcc_assert (decl);
19717
19718   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19719      We need decl DIE for reference and scope die. First, get DIE for the decl
19720      itself.  */
19721
19722   /* Get the scope die for decl context. Use comp_unit_die for global module
19723      or decl. If die is not found for non globals, force new die.  */
19724   if (context
19725       && TYPE_P (context)
19726       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19727     return;
19728
19729   if (!(dwarf_version >= 3 || !dwarf_strict))
19730     return;
19731
19732   scope_die = get_context_die (context);
19733
19734   if (child)
19735     {
19736       gcc_assert (scope_die->die_child);
19737       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19738       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19739       scope_die = scope_die->die_child;
19740     }
19741
19742   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19743   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19744
19745 }
19746
19747 /* Write the debugging output for DECL.  */
19748
19749 void
19750 dwarf2out_decl (tree decl)
19751 {
19752   dw_die_ref context_die = comp_unit_die ();
19753
19754   switch (TREE_CODE (decl))
19755     {
19756     case ERROR_MARK:
19757       return;
19758
19759     case FUNCTION_DECL:
19760       /* What we would really like to do here is to filter out all mere
19761          file-scope declarations of file-scope functions which are never
19762          referenced later within this translation unit (and keep all of ones
19763          that *are* referenced later on) but we aren't clairvoyant, so we have
19764          no idea which functions will be referenced in the future (i.e. later
19765          on within the current translation unit). So here we just ignore all
19766          file-scope function declarations which are not also definitions.  If
19767          and when the debugger needs to know something about these functions,
19768          it will have to hunt around and find the DWARF information associated
19769          with the definition of the function.
19770
19771          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19772          nodes represent definitions and which ones represent mere
19773          declarations.  We have to check DECL_INITIAL instead. That's because
19774          the C front-end supports some weird semantics for "extern inline"
19775          function definitions.  These can get inlined within the current
19776          translation unit (and thus, we need to generate Dwarf info for their
19777          abstract instances so that the Dwarf info for the concrete inlined
19778          instances can have something to refer to) but the compiler never
19779          generates any out-of-lines instances of such things (despite the fact
19780          that they *are* definitions).
19781
19782          The important point is that the C front-end marks these "extern
19783          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19784          them anyway. Note that the C++ front-end also plays some similar games
19785          for inline function definitions appearing within include files which
19786          also contain `#pragma interface' pragmas.  */
19787       if (DECL_INITIAL (decl) == NULL_TREE)
19788         return;
19789
19790       /* If we're a nested function, initially use a parent of NULL; if we're
19791          a plain function, this will be fixed up in decls_for_scope.  If
19792          we're a method, it will be ignored, since we already have a DIE.  */
19793       if (decl_function_context (decl)
19794           /* But if we're in terse mode, we don't care about scope.  */
19795           && debug_info_level > DINFO_LEVEL_TERSE)
19796         context_die = NULL;
19797       break;
19798
19799     case VAR_DECL:
19800       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19801          declaration and if the declaration was never even referenced from
19802          within this entire compilation unit.  We suppress these DIEs in
19803          order to save space in the .debug section (by eliminating entries
19804          which are probably useless).  Note that we must not suppress
19805          block-local extern declarations (whether used or not) because that
19806          would screw-up the debugger's name lookup mechanism and cause it to
19807          miss things which really ought to be in scope at a given point.  */
19808       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19809         return;
19810
19811       /* For local statics lookup proper context die.  */
19812       if (TREE_STATIC (decl) && decl_function_context (decl))
19813         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19814
19815       /* If we are in terse mode, don't generate any DIEs to represent any
19816          variable declarations or definitions.  */
19817       if (debug_info_level <= DINFO_LEVEL_TERSE)
19818         return;
19819       break;
19820
19821     case CONST_DECL:
19822       if (debug_info_level <= DINFO_LEVEL_TERSE)
19823         return;
19824       if (!is_fortran () && !is_ada ())
19825         return;
19826       if (TREE_STATIC (decl) && decl_function_context (decl))
19827         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19828       break;
19829
19830     case NAMESPACE_DECL:
19831     case IMPORTED_DECL:
19832       if (debug_info_level <= DINFO_LEVEL_TERSE)
19833         return;
19834       if (lookup_decl_die (decl) != NULL)
19835         return;
19836       break;
19837
19838     case TYPE_DECL:
19839       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19840       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19841         return;
19842
19843       /* Don't bother trying to generate any DIEs to represent any of the
19844          normal built-in types for the language we are compiling.  */
19845       if (DECL_IS_BUILTIN (decl))
19846         return;
19847
19848       /* If we are in terse mode, don't generate any DIEs for types.  */
19849       if (debug_info_level <= DINFO_LEVEL_TERSE)
19850         return;
19851
19852       /* If we're a function-scope tag, initially use a parent of NULL;
19853          this will be fixed up in decls_for_scope.  */
19854       if (decl_function_context (decl))
19855         context_die = NULL;
19856
19857       break;
19858
19859     default:
19860       return;
19861     }
19862
19863   gen_decl_die (decl, NULL, context_die);
19864 }
19865
19866 /* Write the debugging output for DECL.  */
19867
19868 static void
19869 dwarf2out_function_decl (tree decl)
19870 {
19871   dwarf2out_decl (decl);
19872   call_arg_locations = NULL;
19873   call_arg_loc_last = NULL;
19874   call_site_count = -1;
19875   tail_call_site_count = -1;
19876   VEC_free (dw_die_ref, heap, block_map);
19877   htab_empty (decl_loc_table);
19878   htab_empty (cached_dw_loc_list_table);
19879 }
19880
19881 /* Output a marker (i.e. a label) for the beginning of the generated code for
19882    a lexical block.  */
19883
19884 static void
19885 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19886                        unsigned int blocknum)
19887 {
19888   switch_to_section (current_function_section ());
19889   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19890 }
19891
19892 /* Output a marker (i.e. a label) for the end of the generated code for a
19893    lexical block.  */
19894
19895 static void
19896 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19897 {
19898   switch_to_section (current_function_section ());
19899   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
19900 }
19901
19902 /* Returns nonzero if it is appropriate not to emit any debugging
19903    information for BLOCK, because it doesn't contain any instructions.
19904
19905    Don't allow this for blocks with nested functions or local classes
19906    as we would end up with orphans, and in the presence of scheduling
19907    we may end up calling them anyway.  */
19908
19909 static bool
19910 dwarf2out_ignore_block (const_tree block)
19911 {
19912   tree decl;
19913   unsigned int i;
19914
19915   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
19916     if (TREE_CODE (decl) == FUNCTION_DECL
19917         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19918       return 0;
19919   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
19920     {
19921       decl = BLOCK_NONLOCALIZED_VAR (block, i);
19922       if (TREE_CODE (decl) == FUNCTION_DECL
19923           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19924       return 0;
19925     }
19926
19927   return 1;
19928 }
19929
19930 /* Hash table routines for file_hash.  */
19931
19932 static int
19933 file_table_eq (const void *p1_p, const void *p2_p)
19934 {
19935   const struct dwarf_file_data *const p1 =
19936     (const struct dwarf_file_data *) p1_p;
19937   const char *const p2 = (const char *) p2_p;
19938   return filename_cmp (p1->filename, p2) == 0;
19939 }
19940
19941 static hashval_t
19942 file_table_hash (const void *p_p)
19943 {
19944   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
19945   return htab_hash_string (p->filename);
19946 }
19947
19948 /* Lookup FILE_NAME (in the list of filenames that we know about here in
19949    dwarf2out.c) and return its "index".  The index of each (known) filename is
19950    just a unique number which is associated with only that one filename.  We
19951    need such numbers for the sake of generating labels (in the .debug_sfnames
19952    section) and references to those files numbers (in the .debug_srcinfo
19953    and.debug_macinfo sections).  If the filename given as an argument is not
19954    found in our current list, add it to the list and assign it the next
19955    available unique index number.  In order to speed up searches, we remember
19956    the index of the filename was looked up last.  This handles the majority of
19957    all searches.  */
19958
19959 static struct dwarf_file_data *
19960 lookup_filename (const char *file_name)
19961 {
19962   void ** slot;
19963   struct dwarf_file_data * created;
19964
19965   /* Check to see if the file name that was searched on the previous
19966      call matches this file name.  If so, return the index.  */
19967   if (file_table_last_lookup
19968       && (file_name == file_table_last_lookup->filename
19969           || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
19970     return file_table_last_lookup;
19971
19972   /* Didn't match the previous lookup, search the table.  */
19973   slot = htab_find_slot_with_hash (file_table, file_name,
19974                                    htab_hash_string (file_name), INSERT);
19975   if (*slot)
19976     return (struct dwarf_file_data *) *slot;
19977
19978   created = ggc_alloc_dwarf_file_data ();
19979   created->filename = file_name;
19980   created->emitted_number = 0;
19981   *slot = created;
19982   return created;
19983 }
19984
19985 /* If the assembler will construct the file table, then translate the compiler
19986    internal file table number into the assembler file table number, and emit
19987    a .file directive if we haven't already emitted one yet.  The file table
19988    numbers are different because we prune debug info for unused variables and
19989    types, which may include filenames.  */
19990
19991 static int
19992 maybe_emit_file (struct dwarf_file_data * fd)
19993 {
19994   if (! fd->emitted_number)
19995     {
19996       if (last_emitted_file)
19997         fd->emitted_number = last_emitted_file->emitted_number + 1;
19998       else
19999         fd->emitted_number = 1;
20000       last_emitted_file = fd;
20001
20002       if (DWARF2_ASM_LINE_DEBUG_INFO)
20003         {
20004           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20005           output_quoted_string (asm_out_file,
20006                                 remap_debug_filename (fd->filename));
20007           fputc ('\n', asm_out_file);
20008         }
20009     }
20010
20011   return fd->emitted_number;
20012 }
20013
20014 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20015    That generation should happen after function debug info has been
20016    generated. The value of the attribute is the constant value of ARG.  */
20017
20018 static void
20019 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20020 {
20021   die_arg_entry entry;
20022
20023   if (!die || !arg)
20024     return;
20025
20026   if (!tmpl_value_parm_die_table)
20027     tmpl_value_parm_die_table
20028       = VEC_alloc (die_arg_entry, gc, 32);
20029
20030   entry.die = die;
20031   entry.arg = arg;
20032   VEC_safe_push (die_arg_entry, gc,
20033                  tmpl_value_parm_die_table,
20034                  &entry);
20035 }
20036
20037 /* Return TRUE if T is an instance of generic type, FALSE
20038    otherwise.  */
20039
20040 static bool
20041 generic_type_p (tree t)
20042 {
20043   if (t == NULL_TREE || !TYPE_P (t))
20044     return false;
20045   return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
20046 }
20047
20048 /* Schedule the generation of the generic parameter dies for the
20049   instance of generic type T. The proper generation itself is later
20050   done by gen_scheduled_generic_parms_dies. */
20051
20052 static void
20053 schedule_generic_params_dies_gen (tree t)
20054 {
20055   if (!generic_type_p (t))
20056     return;
20057
20058   if (generic_type_instances == NULL)
20059     generic_type_instances = VEC_alloc (tree, gc, 256);
20060
20061   VEC_safe_push (tree, gc, generic_type_instances, t);
20062 }
20063
20064 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20065    by append_entry_to_tmpl_value_parm_die_table. This function must
20066    be called after function DIEs have been generated.  */
20067
20068 static void
20069 gen_remaining_tmpl_value_param_die_attribute (void)
20070 {
20071   if (tmpl_value_parm_die_table)
20072     {
20073       unsigned i;
20074       die_arg_entry *e;
20075
20076       FOR_EACH_VEC_ELT (die_arg_entry, tmpl_value_parm_die_table, i, e)
20077         tree_add_const_value_attribute (e->die, e->arg);
20078     }
20079 }
20080
20081 /* Generate generic parameters DIEs for instances of generic types
20082    that have been previously scheduled by
20083    schedule_generic_params_dies_gen. This function must be called
20084    after all the types of the CU have been laid out.  */
20085
20086 static void
20087 gen_scheduled_generic_parms_dies (void)
20088 {
20089   unsigned i;
20090   tree t;
20091
20092   if (generic_type_instances == NULL)
20093     return;
20094   
20095   FOR_EACH_VEC_ELT (tree, generic_type_instances, i, t)
20096     gen_generic_params_dies (t);
20097 }
20098
20099
20100 /* Replace DW_AT_name for the decl with name.  */
20101
20102 static void
20103 dwarf2out_set_name (tree decl, tree name)
20104 {
20105   dw_die_ref die;
20106   dw_attr_ref attr;
20107   const char *dname;
20108
20109   die = TYPE_SYMTAB_DIE (decl);
20110   if (!die)
20111     return;
20112
20113   dname = dwarf2_name (name, 0);
20114   if (!dname)
20115     return;
20116
20117   attr = get_AT (die, DW_AT_name);
20118   if (attr)
20119     {
20120       struct indirect_string_node *node;
20121
20122       node = find_AT_string (dname);
20123       /* replace the string.  */
20124       attr->dw_attr_val.v.val_str = node;
20125     }
20126
20127   else
20128     add_name_attribute (die, dname);
20129 }
20130
20131 /* Called by the final INSN scan whenever we see a var location.  We
20132    use it to drop labels in the right places, and throw the location in
20133    our lookup table.  */
20134
20135 static void
20136 dwarf2out_var_location (rtx loc_note)
20137 {
20138   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20139   struct var_loc_node *newloc;
20140   rtx next_real, next_note;
20141   static const char *last_label;
20142   static const char *last_postcall_label;
20143   static bool last_in_cold_section_p;
20144   static rtx expected_next_loc_note;
20145   tree decl;
20146   bool var_loc_p;
20147
20148   if (!NOTE_P (loc_note))
20149     {
20150       if (CALL_P (loc_note))
20151         {
20152           call_site_count++;
20153           if (SIBLING_CALL_P (loc_note))
20154             tail_call_site_count++;
20155         }
20156       return;
20157     }
20158
20159   var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
20160   if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20161     return;
20162
20163   /* Optimize processing a large consecutive sequence of location
20164      notes so we don't spend too much time in next_real_insn.  If the
20165      next insn is another location note, remember the next_real_insn
20166      calculation for next time.  */
20167   next_real = cached_next_real_insn;
20168   if (next_real)
20169     {
20170       if (expected_next_loc_note != loc_note)
20171         next_real = NULL_RTX;
20172     }
20173
20174   next_note = NEXT_INSN (loc_note);
20175   if (! next_note
20176       || INSN_DELETED_P (next_note)
20177       || GET_CODE (next_note) != NOTE
20178       || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
20179           && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
20180     next_note = NULL_RTX;
20181
20182   if (! next_real)
20183     next_real = next_real_insn (loc_note);
20184
20185   if (next_note)
20186     {
20187       expected_next_loc_note = next_note;
20188       cached_next_real_insn = next_real;
20189     }
20190   else
20191     cached_next_real_insn = NULL_RTX;
20192
20193   /* If there are no instructions which would be affected by this note,
20194      don't do anything.  */
20195   if (var_loc_p
20196       && next_real == NULL_RTX
20197       && !NOTE_DURING_CALL_P (loc_note))
20198     return;
20199
20200   if (next_real == NULL_RTX)
20201     next_real = get_last_insn ();
20202
20203   /* If there were any real insns between note we processed last time
20204      and this note (or if it is the first note), clear
20205      last_{,postcall_}label so that they are not reused this time.  */
20206   if (last_var_location_insn == NULL_RTX
20207       || last_var_location_insn != next_real
20208       || last_in_cold_section_p != in_cold_section_p)
20209     {
20210       last_label = NULL;
20211       last_postcall_label = NULL;
20212     }
20213
20214   if (var_loc_p)
20215     {
20216       decl = NOTE_VAR_LOCATION_DECL (loc_note);
20217       newloc = add_var_loc_to_decl (decl, loc_note,
20218                                     NOTE_DURING_CALL_P (loc_note)
20219                                     ? last_postcall_label : last_label);
20220       if (newloc == NULL)
20221         return;
20222     }
20223   else
20224     {
20225       decl = NULL_TREE;
20226       newloc = NULL;
20227     }
20228
20229   /* If there were no real insns between note we processed last time
20230      and this note, use the label we emitted last time.  Otherwise
20231      create a new label and emit it.  */
20232   if (last_label == NULL)
20233     {
20234       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20235       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20236       loclabel_num++;
20237       last_label = ggc_strdup (loclabel);
20238     }
20239
20240   if (!var_loc_p)
20241     {
20242       struct call_arg_loc_node *ca_loc
20243         = ggc_alloc_cleared_call_arg_loc_node ();
20244       rtx prev = prev_real_insn (loc_note), x;
20245       ca_loc->call_arg_loc_note = loc_note;
20246       ca_loc->next = NULL;
20247       ca_loc->label = last_label;
20248       gcc_assert (prev
20249                   && (CALL_P (prev)
20250                       || (NONJUMP_INSN_P (prev)
20251                           && GET_CODE (PATTERN (prev)) == SEQUENCE
20252                           && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
20253       if (!CALL_P (prev))
20254         prev = XVECEXP (PATTERN (prev), 0, 0);
20255       ca_loc->tail_call_p = SIBLING_CALL_P (prev);
20256       x = PATTERN (prev);
20257       if (GET_CODE (x) == PARALLEL)
20258         x = XVECEXP (x, 0, 0);
20259       if (GET_CODE (x) == SET)
20260         x = SET_SRC (x);
20261       if (GET_CODE (x) == CALL && MEM_P (XEXP (x, 0)))
20262         {
20263           x = XEXP (XEXP (x, 0), 0);
20264           if (GET_CODE (x) == SYMBOL_REF
20265               && SYMBOL_REF_DECL (x)
20266               && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
20267             ca_loc->symbol_ref = x;
20268         }
20269       ca_loc->block = insn_scope (prev);
20270       if (call_arg_locations)
20271         call_arg_loc_last->next = ca_loc;
20272       else
20273         call_arg_locations = ca_loc;
20274       call_arg_loc_last = ca_loc;
20275     }
20276   else if (!NOTE_DURING_CALL_P (loc_note))
20277     newloc->label = last_label;
20278   else
20279     {
20280       if (!last_postcall_label)
20281         {
20282           sprintf (loclabel, "%s-1", last_label);
20283           last_postcall_label = ggc_strdup (loclabel);
20284         }
20285       newloc->label = last_postcall_label;
20286     }
20287
20288   last_var_location_insn = next_real;
20289   last_in_cold_section_p = in_cold_section_p;
20290 }
20291
20292 /* Note in one location list that text section has changed.  */
20293
20294 static int
20295 var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED)
20296 {
20297   var_loc_list *list = (var_loc_list *) *slot;
20298   if (list->first)
20299     list->last_before_switch
20300       = list->last->next ? list->last->next : list->last;
20301   return 1;
20302 }
20303
20304 /* Note in all location lists that text section has changed.  */
20305
20306 static void
20307 var_location_switch_text_section (void)
20308 {
20309   if (decl_loc_table == NULL)
20310     return;
20311
20312   htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL);
20313 }
20314
20315 /* Create a new line number table.  */
20316
20317 static dw_line_info_table *
20318 new_line_info_table (void)
20319 {
20320   dw_line_info_table *table;
20321
20322   table = ggc_alloc_cleared_dw_line_info_table_struct ();
20323   table->file_num = 1;
20324   table->line_num = 1;
20325   table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
20326
20327   return table;
20328 }
20329
20330 /* Lookup the "current" table into which we emit line info, so
20331    that we don't have to do it for every source line.  */
20332
20333 static void
20334 set_cur_line_info_table (section *sec)
20335 {
20336   dw_line_info_table *table;
20337
20338   if (sec == text_section)
20339     table = text_section_line_info;
20340   else if (sec == cold_text_section)
20341     {
20342       table = cold_text_section_line_info;
20343       if (!table)
20344         {
20345           cold_text_section_line_info = table = new_line_info_table ();
20346           table->end_label = cold_end_label;
20347         }
20348     }
20349   else
20350     {
20351       const char *end_label;
20352
20353       if (flag_reorder_blocks_and_partition)
20354         {
20355           if (in_cold_section_p)
20356             end_label = crtl->subsections.cold_section_end_label;
20357           else
20358             end_label = crtl->subsections.hot_section_end_label;
20359         }
20360       else
20361         {
20362           char label[MAX_ARTIFICIAL_LABEL_BYTES];
20363           ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
20364                                        current_function_funcdef_no);
20365           end_label = ggc_strdup (label);
20366         }
20367
20368       table = new_line_info_table ();
20369       table->end_label = end_label;
20370
20371       VEC_safe_push (dw_line_info_table_p, gc, separate_line_info, table);
20372     }
20373
20374   cur_line_info_table = table;
20375 }
20376
20377
20378 /* We need to reset the locations at the beginning of each
20379    function. We can't do this in the end_function hook, because the
20380    declarations that use the locations won't have been output when
20381    that hook is called.  Also compute have_multiple_function_sections here.  */
20382
20383 static void
20384 dwarf2out_begin_function (tree fun)
20385 {
20386   section *sec = function_section (fun);
20387
20388   if (sec != text_section)
20389     have_multiple_function_sections = true;
20390
20391   if (flag_reorder_blocks_and_partition && !cold_text_section)
20392     {
20393       gcc_assert (current_function_decl == fun);
20394       cold_text_section = unlikely_text_section ();
20395       switch_to_section (cold_text_section);
20396       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20397       switch_to_section (sec);
20398     }
20399
20400   dwarf2out_note_section_used ();
20401   call_site_count = 0;
20402   tail_call_site_count = 0;
20403
20404   set_cur_line_info_table (sec);
20405 }
20406
20407 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.  */
20408
20409 static void
20410 push_dw_line_info_entry (dw_line_info_table *table,
20411                          enum dw_line_info_opcode opcode, unsigned int val)
20412 {
20413   dw_line_info_entry e;
20414   e.opcode = opcode;
20415   e.val = val;
20416   VEC_safe_push (dw_line_info_entry, gc, table->entries, &e);
20417 }
20418
20419 /* Output a label to mark the beginning of a source code line entry
20420    and record information relating to this source line, in
20421    'line_info_table' for later output of the .debug_line section.  */
20422 /* ??? The discriminator parameter ought to be unsigned.  */
20423
20424 static void
20425 dwarf2out_source_line (unsigned int line, const char *filename,
20426                        int discriminator, bool is_stmt)
20427 {
20428   unsigned int file_num;
20429   dw_line_info_table *table;
20430
20431   if (debug_info_level < DINFO_LEVEL_NORMAL || line == 0)
20432     return;
20433
20434   /* The discriminator column was added in dwarf4.  Simplify the below
20435      by simply removing it if we're not supposed to output it.  */
20436   if (dwarf_version < 4 && dwarf_strict)
20437     discriminator = 0;
20438
20439   table = cur_line_info_table;
20440   file_num = maybe_emit_file (lookup_filename (filename));
20441
20442   /* ??? TODO: Elide duplicate line number entries.  Traditionally,
20443      the debugger has used the second (possibly duplicate) line number
20444      at the beginning of the function to mark the end of the prologue.
20445      We could eliminate any other duplicates within the function.  For
20446      Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
20447      that second line number entry.  */
20448   /* Recall that this end-of-prologue indication is *not* the same thing
20449      as the end_prologue debug hook.  The NOTE_INSN_PROLOGUE_END note,
20450      to which the hook corresponds, follows the last insn that was 
20451      emitted by gen_prologue.  What we need is to preceed the first insn
20452      that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
20453      insn that corresponds to something the user wrote.  These may be
20454      very different locations once scheduling is enabled.  */
20455
20456   if (0 && file_num == table->file_num
20457       && line == table->line_num
20458       && discriminator == table->discrim_num
20459       && is_stmt == table->is_stmt)
20460     return;
20461
20462   switch_to_section (current_function_section ());
20463
20464   /* If requested, emit something human-readable.  */
20465   if (flag_debug_asm)
20466     fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
20467
20468   if (DWARF2_ASM_LINE_DEBUG_INFO)
20469     {
20470       /* Emit the .loc directive understood by GNU as.  */
20471       fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20472       if (is_stmt != table->is_stmt)
20473         fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20474       if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20475         fprintf (asm_out_file, " discriminator %d", discriminator);
20476       fputc ('\n', asm_out_file);
20477     }
20478   else
20479     {
20480       unsigned int label_num = ++line_info_label_num;
20481
20482       targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
20483
20484       push_dw_line_info_entry (table, LI_set_address, label_num);
20485       if (file_num != table->file_num)
20486         push_dw_line_info_entry (table, LI_set_file, file_num);
20487       if (discriminator != table->discrim_num)
20488         push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
20489       if (is_stmt != table->is_stmt)
20490         push_dw_line_info_entry (table, LI_negate_stmt, 0);
20491       push_dw_line_info_entry (table, LI_set_line, line);
20492     }
20493
20494   table->file_num = file_num;
20495   table->line_num = line;
20496   table->discrim_num = discriminator;
20497   table->is_stmt = is_stmt;
20498   table->in_use = true;
20499 }
20500
20501 /* Record the beginning of a new source file.  */
20502
20503 static void
20504 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20505 {
20506   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20507     {
20508       /* Record the beginning of the file for break_out_includes.  */
20509       dw_die_ref bincl_die;
20510
20511       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
20512       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20513     }
20514
20515   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20516     {
20517       macinfo_entry e;
20518       e.code = DW_MACINFO_start_file;
20519       e.lineno = lineno;
20520       e.info = xstrdup (filename);
20521       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20522     }
20523 }
20524
20525 /* Record the end of a source file.  */
20526
20527 static void
20528 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20529 {
20530   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20531     /* Record the end of the file for break_out_includes.  */
20532     new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
20533
20534   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20535     {
20536       macinfo_entry e;
20537       e.code = DW_MACINFO_end_file;
20538       e.lineno = lineno;
20539       e.info = NULL;
20540       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20541     }
20542 }
20543
20544 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20545    the tail part of the directive line, i.e. the part which is past the
20546    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20547
20548 static void
20549 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20550                   const char *buffer ATTRIBUTE_UNUSED)
20551 {
20552   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20553     {
20554       macinfo_entry e;
20555       /* Insert a dummy first entry to be able to optimize the whole
20556          predefined macro block using DW_MACRO_GNU_transparent_include.  */
20557       if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20558         {
20559           e.code = 0;
20560           e.lineno = 0;
20561           e.info = NULL;
20562           VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20563         }
20564       e.code = DW_MACINFO_define;
20565       e.lineno = lineno;
20566       e.info = xstrdup (buffer);;
20567       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20568     }
20569 }
20570
20571 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20572    the tail part of the directive line, i.e. the part which is past the
20573    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20574
20575 static void
20576 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20577                  const char *buffer ATTRIBUTE_UNUSED)
20578 {
20579   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20580     {
20581       macinfo_entry e;
20582       /* Insert a dummy first entry to be able to optimize the whole
20583          predefined macro block using DW_MACRO_GNU_transparent_include.  */
20584       if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20585         {
20586           e.code = 0;
20587           e.lineno = 0;
20588           e.info = NULL;
20589           VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20590         }
20591       e.code = DW_MACINFO_undef;
20592       e.lineno = lineno;
20593       e.info = xstrdup (buffer);
20594       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20595     }
20596 }
20597
20598 /* Routines to manipulate hash table of CUs.  */
20599
20600 static hashval_t
20601 htab_macinfo_hash (const void *of)
20602 {
20603   const macinfo_entry *const entry =
20604     (const macinfo_entry *) of;
20605
20606   return htab_hash_string (entry->info);
20607 }
20608
20609 static int
20610 htab_macinfo_eq (const void *of1, const void *of2)
20611 {
20612   const macinfo_entry *const entry1 = (const macinfo_entry *) of1;
20613   const macinfo_entry *const entry2 = (const macinfo_entry *) of2;
20614
20615   return !strcmp (entry1->info, entry2->info);
20616 }
20617
20618 /* Output a single .debug_macinfo entry.  */
20619
20620 static void
20621 output_macinfo_op (macinfo_entry *ref)
20622 {
20623   int file_num;
20624   size_t len;
20625   struct indirect_string_node *node;
20626   char label[MAX_ARTIFICIAL_LABEL_BYTES];
20627   struct dwarf_file_data *fd;
20628
20629   switch (ref->code)
20630     {
20631     case DW_MACINFO_start_file:
20632       fd = lookup_filename (ref->info);
20633       if (fd->filename == ref->info)
20634         fd->filename = ggc_strdup (fd->filename);
20635       file_num = maybe_emit_file (fd);
20636       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20637       dw2_asm_output_data_uleb128 (ref->lineno,
20638                                    "Included from line number %lu", 
20639                                    (unsigned long) ref->lineno);
20640       dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
20641       break;
20642     case DW_MACINFO_end_file:
20643       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20644       break;
20645     case DW_MACINFO_define:
20646     case DW_MACINFO_undef:
20647       len = strlen (ref->info) + 1;
20648       if (!dwarf_strict
20649           && len > DWARF_OFFSET_SIZE
20650           && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
20651           && (debug_str_section->common.flags & SECTION_MERGE) != 0)
20652         {
20653           ref->code = ref->code == DW_MACINFO_define
20654                       ? DW_MACRO_GNU_define_indirect
20655                       : DW_MACRO_GNU_undef_indirect;
20656           output_macinfo_op (ref);
20657           return;
20658         }
20659       dw2_asm_output_data (1, ref->code,
20660                            ref->code == DW_MACINFO_define
20661                            ? "Define macro" : "Undefine macro");
20662       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 
20663                                    (unsigned long) ref->lineno);
20664       dw2_asm_output_nstring (ref->info, -1, "The macro");
20665       break;
20666     case DW_MACRO_GNU_define_indirect:
20667     case DW_MACRO_GNU_undef_indirect:
20668       node = find_AT_string (ref->info);
20669       if (node->form != DW_FORM_strp)
20670         {
20671           char label[32];
20672           ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
20673           ++dw2_string_counter;
20674           node->label = xstrdup (label);
20675           node->form = DW_FORM_strp;
20676         }
20677       dw2_asm_output_data (1, ref->code,
20678                            ref->code == DW_MACRO_GNU_define_indirect
20679                            ? "Define macro indirect"
20680                            : "Undefine macro indirect");
20681       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
20682                                    (unsigned long) ref->lineno);
20683       dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
20684                              debug_str_section, "The macro: \"%s\"",
20685                              ref->info);
20686       break;
20687     case DW_MACRO_GNU_transparent_include:
20688       dw2_asm_output_data (1, ref->code, "Transparent include");
20689       ASM_GENERATE_INTERNAL_LABEL (label,
20690                                    DEBUG_MACRO_SECTION_LABEL, ref->lineno);
20691       dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
20692       break;
20693     default:
20694       fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
20695                ASM_COMMENT_START, (unsigned long) ref->code);
20696       break;
20697     }
20698 }
20699
20700 /* Attempt to make a sequence of define/undef macinfo ops shareable with
20701    other compilation unit .debug_macinfo sections.  IDX is the first
20702    index of a define/undef, return the number of ops that should be
20703    emitted in a comdat .debug_macinfo section and emit
20704    a DW_MACRO_GNU_transparent_include entry referencing it.
20705    If the define/undef entry should be emitted normally, return 0.  */
20706
20707 static unsigned
20708 optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
20709                         htab_t *macinfo_htab)
20710 {
20711   macinfo_entry *first, *second, *cur, *inc;
20712   char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
20713   unsigned char checksum[16];
20714   struct md5_ctx ctx;
20715   char *grp_name, *tail;
20716   const char *base;
20717   unsigned int i, count, encoded_filename_len, linebuf_len;
20718   void **slot;
20719
20720   first = VEC_index (macinfo_entry, macinfo_table, idx);
20721   second = VEC_index (macinfo_entry, macinfo_table, idx + 1);
20722
20723   /* Optimize only if there are at least two consecutive define/undef ops,
20724      and either all of them are before first DW_MACINFO_start_file
20725      with lineno 0 (i.e. predefined macro block), or all of them are
20726      in some included header file.  */
20727   if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
20728     return 0;
20729   if (VEC_empty (macinfo_entry, files))
20730     {
20731       if (first->lineno != 0 || second->lineno != 0)
20732         return 0;
20733     }
20734   else if (first->lineno == 0)
20735     return 0;
20736
20737   /* Find the last define/undef entry that can be grouped together
20738      with first and at the same time compute md5 checksum of their
20739      codes, linenumbers and strings.  */
20740   md5_init_ctx (&ctx);
20741   for (i = idx; VEC_iterate (macinfo_entry, macinfo_table, i, cur); i++)
20742     if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
20743       break;
20744     else if (first->lineno == 0 && cur->lineno != 0)
20745       break;
20746     else
20747       {
20748         unsigned char code = cur->code;
20749         md5_process_bytes (&code, 1, &ctx);
20750         checksum_uleb128 (cur->lineno, &ctx);
20751         md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
20752       }
20753   md5_finish_ctx (&ctx, checksum);
20754   count = i - idx;
20755
20756   /* From the containing include filename (if any) pick up just
20757      usable characters from its basename.  */
20758   if (first->lineno == 0)
20759     base = "";
20760   else
20761     base = lbasename (VEC_last (macinfo_entry, files)->info);
20762   for (encoded_filename_len = 0, i = 0; base[i]; i++)
20763     if (ISIDNUM (base[i]) || base[i] == '.')
20764       encoded_filename_len++;
20765   /* Count . at the end.  */
20766   if (encoded_filename_len)
20767     encoded_filename_len++;
20768
20769   sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
20770   linebuf_len = strlen (linebuf);
20771
20772   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
20773   grp_name = XNEWVEC (char, 4 + encoded_filename_len + linebuf_len + 1
20774                       + 16 * 2 + 1);
20775   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
20776   tail = grp_name + 4;
20777   if (encoded_filename_len)
20778     {
20779       for (i = 0; base[i]; i++)
20780         if (ISIDNUM (base[i]) || base[i] == '.')
20781           *tail++ = base[i];
20782       *tail++ = '.';
20783     }
20784   memcpy (tail, linebuf, linebuf_len);
20785   tail += linebuf_len;
20786   *tail++ = '.';
20787   for (i = 0; i < 16; i++)
20788     sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
20789
20790   /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
20791      in the empty vector entry before the first define/undef.  */
20792   inc = VEC_index (macinfo_entry, macinfo_table, idx - 1);
20793   inc->code = DW_MACRO_GNU_transparent_include;
20794   inc->lineno = 0;
20795   inc->info = grp_name;
20796   if (*macinfo_htab == NULL)
20797     *macinfo_htab = htab_create (10, htab_macinfo_hash, htab_macinfo_eq, NULL);
20798   /* Avoid emitting duplicates.  */
20799   slot = htab_find_slot (*macinfo_htab, inc, INSERT);
20800   if (*slot != NULL)
20801     {
20802       free (CONST_CAST (char *, inc->info));
20803       inc->code = 0;
20804       inc->info = NULL;
20805       /* If such an entry has been used before, just emit
20806          a DW_MACRO_GNU_transparent_include op.  */
20807       inc = (macinfo_entry *) *slot;
20808       output_macinfo_op (inc);
20809       /* And clear all macinfo_entry in the range to avoid emitting them
20810          in the second pass.  */
20811       for (i = idx;
20812            VEC_iterate (macinfo_entry, macinfo_table, i, cur)
20813            && i < idx + count;
20814            i++)
20815         {
20816           cur->code = 0;
20817           free (CONST_CAST (char *, cur->info));
20818           cur->info = NULL;
20819         }
20820     }
20821   else
20822     {
20823       *slot = inc;
20824       inc->lineno = htab_elements (*macinfo_htab);
20825       output_macinfo_op (inc);
20826     }
20827   return count;
20828 }
20829
20830 /* Output macinfo section(s).  */
20831
20832 static void
20833 output_macinfo (void)
20834 {
20835   unsigned i;
20836   unsigned long length = VEC_length (macinfo_entry, macinfo_table);
20837   macinfo_entry *ref;
20838   VEC (macinfo_entry, gc) *files = NULL;
20839   htab_t macinfo_htab = NULL;
20840
20841   if (! length)
20842     return;
20843
20844   /* output_macinfo* uses these interchangeably.  */
20845   gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
20846               && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
20847               && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
20848               && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
20849
20850   /* For .debug_macro emit the section header.  */
20851   if (!dwarf_strict)
20852     {
20853       dw2_asm_output_data (2, 4, "DWARF macro version number");
20854       if (DWARF_OFFSET_SIZE == 8)
20855         dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
20856       else
20857         dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
20858       dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_line_section_label,
20859                              debug_line_section, NULL);
20860     }
20861
20862   /* In the first loop, it emits the primary .debug_macinfo section
20863      and after each emitted op the macinfo_entry is cleared.
20864      If a longer range of define/undef ops can be optimized using
20865      DW_MACRO_GNU_transparent_include, the
20866      DW_MACRO_GNU_transparent_include op is emitted and kept in
20867      the vector before the first define/undef in the range and the
20868      whole range of define/undef ops is not emitted and kept.  */
20869   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20870     {
20871       switch (ref->code)
20872         {
20873         case DW_MACINFO_start_file:
20874           VEC_safe_push (macinfo_entry, gc, files, ref);
20875           break;
20876         case DW_MACINFO_end_file:
20877           if (!VEC_empty (macinfo_entry, files))
20878             {
20879               macinfo_entry *file = VEC_last (macinfo_entry, files);
20880               free (CONST_CAST (char *, file->info));
20881               VEC_pop (macinfo_entry, files);
20882             }
20883           break;
20884         case DW_MACINFO_define:
20885         case DW_MACINFO_undef:
20886           if (!dwarf_strict
20887               && HAVE_COMDAT_GROUP
20888               && VEC_length (macinfo_entry, files) != 1
20889               && i > 0
20890               && i + 1 < length
20891               && VEC_index (macinfo_entry, macinfo_table, i - 1)->code == 0)
20892             {
20893               unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
20894               if (count)
20895                 {
20896                   i += count - 1;
20897                   continue;
20898                 }
20899             }
20900           break;
20901         case 0:
20902           /* A dummy entry may be inserted at the beginning to be able
20903              to optimize the whole block of predefined macros.  */
20904           if (i == 0)
20905             continue;
20906         default:
20907           break;
20908         }
20909       output_macinfo_op (ref);
20910       /* For DW_MACINFO_start_file ref->info has been copied into files
20911          vector.  */
20912       if (ref->code != DW_MACINFO_start_file)
20913         free (CONST_CAST (char *, ref->info));
20914       ref->info = NULL;
20915       ref->code = 0;
20916     }
20917
20918   if (macinfo_htab == NULL)
20919     return;
20920
20921   htab_delete (macinfo_htab);
20922
20923   /* If any DW_MACRO_GNU_transparent_include were used, on those
20924      DW_MACRO_GNU_transparent_include entries terminate the
20925      current chain and switch to a new comdat .debug_macinfo
20926      section and emit the define/undef entries within it.  */
20927   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20928     switch (ref->code)
20929       {
20930       case 0:
20931         continue;
20932       case DW_MACRO_GNU_transparent_include:
20933         {
20934           char label[MAX_ARTIFICIAL_LABEL_BYTES];
20935           tree comdat_key = get_identifier (ref->info);
20936           /* Terminate the previous .debug_macinfo section.  */
20937           dw2_asm_output_data (1, 0, "End compilation unit");
20938           targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
20939                                          SECTION_DEBUG
20940                                          | SECTION_LINKONCE,
20941                                          comdat_key);
20942           ASM_GENERATE_INTERNAL_LABEL (label,
20943                                        DEBUG_MACRO_SECTION_LABEL,
20944                                        ref->lineno);
20945           ASM_OUTPUT_LABEL (asm_out_file, label);
20946           ref->code = 0;
20947           free (CONST_CAST (char *, ref->info));
20948           ref->info = NULL;
20949           dw2_asm_output_data (2, 4, "DWARF macro version number");
20950           if (DWARF_OFFSET_SIZE == 8)
20951             dw2_asm_output_data (1, 1, "Flags: 64-bit");
20952           else
20953             dw2_asm_output_data (1, 0, "Flags: 32-bit");
20954         }
20955         break;
20956       case DW_MACINFO_define:
20957       case DW_MACINFO_undef:
20958         output_macinfo_op (ref);
20959         ref->code = 0;
20960         free (CONST_CAST (char *, ref->info));
20961         ref->info = NULL;
20962         break;
20963       default:
20964         gcc_unreachable ();
20965       }
20966 }
20967
20968 /* Set up for Dwarf output at the start of compilation.  */
20969
20970 static void
20971 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20972 {
20973   /* Allocate the file_table.  */
20974   file_table = htab_create_ggc (50, file_table_hash,
20975                                 file_table_eq, NULL);
20976
20977   /* Allocate the decl_die_table.  */
20978   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20979                                     decl_die_table_eq, NULL);
20980
20981   /* Allocate the decl_loc_table.  */
20982   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20983                                     decl_loc_table_eq, NULL);
20984
20985   /* Allocate the cached_dw_loc_list_table.  */
20986   cached_dw_loc_list_table
20987     = htab_create_ggc (10, cached_dw_loc_list_table_hash,
20988                        cached_dw_loc_list_table_eq, NULL);
20989
20990   /* Allocate the initial hunk of the decl_scope_table.  */
20991   decl_scope_table = VEC_alloc (tree, gc, 256);
20992
20993   /* Allocate the initial hunk of the abbrev_die_table.  */
20994   abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref
20995     (ABBREV_DIE_TABLE_INCREMENT);
20996   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20997   /* Zero-th entry is allocated, but unused.  */
20998   abbrev_die_table_in_use = 1;
20999
21000   /* Allocate the pubtypes and pubnames vectors.  */
21001   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21002   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21003
21004   incomplete_types = VEC_alloc (tree, gc, 64);
21005
21006   used_rtx_array = VEC_alloc (rtx, gc, 32);
21007
21008   debug_info_section = get_section (DEBUG_INFO_SECTION,
21009                                     SECTION_DEBUG, NULL);
21010   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21011                                       SECTION_DEBUG, NULL);
21012   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21013                                        SECTION_DEBUG, NULL);
21014   debug_macinfo_section = get_section (dwarf_strict
21015                                        ? DEBUG_MACINFO_SECTION
21016                                        : DEBUG_MACRO_SECTION,
21017                                        SECTION_DEBUG, NULL);
21018   debug_line_section = get_section (DEBUG_LINE_SECTION,
21019                                     SECTION_DEBUG, NULL);
21020   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21021                                    SECTION_DEBUG, NULL);
21022   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21023                                         SECTION_DEBUG, NULL);
21024   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21025                                         SECTION_DEBUG, NULL);
21026   debug_str_section = get_section (DEBUG_STR_SECTION,
21027                                    DEBUG_STR_SECTION_FLAGS, NULL);
21028   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21029                                       SECTION_DEBUG, NULL);
21030   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21031                                      SECTION_DEBUG, NULL);
21032
21033   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21034   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21035                                DEBUG_ABBREV_SECTION_LABEL, 0);
21036   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21037   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21038                                COLD_TEXT_SECTION_LABEL, 0);
21039   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21040
21041   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21042                                DEBUG_INFO_SECTION_LABEL, 0);
21043   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21044                                DEBUG_LINE_SECTION_LABEL, 0);
21045   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21046                                DEBUG_RANGES_SECTION_LABEL, 0);
21047   ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21048                                dwarf_strict
21049                                ? DEBUG_MACINFO_SECTION_LABEL
21050                                : DEBUG_MACRO_SECTION_LABEL, 0);
21051
21052   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21053     macinfo_table = VEC_alloc (macinfo_entry, gc, 64);
21054
21055   switch_to_section (text_section);
21056   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21057
21058   /* Make sure the line number table for .text always exists.  */
21059   text_section_line_info = new_line_info_table ();
21060   text_section_line_info->end_label = text_end_label;
21061 }
21062
21063 /* Called before cgraph_optimize starts outputtting functions, variables
21064    and toplevel asms into assembly.  */
21065
21066 static void
21067 dwarf2out_assembly_start (void)
21068 {
21069   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
21070       && dwarf2out_do_cfi_asm ()
21071       && (!(flag_unwind_tables || flag_exceptions)
21072           || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
21073     fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21074 }
21075
21076 /* A helper function for dwarf2out_finish called through
21077    htab_traverse.  Emit one queued .debug_str string.  */
21078
21079 static int
21080 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21081 {
21082   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21083
21084   if (node->form == DW_FORM_strp)
21085     {
21086       switch_to_section (debug_str_section);
21087       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21088       assemble_string (node->str, strlen (node->str) + 1);
21089     }
21090
21091   return 1;
21092 }
21093
21094 #if ENABLE_ASSERT_CHECKING
21095 /* Verify that all marks are clear.  */
21096
21097 static void
21098 verify_marks_clear (dw_die_ref die)
21099 {
21100   dw_die_ref c;
21101
21102   gcc_assert (! die->die_mark);
21103   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21104 }
21105 #endif /* ENABLE_ASSERT_CHECKING */
21106
21107 /* Clear the marks for a die and its children.
21108    Be cool if the mark isn't set.  */
21109
21110 static void
21111 prune_unmark_dies (dw_die_ref die)
21112 {
21113   dw_die_ref c;
21114
21115   if (die->die_mark)
21116     die->die_mark = 0;
21117   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21118 }
21119
21120 /* Given DIE that we're marking as used, find any other dies
21121    it references as attributes and mark them as used.  */
21122
21123 static void
21124 prune_unused_types_walk_attribs (dw_die_ref die)
21125 {
21126   dw_attr_ref a;
21127   unsigned ix;
21128
21129   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21130     {
21131       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21132         {
21133           /* A reference to another DIE.
21134              Make sure that it will get emitted.
21135              If it was broken out into a comdat group, don't follow it.  */
21136           if (! use_debug_types
21137               || a->dw_attr == DW_AT_specification
21138               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21139             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21140         }
21141       /* Set the string's refcount to 0 so that prune_unused_types_mark
21142          accounts properly for it.  */
21143       if (AT_class (a) == dw_val_class_str)
21144         a->dw_attr_val.v.val_str->refcount = 0;
21145     }
21146 }
21147
21148 /* Mark the generic parameters and arguments children DIEs of DIE.  */
21149
21150 static void
21151 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
21152 {
21153   dw_die_ref c;
21154
21155   if (die == NULL || die->die_child == NULL)
21156     return;
21157   c = die->die_child;
21158   do
21159     {
21160       switch (c->die_tag)
21161         {
21162         case DW_TAG_template_type_param:
21163         case DW_TAG_template_value_param:
21164         case DW_TAG_GNU_template_template_param:
21165         case DW_TAG_GNU_template_parameter_pack:
21166           prune_unused_types_mark (c, 1);
21167           break;
21168         default:
21169           break;
21170         }
21171       c = c->die_sib;
21172     } while (c && c != die->die_child);
21173 }
21174
21175 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21176    to DIE's children.  */
21177
21178 static void
21179 prune_unused_types_mark (dw_die_ref die, int dokids)
21180 {
21181   dw_die_ref c;
21182
21183   if (die->die_mark == 0)
21184     {
21185       /* We haven't done this node yet.  Mark it as used.  */
21186       die->die_mark = 1;
21187       /* If this is the DIE of a generic type instantiation,
21188          mark the children DIEs that describe its generic parms and
21189          args.  */
21190       prune_unused_types_mark_generic_parms_dies (die);
21191
21192       /* We also have to mark its parents as used.
21193          (But we don't want to mark our parents' kids due to this.)  */
21194       if (die->die_parent)
21195         prune_unused_types_mark (die->die_parent, 0);
21196
21197       /* Mark any referenced nodes.  */
21198       prune_unused_types_walk_attribs (die);
21199
21200       /* If this node is a specification,
21201          also mark the definition, if it exists.  */
21202       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21203         prune_unused_types_mark (die->die_definition, 1);
21204     }
21205
21206   if (dokids && die->die_mark != 2)
21207     {
21208       /* We need to walk the children, but haven't done so yet.
21209          Remember that we've walked the kids.  */
21210       die->die_mark = 2;
21211
21212       /* If this is an array type, we need to make sure our
21213          kids get marked, even if they're types.  If we're
21214          breaking out types into comdat sections, do this
21215          for all type definitions.  */
21216       if (die->die_tag == DW_TAG_array_type
21217           || (use_debug_types
21218               && is_type_die (die) && ! is_declaration_die (die)))
21219         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21220       else
21221         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21222     }
21223 }
21224
21225 /* For local classes, look if any static member functions were emitted
21226    and if so, mark them.  */
21227
21228 static void
21229 prune_unused_types_walk_local_classes (dw_die_ref die)
21230 {
21231   dw_die_ref c;
21232
21233   if (die->die_mark == 2)
21234     return;
21235
21236   switch (die->die_tag)
21237     {
21238     case DW_TAG_structure_type:
21239     case DW_TAG_union_type:
21240     case DW_TAG_class_type:
21241       break;
21242
21243     case DW_TAG_subprogram:
21244       if (!get_AT_flag (die, DW_AT_declaration)
21245           || die->die_definition != NULL)
21246         prune_unused_types_mark (die, 1);
21247       return;
21248
21249     default:
21250       return;
21251     }
21252
21253   /* Mark children.  */
21254   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21255 }
21256
21257 /* Walk the tree DIE and mark types that we actually use.  */
21258
21259 static void
21260 prune_unused_types_walk (dw_die_ref die)
21261 {
21262   dw_die_ref c;
21263
21264   /* Don't do anything if this node is already marked and
21265      children have been marked as well.  */
21266   if (die->die_mark == 2)
21267     return;
21268
21269   switch (die->die_tag)
21270     {
21271     case DW_TAG_structure_type:
21272     case DW_TAG_union_type:
21273     case DW_TAG_class_type:
21274       if (die->die_perennial_p)
21275         break;
21276
21277       for (c = die->die_parent; c; c = c->die_parent)
21278         if (c->die_tag == DW_TAG_subprogram)
21279           break;
21280
21281       /* Finding used static member functions inside of classes
21282          is needed just for local classes, because for other classes
21283          static member function DIEs with DW_AT_specification
21284          are emitted outside of the DW_TAG_*_type.  If we ever change
21285          it, we'd need to call this even for non-local classes.  */
21286       if (c)
21287         prune_unused_types_walk_local_classes (die);
21288
21289       /* It's a type node --- don't mark it.  */
21290       return;
21291
21292     case DW_TAG_const_type:
21293     case DW_TAG_packed_type:
21294     case DW_TAG_pointer_type:
21295     case DW_TAG_reference_type:
21296     case DW_TAG_rvalue_reference_type:
21297     case DW_TAG_volatile_type:
21298     case DW_TAG_typedef:
21299     case DW_TAG_array_type:
21300     case DW_TAG_interface_type:
21301     case DW_TAG_friend:
21302     case DW_TAG_variant_part:
21303     case DW_TAG_enumeration_type:
21304     case DW_TAG_subroutine_type:
21305     case DW_TAG_string_type:
21306     case DW_TAG_set_type:
21307     case DW_TAG_subrange_type:
21308     case DW_TAG_ptr_to_member_type:
21309     case DW_TAG_file_type:
21310       if (die->die_perennial_p)
21311         break;
21312
21313       /* It's a type node --- don't mark it.  */
21314       return;
21315
21316     default:
21317       /* Mark everything else.  */
21318       break;
21319   }
21320
21321   if (die->die_mark == 0)
21322     {
21323       die->die_mark = 1;
21324
21325       /* Now, mark any dies referenced from here.  */
21326       prune_unused_types_walk_attribs (die);
21327     }
21328
21329   die->die_mark = 2;
21330
21331   /* Mark children.  */
21332   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21333 }
21334
21335 /* Increment the string counts on strings referred to from DIE's
21336    attributes.  */
21337
21338 static void
21339 prune_unused_types_update_strings (dw_die_ref die)
21340 {
21341   dw_attr_ref a;
21342   unsigned ix;
21343
21344   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21345     if (AT_class (a) == dw_val_class_str)
21346       {
21347         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21348         s->refcount++;
21349         /* Avoid unnecessarily putting strings that are used less than
21350            twice in the hash table.  */
21351         if (s->refcount
21352             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21353           {
21354             void ** slot;
21355             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21356                                              htab_hash_string (s->str),
21357                                              INSERT);
21358             gcc_assert (*slot == NULL);
21359             *slot = s;
21360           }
21361       }
21362 }
21363
21364 /* Remove from the tree DIE any dies that aren't marked.  */
21365
21366 static void
21367 prune_unused_types_prune (dw_die_ref die)
21368 {
21369   dw_die_ref c;
21370
21371   gcc_assert (die->die_mark);
21372   prune_unused_types_update_strings (die);
21373
21374   if (! die->die_child)
21375     return;
21376
21377   c = die->die_child;
21378   do {
21379     dw_die_ref prev = c;
21380     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21381       if (c == die->die_child)
21382         {
21383           /* No marked children between 'prev' and the end of the list.  */
21384           if (prev == c)
21385             /* No marked children at all.  */
21386             die->die_child = NULL;
21387           else
21388             {
21389               prev->die_sib = c->die_sib;
21390               die->die_child = prev;
21391             }
21392           return;
21393         }
21394
21395     if (c != prev->die_sib)
21396       prev->die_sib = c;
21397     prune_unused_types_prune (c);
21398   } while (c != die->die_child);
21399 }
21400
21401 /* Remove dies representing declarations that we never use.  */
21402
21403 static void
21404 prune_unused_types (void)
21405 {
21406   unsigned int i;
21407   limbo_die_node *node;
21408   comdat_type_node *ctnode;
21409   pubname_ref pub;
21410   dw_die_ref base_type;
21411
21412 #if ENABLE_ASSERT_CHECKING
21413   /* All the marks should already be clear.  */
21414   verify_marks_clear (comp_unit_die ());
21415   for (node = limbo_die_list; node; node = node->next)
21416     verify_marks_clear (node->die);
21417   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21418     verify_marks_clear (ctnode->root_die);
21419 #endif /* ENABLE_ASSERT_CHECKING */
21420
21421   /* Mark types that are used in global variables.  */
21422   premark_types_used_by_global_vars ();
21423
21424   /* Set the mark on nodes that are actually used.  */
21425   prune_unused_types_walk (comp_unit_die ());
21426   for (node = limbo_die_list; node; node = node->next)
21427     prune_unused_types_walk (node->die);
21428   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21429     {
21430       prune_unused_types_walk (ctnode->root_die);
21431       prune_unused_types_mark (ctnode->type_die, 1);
21432     }
21433
21434   /* Also set the mark on nodes referenced from the
21435      pubname_table.  */
21436   FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
21437     prune_unused_types_mark (pub->die, 1);
21438   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21439     prune_unused_types_mark (base_type, 1);
21440
21441   if (debug_str_hash)
21442     htab_empty (debug_str_hash);
21443   prune_unused_types_prune (comp_unit_die ());
21444   for (node = limbo_die_list; node; node = node->next)
21445     prune_unused_types_prune (node->die);
21446   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21447     prune_unused_types_prune (ctnode->root_die);
21448
21449   /* Leave the marks clear.  */
21450   prune_unmark_dies (comp_unit_die ());
21451   for (node = limbo_die_list; node; node = node->next)
21452     prune_unmark_dies (node->die);
21453   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21454     prune_unmark_dies (ctnode->root_die);
21455 }
21456
21457 /* Set the parameter to true if there are any relative pathnames in
21458    the file table.  */
21459 static int
21460 file_table_relative_p (void ** slot, void *param)
21461 {
21462   bool *p = (bool *) param;
21463   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21464   if (!IS_ABSOLUTE_PATH (d->filename))
21465     {
21466       *p = true;
21467       return 0;
21468     }
21469   return 1;
21470 }
21471
21472 /* Routines to manipulate hash table of comdat type units.  */
21473
21474 static hashval_t
21475 htab_ct_hash (const void *of)
21476 {
21477   hashval_t h;
21478   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21479
21480   memcpy (&h, type_node->signature, sizeof (h));
21481   return h;
21482 }
21483
21484 static int
21485 htab_ct_eq (const void *of1, const void *of2)
21486 {
21487   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21488   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21489
21490   return (! memcmp (type_node_1->signature, type_node_2->signature,
21491                     DWARF_TYPE_SIGNATURE_SIZE));
21492 }
21493
21494 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21495    to the location it would have been added, should we know its
21496    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21497    probably improve compactness of debug info, removing equivalent
21498    abbrevs, and hide any differences caused by deferring the
21499    computation of the assembler name, triggered by e.g. PCH.  */
21500
21501 static inline void
21502 move_linkage_attr (dw_die_ref die)
21503 {
21504   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21505   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21506
21507   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
21508               || linkage.dw_attr == DW_AT_MIPS_linkage_name);
21509
21510   while (--ix > 0)
21511     {
21512       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21513
21514       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21515         break;
21516     }
21517
21518   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21519     {
21520       VEC_pop (dw_attr_node, die->die_attr);
21521       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21522     }
21523 }
21524
21525 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
21526    referenced from typed stack ops and count how often they are used.  */
21527
21528 static void
21529 mark_base_types (dw_loc_descr_ref loc)
21530 {
21531   dw_die_ref base_type = NULL;
21532
21533   for (; loc; loc = loc->dw_loc_next)
21534     {
21535       switch (loc->dw_loc_opc)
21536         {
21537         case DW_OP_GNU_regval_type:
21538         case DW_OP_GNU_deref_type:
21539           base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
21540           break;
21541         case DW_OP_GNU_convert:
21542         case DW_OP_GNU_reinterpret:
21543           if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
21544             continue;
21545           /* FALLTHRU */
21546         case DW_OP_GNU_const_type:
21547           base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
21548           break;
21549         case DW_OP_GNU_entry_value:
21550           mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
21551           continue;
21552         default:
21553           continue;
21554         }
21555       gcc_assert (base_type->die_parent == comp_unit_die ());
21556       if (base_type->die_mark)
21557         base_type->die_mark++;
21558       else
21559         {
21560           VEC_safe_push (dw_die_ref, heap, base_types, base_type);
21561           base_type->die_mark = 1;
21562         }
21563     }
21564 }
21565
21566 /* Comparison function for sorting marked base types.  */
21567
21568 static int
21569 base_type_cmp (const void *x, const void *y)
21570 {
21571   dw_die_ref dx = *(const dw_die_ref *) x;
21572   dw_die_ref dy = *(const dw_die_ref *) y;
21573   unsigned int byte_size1, byte_size2;
21574   unsigned int encoding1, encoding2;
21575   if (dx->die_mark > dy->die_mark)
21576     return -1;
21577   if (dx->die_mark < dy->die_mark)
21578     return 1;
21579   byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
21580   byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
21581   if (byte_size1 < byte_size2)
21582     return 1;
21583   if (byte_size1 > byte_size2)
21584     return -1;
21585   encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
21586   encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
21587   if (encoding1 < encoding2)
21588     return 1;
21589   if (encoding1 > encoding2)
21590     return -1;
21591   return 0;
21592 }
21593
21594 /* Move base types marked by mark_base_types as early as possible
21595    in the CU, sorted by decreasing usage count both to make the
21596    uleb128 references as small as possible and to make sure they
21597    will have die_offset already computed by calc_die_sizes when
21598    sizes of typed stack loc ops is computed.  */
21599
21600 static void
21601 move_marked_base_types (void)
21602 {
21603   unsigned int i;
21604   dw_die_ref base_type, die, c;
21605
21606   if (VEC_empty (dw_die_ref, base_types))
21607     return;
21608
21609   /* Sort by decreasing usage count, they will be added again in that
21610      order later on.  */
21611   VEC_qsort (dw_die_ref, base_types, base_type_cmp);
21612   die = comp_unit_die ();
21613   c = die->die_child;
21614   do
21615     {
21616       dw_die_ref prev = c;
21617       c = c->die_sib;
21618       while (c->die_mark)
21619         {
21620           remove_child_with_prev (c, prev);
21621           /* As base types got marked, there must be at least
21622              one node other than DW_TAG_base_type.  */
21623           gcc_assert (c != c->die_sib);
21624           c = c->die_sib;
21625         }
21626     }
21627   while (c != die->die_child);
21628   gcc_assert (die->die_child);
21629   c = die->die_child;
21630   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21631     {
21632       base_type->die_mark = 0;
21633       base_type->die_sib = c->die_sib;
21634       c->die_sib = base_type;
21635       c = base_type;
21636     }
21637 }
21638
21639 /* Helper function for resolve_addr, attempt to resolve
21640    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21641    SYMBOL_REFs refer to variables emitted in the current CU.  */
21642
21643 static int
21644 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21645 {
21646   rtx rtl = *addr;
21647
21648   if (GET_CODE (rtl) == CONST_STRING)
21649     {
21650       size_t len = strlen (XSTR (rtl, 0)) + 1;
21651       tree t = build_string (len, XSTR (rtl, 0));
21652       tree tlen = size_int (len - 1);
21653       TREE_TYPE (t)
21654         = build_array_type (char_type_node, build_index_type (tlen));
21655       rtl = lookup_constant_def (t);
21656       if (!rtl || !MEM_P (rtl))
21657         return 1;
21658       rtl = XEXP (rtl, 0);
21659       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21660       *addr = rtl;
21661       return 0;
21662     }
21663
21664   if (GET_CODE (rtl) == SYMBOL_REF
21665       && SYMBOL_REF_DECL (rtl))
21666     {
21667       if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
21668         {
21669           if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
21670             return 1;
21671         }
21672       else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21673         return 1;
21674     }
21675
21676   if (GET_CODE (rtl) == CONST
21677       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21678     return 1;
21679
21680   return 0;
21681 }
21682
21683 /* Helper function for resolve_addr, handle one location
21684    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21685    the location list couldn't be resolved.  */
21686
21687 static bool
21688 resolve_addr_in_expr (dw_loc_descr_ref loc)
21689 {
21690   dw_loc_descr_ref keep = NULL;
21691   for (; loc; loc = loc->dw_loc_next)
21692     switch (loc->dw_loc_opc)
21693       {
21694       case DW_OP_addr:
21695         if (resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21696           return false;
21697         break;
21698       case DW_OP_const4u:
21699       case DW_OP_const8u:
21700         if (loc->dtprel
21701             && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21702           return false;
21703         break;
21704       case DW_OP_plus_uconst:
21705         if (size_of_loc_descr (loc)
21706             > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
21707               + 1
21708             && loc->dw_loc_oprnd1.v.val_unsigned > 0)
21709           {
21710             dw_loc_descr_ref repl
21711               = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
21712             add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
21713             add_loc_descr (&repl, loc->dw_loc_next);
21714             *loc = *repl;
21715           }
21716         break;
21717       case DW_OP_implicit_value:
21718         if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21719             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL))
21720           return false;
21721         break;
21722       case DW_OP_GNU_implicit_pointer:
21723       case DW_OP_GNU_parameter_ref:
21724         if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
21725           {
21726             dw_die_ref ref
21727               = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
21728             if (ref == NULL)
21729               return false;
21730             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
21731             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
21732             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
21733           }
21734         break;
21735       case DW_OP_GNU_const_type:
21736       case DW_OP_GNU_regval_type:
21737       case DW_OP_GNU_deref_type:
21738       case DW_OP_GNU_convert:
21739       case DW_OP_GNU_reinterpret:
21740         while (loc->dw_loc_next
21741                && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
21742           {
21743             dw_die_ref base1, base2;
21744             unsigned enc1, enc2, size1, size2;
21745             if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21746                 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21747               base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
21748             else if (loc->dw_loc_oprnd1.val_class
21749                      == dw_val_class_unsigned_const)
21750               break;
21751             else
21752               base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
21753             if (loc->dw_loc_next->dw_loc_oprnd1.val_class
21754                 == dw_val_class_unsigned_const)
21755               break;
21756             base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
21757             gcc_assert (base1->die_tag == DW_TAG_base_type
21758                         && base2->die_tag == DW_TAG_base_type);
21759             enc1 = get_AT_unsigned (base1, DW_AT_encoding);
21760             enc2 = get_AT_unsigned (base2, DW_AT_encoding);
21761             size1 = get_AT_unsigned (base1, DW_AT_byte_size);
21762             size2 = get_AT_unsigned (base2, DW_AT_byte_size);
21763             if (size1 == size2
21764                 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
21765                      && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
21766                      && loc != keep)
21767                     || enc1 == enc2))
21768               {
21769                 /* Optimize away next DW_OP_GNU_convert after
21770                    adjusting LOC's base type die reference.  */
21771                 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21772                     || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21773                   loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
21774                 else
21775                   loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
21776                 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
21777                 continue;
21778               }
21779             /* Don't change integer DW_OP_GNU_convert after e.g. floating
21780                point typed stack entry.  */
21781             else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
21782               keep = loc->dw_loc_next;
21783             break;
21784           }
21785         break;
21786       default:
21787         break;
21788       }
21789   return true;
21790 }
21791
21792 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21793    an address in .rodata section if the string literal is emitted there,
21794    or remove the containing location list or replace DW_AT_const_value
21795    with DW_AT_location and empty location expression, if it isn't found
21796    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21797    to something that has been emitted in the current CU.  */
21798
21799 static void
21800 resolve_addr (dw_die_ref die)
21801 {
21802   dw_die_ref c;
21803   dw_attr_ref a;
21804   dw_loc_list_ref *curr, *start, loc;
21805   unsigned ix;
21806
21807   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21808     switch (AT_class (a))
21809       {
21810       case dw_val_class_loc_list:
21811         start = curr = AT_loc_list_ptr (a);
21812         loc = *curr;
21813         gcc_assert (loc);
21814         /* The same list can be referenced more than once.  See if we have
21815            already recorded the result from a previous pass.  */
21816         if (loc->replaced)
21817           *curr = loc->dw_loc_next;
21818         else if (!loc->resolved_addr)
21819           {
21820             /* As things stand, we do not expect or allow one die to
21821                reference a suffix of another die's location list chain.
21822                References must be identical or completely separate.
21823                There is therefore no need to cache the result of this
21824                pass on any list other than the first; doing so
21825                would lead to unnecessary writes.  */
21826             while (*curr)
21827               {
21828                 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
21829                 if (!resolve_addr_in_expr ((*curr)->expr))
21830                   {
21831                     dw_loc_list_ref next = (*curr)->dw_loc_next;
21832                     if (next && (*curr)->ll_symbol)
21833                       {
21834                         gcc_assert (!next->ll_symbol);
21835                         next->ll_symbol = (*curr)->ll_symbol;
21836                       }
21837                     *curr = next;
21838                   }
21839                 else
21840                   {
21841                     mark_base_types ((*curr)->expr);
21842                     curr = &(*curr)->dw_loc_next;
21843                   }
21844               }
21845             if (loc == *start)
21846               loc->resolved_addr = 1;
21847             else
21848               {
21849                 loc->replaced = 1;
21850                 loc->dw_loc_next = *start;
21851               }
21852           }
21853         if (!*start)
21854           {
21855             remove_AT (die, a->dw_attr);
21856             ix--;
21857           }
21858         break;
21859       case dw_val_class_loc:
21860         {
21861           dw_loc_descr_ref l = AT_loc (a);
21862           /* For -gdwarf-2 don't attempt to optimize
21863              DW_AT_data_member_location containing
21864              DW_OP_plus_uconst - older consumers might
21865              rely on it being that op instead of a more complex,
21866              but shorter, location description.  */
21867           if ((dwarf_version > 2
21868                || a->dw_attr != DW_AT_data_member_location
21869                || l == NULL
21870                || l->dw_loc_opc != DW_OP_plus_uconst
21871                || l->dw_loc_next != NULL)
21872               && !resolve_addr_in_expr (l))
21873             {
21874               remove_AT (die, a->dw_attr);
21875               ix--;
21876             }
21877           else
21878             mark_base_types (l);
21879         }
21880         break;
21881       case dw_val_class_addr:
21882         if (a->dw_attr == DW_AT_const_value
21883             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21884           {
21885             remove_AT (die, a->dw_attr);
21886             ix--;
21887           }
21888         if (die->die_tag == DW_TAG_GNU_call_site
21889             && a->dw_attr == DW_AT_abstract_origin)
21890           {
21891             tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
21892             dw_die_ref tdie = lookup_decl_die (tdecl);
21893             if (tdie == NULL
21894                 && DECL_EXTERNAL (tdecl)
21895                 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
21896               {
21897                 force_decl_die (tdecl);
21898                 tdie = lookup_decl_die (tdecl);
21899               }
21900             if (tdie)
21901               {
21902                 a->dw_attr_val.val_class = dw_val_class_die_ref;
21903                 a->dw_attr_val.v.val_die_ref.die = tdie;
21904                 a->dw_attr_val.v.val_die_ref.external = 0;
21905               }
21906             else
21907               {
21908                 remove_AT (die, a->dw_attr);
21909                 ix--;
21910               }
21911           }
21912         break;
21913       default:
21914         break;
21915       }
21916
21917   FOR_EACH_CHILD (die, c, resolve_addr (c));
21918 }
21919 \f
21920 /* Helper routines for optimize_location_lists.
21921    This pass tries to share identical local lists in .debug_loc
21922    section.  */
21923
21924 /* Iteratively hash operands of LOC opcode.  */
21925
21926 static inline hashval_t
21927 hash_loc_operands (dw_loc_descr_ref loc, hashval_t hash)
21928 {
21929   dw_val_ref val1 = &loc->dw_loc_oprnd1;
21930   dw_val_ref val2 = &loc->dw_loc_oprnd2;
21931
21932   switch (loc->dw_loc_opc)
21933     {
21934     case DW_OP_const4u:
21935     case DW_OP_const8u:
21936       if (loc->dtprel)
21937         goto hash_addr;
21938       /* FALLTHRU */
21939     case DW_OP_const1u:
21940     case DW_OP_const1s:
21941     case DW_OP_const2u:
21942     case DW_OP_const2s:
21943     case DW_OP_const4s:
21944     case DW_OP_const8s:
21945     case DW_OP_constu:
21946     case DW_OP_consts:
21947     case DW_OP_pick:
21948     case DW_OP_plus_uconst:
21949     case DW_OP_breg0:
21950     case DW_OP_breg1:
21951     case DW_OP_breg2:
21952     case DW_OP_breg3:
21953     case DW_OP_breg4:
21954     case DW_OP_breg5:
21955     case DW_OP_breg6:
21956     case DW_OP_breg7:
21957     case DW_OP_breg8:
21958     case DW_OP_breg9:
21959     case DW_OP_breg10:
21960     case DW_OP_breg11:
21961     case DW_OP_breg12:
21962     case DW_OP_breg13:
21963     case DW_OP_breg14:
21964     case DW_OP_breg15:
21965     case DW_OP_breg16:
21966     case DW_OP_breg17:
21967     case DW_OP_breg18:
21968     case DW_OP_breg19:
21969     case DW_OP_breg20:
21970     case DW_OP_breg21:
21971     case DW_OP_breg22:
21972     case DW_OP_breg23:
21973     case DW_OP_breg24:
21974     case DW_OP_breg25:
21975     case DW_OP_breg26:
21976     case DW_OP_breg27:
21977     case DW_OP_breg28:
21978     case DW_OP_breg29:
21979     case DW_OP_breg30:
21980     case DW_OP_breg31:
21981     case DW_OP_regx:
21982     case DW_OP_fbreg:
21983     case DW_OP_piece:
21984     case DW_OP_deref_size:
21985     case DW_OP_xderef_size:
21986       hash = iterative_hash_object (val1->v.val_int, hash);
21987       break;
21988     case DW_OP_skip:
21989     case DW_OP_bra:
21990       {
21991         int offset;
21992
21993         gcc_assert (val1->val_class == dw_val_class_loc);
21994         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
21995         hash = iterative_hash_object (offset, hash);
21996       }
21997       break;
21998     case DW_OP_implicit_value:
21999       hash = iterative_hash_object (val1->v.val_unsigned, hash);
22000       switch (val2->val_class)
22001         {
22002         case dw_val_class_const:
22003           hash = iterative_hash_object (val2->v.val_int, hash);
22004           break;
22005         case dw_val_class_vec:
22006           {
22007             unsigned int elt_size = val2->v.val_vec.elt_size;
22008             unsigned int len = val2->v.val_vec.length;
22009
22010             hash = iterative_hash_object (elt_size, hash);
22011             hash = iterative_hash_object (len, hash);
22012             hash = iterative_hash (val2->v.val_vec.array,
22013                                    len * elt_size, hash);
22014           }
22015           break;
22016         case dw_val_class_const_double:
22017           hash = iterative_hash_object (val2->v.val_double.low, hash);
22018           hash = iterative_hash_object (val2->v.val_double.high, hash);
22019           break;
22020         case dw_val_class_addr:
22021           hash = iterative_hash_rtx (val2->v.val_addr, hash);
22022           break;
22023         default:
22024           gcc_unreachable ();
22025         }
22026       break;
22027     case DW_OP_bregx:
22028     case DW_OP_bit_piece:
22029       hash = iterative_hash_object (val1->v.val_int, hash);
22030       hash = iterative_hash_object (val2->v.val_int, hash);
22031       break;
22032     case DW_OP_addr:
22033     hash_addr:
22034       if (loc->dtprel)
22035         {
22036           unsigned char dtprel = 0xd1;
22037           hash = iterative_hash_object (dtprel, hash);
22038         }
22039       hash = iterative_hash_rtx (val1->v.val_addr, hash);
22040       break;
22041     case DW_OP_GNU_implicit_pointer:
22042       hash = iterative_hash_object (val2->v.val_int, hash);
22043       break;
22044     case DW_OP_GNU_entry_value:
22045       hash = hash_loc_operands (val1->v.val_loc, hash);
22046       break;
22047     case DW_OP_GNU_regval_type:
22048     case DW_OP_GNU_deref_type:
22049       {
22050         unsigned int byte_size
22051           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
22052         unsigned int encoding
22053           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
22054         hash = iterative_hash_object (val1->v.val_int, hash);
22055         hash = iterative_hash_object (byte_size, hash);
22056         hash = iterative_hash_object (encoding, hash);
22057       }
22058       break;
22059     case DW_OP_GNU_convert:
22060     case DW_OP_GNU_reinterpret:
22061       if (val1->val_class == dw_val_class_unsigned_const)
22062         {
22063           hash = iterative_hash_object (val1->v.val_unsigned, hash);
22064           break;
22065         }
22066       /* FALLTHRU */
22067     case DW_OP_GNU_const_type:
22068       {
22069         unsigned int byte_size
22070           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
22071         unsigned int encoding
22072           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
22073         hash = iterative_hash_object (byte_size, hash);
22074         hash = iterative_hash_object (encoding, hash);
22075         if (loc->dw_loc_opc != DW_OP_GNU_const_type)
22076           break;
22077         hash = iterative_hash_object (val2->val_class, hash);
22078         switch (val2->val_class)
22079           {
22080           case dw_val_class_const:
22081             hash = iterative_hash_object (val2->v.val_int, hash);
22082             break;
22083           case dw_val_class_vec:
22084             {
22085               unsigned int elt_size = val2->v.val_vec.elt_size;
22086               unsigned int len = val2->v.val_vec.length;
22087
22088               hash = iterative_hash_object (elt_size, hash);
22089               hash = iterative_hash_object (len, hash);
22090               hash = iterative_hash (val2->v.val_vec.array,
22091                                      len * elt_size, hash);
22092             }
22093             break;
22094           case dw_val_class_const_double:
22095             hash = iterative_hash_object (val2->v.val_double.low, hash);
22096             hash = iterative_hash_object (val2->v.val_double.high, hash);
22097             break;
22098           default:
22099             gcc_unreachable ();
22100           }
22101       }
22102       break;
22103
22104     default:
22105       /* Other codes have no operands.  */
22106       break;
22107     }
22108   return hash;
22109 }
22110
22111 /* Iteratively hash the whole DWARF location expression LOC.  */
22112
22113 static inline hashval_t
22114 hash_locs (dw_loc_descr_ref loc, hashval_t hash)
22115 {
22116   dw_loc_descr_ref l;
22117   bool sizes_computed = false;
22118   /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed.  */
22119   size_of_locs (loc);
22120
22121   for (l = loc; l != NULL; l = l->dw_loc_next)
22122     {
22123       enum dwarf_location_atom opc = l->dw_loc_opc;
22124       hash = iterative_hash_object (opc, hash);
22125       if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
22126         {
22127           size_of_locs (loc);
22128           sizes_computed = true;
22129         }
22130       hash = hash_loc_operands (l, hash);
22131     }
22132   return hash;
22133 }
22134
22135 /* Compute hash of the whole location list LIST_HEAD.  */
22136
22137 static inline void
22138 hash_loc_list (dw_loc_list_ref list_head)
22139 {
22140   dw_loc_list_ref curr = list_head;
22141   hashval_t hash = 0;
22142
22143   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
22144     {
22145       hash = iterative_hash (curr->begin, strlen (curr->begin) + 1, hash);
22146       hash = iterative_hash (curr->end, strlen (curr->end) + 1, hash);
22147       if (curr->section)
22148         hash = iterative_hash (curr->section, strlen (curr->section) + 1,
22149                                hash);
22150       hash = hash_locs (curr->expr, hash);
22151     }
22152   list_head->hash = hash;
22153 }
22154
22155 /* Return true if X and Y opcodes have the same operands.  */
22156
22157 static inline bool
22158 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
22159 {
22160   dw_val_ref valx1 = &x->dw_loc_oprnd1;
22161   dw_val_ref valx2 = &x->dw_loc_oprnd2;
22162   dw_val_ref valy1 = &y->dw_loc_oprnd1;
22163   dw_val_ref valy2 = &y->dw_loc_oprnd2;
22164
22165   switch (x->dw_loc_opc)
22166     {
22167     case DW_OP_const4u:
22168     case DW_OP_const8u:
22169       if (x->dtprel)
22170         goto hash_addr;
22171       /* FALLTHRU */
22172     case DW_OP_const1u:
22173     case DW_OP_const1s:
22174     case DW_OP_const2u:
22175     case DW_OP_const2s:
22176     case DW_OP_const4s:
22177     case DW_OP_const8s:
22178     case DW_OP_constu:
22179     case DW_OP_consts:
22180     case DW_OP_pick:
22181     case DW_OP_plus_uconst:
22182     case DW_OP_breg0:
22183     case DW_OP_breg1:
22184     case DW_OP_breg2:
22185     case DW_OP_breg3:
22186     case DW_OP_breg4:
22187     case DW_OP_breg5:
22188     case DW_OP_breg6:
22189     case DW_OP_breg7:
22190     case DW_OP_breg8:
22191     case DW_OP_breg9:
22192     case DW_OP_breg10:
22193     case DW_OP_breg11:
22194     case DW_OP_breg12:
22195     case DW_OP_breg13:
22196     case DW_OP_breg14:
22197     case DW_OP_breg15:
22198     case DW_OP_breg16:
22199     case DW_OP_breg17:
22200     case DW_OP_breg18:
22201     case DW_OP_breg19:
22202     case DW_OP_breg20:
22203     case DW_OP_breg21:
22204     case DW_OP_breg22:
22205     case DW_OP_breg23:
22206     case DW_OP_breg24:
22207     case DW_OP_breg25:
22208     case DW_OP_breg26:
22209     case DW_OP_breg27:
22210     case DW_OP_breg28:
22211     case DW_OP_breg29:
22212     case DW_OP_breg30:
22213     case DW_OP_breg31:
22214     case DW_OP_regx:
22215     case DW_OP_fbreg:
22216     case DW_OP_piece:
22217     case DW_OP_deref_size:
22218     case DW_OP_xderef_size:
22219       return valx1->v.val_int == valy1->v.val_int;
22220     case DW_OP_skip:
22221     case DW_OP_bra:
22222       gcc_assert (valx1->val_class == dw_val_class_loc
22223                   && valy1->val_class == dw_val_class_loc
22224                   && x->dw_loc_addr == y->dw_loc_addr);
22225       return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
22226     case DW_OP_implicit_value:
22227       if (valx1->v.val_unsigned != valy1->v.val_unsigned
22228           || valx2->val_class != valy2->val_class)
22229         return false;
22230       switch (valx2->val_class)
22231         {
22232         case dw_val_class_const:
22233           return valx2->v.val_int == valy2->v.val_int;
22234         case dw_val_class_vec:
22235           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22236                  && valx2->v.val_vec.length == valy2->v.val_vec.length
22237                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22238                             valx2->v.val_vec.elt_size
22239                             * valx2->v.val_vec.length) == 0;
22240         case dw_val_class_const_double:
22241           return valx2->v.val_double.low == valy2->v.val_double.low
22242                  && valx2->v.val_double.high == valy2->v.val_double.high;
22243         case dw_val_class_addr:
22244           return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
22245         default:
22246           gcc_unreachable ();
22247         }
22248     case DW_OP_bregx:
22249     case DW_OP_bit_piece:
22250       return valx1->v.val_int == valy1->v.val_int
22251              && valx2->v.val_int == valy2->v.val_int;
22252     case DW_OP_addr:
22253     hash_addr:
22254       return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
22255     case DW_OP_GNU_implicit_pointer:
22256       return valx1->val_class == dw_val_class_die_ref
22257              && valx1->val_class == valy1->val_class
22258              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
22259              && valx2->v.val_int == valy2->v.val_int;
22260     case DW_OP_GNU_entry_value:
22261       return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
22262     case DW_OP_GNU_const_type:
22263       if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
22264           || valx2->val_class != valy2->val_class)
22265         return false;
22266       switch (valx2->val_class)
22267         {
22268         case dw_val_class_const:
22269           return valx2->v.val_int == valy2->v.val_int;
22270         case dw_val_class_vec:
22271           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22272                  && valx2->v.val_vec.length == valy2->v.val_vec.length
22273                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22274                             valx2->v.val_vec.elt_size
22275                             * valx2->v.val_vec.length) == 0;
22276         case dw_val_class_const_double:
22277           return valx2->v.val_double.low == valy2->v.val_double.low
22278                  && valx2->v.val_double.high == valy2->v.val_double.high;
22279         default:
22280           gcc_unreachable ();
22281         }
22282     case DW_OP_GNU_regval_type:
22283     case DW_OP_GNU_deref_type:
22284       return valx1->v.val_int == valy1->v.val_int
22285              && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
22286     case DW_OP_GNU_convert:
22287     case DW_OP_GNU_reinterpret:
22288       if (valx1->val_class != valy1->val_class)
22289         return false;
22290       if (valx1->val_class == dw_val_class_unsigned_const)
22291         return valx1->v.val_unsigned == valy1->v.val_unsigned;
22292       return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22293     case DW_OP_GNU_parameter_ref:
22294       return valx1->val_class == dw_val_class_die_ref
22295              && valx1->val_class == valy1->val_class
22296              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22297     default:
22298       /* Other codes have no operands.  */
22299       return true;
22300     }
22301 }
22302
22303 /* Return true if DWARF location expressions X and Y are the same.  */
22304
22305 static inline bool
22306 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
22307 {
22308   for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
22309     if (x->dw_loc_opc != y->dw_loc_opc
22310         || x->dtprel != y->dtprel
22311         || !compare_loc_operands (x, y))
22312       break;
22313   return x == NULL && y == NULL;
22314 }
22315
22316 /* Return precomputed hash of location list X.  */
22317
22318 static hashval_t
22319 loc_list_hash (const void *x)
22320 {
22321   return ((const struct dw_loc_list_struct *) x)->hash;
22322 }
22323
22324 /* Return 1 if location lists X and Y are the same.  */
22325
22326 static int
22327 loc_list_eq (const void *x, const void *y)
22328 {
22329   const struct dw_loc_list_struct *a = (const struct dw_loc_list_struct *) x;
22330   const struct dw_loc_list_struct *b = (const struct dw_loc_list_struct *) y;
22331   if (a == b)
22332     return 1;
22333   if (a->hash != b->hash)
22334     return 0;
22335   for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
22336     if (strcmp (a->begin, b->begin) != 0
22337         || strcmp (a->end, b->end) != 0
22338         || (a->section == NULL) != (b->section == NULL)
22339         || (a->section && strcmp (a->section, b->section) != 0)
22340         || !compare_locs (a->expr, b->expr))
22341       break;
22342   return a == NULL && b == NULL;
22343 }
22344
22345 /* Recursively optimize location lists referenced from DIE
22346    children and share them whenever possible.  */
22347
22348 static void
22349 optimize_location_lists_1 (dw_die_ref die, htab_t htab)
22350 {
22351   dw_die_ref c;
22352   dw_attr_ref a;
22353   unsigned ix;
22354   void **slot;
22355
22356   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
22357     if (AT_class (a) == dw_val_class_loc_list)
22358       {
22359         dw_loc_list_ref list = AT_loc_list (a);
22360         /* TODO: perform some optimizations here, before hashing
22361            it and storing into the hash table.  */
22362         hash_loc_list (list);
22363         slot = htab_find_slot_with_hash (htab, list, list->hash,
22364                                          INSERT);
22365         if (*slot == NULL)
22366           *slot = (void *) list;
22367         else
22368           a->dw_attr_val.v.val_loc_list = (dw_loc_list_ref) *slot;
22369       }
22370
22371   FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
22372 }
22373
22374 /* Optimize location lists referenced from DIE
22375    children and share them whenever possible.  */
22376
22377 static void
22378 optimize_location_lists (dw_die_ref die)
22379 {
22380   htab_t htab = htab_create (500, loc_list_hash, loc_list_eq, NULL);
22381   optimize_location_lists_1 (die, htab);
22382   htab_delete (htab);
22383 }
22384 \f
22385 /* Output stuff that dwarf requires at the end of every file,
22386    and generate the DWARF-2 debugging info.  */
22387
22388 static void
22389 dwarf2out_finish (const char *filename)
22390 {
22391   limbo_die_node *node, *next_node;
22392   comdat_type_node *ctnode;
22393   htab_t comdat_type_table;
22394   unsigned int i;
22395
22396   /* PCH might result in DW_AT_producer string being restored from the
22397      header compilation, fix it up if needed.  */
22398   dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
22399   if (strcmp (AT_string (producer), producer_string) != 0)
22400     {
22401       struct indirect_string_node *node = find_AT_string (producer_string);
22402       producer->dw_attr_val.v.val_str = node;
22403     }
22404
22405   gen_scheduled_generic_parms_dies ();
22406   gen_remaining_tmpl_value_param_die_attribute ();
22407
22408   /* Add the name for the main input file now.  We delayed this from
22409      dwarf2out_init to avoid complications with PCH.  */
22410   add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
22411   if (!IS_ABSOLUTE_PATH (filename))
22412     add_comp_dir_attribute (comp_unit_die ());
22413   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
22414     {
22415       bool p = false;
22416       htab_traverse (file_table, file_table_relative_p, &p);
22417       if (p)
22418         add_comp_dir_attribute (comp_unit_die ());
22419     }
22420
22421   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
22422     {
22423       add_location_or_const_value_attribute (
22424         VEC_index (deferred_locations, deferred_locations_list, i)->die,
22425         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
22426         false,
22427         DW_AT_location);
22428     }
22429
22430   /* Traverse the limbo die list, and add parent/child links.  The only
22431      dies without parents that should be here are concrete instances of
22432      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
22433      For concrete instances, we can get the parent die from the abstract
22434      instance.  */
22435   for (node = limbo_die_list; node; node = next_node)
22436     {
22437       dw_die_ref die = node->die;
22438       next_node = node->next;
22439
22440       if (die->die_parent == NULL)
22441         {
22442           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
22443
22444           if (origin && origin->die_parent)
22445             add_child_die (origin->die_parent, die);
22446           else if (is_cu_die (die))
22447             ;
22448           else if (seen_error ())
22449             /* It's OK to be confused by errors in the input.  */
22450             add_child_die (comp_unit_die (), die);
22451           else
22452             {
22453               /* In certain situations, the lexical block containing a
22454                  nested function can be optimized away, which results
22455                  in the nested function die being orphaned.  Likewise
22456                  with the return type of that nested function.  Force
22457                  this to be a child of the containing function.
22458
22459                  It may happen that even the containing function got fully
22460                  inlined and optimized out.  In that case we are lost and
22461                  assign the empty child.  This should not be big issue as
22462                  the function is likely unreachable too.  */
22463               tree context = NULL_TREE;
22464
22465               gcc_assert (node->created_for);
22466
22467               if (DECL_P (node->created_for))
22468                 context = DECL_CONTEXT (node->created_for);
22469               else if (TYPE_P (node->created_for))
22470                 context = TYPE_CONTEXT (node->created_for);
22471
22472               gcc_assert (context
22473                           && (TREE_CODE (context) == FUNCTION_DECL
22474                               || TREE_CODE (context) == NAMESPACE_DECL));
22475
22476               origin = lookup_decl_die (context);
22477               if (origin)
22478                 add_child_die (origin, die);
22479               else
22480                 add_child_die (comp_unit_die (), die);
22481             }
22482         }
22483     }
22484
22485   limbo_die_list = NULL;
22486
22487 #if ENABLE_ASSERT_CHECKING
22488   {
22489     dw_die_ref die = comp_unit_die (), c;
22490     FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
22491   }
22492 #endif
22493   resolve_addr (comp_unit_die ());
22494   move_marked_base_types ();
22495
22496   for (node = deferred_asm_name; node; node = node->next)
22497     {
22498       tree decl = node->created_for;
22499       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
22500         {
22501           add_linkage_attr (node->die, decl);
22502           move_linkage_attr (node->die);
22503         }
22504     }
22505
22506   deferred_asm_name = NULL;
22507
22508   /* Walk through the list of incomplete types again, trying once more to
22509      emit full debugging info for them.  */
22510   retry_incomplete_types ();
22511
22512   if (flag_eliminate_unused_debug_types)
22513     prune_unused_types ();
22514
22515   /* Generate separate CUs for each of the include files we've seen.
22516      They will go into limbo_die_list.  */
22517   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
22518     break_out_includes (comp_unit_die ());
22519
22520   /* Generate separate COMDAT sections for type DIEs. */
22521   if (use_debug_types)
22522     {
22523       break_out_comdat_types (comp_unit_die ());
22524
22525       /* Each new type_unit DIE was added to the limbo die list when created.
22526          Since these have all been added to comdat_type_list, clear the
22527          limbo die list.  */
22528       limbo_die_list = NULL;
22529
22530       /* For each new comdat type unit, copy declarations for incomplete
22531          types to make the new unit self-contained (i.e., no direct
22532          references to the main compile unit).  */
22533       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22534         copy_decls_for_unworthy_types (ctnode->root_die);
22535       copy_decls_for_unworthy_types (comp_unit_die ());
22536
22537       /* In the process of copying declarations from one unit to another,
22538          we may have left some declarations behind that are no longer
22539          referenced.  Prune them.  */
22540       prune_unused_types ();
22541     }
22542
22543   /* Traverse the DIE's and add add sibling attributes to those DIE's
22544      that have children.  */
22545   add_sibling_attributes (comp_unit_die ());
22546   for (node = limbo_die_list; node; node = node->next)
22547     add_sibling_attributes (node->die);
22548   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22549     add_sibling_attributes (ctnode->root_die);
22550
22551   /* Output a terminator label for the .text section.  */
22552   switch_to_section (text_section);
22553   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22554   if (cold_text_section)
22555     {
22556       switch_to_section (cold_text_section);
22557       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22558     }
22559
22560   /* We can only use the low/high_pc attributes if all of the code was
22561      in .text.  */
22562   if (!have_multiple_function_sections 
22563       || (dwarf_version < 3 && dwarf_strict))
22564     {
22565       /* Don't add if the CU has no associated code.  */
22566       if (text_section_used)
22567         {
22568           add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label);
22569           add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
22570         }
22571     }
22572   else
22573     {
22574       unsigned fde_idx;
22575       dw_fde_ref fde;
22576       bool range_list_added = false;
22577
22578       if (text_section_used)
22579         add_ranges_by_labels (comp_unit_die (), text_section_label,
22580                               text_end_label, &range_list_added);
22581       if (cold_text_section_used)
22582         add_ranges_by_labels (comp_unit_die (), cold_text_section_label,
22583                               cold_end_label, &range_list_added);
22584
22585       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
22586         {
22587           if (!fde->in_std_section)
22588             add_ranges_by_labels (comp_unit_die (), fde->dw_fde_begin,
22589                                   fde->dw_fde_end, &range_list_added);
22590           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
22591             add_ranges_by_labels (comp_unit_die (), fde->dw_fde_second_begin,
22592                                   fde->dw_fde_second_end, &range_list_added);
22593         }
22594
22595       if (range_list_added)
22596         {
22597           /* We need to give .debug_loc and .debug_ranges an appropriate
22598              "base address".  Use zero so that these addresses become
22599              absolute.  Historically, we've emitted the unexpected
22600              DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22601              Emit both to give time for other tools to adapt.  */
22602           add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx);
22603           if (! dwarf_strict && dwarf_version < 4)
22604             add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx);
22605
22606           add_ranges (NULL);
22607         }
22608     }
22609
22610   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22611     add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list,
22612                     debug_line_section_label);
22613
22614   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22615     add_AT_macptr (comp_unit_die (),
22616                    dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
22617                    macinfo_section_label);
22618
22619   if (have_location_lists)
22620     optimize_location_lists (comp_unit_die ());
22621
22622   /* Output all of the compilation units.  We put the main one last so that
22623      the offsets are available to output_pubnames.  */
22624   for (node = limbo_die_list; node; node = node->next)
22625     output_comp_unit (node->die, 0);
22626
22627   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22628   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22629     {
22630       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22631
22632       /* Don't output duplicate types.  */
22633       if (*slot != HTAB_EMPTY_ENTRY)
22634         continue;
22635
22636       /* Add a pointer to the line table for the main compilation unit
22637          so that the debugger can make sense of DW_AT_decl_file
22638          attributes.  */
22639       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22640         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22641                         debug_line_section_label);
22642
22643       output_comdat_type_unit (ctnode);
22644       *slot = ctnode;
22645     }
22646   htab_delete (comdat_type_table);
22647
22648   /* Output the main compilation unit if non-empty or if .debug_macinfo
22649      will be emitted.  */
22650   output_comp_unit (comp_unit_die (), debug_info_level >= DINFO_LEVEL_VERBOSE);
22651
22652   /* Output the abbreviation table.  */
22653   if (abbrev_die_table_in_use != 1)
22654     {
22655       switch_to_section (debug_abbrev_section);
22656       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
22657       output_abbrev_section ();
22658     }
22659
22660   /* Output location list section if necessary.  */
22661   if (have_location_lists)
22662     {
22663       /* Output the location lists info.  */
22664       switch_to_section (debug_loc_section);
22665       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22666                                    DEBUG_LOC_SECTION_LABEL, 0);
22667       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22668       output_location_lists (comp_unit_die ());
22669     }
22670
22671   /* Output public names table if necessary.  */
22672   if (!VEC_empty (pubname_entry, pubname_table))
22673     {
22674       gcc_assert (info_section_emitted);
22675       switch_to_section (debug_pubnames_section);
22676       output_pubnames (pubname_table);
22677     }
22678
22679   /* Output public types table if necessary.  */
22680   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22681      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22682      simply won't look for the section.  */
22683   if (!VEC_empty (pubname_entry, pubtype_table))
22684     {
22685       bool empty = false;
22686       
22687       if (flag_eliminate_unused_debug_types)
22688         {
22689           /* The pubtypes table might be emptied by pruning unused items.  */
22690           unsigned i;
22691           pubname_ref p;
22692           empty = true;
22693           FOR_EACH_VEC_ELT (pubname_entry, pubtype_table, i, p)
22694             if (p->die->die_offset != 0)
22695               {
22696                 empty = false;
22697                 break;
22698               }
22699         }
22700       if (!empty)
22701         {
22702           gcc_assert (info_section_emitted);
22703           switch_to_section (debug_pubtypes_section);
22704           output_pubnames (pubtype_table);
22705         }
22706     }
22707
22708   /* Output the address range information if a CU (.debug_info section)
22709      was emitted.  We output an empty table even if we had no functions
22710      to put in it.  This because the consumer has no way to tell the
22711      difference between an empty table that we omitted and failure to
22712      generate a table that would have contained data.  */
22713   if (info_section_emitted)
22714     {
22715       unsigned long aranges_length = size_of_aranges ();
22716
22717       switch_to_section (debug_aranges_section);
22718       output_aranges (aranges_length);
22719     }
22720
22721   /* Output ranges section if necessary.  */
22722   if (ranges_table_in_use)
22723     {
22724       switch_to_section (debug_ranges_section);
22725       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22726       output_ranges ();
22727     }
22728
22729   /* Have to end the macro section.  */
22730   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22731     {
22732       switch_to_section (debug_macinfo_section);
22733       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
22734       if (!VEC_empty (macinfo_entry, macinfo_table))
22735         output_macinfo ();
22736       dw2_asm_output_data (1, 0, "End compilation unit");
22737     }
22738
22739   /* Output the source line correspondence table.  We must do this
22740      even if there is no line information.  Otherwise, on an empty
22741      translation unit, we will generate a present, but empty,
22742      .debug_info section.  IRIX 6.5 `nm' will then complain when
22743      examining the file.  This is done late so that any filenames
22744      used by the debug_info section are marked as 'used'.  */
22745   switch_to_section (debug_line_section);
22746   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
22747   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22748     output_line_info ();
22749
22750   /* If we emitted any DW_FORM_strp form attribute, output the string
22751      table too.  */
22752   if (debug_str_hash)
22753     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22754 }
22755
22756 #include "gt-dwarf2out.h"